Commands & shortcuts
The terminal frontend is a full TUI (built with Ink):
assistant text streams live, tool calls render as cards (⏺ tool_name(args) →
⎿ tool_name result, or ✗ tool_name error on failure), and approval prompts appear
inline. When one model turn fires several tool calls at once, each result renders
under its own call even if the results arrive interleaved.
Typing
Section titled “Typing”- Type a message and press Enter to send.
- Type
/for a live-filtering command popup. ↑↓ to move, Tab fills in the highlighted command without running it, Enter runs it immediately - except a command that needs an argument (like/rename <name>), where Enter fills the input instead so you can type the argument. The popup disappears as soon as you type a space or newline. - Type
@for a fuzzy-search popup of project files, agent definitions, and skills. Same ↑↓ / Tab / Enter keys. On send,@<path>inlines the file’s contents (file mentions),@<agent> <task>runs that agent,@<skill>activates that skill. - You can keep typing and sending while a turn is running. Each message queues (shown dimmed above the input, with a count next to “working…”) and runs automatically, in order, once the current one finishes. Nothing is ever dropped.
Shortcuts
Section titled “Shortcuts”| Key | Action |
|---|---|
| Enter | Send the message. |
| Shift+Tab | Cycle permission mode manual → auto → plan → …. The status bar shows the current mode. (Not Ctrl+Tab - terminals intercept it.) |
| Ctrl+R | Toggle the verbatim raw block under every repaired tool call in the transcript. |
| Esc | Stop the turn in progress without exiting. Anything queued during it is kept and runs next; press Esc again while those queued messages run to cancel them. (A rejected plan or an approval-prompt “Comment” discards the queue instead.) |
| Ctrl+C | Exit immediately. |
Slash commands
Section titled “Slash commands”| Command | Action |
|---|---|
/status |
Print the current posture: model and endpoint (and whether it’s local), permission mode, web-search backend, transcript persistence, retention, MCP servers and their transports, loaded project instructions, agent definitions, the active skill, tool-output scanning mode, configured hook counts, context usage, session cost, and tool-call reliability so far. Read-only. |
/cost |
Show this session’s token totals and estimated cost, with a per-model breakdown when the session has switched models. Anthropic models are priced from a built-in list-price table; other models are free unless given a rate via the pricing setting. Prompt-cache reads (Anthropic) are billed at the discounted rate automatically. The figure is an estimate, not a bill. |
/reliability |
Per-model breakdown of this session’s tool-call reliability: how many calls the model made, how many needed repair, how many failed to parse, and how many times it gave up. Session-scoped, not persisted. See The tool-call protocol. |
/raw |
Print the verbatim model output for every repaired tool call so far this session - the malformed block as it arrived, before repair. Ctrl+R toggles the same raw blocks inline under each transcript card. |
/agents |
List the loaded agent definitions with their descriptions and sources. Invoke one with @<name> <task>. |
/skills · /skill off |
/skills lists loaded skills and marks the active one; /skill off clears the active skill (next turn). Activate a skill by typing @<name> in a message. |
/model · /model <name> |
Open a picker to switch models, or switch directly by name. The picker annotates each model with its reliability this session when there’s data. See Multiple models. |
/share · /share <path> |
Export this session to a Markdown file (or HTML with /share --html). Secret-looking values are scrubbed; /share --full includes complete tool IO. See Sharing sessions. |
/rename <name> |
Name the current session (shown in the status bar and /resume’s picker). |
/resume |
Pick a previous session from an ↑↓ list (most recent first, current excluded, capped at 15) and switch to it in place - its transcript is re-rendered, tool calls and results included. If it was on a model no longer configured, it stays on the active model and says so. |
/compact |
Summarize older history to free up context. Runs on routing.summaryModel when one is set, and says which model it used. |
/reset · /newsession |
Start a fresh session in the same terminal. The prior transcript stays on disk, resumable via /resume or --resume. |
/exit · /quit |
Exit cleanly. |
Repaired tool calls
Section titled “Repaired tool calls”Open-weight models routinely get tool-call syntax slightly wrong - a trailing comma, a fenced code block around the arguments, a near-miss tool name. Polyglot repairs these and runs the call anyway, but it never hides that it happened:
- The tool-call card in the transcript gets a dim
↺ repairedmarker (and(corrected from "…")when the tool name was the thing fixed). Ctrl+Rexpands the verbatim raw model output under every repaired card, so you can see exactly what the model emitted./rawprints the same raw blocks as a one-off report./reliabilityaggregates the counts per model for the session.
When audit.enabled is set, the verbatim raw call is also written to the
audit log on every repair, regardless of hashArgs -
a parser fix can’t silently mask a model getting worse.
The context indicator
Section titled “The context indicator”The status bar shows context: NN% - how much of the model’s context window the
conversation is using (yellow past 75%, red past 90%). After the first turn it’s the
provider’s own input-token count from the last response (which includes the system
prompt and tool definitions); before any turn, and right after /compact, it falls
back to a ~4 chars/token estimate. Servers that don’t report usage on streamed
responses stay on the estimate.
Once a session has run up a priced cost, the status bar also shows a running total
(e.g. · $0.0342). /cost breaks it down.
When the active model has had any tool-call trouble this session, a reliability
segment appears too: ⚠2 (parse errors), ⚠ gave up, or a dim 92% ok (clean rate
once repairs have happened). Nothing shows while the model is holding the format
perfectly. /reliability breaks it down.
Model failover
Section titled “Model failover”If routing.failover is configured and the active
model errors out or stops producing valid tool calls mid-turn, the turn continues on
the next model in the list. You get a one-line notice in the transcript
(<from> failed (<reason>) - continuing on <to>. Run /model to switch back.) and the
status bar flips to the new model. The switch is sticky for the rest of the session;
/model puts you back.