Skip to content

Command Palette and @-References

The Workspace composer has two inline mechanisms for reaching engine capabilities: the slash command palette (type /) and @-references (type @ anywhere in a message).

Type / in the Workspace composer to open the palette overlay. The palette lists every registered command grouped by intent. As you type after the /, the list narrows using fuzzy matching powered by nucleo.

Each command is matched against both its name and its one-line description, so a query can hit either the slash token (/doc) or a word from the consequence text (rebuild). Results are grouped by intent group and ordered by frecency within each group: commands you have used recently or frequently float to the top of their section. The frecency ranking is persisted across sessions but is never announced in the UI.

Palette controls:

KeyAction
Up / DownMove selection
EnterRun the selected command
TabToggle fuzzy filter on/off
EscClose the palette

When the query matches nothing exactly, the dispatcher checks Damerau-Levenshtein distance. If exactly one command is within distance 2 of your input, it offers a “did you mean” suggestion. A tie (two equally-close commands) resolves to “unknown” rather than guessing.

/help is itself a command in the registry, filed under DIAGNOSTICS. Running it renders the same grouped listing the palette shows, but in the transcript as static text. It always reflects the live registry state, including any runtime extensions from skills.

Skills can register additional commands into the CommandRegistry at runtime via the register API. A re-registered command replaces the previous entry; it does not duplicate it. The palette and /help both read from this live registry, so installed skills appear immediately without a restart.

Commands that discard work are tagged destructive in the registry. The palette renders a visual marker on these rows so a file-discarding command is never mistaken for a read-only one. Currently only /rewind (restores files to an earlier snapshot) carries this tag.

The built-in commands are organized into six intent groups.

CommandWhat it does
/resumeReopen a past session
/rewindRestore files to an earlier snapshot (destructive)
/newStart fresh, keep this provider
/compactFold context now, keep decisions
/quitEnd this session
/exitEnd this session
CommandWhat it does
/modelSwitch model
/providerSwitch provider
/profileLoad a saved profile (fast, review)
CommandWhat it does
/repomapRebuild the codebase symbol index
/memoryShow what Wayland remembers about you
/costShow tokens and spend for this session
CommandWhat it does
/toolsList tools, toggle permissions
/mcpManage MCP servers
/authConnect a provider via OAuth (google-meet)
/skillsBrowse and run skills
/pluginsInstall or remove plugins
/hooksManage hooks
/voiceToggle voice capture (Ctrl+Space)
CommandWhat it does
/planEnter plan mode (read-only tools only)
/modeSwitch approval mode: Default, Auto-edit, Force
/themeSwitch color theme: light, dark, or auto
/configOpen the settings surface
/setupRe-run the onboarding flow

/theme takes an argument: /theme light, /theme dark, or /theme auto. A missing or unrecognized argument defaults to auto. The theme changes on the next render frame; no restart is needed.

CommandWhat it does
/doctorCheck provider connectivity, API keys, and MCP server health
/replayInspect a recorded session trace
/helpShow keys and commands for the current surface

The engine has eight slash commands that work in all three run modes (TUI, REPL, and one-shot). They are intercepted before the engine loop sees the input. They are separate from the TUI command registry above.

CommandDescription
/helpPrint all commands with a one-line description
/agent [NAME]Show or set the active agent persona
/style [OPTION]Inject a style directive (for example terse)
/memory show|clearShow memory partitions or clear session memory
/plugin listList loaded plugins
/skill list|runBrowse and run skills
/clearClear the conversation history and screen
/exit / /quitEnd the session

@-references attach content to the next message you send. Where a / command acts on the engine, an @ token attaches something: a file, a directory tree, a symbol definition, a diff, a URL, a past session, or the last shell output.

When you type @ in the composer and continue typing, an autocomplete popup appears. It lists:

  • Filesystem entries (files and directories) that match the partial path, filtered through .gitignore and the secret denylist. Secret files (.env and similar credential files) are never offered, even if they are not git-ignored.
  • Static keyword completions: @diff, @url, @session, @output.

The popup shows up to 12 candidates. Directories are marked with a folder indicator and a trailing /. Selecting a directory entry and pressing Enter drills into that directory.

FormWhat it attaches
@path/to/fileThe file’s full contents
@path/to/dir/The directory tree (trailing / required)
@SymbolNameA function or type definition plus call sites, from the repomap symbol index
@diffThe working tree diff
@diff <ref>The diff between the working tree and a git ref
@url https://…A fetched, readable-text-extracted web page (http and https only)
@session <id>A past session as reference context
@outputThe last shell command’s stdout and stderr

Path tokens ending in / resolve as directories. Path tokens containing a separator, a . extension, or a leading . resolve as files. Bare identifiers without separators resolve as symbols.

Every resolved reference passes two guardrails before it is attached:

Size budget. Large directory trees report an estimated token cost. When a tree would exceed the DIR_TOKEN_WARN_BUDGET, the composer shows an oversized-directory warning and offers a names-only fallback before you send.

Secret denylist. .env and similar credential files are blocked outright. The block is surfaced as an explicit error, not a silent omission. This check runs at both autocomplete time (the popup never offers the file) and at resolution time (attaching it directly by path fails with a clear message).

.gitignore rules. Ignored paths are excluded from autocomplete results and from directory tree resolution. Attempting to attach an ignored path directly returns a GitIgnored error.