diff --git a/.github/workflows/bump-version.yml b/.github/workflows/bump-version.yml
index ee7ad59..f507427 100644
--- a/.github/workflows/bump-version.yml
+++ b/.github/workflows/bump-version.yml
@@ -37,8 +37,8 @@ jobs:
sed -i "s/\"version\": \"[0-9]*\.[0-9]*\.[0-9]*\"/\"version\": \"$VERSION\"/" src-tauri/tauri.conf.json
# src-tauri/Cargo.toml
sed -i "s/^version = \"[0-9]*\.[0-9]*\.[0-9]*\"/version = \"$VERSION\"/" src-tauri/Cargo.toml
- # src-tauri/Cargo.lock (the coffee-note package entry)
- sed -i "0,/^name = \"coffee-note\"/{/^name = \"coffee-note\"/{n; s/version = \"[0-9]*\.[0-9]*\.[0-9]*\"/version = \"$VERSION\"/}}" src-tauri/Cargo.lock
+ # src-tauri/Cargo.lock (the tiernote package entry)
+ sed -i "0,/^name = \"tiernote\"/{/^name = \"tiernote\"/{n; s/version = \"[0-9]*\.[0-9]*\.[0-9]*\"/version = \"$VERSION\"/}}" src-tauri/Cargo.lock
# website/version.json (drives the installer's update check)
echo "{\"version\": \"$VERSION\"}" > website/version.json
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index ab575c0..cdafc67 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -98,12 +98,12 @@ jobs:
if [ -z "$ID" ]; then
ID=$(gh api --method POST "repos/${REPO}/releases" \
-f tag_name="${TAG}" \
- -f name="Coffee Note ${TAG}" \
- -f body="Coffee Note ${TAG#v}
+ -f name="TierNote ${TAG}" \
+ -f body="TierNote ${TAG#v}
This release includes the changes recorded in the repository history since the previous version.
- Coffee Note is a local-first desktop workspace for organizing notes, priorities, and AI-assisted work, with Windows, macOS, and Linux builds.
+ TierNote is a local-first desktop workspace for organizing notes, priorities, and AI-assisted work, with Windows, macOS, and Linux builds.
These binaries are not code-signed. Your operating system may display an unverified-developer warning." \
-F draft=true \
@@ -218,16 +218,16 @@ jobs:
--jq '.[] | "\(.id)\t\(.name)"' \
| while IFS=$'\t' read -r ID NAME; do
case "$NAME" in
- *_x64-setup.exe) NEW="Coffee.Note_${VERSION}_Windows_x64-setup.exe" ;;
- *_x64_*.msi|*_x64.msi) NEW="Coffee.Note_${VERSION}_Windows_x64.msi" ;;
- *_aarch64.dmg) NEW="Coffee.Note_${VERSION}_macOS_arm64.dmg" ;;
- *_x64.dmg) NEW="Coffee.Note_${VERSION}_macOS_x64.dmg" ;;
- *_amd64.deb) NEW="Coffee.Note_${VERSION}_Linux_x64.deb" ;;
- *.x86_64.rpm) NEW="Coffee.Note_${VERSION}_Linux_x64.rpm" ;;
- *_arm64.deb) NEW="Coffee.Note_${VERSION}_Linux_arm64.deb" ;;
- *.aarch64.rpm) NEW="Coffee.Note_${VERSION}_Linux_arm64.rpm" ;;
+ *_x64-setup.exe) NEW="TierNote_${VERSION}_Windows_x64-setup.exe" ;;
+ *_x64_*.msi|*_x64.msi) NEW="TierNote_${VERSION}_Windows_x64.msi" ;;
+ *_aarch64.dmg) NEW="TierNote_${VERSION}_macOS_arm64.dmg" ;;
+ *_x64.dmg) NEW="TierNote_${VERSION}_macOS_x64.dmg" ;;
+ *_amd64.deb) NEW="TierNote_${VERSION}_Linux_x64.deb" ;;
+ *.x86_64.rpm) NEW="TierNote_${VERSION}_Linux_x64.rpm" ;;
+ *_arm64.deb) NEW="TierNote_${VERSION}_Linux_arm64.deb" ;;
+ *.aarch64.rpm) NEW="TierNote_${VERSION}_Linux_arm64.rpm" ;;
*_amd64.AppImage|*_x86_64.AppImage)
- NEW="Coffee.Note_${VERSION}_Linux_x64.AppImage" ;;
+ NEW="TierNote_${VERSION}_Linux_x64.AppImage" ;;
*) NEW="" ;;
esac
diff --git a/AGENTS.md b/AGENTS.md
index 2e5c6b2..2445046 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -1,10 +1,12 @@
-# Coffee Note agent notes
+# TierNote agent notes
-Coffee Note is a sister product forked from the original longevity app. Its visible
-product name is **Coffee Note**. The repository directory uses `Coffee-Note`;
-internal package names, storage keys, and identifiers use `coffee-note` or
-`CoffeeNote` where spaces are invalid; the reverse-domain bundle identifier is
-`app.coffeenote.desktop`.
+TierNote is a sister product forked from the original longevity app. Its visible
+product name is **TierNote**. The repository directory and developer package
+names use `TierNote` or `tiernote`. Persisted v0.1.8 identifiers intentionally
+remain `app.coffeenote.desktop`, the `Coffee Note` app-data directory,
+`.coffee-note` workspace metadata, and `coffee-note:` browser storage keys so
+existing users keep their local data after upgrading. Do not rename those
+legacy identifiers without an explicit, tested migration.
The copied longevity content is transitional and will be replaced with a clean,
general-purpose note model. The homepage tier list remains the core experience.
diff --git a/CODEX_HANDOFF.md b/CODEX_HANDOFF.md
index f2d334b..45c18d5 100644
--- a/CODEX_HANDOFF.md
+++ b/CODEX_HANDOFF.md
@@ -1,4 +1,4 @@
-# Coffee Note — portable Codex project memory
+# TierNote — portable Codex project memory
Updated: 2026-08-15
@@ -6,22 +6,24 @@ This file preserves the decisions and working context needed to continue the
project on another machine. It contains no API keys, private user parameters,
or temporary deployment credentials.
-## Coffee Note fork status
+## TierNote fork status
-- This repository is the Coffee Note sister product forked from the original longevity app.
-- Visible product name: **Coffee Note**.
-- The repository directory is `Coffee-Note`; internal identifiers use `coffee-note`
- or `CoffeeNote` where spaces are invalid, with `app.coffeenote.desktop` as the
- reverse-domain bundle identifier.
-- Coffee Note is a local-first, general-purpose workspace agent rather than a
+- This repository is the TierNote sister product forked from the original longevity app.
+- Visible product name: **TierNote**.
+- The repository directory is `TierNote`; developer package names use `tiernote`
+ or `TierNote` where spaces are invalid.
+- TierNote is a local-first, general-purpose workspace agent rather than a
fixed note system or a longevity product. The user selects an ordinary directory
and asks the Agent to work in it. Notes are common work, but source code, documents,
data, and other tasks are equally valid.
-- Coffee Note uses a clean application identity with no predecessor-brand
- compatibility layer: `app.coffeenote.desktop`, `Coffee Note` app-data,
- `.coffee-note` knowledge metadata, and `coffee-note:` browser storage keys.
-- GitHub release and feedback URLs use the `edison7009/Coffee-Note` repository.
-- **Licensing (2026-08-19):** Coffee Note uses AGPL-3.0-or-later for current
+- The TierNote rebrand preserves the v0.1.8 persisted identity as a compatibility
+ layer: `app.coffeenote.desktop`, the `Coffee Note` app-data directory,
+ `.coffee-note` workspace metadata, and `coffee-note:` browser storage keys.
+ These legacy identifiers keep provider credentials, conversations, plugin state,
+ message channels, and tier ordering available after upgrade and must not be
+ renamed without an explicit, tested migration.
+- GitHub release and feedback URLs use the `edison7009/TierNote` repository.
+- **Licensing (2026-08-19):** TierNote uses AGPL-3.0-or-later for current
releases, with paid commercial licensing available for closed-source
customization, white-label distribution, and proprietary embedding. Copies
released before the transition retain the MIT permissions already granted;
@@ -31,7 +33,7 @@ or temporary deployment credentials.
- The homepage editable T1–T5 tier list is the core interaction model because it
makes prioritization and decisions immediately legible.
- Longevity-specific starter content and product copy below are inherited context
- awaiting replacement; they are not the Coffee Note product direction.
+ awaiting replacement; they are not the TierNote product direction.
## Workspace Agent foundation (2026-08-15)
@@ -47,7 +49,7 @@ or temporary deployment credentials.
- The selected directory is the workspace. It may be a code repository, writing
project, note collection, or any other folder. Never infer a required note
hierarchy and never create `inbox`, `dossiers`, or another category directory
- merely because Coffee Note is the visible product name.
+ merely because TierNote is the visible product name.
- The Agent must accept programming, debugging, writing, research, organization,
and other workspace tasks. It must not refuse work simply because the request is
programming or not note-related.
@@ -59,7 +61,7 @@ or temporary deployment credentials.
`save_note` defaults to the workspace root and uses a subdirectory only when the
user explicitly asks or the existing workspace makes that destination clear.
- The directory tree must not hide or offer bulk deletion of folders based on old
- Coffee Note category names. A folder named `papers`, `templates`, `inbox`, or
+ TierNote category names. A folder named `papers`, `templates`, `inbox`, or
similar may be ordinary user project data.
- **Complete workspace file tree (2026-08-19):** The directory tree shows every
ordinary non-hidden file, not only Markdown. Markdown remains the only built-in
@@ -77,18 +79,18 @@ or temporary deployment credentials.
## Desktop redesign direction (2026-08-07)
-- **Plugin platform foundation (2026-08-17):** Coffee Note treats plugins as the
+- **Plugin platform foundation (2026-08-17):** TierNote treats plugins as the
install/update unit, skills as the Agent invocation unit, and runtimes as shared
application-managed infrastructure. Settings > Plugins is the Plugin market;
categories filter plugin types, while enabled and installed state lives on the
package row and detail page instead of a separate Installed view. The bundled
- `Coffee Media` package is the first manifest-driven
+ `TierNote Media` package is the first manifest-driven
official plugin: its media-to-text skill, publisher, version, and
prewarmed `media-transcription` runtime are declared under
`src-tauri/builtin-plugins/coffee-media/` instead of being duplicated as a Rust
prompt constant. Official plugins may bundle many independently switchable skills;
a skill must never install its own runtime. Git skill packages remain supported as
- prompt-only community extensions, and Coffee Note never automatically executes
+ prompt-only community extensions, and TierNote never automatically executes
their scripts, hooks, MCP servers, or runtime declarations.
- Plugin details expose the package and its independently switchable skills only.
Publisher and runtime identifiers remain internal metadata. Plugin manifests and
@@ -96,7 +98,7 @@ or temporary deployment credentials.
application's normal workspace access. Disabling a built-in plugin or one of its
skills removes the corresponding Agent tool and the backend rejects direct calls
as a second guard.
-- **Native presentation plugin (2026-08-17):** The bundled `Coffee Presentation`
+- **Native presentation plugin (2026-08-17):** The bundled `TierNote Presentation`
package lives under `src-tauri/builtin-plugins/coffee-presentation/`. Its
`create-presentation` skill sends a complete structured deck to the shared,
prewarmed `presentation-engine` runtime. The runtime is compiled into the desktop
@@ -105,7 +107,7 @@ or temporary deployment credentials.
business, and dark themes plus title, section, content, two-column, quote, and
workspace-image layouts. Generated files use a new filename instead of silently
overwriting an existing deck.
-- **Native document plugin (2026-08-17):** The bundled `Coffee Documents` package
+- **Native document plugin (2026-08-17):** The bundled `TierNote Documents` package
lives under `src-tauri/builtin-plugins/coffee-documents/` and exposes independent
`create-docx` and `create-pdf` skills on one prewarmed `document-engine`. Both
submit a complete semantic block list to the guarded `create_document` tool.
@@ -122,7 +124,7 @@ or temporary deployment credentials.
image-capable active chat model remains the first choice for recognition; the
recognition configuration is its fallback. Image-generation skills use the
generation configuration. Video generation keeps an independent external-provider
- record without replacing Coffee Video's native fallback. Its built-in service selector
+ record without replacing TierNote Video's native fallback. Its built-in service selector
offers Runway plus direct BytePlus/Volcano Engine Seedance, Kling, Google Vertex AI
Veo, MiniMax/Hailuo, Luma, Vidu, Pika, Alibaba Cloud Wan, Tencent Cloud Hunyuan/Youtu,
Tencent-hosted PixVerse, LTX, Adobe Firefly, and
@@ -149,7 +151,7 @@ or temporary deployment credentials.
presentation tool by relative path. This version is cloud-only and does not expose
an unfinished local OCR tab.
- **Built-in storyboard director and text-to-video fallback (2026-08-17):** The bundled
- `Coffee Video` package lives under `src-tauri/builtin-plugins/coffee-video/`. It exposes
+ `TierNote Video` package lives under `src-tauri/builtin-plugins/coffee-video/`. It exposes
a storyboard-only director skill and a render skill; both receive the same bundled,
model-neutral cinematic specification. They establish a director brief, beat map,
continuity bible, motivated camera language, and paired keyframe/motion prompts before
@@ -219,11 +221,11 @@ or temporary deployment credentials.
skill directly to its generated turn and must not leave that skill selected in the
composer afterward.
- **Custom My Contexts (2026-08-14):** The action inside My Contexts is Add Context,
- not Add Material. It creates a Markdown page in Coffee Note's dedicated local
+ not Add Material. It creates a Markdown page in TierNote's dedicated local
My Contexts directory, immediately lists it on that page, and gives it the same
default-on independent AI retrieval switch as the built-in context pages. General
material creation remains available from the library controls outside My Contexts.
-- **Local Agent Loop (2026-08-14):** Coffee Note uses its focused Rust ReAct
+- **Local Agent Loop (2026-08-14):** TierNote uses its focused Rust ReAct
loop as the only agent runtime. `agent_loop.rs` owns model streaming, tool
orchestration, durable provider transcripts, token accounting, and local
context compaction. Rust also owns Library Graph, My Contexts routing, note
@@ -243,7 +245,7 @@ or temporary deployment credentials.
Local availability fails closed when live resource status cannot be read; a saved
selection alone must never make a partially installed local setup appear usable.
- **Media environment prewarm (2026-08-14):** Media-to-text is a frequently reused
- built-in capability. After launch, Coffee Note silently prepares the pinned media
+ built-in capability. After launch, TierNote silently prepares the pinned media
fetcher in the current user's app-data directory, verifies and reuses an existing
copy, and retries on the actual media request if background preparation failed.
Startup and first-use preparation share one process-local lock so they never write
@@ -252,7 +254,7 @@ or temporary deployment credentials.
or repeatedly install the media-import environment.
- **Windows local transcription compatibility (2026-08-15):** The pinned whisper.cpp
Windows runtime normally selects its fastest CPU backend. If it exits immediately
- after loading that backend, Coffee Note retries in an isolated temporary runtime
+ after loading that backend, TierNote retries in an isolated temporary runtime
containing only the baseline `ggml-cpu-x64.dll`. This keeps optimized CPUs fast while
covering machines that crash after selecting the Haswell backend. Failed attempts
report the process status and diagnostics instead of treating the final successful
@@ -309,7 +311,7 @@ or temporary deployment credentials.
- The desktop app is moving to a calm, Codex-informed note-workspace style. This
supersedes older instructions below that require a colorful dashboard shell or
a blue-green gradient title bar.
-- Coffee Note now uses a monochrome black, graphite, and gray shell with no selectable
+- TierNote now uses a monochrome black, graphite, and gray shell with no selectable
brand color. The homepage is the deliberate exception: its three entry cards and
T1-T5 map use restrained category colors. Appearance settings keep system/light/dark
modes and color schemes, while General owns language and other non-visual preferences.
@@ -332,7 +334,7 @@ or temporary deployment credentials.
the compact note priority button, and the menu's small tier swatches. The button
keeps its matching tinted background unchanged on hover/open; menu hover and
selection use one neutral background with no colored border or glow.
-- The display brand uses the `Coffee Note` wordmark in the title bar and AI-chat
+- The display brand uses the `TierNote` wordmark in the title bar and AI-chat
empty state. The AI-chat empty state intentionally has no logo image. The in-app
mark source is `src-tauri/icons/logo.png`, which must
remain byte-identical to the copied UI source at `public/brand/logo-new.png`.
@@ -368,12 +370,12 @@ or temporary deployment credentials.
## Legacy source-product context
The remaining notes describe the source product and are retained temporarily so
-the working behavior is not lost during migration. The Coffee Note rules above take
+the working behavior is not lost during migration. The TierNote rules above take
precedence whenever they conflict.
## Product identity
-- Product name: **Coffee Note**.
+- Product name: **TierNote**.
- Chinese product name: **科学延寿**. Use **延寿** consistently in Chinese
product, website, documentation, and starter-library copy; keep the previous
product-domain term out of new copy.
@@ -446,7 +448,7 @@ to the product template.
- The left pane keeps its 210-380px product range. The right rail has no fixed
maximum; it may expand until the center workspace reaches its 560px minimum.
- The top title/drag bar spans the full window width. Its left side shows a
- 16 x 16 product icon, the closed `Coffee Note` wordmark in the bundled `Lora`
+ 16 x 16 product icon, the closed `TierNote` wordmark in the bundled `Lora`
bold-italic face, functional back/forward navigation, and File/Edit/Help menus.
File keeps the library-switch action; the right edge of the Home navigation
row also exposes the same action as a discoverable global folder icon, matching
@@ -501,13 +503,13 @@ to the product template.
regional token prices directly rather than converting through an exchange
rate. Persist the preference locally under `coffee-note:currency`.
- The composer skill picker and Settings > Skills share one source-backed
- catalog. Adding a skill plugin asks only for a Git repository URL and a Coffee
- Note category; package names, descriptions, versions, and skill instructions
+ catalog. Adding a skill plugin asks only for a Git repository URL and a TierNote
+ category; package names, descriptions, versions, and skill instructions
are read from the repository's manifest and `SKILL.md` files and are never
duplicated into editable app-owned copies. Repositories are cached once under
the current user's app-data `skill-sources/` directory for offline use and
updates. Selecting a skill reads its original `SKILL.md` and adds it only to
- that AI request's prompt. Coffee Note does not execute third-party scripts,
+ that AI request's prompt. TierNote does not execute third-party scripts,
hooks, runtimes, or MCP servers from these repositories.
- Settings > Skills is a two-level skill management workspace. The category view lists
installed skill packages/sources and keeps package update, move, removal, and
@@ -524,7 +526,7 @@ to the product template.
their plugin root, supported raster/SVG assets are size-limited, and shared
icons are deduplicated in the catalog rather than repeated for every child.
- Chat uses a minimal two-sided conversation layout: user messages are compact
- bubbles aligned to the right, while Coffee Note answers remain readable,
+ bubbles aligned to the right, while TierNote answers remain readable,
unframed content aligned to the left. Do not show participant names or avatars;
message position already communicates the speaker.
- Opening AI chat or switching conversations must position the message area at
@@ -581,12 +583,12 @@ to the product template.
another root immediately invalidates pending loads and mutations so an old root
can never republish its snapshot over the new workspace. The frontend reloads
after every Agent run so edits appear immediately.
-- AI settings separate **provider** and **model**; wire protocol is derived. Coffee Note
+- AI settings separate **provider** and **model**; wire protocol is derived. TierNote
reads the public `https://models.dev/api.json` catalog for provider names,
default OpenAI-compatible endpoints, models, capabilities, context limits,
reasoning effort options, and USD pricing; provider marks come from
`https://models.dev/logos/{provider}.svg`. The Rust backend caches the bounded,
- validated catalog for 24 hours at `Coffee Note/models-dev-catalog.json` in the
+ validated catalog for 24 hours at `TierNote/models-dev-catalog.json` in the
current user's app-data directory and falls back to that cache while offline.
Provider UI uses the canonical models.dev display name only. Do not repeat the
internal lowercase provider ID below the name; composer model choices also use
@@ -597,7 +599,7 @@ to the product template.
protocol. DeepSeek's default base URL is `https://api.deepseek.com`; the old
mistaken `/anthropic` default is migrated automatically. Provider URL, API key,
selected models, active model, derived protocol, and reasoning
- effort persist in plaintext `Coffee Note/config.json` in app-data only. Existing
+ effort persist in plaintext `TierNote/config.json` in app-data only. Existing
two-protocol configs migrate without discarding their URL, model, or key. In
the provider directory, the default provider stays first and providers with
selected models move directly below it; untouched catalog providers follow.
@@ -624,7 +626,7 @@ to the product template.
model remains in the explicit selected-model array; otherwise it reads Choose model.
- The AI composer model menu and reasoning control are functional configuration,
not previews. Model changes update the active provider/model immediately.
- Every catalog-declared reasoning model exposes Coffee Note's fixed five choices:
+ Every catalog-declared reasoning model exposes TierNote's fixed five choices:
`low`, `medium`, `high`, `xhigh`, and `max`. Do not filter or clamp these from
models.dev `reasoning_options`; provider endpoints may normalize unsupported
intermediate values themselves. Choices are sent as `reasoning_effort` for OpenAI-compatible Chat
@@ -632,14 +634,14 @@ to the product template.
catalog-declared reasoning capability show a non-interactive Standard readout and
receive no guessed reasoning parameter.
- Every outbound model request identifies the app to compatible upstreams with
- `HTTP-Referer: https://note.coffeecli.com`, `X-OpenRouter-Title: Coffee Note`, and the
- backward-compatible `X-Title: Coffee Note`. This attribution replaces any inherited
+ `HTTP-Referer: https://tiernote.org`, `X-OpenRouter-Title: TierNote`, and the
+ backward-compatible `X-Title: TierNote`. This attribution replaces any inherited
EchoBird identity and applies to both streaming and
synchronous OpenAI-compatible/Anthropic requests.
-- The desktop app's Coffee Note brand link opens `https://note.coffeecli.com/`. Download and
+- The desktop app's TierNote brand link opens `https://tiernote.org/`. Download and
update endpoints remain separately configured until their hosting is migrated.
- AI provider settings, including API keys, persist as plaintext JSON in the
- current user's app-data directory (`Coffee Note/config.json`). They must
+ current user's app-data directory (`TierNote/config.json`). They must
never be written into the repository or knowledge library.
- Borderless modal headers share one text-only standard component. Use typography
for hierarchy, never a decorative or category icon to the left of the title;
@@ -689,17 +691,17 @@ to the product template.
## Website
-- The public website is active again at `https://note.coffeecli.com/`. The
+- The public website is active again at `https://tiernote.org/`. The
single-page site under `website/` is independent from the desktop UI and keeps
its own brand, copy, download routes, and screenshot assets.
- Product screenshots are paired by locale. English and Simplified Chinese use
matching desktop captures, and the in-place language switch updates both copy
and screenshots. Other incomplete locales continue to fall back to English.
-- Remote usage: `irm https://note.coffeecli.com/install.ps1 | iex`. The script
+- Remote usage: `irm https://tiernote.org/install.ps1 | iex`. The script
first tries the website's version/download routes and falls back to the latest
GitHub Release asset, so it remains useful while the public site is offline or
being rebuilt.
-- Primary product URL: `https://note.coffeecli.com/`.
+- Primary product URL: `https://tiernote.org/`.
## Architecture and important paths
@@ -724,7 +726,7 @@ Prerequisites:
Desktop:
```powershell
-cd C:\Coffee-Note
+cd C:\TierNote
npm install
npm run library:check
npm run typecheck
@@ -734,7 +736,7 @@ npm run tauri:dev
Website:
```powershell
-cd C:\Coffee-Note\website
+cd C:\TierNote\website
npx serve .
```
@@ -757,7 +759,7 @@ and machine-specific. The website itself has no generated build directory.
## Agent-logic optimization references (added 2026-08-07)
-The AI-chat empty state advertises three capabilities that Coffee Note already
+The AI-chat empty state advertises three capabilities that TierNote already
implements partially. When optimizing the agent loop later, borrow from these
references:
@@ -780,12 +782,12 @@ Make every token deliver at least twice the value.)
## Starter data ownership (2026-08-08)
-The managed Demo library and My Info pages are starter data only. Coffee Note
+The managed Demo library and My Info pages are starter data only. TierNote
creates their bilingual seed content once, and then treats every file as user
data. A permanent `.starter-pack-initialized` marker prevents later launches,
upgrades, or starter-content revisions from overwriting or recreating edited or
deleted files. When upgrading a pre-marker installation, any existing file means
-the directory is adopted as-is; Coffee Note writes the marker without backfilling
+the directory is adopted as-is; TierNote writes the marker without backfilling
missing seed files. Current Chinese directory names and My Info section IDs are
transitional implementation details, not permanent product contracts.
@@ -799,7 +801,7 @@ its contents.
The desktop Audio to text settings are backed by real app-data state rather
than UI-only placeholders. Provider configuration is stored as plaintext JSON
-at the current user's local app-data `Coffee Note/transcription.json`; it is never
+at the current user's local app-data `TierNote/transcription.json`; it is never
written into the repository or selected workspace. Provider records are kept
independently so switching services does not discard their endpoint, model, or
API key. The hosted path has separate request adapters for OpenAI-compatible,
@@ -807,7 +809,7 @@ Deepgram, and AssemblyAI protocols and streams audio files instead of reading
the whole upload into memory.
The local path downloads pinned runtime and model resources into the current
-user's local app-data `Coffee Note/transcription/` directory. Every fixed resource
+user's local app-data `TierNote/transcription/` directory. Every fixed resource
has an expected byte size and SHA-256 digest; archives are extracted only after
verification. Windows supports the CPU and NVIDIA CUDA runtimes, Linux supports
the CPU runtime, and macOS is intentionally shown as unavailable until a pinned
@@ -826,9 +828,9 @@ selection is not implemented yet.
## Phone message channels (updated 2026-08-14)
-Coffee Note supports two paired private phone channels: Tencent Weixin iLink
+TierNote supports two paired private phone channels: Tencent Weixin iLink
and Telegram Bot API. The Rust channel runtime stores credentials and a
-durable task queue under the current user's local app-data `Coffee Note/`
+durable task queue under the current user's local app-data `TierNote/`
directory; neither credentials nor pending jobs enter the selected workspace.
Weixin follows Tencent's MIT-licensed `openclaw-weixin` HTTP/JSON protocol for
QR login, optional phone verification, long polling, `context_token` replies,
@@ -862,7 +864,7 @@ is acknowledged and removed only after the final phone reply is delivered.
evolve `knowledge_map.rs` into a persistent registry + backlinks + orphan/
broken-link lint + deterministic metadata rebuild after agent runs;
measure token and tool-call savings.
-3. **Phase 3 — Cache hit rate and cost**: keep the stable Coffee Note system
+3. **Phase 3 — Cache hit rate and cost**: keep the stable TierNote system
prompt small and compare provider-reported cache usage across model providers.
4. **Phase 4 — Evidence-retrieval self-healing routing**:
primary/fallback endpoints for Europe PMC / PubMed / ClinicalTrials with
@@ -871,10 +873,10 @@ is acknowledged and removed only after the final phone reply is delivered.
## Provider prefix-cache continuity (2026-08-10)
AI conversations now have one UI transcript and one durable Agent Loop provider
-transcript in Coffee Note. Conversation mutations still share one process-local
+transcript in TierNote. Conversation mutations still share one process-local
storage lock to protect UI JSON and its index.
Cache usage remains the provider-reported aggregate. DeepSeek does not return
-token attribution by prompt section, so Coffee Note must not claim a synthetic
+token attribution by prompt section, so TierNote must not claim a synthetic
rate that subtracts personal-context tokens. The composer labels this value
`累计命中` / `Total cache` to make the cold-start-inclusive scope explicit.
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 68ae9e1..90b9afa 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,6 +1,6 @@
-# Contributing to Coffee Note / 贡献指南
+# Contributing to TierNote / 贡献指南
-Thanks for helping improve Coffee Note.
+Thanks for helping improve TierNote.
## English
@@ -14,7 +14,7 @@ Thanks for helping improve Coffee Note.
### Contributor License Agreement (CLA)
-Coffee Note is distributed under the **GNU Affero General Public License,
+TierNote is distributed under the **GNU Affero General Public License,
Version 3.0 or later (AGPL-3.0-or-later)**. The project may also offer paid
commercial licenses for closed-source customization, white-label distribution,
or proprietary embedding. To keep that licensing model possible, contributions
@@ -25,7 +25,7 @@ translations, or other content (your "Contribution"), you agree that:
1. **Ownership.** You represent that you have the right to submit the
Contribution and that it is not copied from an incompatibly licensed source.
-2. **License grant.** You grant edison7009 and the Coffee Note project a
+2. **License grant.** You grant edison7009 and the TierNote project a
perpetual, worldwide, non-exclusive, royalty-free, irrevocable license to
reproduce, modify, publicly display, sublicense, and distribute the
Contribution and derivative works under any license, including
@@ -52,7 +52,7 @@ maintainer before submitting.
### 贡献者许可协议(CLA)
-Coffee Note 采用 **GNU Affero 通用公共许可证 v3 或更高版本
+TierNote 采用 **GNU Affero 通用公共许可证 v3 或更高版本
(AGPL-3.0-or-later)**。项目也可能向需要闭源定制、白标分发或嵌入专有
产品的机构提供付费商业授权。为保留这种授权能力,贡献须遵守以下条款。
@@ -60,7 +60,7 @@ Coffee Note 采用 **GNU Affero 通用公共许可证 v3 或更高版本
即表示你同意:
1. **权属。** 你声明自己有权提交该贡献,且它并非复制自许可证不兼容的来源。
-2. **许可授予。** 你授予 edison7009 与 Coffee Note 项目一项永久、全球、
+2. **许可授予。** 你授予 edison7009 与 TierNote 项目一项永久、全球、
非独占、免版税、不可撤销的许可,可复制、修改、公开展示、再许可及分发
该贡献与其衍生作品,包括采用 AGPL-3.0-or-later 或商业专有许可证。
3. **专利授权。** 若实施贡献必然涉及你控制的专利权利要求,你向项目及下游
diff --git a/DESIGN.md b/DESIGN.md
index 26cc649..92f32a8 100644
--- a/DESIGN.md
+++ b/DESIGN.md
@@ -1,4 +1,4 @@
-# Coffee Note Desktop Design System
+# TierNote Desktop Design System
## Product Context
@@ -23,7 +23,7 @@
controls and drag-and-drop content. Text fields keep the browser-native I-beam.
The two pane resizers are the only resize-cursor exception: use `col-resize`
both while hovering over a divider and throughout an active pane resize.
-- **Mood:** Serious, quiet, capable, and spacious. Coffee Note should feel like a professional work surface, not a personalized dashboard template.
+- **Mood:** Serious, quiet, capable, and spacious. TierNote should feel like a professional work surface, not a personalized dashboard template.
- **Memorable quality:** A Codex-like note tool whose primary object is the user's tiered knowledge, not chat.
## Product Structure
@@ -47,7 +47,7 @@
actions. Multi-word names remain intact and the row wraps only between cities;
do not spend space on generic location-privacy helper copy.
- Use one outer shell for the top bar and persistent left navigation rail.
-- Let the shared title bar span the full window width. Place the `Coffee Note` wordmark at its left edge, followed by back/forward navigation and the File, Edit, and Help menus. On macOS, reserve clearance for native traffic-light controls.
+- Let the shared title bar span the full window width. Place the `TierNote` wordmark at its left edge, followed by back/forward navigation and the File, Edit, and Help menus. On macOS, reserve clearance for native traffic-light controls.
- Start the left rail below the title bar with Home as its first row. Do not repeat the product icon or wordmark there. Library switching remains in the File menu and is also exposed as a discoverable global-action icon at the right edge of the Home row, matching the placement of global actions such as search in Codex.
- Leave a modest top inset above the Home row so the left rail breathes under the title bar rather than feeling pinned to it.
- Place the center workspace and right contextual rail inside one continuous inner panel. Its top-left border and radius are the primary visual boundary; the right rail is not a second sidebar.
@@ -86,7 +86,7 @@
endpoint, and locally saved API-key records. Recognition is a fallback when the
active model cannot accept images; image, speech, video, music, and sound effects generation keep independent
provider configurations for media-generation skills. Video configuration does not
- replace Coffee Video's dependable native fallback. Video model presets are protocol-aware.
+ replace TierNote Video's dependable native fallback. Video model presets are protocol-aware.
Runway exposes its current supported video IDs, while BytePlus/Volcano Engine, Kling,
Vertex AI Veo, MiniMax/Hailuo, Luma, Vidu, Pika, Alibaba Cloud Wan, Tencent Cloud
Hunyuan/Youtu and PixVerse, LTX, Adobe Firefly, and OpenAI Sora each keep a distinct
@@ -156,7 +156,7 @@
never remove or hide a
locally saved model, including one newly marked deprecated upstream.
The AI composer exposes only models selected here. Every reasoning-capable
- model gets Coffee Note's fixed five effort levels (low, medium, high, xhigh, max);
+ model gets TierNote's fixed five effort levels (low, medium, high, xhigh, max);
models.dev reasoning-option metadata must not filter or clamp them. A provider's model list always expands in
full inside the outer settings scroller; do not cap its result count or add a
nested model-list scrollbar. Non-default providers show a count only when at
@@ -183,7 +183,7 @@
chevron reveals arguments and results inline.
While the turn is active, keep one separate EchoBird-style status line after
the activity stream. Its left edge uses Coffee-CLI's compact Braille-dot spinner.
- It uses Coffee Note's warm orange status color, the complete
+ It uses TierNote's warm orange status color, the complete
supported-language verb lists, the left flower glyph sequence, typewriter erase/type
timing, a caret during rewrites, and the EchoBird left-to-right text shimmer. Add
an elapsed clock only after 15 seconds; the muted elapsed clock does not shimmer.
@@ -236,7 +236,7 @@
the component; never shrink the type to fit.
- **Weight:** Use 400 for body, 550-600 for controls and navigation, and 650-700 only for page titles.
- **Letter spacing:** 0. Avoid uppercase tracking except tiny technical metadata.
-- **Brand exception:** The compact title-bar `Coffee Note` wordmark reuses the bundled `Lora` bold-italic face from the AI-chat identity at 16px.
+- **Brand exception:** The compact title-bar `TierNote` wordmark reuses the bundled `Lora` bold-italic face from the AI-chat identity at 16px.
## Color
@@ -301,29 +301,29 @@
| 2026-08-07 | Keep website design separate | The public site is expressive brand communication; the desktop app is a repeated-use work surface. |
| 2026-08-07 | Enforce a minimum type scale | Left navigation, directory tree, and right-rail text at 10-13px was too small to read. Floor: 13px readable / 12px metadata; 15px navigation (EchoBird reference), 14px directory tree. |
| 2026-08-08 | Use the default arrow except for pane resizing | A hand cursor is a web pattern; ordinary controls and content keep the default arrow, while the dividers between the three panes use native directional feedback during resize. |
-| 2026-08-08 | Move the product identity and app menus into the shared title bar | A compact 16 x 16 icon, Lora bold-italic `Coffee Note` wordmark, page history, and File/Edit/Help menus match the native Codex-like shell while letting Home align directly with the workspace top edge. |
+| 2026-08-08 | Move the product identity and app menus into the shared title bar | A compact 16 x 16 icon, Lora bold-italic `TierNote` wordmark, page history, and File/Edit/Help menus match the native Codex-like shell while letting Home align directly with the workspace top edge. |
| 2026-08-08 | Gate My Contexts retrieval per note | Five default-on local switches make AI inclusion explicit; a backend allowlist enforces the same state for question-aware and always-on personal context. Cards remain direct neutral navigation entries rather than selectable options. |
| 2026-08-08 | Treat managed starter content as user-owned after first creation | Demo and My Contexts seed files are generated only for an empty first-run directory. A permanent marker prevents upgrades from overwriting, backfilling, or recreating edited and deleted files; current localized names remain temporary. |
| 2026-08-09 | Replace the settings dialog with a global settings workspace | A persistent category rail and one merged content surface match the desktop shell, remove the dated modal feel, and give model and appearance settings room to remain legible. Library switching remains with Home and File. |
-| 2026-08-09 | Use models.dev for provider/model directory data; keep Coffee Note request configuration independent | A live catalog removes hard-coded model names and prices. Anthropic alone uses its native Messages API; every other provider uses the industry-default OpenAI-compatible path. Coffee Note always exposes five reasoning levels for reasoning models and lets provider endpoints normalize them. Composer selections change actual requests. |
+| 2026-08-09 | Use models.dev for provider/model directory data; keep TierNote request configuration independent | A live catalog removes hard-coded model names and prices. Anthropic alone uses its native Messages API; every other provider uses the industry-default OpenAI-compatible path. TierNote always exposes five reasoning levels for reasoning models and lets provider endpoints normalize them. Composer selections change actual requests. |
| 2026-08-09 | Add ambient weather beside the Home greeting | Home keeps only a quiet animated condition image; its click panel is a read-only current and multi-day forecast with a compact single-line city header. City selection is explicit, local, and replaceable, while Home remains quiet. |
| 2026-08-19 | Split General and Appearance settings | General owns language, generated-file location, and the local weather city. Appearance owns system/light/dark mode and color schemes. The Home weather gear and empty state therefore direct people to Settings > General. |
-| 2026-08-19 | Show the complete workspace file tree | Ordinary non-hidden files of every format appear in the directory tree. Markdown opens in Coffee Note; other formats show a quiet unsupported-preview state but remain selectable through single click, multi-select, and the context menu as path-based AI context. |
-| 2026-08-14 | Make paired phone chats full Coffee Note conversations | A linked private chat should behave like the desktop composer rather than force every message through link capture. Ordinary messages get ordinary AI replies, link-only messages implicitly become saved notes, and all turns share the local conversation history visible in the desktop rail. Pairing, credentials, cursors, and recoverable jobs remain local. |
+| 2026-08-19 | Show the complete workspace file tree | Ordinary non-hidden files of every format appear in the directory tree. Markdown opens in TierNote; other formats show a quiet unsupported-preview state but remain selectable through single click, multi-select, and the context menu as path-based AI context. |
+| 2026-08-14 | Make paired phone chats full TierNote conversations | A linked private chat should behave like the desktop composer rather than force every message through link capture. Ordinary messages get ordinary AI replies, link-only messages implicitly become saved notes, and all turns share the local conversation history visible in the desktop rail. Pairing, credentials, cursors, and recoverable jobs remain local. |
| 2026-08-14 | Adopt a restrained turn-status shimmer | One theme-colored activity line with a left-to-right text shimmer and delayed static elapsed time replaces the repeated Braille spinner; tool rows and conversation history keep static marks. |
| 2026-08-15 | Remove leading icons from borderless modal headers | Text-only titles make the lightweight dialogs quieter and more refined while one shared header keeps title and close-action alignment consistent. |
| 2026-08-16 | Treat Skills as two-level management | The first level manages installed packages and source actions; opening a package reveals an uncapped two-column list of its concrete skills with independent switches and a clear back action. This separates installation from capability control and remains usable for repositories containing hundreds of skills without implying an in-app download marketplace. |
| 2026-08-16 | Preserve official plugin artwork in Skills | Package and child-skill rows use the nearest Codex plugin manifest's compact icon directly, without a second backing tile or border, and fall back to the standalone neutral skill mark. This makes large official collections scannable without adding labels or card decoration. |
| 2026-08-16 | Make Tier drag channels geometrically continuous | Visual spacing remains airy, but every wrapped line is divided at card center lines so each pixel maps to a deterministic insertion slot. A gap must never fall through to the row-end position. |
-| 2026-08-17 | Establish the plugin-market architecture | Plugins are distribution units, skills are Agent actions, and shared runtimes are managed once by the application. Coffee Media is the first manifest-driven official plugin; Git skill sources remain prompt-only community extensions. |
-| 2026-08-17 | Generate presentations in the shared native runtime | Coffee Presentation submits one structured deck to an application-level engine that creates editable `.pptx` files without a per-skill environment. The initial layout and density contract favors reliable, restrained slides over unconstrained drawing commands. |
+| 2026-08-17 | Establish the plugin-market architecture | Plugins are distribution units, skills are Agent actions, and shared runtimes are managed once by the application. TierNote Media is the first manifest-driven official plugin; Git skill sources remain prompt-only community extensions. |
+| 2026-08-17 | Generate presentations in the shared native runtime | TierNote Presentation submits one structured deck to an application-level engine that creates editable `.pptx` files without a per-skill environment. The initial layout and density contract favors reliable, restrained slides over unconstrained drawing commands. |
| 2026-08-17 | Separate recognition and generation providers | Keep one Multimodal models destination with compact internal capability tabs. Recognition falls back to its own external image model when the active model is text-only; image, speech, video, and music generation use independently configured providers. Local OCR remains a later capability. |
-| 2026-08-17 | Ship Coffee Video as the safe fallback video workflow | The built-in plugin turns copy into scene images, configured speech, burned captions, restrained motion, and an MP4 through an application-managed encoder. Community Git skills may improve storyboards and prompts but only call the same guarded tools; they cannot execute bundled scripts or runtimes. |
+| 2026-08-17 | Ship TierNote Video as the safe fallback video workflow | The built-in plugin turns copy into scene images, configured speech, burned captions, restrained motion, and an MP4 through an application-managed encoder. Community Git skills may improve storyboards and prompts but only call the same guarded tools; they cannot execute bundled scripts or runtimes. |
| 2026-08-17 | Make note creation actions skill shortcuts | Generate PPT and Generate video beneath a note title select their corresponding one-shot built-in skill and focus the composer without sending. The current note remains explicit context. Remove the disabled Mobile long image placeholder instead of expanding the row with an unrelated future export. |
-| 2026-08-17 | Generate DOCX and PDF through one native document runtime | Coffee Documents contains two independently switchable skills that submit the same heading/paragraph/list/quote model. The app writes editable Open XML DOCX and locally typeset PDF files without requiring an Office installation. |
+| 2026-08-17 | Generate DOCX and PDF through one native document runtime | TierNote Documents contains two independently switchable skills that submit the same heading/paragraph/list/quote model. The app writes editable Open XML DOCX and locally typeset PDF files without requiring an Office installation. |
| 2026-08-17 | Extend note creation shortcuts to document exports | Generate DOCX and Generate PDF join PPT and video beneath the note title. All four actions only select a bundled skill and focus the existing composer; none sends automatically. |
| 2026-08-18 | Make generated file destinations explicit | PPTX, DOCX, PDF, and MP4 default to the current user's Desktop, while Settings > General allows a custom directory. The conversation renders the backend-returned absolute path with direct copy and reveal actions so file discovery never depends on model wording. |
-| 2026-08-18 | Direct the storyboard before generating assets | Coffee Video exposes both Cinematic storyboard director and Text to video skills. Both share one provider-neutral specification: director brief, beat map, continuity bible, motivated camera movement, concrete physical action, and paired keyframe/motion prompts. Storyboard-only requests stop before generation; rendered videos map the same plan onto guarded Coffee Video tools. |
+| 2026-08-18 | Direct the storyboard before generating assets | TierNote Video exposes both Cinematic storyboard director and Text to video skills. Both share one provider-neutral specification: director brief, beat map, continuity bible, motivated camera movement, concrete physical action, and paired keyframe/motion prompts. Storyboard-only requests stop before generation; rendered videos map the same plan onto guarded TierNote Video tools. |
| 2026-08-19 | Follow the selected workspace for generated files | With the complete file tree now showing ordinary files, PPTX, DOCX, PDF, and MP4 default directly to the selected workspace root and automatically follow workspace switches. A fixed custom directory remains available for people who want their workspace to contain notes only. |
| 2026-08-19 | Make video model presets protocol-aware | Video generation offers selectable official OpenAI and Runway model IDs while preserving stored custom model values. Runway receives its own protocol and a non-generating credential check; other vendors stay custom until their task creation and polling contracts are implemented. |
| 2026-08-19 | Add protocol-aware music model settings | Multimodal models gains a fifth Music generation tab with official Google Lyria, ElevenLabs Music, and MiniMax Music presets. Connection checks only read model or account metadata and never submit a billable generation request. The configuration is intentionally not exposed to the Agent until a guarded audio-generation and local-save workflow exists. |
diff --git a/NOTICE b/NOTICE
index ae9ca0e..9063355 100644
--- a/NOTICE
+++ b/NOTICE
@@ -1,8 +1,8 @@
-Coffee Note
-Copyright (c) 2026 edison7009 and Coffee Note contributors
+TierNote
+Copyright (c) 2026 edison7009 and TierNote contributors
-This product includes software developed by the Coffee Note project:
-https://github.com/edison7009/Coffee-Note
+This product includes software developed by the TierNote project:
+https://github.com/edison7009/TierNote
Current versions are licensed under the GNU Affero General Public License,
Version 3.0 or later (AGPL-3.0-or-later). See LICENSE for the full text.
diff --git a/README.md b/README.md
index f9e5db6..101b8dc 100644
--- a/README.md
+++ b/README.md
@@ -3,31 +3,31 @@
## Overview
-Coffee Note is a cross-platform desktop note agent built around local Markdown files. Its core experience is an editable **T1–T5 priority map**: your most important notes stay visible, while AI can search, organize, summarize, and create without turning the app into a coding tool or task manager.
+TierNote is a cross-platform desktop note agent built around local Markdown files. Its core experience is an editable **T1–T5 priority map**: your most important notes stay visible, while AI can search, organize, summarize, and create without turning the app into a coding tool or task manager.
| Project | Current state |
| --- | --- |
@@ -53,18 +53,18 @@ Coffee Note is a cross-platform desktop note agent built around local Markdown f
## Install
-Download the appropriate installer from the [latest GitHub Release](https://github.com/edison7009/Coffee-Note/releases/latest), or use the remote installer:
+Download the appropriate installer from the [latest GitHub Release](https://github.com/edison7009/TierNote/releases/latest), or use the remote installer:
**Windows PowerShell**
```powershell
-irm https://note.coffeecli.com/install.ps1 | iex
+irm https://tiernote.org/install.ps1 | iex
```
**macOS / Linux**
```bash
-curl -fsSL https://note.coffeecli.com/install.sh | sh
+curl -fsSL https://tiernote.org/install.sh | sh
```
## Supported platforms
@@ -142,7 +142,7 @@ cargo test --manifest-path src-tauri/Cargo.toml
- Your note library and complete conversation records stay on your computer by default.
- Only requests you initiate send the selected context to your configured model provider.
- Knowledge-library access is path-scoped and canonicalized to block traversal outside the selected root.
-- Provider configuration, including API keys, is stored as plaintext JSON only in the current user's Coffee Note app-data directory. It is never written into this repository or the note library.
+- Provider configuration, including API keys, is stored as plaintext JSON only in the current user's TierNote app-data directory. It is never written into this repository or the note library.
- No telemetry service is required for the local note workflow.
## Release process
@@ -151,7 +151,7 @@ Tags matching `v*` trigger quality checks and native builds for Windows x64, mac
## License & commercial use
-**Open-source edition** — Coffee Note is free, forever, under the
+**Open-source edition** — TierNote is free, forever, under the
[GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later)](LICENSE).
Companies are welcome to use it as-is. Modified versions distributed to others,
and modified versions offered to users over a network, must follow AGPL's source
@@ -159,13 +159,13 @@ availability requirements. See [NOTICE](NOTICE) for the legacy MIT notice and
[THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) for third-party acknowledgements.
**Commercial & enterprise licensing** — A paid commercial license is only
-needed when you want to step outside AGPL obligations: to customize Coffee Note
+needed when you want to step outside AGPL obligations: to customize TierNote
and keep the changes closed-source, redistribute it under your own brand or as a
white-label product, or embed it in a proprietary product you distribute. Custom
development, priority support, and SLAs are also available. Tell us what you are
building and we will tailor a plan and quote.
-Contact sales: **[hi@coffeecli.com](mailto:hi@coffeecli.com?subject=Coffee%20Note%20Enterprise)**
+Contact sales: **[hi@coffeecli.com](mailto:hi@coffeecli.com?subject=TierNote%20Enterprise)**
**Contributing** — See [CONTRIBUTING.md](CONTRIBUTING.md). Contributions are
accepted under the project CLA so commercial relicensing remains possible.
diff --git a/README.zh-CN.md b/README.zh-CN.md
index cb9b0fb..6dec794 100644
--- a/README.zh-CN.md
+++ b/README.zh-CN.md
@@ -3,31 +3,31 @@
{locale === 'zh'
- ? '支持 Coffee 插件清单,以及包含一个或多个 SKILL.md 的 Git 技能包。第三方代码和运行时不会自动执行。'
- : 'Supports Coffee manifests and Git packages containing one or more SKILL.md files. Third-party code and runtimes are never executed automatically.'}
+ ? '支持 TierNote 插件清单,以及包含一个或多个 SKILL.md 的 Git 技能包。第三方代码和运行时不会自动执行。'
+ : 'Supports TierNote manifests and Git packages containing one or more SKILL.md files. Third-party code and runtimes are never executed automatically.'}