Skip to main content
Slash commands are typed into the chat input like any other message, but they never reach the model. The driver loop dispatches them before the LLM call, so a command costs no tokens, produces no tool calls, and leaves no trace in the transcript the model sees. They are a different surface from skills and tools: Commands are registered in a single declarative table, so the REPL, the Textual TUI, and chat_once all recognize the same names and aliases.

Control

/stop is the only command that is meaningful during a turn. The REPL intercepts it in the input producer (the consumer only drains between turns); the TUI cancels the graph-loop future. Both paths then reset the Langfuse handler, because a cancelled turn skips LangChain’s error callbacks and would otherwise leave unended spans that corrupt every later turn’s tracing.
Ctrl+S stops the running turn in the TUI without typing anything.

Session

/thread with no argument opens a picker scoped to the active flavour, so a research-flavour thread is invisible while you are chatting in chat. The picker offers a + New thread row; pressing Esc there cancels and keeps your current thread rather than starting one. Deleting a thread removes its index entry and its checkpointed conversation permanently. It never touches long-term memory. Deleting the thread you are currently in starts a fresh one.
/new, Ctrl+N, /thread new, and the picker’s + New thread row all funnel through the same code path and print the same confirmation line, so they are interchangeable.

Thread titles

After a thread’s first interactive turn, a background model call generates a short name for it. If that call fails or the turn was headless, the title falls back to a truncated first message. Titles are what the thread picker shows.

Config

/settings only rebinds the part of the session you actually changed. Opening the panel and closing it without edits triggers no rebuild. A /model or /settings provider switch made inside a thread overrides the agent’s pinned model, persists to the thread index, and is restored when you resume that thread later. /model always lists the active provider’s catalog, not a global list. /think warns rather than blocks when the current model does not advertise reasoning support: the setting is applied and simply has no effect. The TUI header shows the current effort, and Ctrl+T cycles it.

Tools

Skill and memory listings

/skills tags each entry with where it came from: bundled (shipped), workspace (this project’s ./skills/), or plugin (surfaced by an installed plugin). /memory lists each project-memory fact with its name, its description, and the layer it lives on. Only layer 0 is writable, so forget deletes from the current project or worktree and never from an inherited parent repo.

Plugins

/plugins install <src> [ref] uses a staged-then-confirm flow rather than a blocking prompt: the install is staged, a consent manifest is rendered, and you run /plugins confirm (or /plugins confirm safe to install with the dangerous parts inert) or /plugins cancel.
Enabling or disabling a plugin from inside a chat writes a thread-scoped override, not a global one. The global default changes only at install time or via ziro plugin enable|disable on the command line.

Transcript

Keyboard equivalents in the TUI

Commands that work mid-turn

Most commands dispatch between turns. A small set is safe to open while a turn is still running, so a popup appears instantly over the chat instead of queueing behind the model:
The popup opens immediately. Any mutation it commits (switching thread or user, rebinding a key or model, installing and enabling voice) is deferred and applied at the next turn boundary rather than racing the running turn.
This split is deliberate: reading state mid-turn is always safe, mutating the session under a live graph invocation is not.

Retired commands

Typing one of these prints a one-line redirect instead of doing anything: /flavour is the notable one. A flavour scopes which agents are visible, which threads exist, and which shared memory is in play, and it is fixed for the life of the process. To move to a different flavour, relaunch with --flavour or use the launch-time picker. Within a flavour, use /agent, /thread, and /user to move around.

Where commands are recognized

Commands marked interactive-only (/new, /voice, /img, /mcp, /skills, /memory, /scratch, /sidebar) are not available in a headless run, because there is no session to mutate.

Next steps

Terminal UI

The transcript, side pane, status footer, and modals these commands drive.

Headless runs

What changes when there is no interactive session.

CLI reference

Launch flags, entry points, and the dispatch rule.