Working in chat
The basics of chat take one minute. The controls on this page are the ones that make a long agent session survivable: correcting a run without killing it, queueing your next instruction, undoing a turn that touched files, and going back to an answer you liked better.
The composer
The composer is a card at the bottom of the chat column: the message field on top, one row of controls underneath.
| Control | What it does |
|---|---|
| Mode | The tinted pill on the left: General / Build / Plan / Debug — see Modes |
| Run target | Enable worktree automatically names and prepares an isolated checkout for this chat; its branch appears alongside it |
| Reasoning | Thinking on or off, and effort where the model supports it |
| Settings (cog) | Context documents, code map, brain notes, and Off/Ask/Full for every tool. On a narrow column, run target and reasoning move in here too. |
| Context ring | Window usage; click for the breakdown |
| Model | Per-chat model. Ctrl+M / Cmd+M opens it with search focused. |
| Attach | Files onto the conversation, 10 MB each |
| Microphone | Dictation — see Voice |
| Send / Stop | Enter sends; Enter again stops while streaming |
Enter sends, Shift+Enter adds a line. ↑ with the caret at the start of the composer walks back through your previous prompts, shell-style; ↓ walks forward.
Drafts survive switching chats.
Enable worktree creates a named branch from the current commit and prepares project dependencies automatically. Uncommitted edits stay in the original checkout. Wait for Setting up… to finish before sending. If setup fails, the checkout is kept so you can fix the reported dependency error and choose Retry worktree. Sending stays blocked until setup succeeds or you explicitly choose Local from Worktree options, including after a reload.
Click Worktree to return to Local. The Worktree options button offers existing checkouts, custom names and start branches, and a return to the local workspace. Returning to Local preserves the worktree and its files; enabling it again reuses that chat’s managed checkout. Use Source Control or issue delivery controls for cleanup.
Link a tab to this chat. Drag a Code editor tab or an in-app browser tab onto the transcript or composer. Minnow pins a link chip on that chat — the file or URL, not a one-turn attachment. The chip stays after reload; click it to open the file or page. Dragging from the file tree still attaches for the next message only.
While the model is working
Compact view draws a running turn as a timeline under your prompt. A round of reads and searches is one step — Explored 5 files, 1 search — with the files it touched as chips; open it for the individual calls. Thinking time rides on the step it led to. While the run is live, a line above the composer shows Working, the elapsed time, and how many actions the turn has taken.
When the turn finishes it folds into one line — Worked 6m 55s · 20 reads · 16 searches — with the final answer below it. Expand the line to see the timeline again. Recorded file changes appear in an Edited files card with per-file counts, Review, and — on the latest turn — Commit and Create PR. Copy, remake, and the reply’s speed sit under the latest answer. Failed and stopped replies remain visible, with a notice that carries the recovery actions.
Choose Settings → Appearance → Chat view → Full to keep every step visible in the transcript. Tool calls and thoughts stay collapsed until you expand them. Switch back to Compact for the quieter view. The preference applies immediately and is saved across restarts; it changes only the display, not the conversation sent to the model.
You do not have to sit still and wait.
Type your next message and press Enter. It queues, and runs when the current turn settles. The follow-up appears in the transcript as a muted Queued bubble (and in the compact strip above the composer) so it is not sent-and-forgotten. Edit, push it in as a steer, or delete it from either place. The bubble leaves as soon as that turn starts.
Steer instead, when the run is going wrong. A correction sent mid-turn is injected at the next tool-loop boundary rather than aborting the stream — so the model gets “actually, use the existing helper” before it writes the next file, without losing the work it has already done. This is almost always better than stopping and re-prompting: stopping throws away the context the model had built up.
On a local llama.cpp or MLX model the status line beside the assistant row shows a load percent while weights come up, a prefill percent while the prompt is ingested, then a live token count while it generates (including while it is calling a tool).
Stop when the run is genuinely off the rails. The partial reply stays.
When a turn fails
If a reply errors mid-stream, the partial stays on screen. Continue retries with the full conversation still in context. Clear removes the failed assistant output and keeps your prompt. Neither control wipes earlier turns.
Very large replies can stop with a replay memory limit error. Minnow budgets about 32 MiB of retained stream data and chunk overhead per generation, and 128 MiB across generation requests and replay. The retained prefix ends with an explicit error; it is not treated as a completed reply. Ask for a smaller output or wait for other replies to finish before retrying.
A connection that accumulates more than 4 MiB of pending stream data or stalls for 30 seconds is disconnected so other replies can continue. Reconnecting replays the retained bytes in order with their completion or error status. A saved reply too large for the available replay budget reports an error instead of loading a partial replay.
Watching what agents do
- Inference metrics — tokens, tok/s and totals for the turn. In Code, the strip at the bottom of the chat column.
- Agent activity — a panel of what sub-agents are doing right now: thinking, generating, or which tool they are running.
- Sub-agent cards and inspector — every spawned agent gets a card in the transcript. Open it for its Conversation: available thoughts, responses, grouped tool calls, and a Result tab. Conversations remain accessible after reopening the chat.
A background sub-agent that finishes while you are elsewhere pushes its result to the parent conversation, so the model sees it without a wall of text appearing in your transcript.
Undoing a turn
The undo control on the latest Edited files card in the transcript rewinds the last settled agent turn back to your message. Where Minnow captured a git snapshot around that turn, it restores the working tree too — not just the conversation.
Details worth knowing:
- The file-restoring undo appears only in a git repository and only when that turn actually changed files. No repository means no snapshot, so there is nothing to restore.
- The message ⋮ menu always offers Undo turn for a conversation-only rewind.
- Undo does not auto-regenerate. You get your prompt back and decide what to do.
- The undone reply stays redoable through the branch picker.
- Orchestrate, board-linked and worktree-isolated chats do not support undo; the control is disabled with the reason.
Snapshots are made with dangling commits, so your index, HEAD and branch are never moved. If two chats share one repository, the last restore wins.
Files from the assistant
An assistant can present saved project files and generated deliverables as compact cards beneath its response. Each card shows the title, path, file type and size, with Open and Download actions. Cards stay visible when the work transcript is collapsed and remain after reopening the chat.
Open uses Code’s editor or document preview. Download saves the file’s original bytes. These are links to saved files, so both actions use the current file on disk rather than a copy frozen in the conversation. The source workspace stays attached to the card, including files produced in a worktree or sandbox. If a file has been moved or deleted, it must be restored or presented again at its new path.
Branches
Regenerating or forking a turn creates a branch — a separate continuation from the same point. The branch picker appears on that message and lets you move between them; the branch you leave keeps its follow-up messages, so switching back and forth does not destroy either side.
This is how you try “do it with X” and “do it with Y” without two chats and manual copy-paste.
Managing conversations
- New chat from the rail, or the tray menu.
- Search from the rail — full-text over your message history, with ↑ ↓ to move and Enter to open.
- Groups organise related chats; orchestrate boards appear as folders with their member chats nested.
- Chats belong to a workspace folder, so the rail shows what is relevant to where you are.
There is no fixed limit on how many chats you can keep. Deleting a chat is immediate and confirmed in-app.
Chats with an active /loop show a rotating icon in the rail — spinning while a loop is live, still when every loop on that chat is paused.
Notifications
The menubar bell collects what happened while you were not looking: a chat that finished, a task that needs you, a scheduled job that ran. Settings → General → Notifications controls the categories and sounds, including whether cues play while you are already watching the active chat.
Desktop notifications appear when an agent asks a question or finishes its turn while Minnow is in the background. Use Test desktop notification in notification settings to check delivery without starting a chat. In a browser, the test requests notification permission if needed. If the test reports that it was sent but no banner appears, check your system’s notification settings and Do not disturb. On Windows, development builds appear separately as Minnow Dev.
Asking you questions
The model can ask you something mid-run with a question card rather than guessing and being wrong. Answer it and the run continues. Skills like /ask-user use this deliberately.