AI Assistant
The AI assistant is a multi-turn chat panel built into the writing app. Unlike the inline AI command — which streams a single-shot result into the editor buffer — the assistant keeps a full conversation history and lets you iterate through several exchanges before deciding what to do with the output.
The assistant is available both in the Tauri desktop app and in the web editor as a frame component alongside the editor.
Sign-in requirement
The assistant requires a signed-in cloud workspace session. When you are not signed in the frame shows a Sign in to use AI screen with a button that opens the Better Auth handoff. Once signed in the chat interface appears immediately.
The same Better Auth account controls cloud sync and AI access — sign in once in Settings → Sync to unlock both.
Per-day quota
Each user can send 100 AI turns per UTC day (midnight UTC reset). A "turn" counts as one user message plus the full model response stream. Assistant panel messages, inline command invocations, and MCP ask_zudo_agent calls all draw from the same daily pool. The unit is charged atomically at admission, before the model runs, so a turn that later fails still consumes it. Direct MCP document/history/change/asset tools spend zero AI turns — see MCP integration. For server-side accounting, see Flue Agent Platform → Quota.
When the quota is exhausted the current request returns a quota_exceeded error shown inline in the thread. The counter resets automatically at midnight UTC.
Model and backend
The assistant is served by agent-server, a dedicated Cloudflare Worker built on the Flue agent platform — a durable, multi-turn conversation with its own workspace tools, distinct from the one-shot inline AI command. Both surfaces run the same Cloudflare Workers AI model, @cf/. There is no user-facing model selector — the toolbar badge shows the active model as a static label.
Workspace access
The assistant can always chat, but reaching your notes — reading them, searching them, proposing edits — needs a separate, explicit grant. The first time a conversation needs workspace access, the app shows the Allow AI Assistant workspace access dialog: it re-prompts for your workspace password (never sent or stored — only the derived decryption keys are), states plainly that the keys are held in server memory for up to an hour and then discarded automatically, and that conversation history may retain plaintext excerpts of your notes. Declining ("Not now") is fully supported — the assistant keeps answering questions with no workspace access; only tool calls that need your notes fail, with a plain-English explanation the assistant relays as-is.
A status line at the bottom of the frame always shows which mode you're in and offers the one control that changes it:
Access open — "The assistant can read and edit your notes. Access closes on its own after about an hour," plus a Close workspace access button to end the session early.
Access closed — "The assistant cannot reach your notes. It can still answer questions," plus an Open workspace access button that re-opens the consent dialog.
The grant is per-workspace, not per-conversation — every thread in the frame shares the same access state, and it lapses automatically after about an hour with no way to silently renew it (the password is never retained), so re-consenting is the only path back once it expires. See Flue Agent Platform for why the grant can't simply be extended, and Personal Access Tokens → The key-session exception for the same tradeoff from the token side.
The assistant frame
The assistant occupies a frame in the layout (type core.ai-assistant). Its chrome consists of:
Toolbar
A 28 px strip at the top of the frame containing:
AI label with a sparkle icon — identifies the frame type.
Static model badge.
Usage glyph — ambient indicator of today's quota consumption. No precise count is shown; the glyph darkens as the quota fills.
Clear button — wipes the active thread's message history and retires the conversation server-side. The thread tab itself stays open; a fresh conversation starts in its place. See Flue Agent Platform → Retention and deletion for exactly what "retire" does and does not erase.
Thread tabs
Each assistant frame can hold multiple open conversations. The tab strip below the toolbar shows tabs labeled Chat 1, Chat 2, and so on (stable ordinal labels derived from tab insertion order).
Switch: click a tab label to make it active.
Close: click the × on any tab to close that conversation's tab. The conversation itself is not discarded — it stays reachable on the server until you explicitly delete it (see below).
New or recent conversation: click the + button at the right end of the strip to open a popover of your past conversations, most recently used first. Conversations have no title, so each row is labeled by relative time ("3m ago", "2h ago", …). Pick New conversation at the top to start fresh, click a row to reopen a closed conversation or switch to one already open in another tab, or click a row's own × to delete it — this retires the conversation server-side (see Flue Agent Platform → Retention and deletion) and closes its tab here too, if it had one open.
Composer
The input area at the bottom of the frame. Type your message and press Mod+Enter (Cmd+Enter on macOS, Ctrl+Enter on Windows/Linux) to send.
The composer also supports skill shortcuts: typing / shows an autocomplete popup with all loaded skills. Select a skill with the arrow keys and press Enter to insert / into the composer. On send, the skill's body is folded into your message rather than replacing the assistant's own system prompt — the assistant's instructions are server-owned and durable for the whole conversation, so a per-message override would let any message rewrite them permanently. The chat bubble still shows only what you typed; the skill body travels with the message but isn't displayed. (This differs from the inline AI command, where a skill genuinely replaces the system prompt for that one-shot, conversation-less call — see Skill authoring.)
While a response is streaming, a Stop button appears in the toolbar area — click it to abort the current generation.
Conversation thread
Messages render in chronological order above the composer. User messages and model responses are visually distinguished. Markdown in model responses is fully rendered (bold, code blocks, lists, etc.).
Tool activity renders inline as the assistant works:
Tool-call cards show which tool ran (List notes, Read note, Search notes, Check kanban board, Create note) and whether it succeeded or failed. A failure shows the assistant's own plain-English explanation — e.g. a prompt to re-open workspace access — rather than a raw error code.
Edit-proposal cards appear when the assistant runs
propose_editon an existing note. The assistant never writes to an existing note directly — a proposal card shows a summary and a diff, with Apply, Reject, and Re-propose buttons. Apply writes with your own authentication and fails safely (a conflict, not a silent overwrite) if the note changed since the diff was computed; Re-propose asks the assistant to re-read the note and produce a fresh diff. Creating a brand-new note is the deliberate exception:create_notecommits a create-only write directly and fails if the path already exists. See Flue Agent Platform → Edit safety for the full contract.
Skills reference panel
The composer area includes a collapsible Skills panel that lists every skill available in the current writing app. Skills are grouped by layer:
Workspace — skills from
<workspace>/.zudotext/skills/(specific to this text app's workspace).User — skills from
~/.config/zudotext/<appname>/skills/(shared across workspaces for this app).
Each skill entry shows its name, description, and a Use button that inserts / into the composer. A Manage button at the panel footer opens the Skills Manager.
Skills Manager
The Skills Manager is a mini-app for creating, editing, and deleting skill files without leaving the writing app. Open it via:
The Manage button in the skills reference panel, or
The command palette: Open Skills Manager.
The manager lists all skills by layer and lets you create new ones from a template, edit the frontmatter and body, and delete skills. Changes are saved to the appropriate workspace or user configuration layer, and the live skill registry hot-reloads within a few hundred milliseconds — no restart needed.
For the full skill file format (frontmatter fields, body, resolution rules) see Skill authoring.
Promote from inline command
Work started in the inline AI command mini panel can be escalated to a full assistant thread without restarting the conversation. While the inline mini panel is open, press Mod+Shift+A (or click the Promote to thread button in the panel) to transfer the current prompt and response into a new tab in the assistant frame. The mini panel closes and the assistant frame opens to the new thread with the full history intact.
Tools
The assistant can list, read, and search your notes, check kanban boards for upcoming dates, create brand-new notes, and propose edits to existing ones — see Conversation thread above for how tool activity renders, and Flue Agent Platform for the full tool list and the security invariants they run under. It cannot move or delete a note, and it cannot edit an existing one directly — every replacement goes through the propose/Apply flow. A brand-new note is a create-only direct write and fails if the selected path already exists.
These internal tool calls share the Automation API's 120-requests-per-user minute with local direct clients. A bounded query_kanban walk can consume up to 85 requests by itself, so a concurrent burst can receive rate-limit advice even though it began as one assistant turn.
See Also
AI Provider — Model details and daily quota
Flue Agent Platform — How the assistant's backend works: conversation identity, credentials, edit safety, quota, retention
MCP integration — Talking to the same assistant from Claude Code or Codex via
ask_zudo_agentInline AI command — Single-shot in-editor prompt surface
Skill authoring — Writing and managing skill files
Web Editor — Browser-hosted editor with the same assistant frame