Slash Commands
Command Code ships with over 60 built-in slash commands covering sessions, context, permission modes, models, billing, and everything in between - and you can extend the set with your own custom commands, skills, and mod-added commands.
Type / at the start of the input to open the command menu:
- Filtering - as you type, rows are ranked by match quality: a command whose name starts with your query ranks highest, then commands containing it, then description matches. The list re-sorts on every keystroke.
- Exact-match highlighting - the input text stays plain while you type a partial name; it only turns accent-colored once it names a real command (a half-typed
/modstays plain,/modellights up). - Aliases on canonical rows - an alias is not a second menu row.
/newresolves to/cleareverywhere, and the single canonical row advertises it as/clear (new). Typing the alias still surfaces and ranks that row. - Navigation -
↑/↓move the selection,Enterruns the selected command,Tabor→inserts it into the input with a trailing space so you can type arguments,Esccloses the menu. - Dynamic rows - custom commands, mod commands, and skills load asynchronously; built-ins render first and the dynamic rows appear as discovery settles.
Every built-in command, grouped by area. Aliases are shown in parentheses on the canonical command; optional arguments in [brackets], alternatives separated by |.
| Command | Description |
|---|---|
/clear (/new) | Start a new session with empty context; previous stays on disk, resumable with /resume |
/resume (/sessions) | Resume a past conversation |
/rename [name] | Rename the current session |
/name [name] | Alias of /rename; bare /name shows the current name |
/fork [name] | Fork the conversation into a new session |
/clone | Clone the current branch into a new session and switch to it (never takes an argument) |
/tree | Browse the session tree and jump to any point in it |
/rewind | Restore to a previous checkpoint (press Esc twice) |
/session-file | Show the current session id and session file path |
/export [html|jsonl|md] or /export <path> | Export the session - a bare format keyword or a file path; HTML is the default format |
/share [gist [html|jsonl|md]] | /share gist posts a secret GitHub gist; bare /share is being rebuilt and points to /export |
/unshare | Stop sharing conversation |
/exit (/quit) | Exit Command Code |
/reload | Restart Command Code and resume this session (applies a staged update) |
/mods | List loaded mods and panes; /mods reload [name] hot-reloads, /mods open|close <pane> |
| Command | Description |
|---|---|
/compact | Compact the conversation history |
/compact-mode | Select a compact mode to compact sessions |
/context | Show context window usage and breakdown |
/memory | Manage Command Code memory |
/init | Initialize AGENTS.md for this project |
| Command | Description |
|---|---|
/mode [default|accept-edits|plan] | Show or switch the permission mode; bare /mode prints the current mode |
/mode:default | Switch to default mode (prompt before edits/commands) |
/mode:accept-edits | Switch to accept edits mode (accept edits automatically) |
/mode:plan | Switch to plan mode (read-only, no side effects) |
/plan [task] | Enter plan mode; /plan <task> plans that task |
/plans [name] | Browse, review, and annotate saved plans; bare /plans opens the browser |
/plan-review | Open this session's latest plan in review |
/goal <objective>|clear|status | Set an objective for the agent to work towards autonomously |
/todos | Manage the session todo list (needs the todos mod: cmd mods enable todos) |
/review [pr-number] | Review a pull request |
/pr-comments | Fetch all PR comments for current branch |
| Command | Description |
|---|---|
/model [id] | Switch between Command Code models - /model <id> applies directly, bare opens a picker. For a separate model while planning and after approving, see planning and implementation models |
/effort [level] | Set reasoning effort for the current model (levels depend on the model) |
/connect | Connect to AI providers. Command Code, BYOK providers and API keys |
/login | Log in to Command Code or a provider |
/logout | Log out of Command Code or a provider |
| Command | Description |
|---|---|
/skills | Browse and open agent skills |
/agents | Manage agent configurations |
/mcp | Manage MCP server connections |
/design [mode] | Design partner: audit, build, compose, and ship UI - bare /design browses modes |
/loop [interval] [task] | Run a task now, then repeat it on a fixed or self-paced schedule (details) |
/rc [mode|off|status] | Drive this session from Telegram or Discord (details) |
/import [claude|codex|cursor|pi|opencode|gemini] | Import your setup from another coding agent; bare /import imports from all sources |
/taste | Manage Taste learning and usage |
/learn-taste | Learn taste from sessions with other coding agents (Claude Code, Cursor, etc) |
/ide | Connect IDE to share your open file and selected lines |
/terminal-setup | Setup VSCode keybindings (only shown in the menu inside a VS Code terminal) |
| Command | Description |
|---|---|
/add-dir <directory> | Add directory to workspace context |
/worktree [name|list|remove <name>] | Create, list, or switch git worktrees |
| Command | Description |
|---|---|
/usage | Display credits, plan, and usage metrics |
/upgrade | Open billing page to upgrade your plan |
/extra | Buy extra usage at API cost, zero markup |
| Command | Description |
|---|---|
/help | Show available shortcuts |
/hotkeys | Show all keyboard shortcuts |
/config [query] | Search and change settings |
/theme [dark|light|auto] | Switch themes; auto matches your terminal background |
/status | Show comprehensive environment status |
/statusline [off|on|reset] | Configure Command Code's statusline UI (terminal only) |
/changelog [all] | See what's new in Command Code (all for the full history) |
/learn | Open the Command Code learn hub in your browser |
/update | Update Command Code to the latest version |
/feedback [title] (alias /issue) | Report a bug or share feedback; opens a prefilled GitHub issue |
/trace | Copy the current trace id; required for support debugging |
/copy | Copy the last response to the clipboard |
/model, /effort, and /theme each take an optional value (/model gpt-5, /effort high, /theme dark) that applies directly as a one-shot. But unlike other optional-value commands, running them bare doesn't perform a default action - it opens an interactive picker immediately. Bare /mode also runs immediately, printing the current mode and the available switches (/mode:default, /mode:accept-edits, /mode:plan - or press shift+tab to cycle).
/effort only opens its selector when the current model supports reasoning effort levels; otherwise it prints a notice that effort isn't supported for that model.
/theme offers three values. dark and light pin a palette; auto, the default, automatically detects your terminal's background color at startup (OSC 11, falling back to COLORFGBG) and uses light or dark to match. A terminal that won't report its background falls back to dark.
Some optional-argument commands do something useful with no argument instead of opening a picker: bare /import imports from all detected sources, bare /export exports in the default format, bare /goal (or /goal status) shows the current goal, bare /name shows the current session name, and bare /plan enters plan mode without a task.
Most commands are blocked mid-turn - mode flips, session switches, model changes, compaction, and anything that would race an active turn waits until the agent finishes. A deliberate set of read-only or local commands stays available while a turn is running:
/trace- capture the live trace id of the running turn (its main purpose)/session-file- read-only session facts/copy- clipboard only/todos(alsoctrl+x) - edits local todo state, most useful mid-turn while a plan is being driven (needs thetodosmod enabled)/statusline off,/statusline on,/statusline reset- a local display preference (bare/statuslineopens its editor once the turn ends)/exit//quit- always available/goal clear- stops the goal loop; the current step finishes, then the loop stops. Setting a new goal mid-turn is refused with a busy notice.
Most other commands - /clear, /mode, /plan, /model, /compact, /worktree, /resume, /login, and the like - report busy and ask you to wait for the current turn (or press Ctrl+C). (/review is an exception: it runs mid-turn.)
/goal <objective> sets an objective (up to a length limit) and arms an autonomous loop capped at a maximum number of turns. /goal status (or bare /goal) shows the active goal and progress; /goal clear clears it. /goal resume and /goal pause are reserved but not available yet.
/loop <interval> <task> runs the task now and repeats it on a fixed cadence such as 5m, 2h, 1d, or a trailing every 2 hours. /loop <task> runs it now and lets the agent pick each next delay, between one minute and one hour. Bare /loop runs the default maintenance task, which a .commandcode/loop.md file replaces. Esc cancels the conversation's loops. The /loop page has the normalization rules, loop.md, and resume behavior.
The status line is the row directly under the input. It stays visible while you type and steps aside only for the slash menu, the @ file list, the slash hint, and a pending Ctrl+C exit:
Bare /statusline slash command opens the statusline editor. Select items from the list to add to the statusline. An item with nothing to show right now says why in brackets beside its label, for example Git branch (not on a git branch), instead of showing a placeholder.
These items sit in the row, in the order you choose. Items marked off are unchecked by default:
| Item | Shows |
|---|---|
| Model | This session's model (off) |
| Model + reasoning | The model and its reasoning level, e.g. Opus 4.7 with high effort (off) |
| Reasoning level | The reasoning level alone, e.g. high effort (off) |
| Current directory | The working directory, e.g. ~/work/app (off) |
| Git branch | The checked-out branch, e.g. branch: main; re-read after each turn (off) |
| Session name | The session's name, from /rename or the generated title (off) |
| Version | The Command Code version, e.g. v1.77.0 (off) |
| Phase model | The planning or implementation model, while one is in charge; always at the right end of the row |
These items keep their own place under the input; you can only turn them on or off. All are on by default:
| Item | Controls |
|---|---|
| Permission mode | The accept-edits and plan mode badges. Bypass and dont-ask always show |
| IDE context | The IDE file or selection and the IDE connection indicator |
| Pull request | The open or merged PR badge for this branch, as a link |
| Taste learning | taste on or taste off (taste off (byok) when a BYOK session skips learning) |
| Background tasks | Running shells and monitors; press ↓ to manage them |
| Shortcut hints | ? for shortcuts and the paste hint. The stash badge shows whenever a prompt is stashed |
The Ctrl+C exit prompt, credit warnings, and update, share and taste notices always show.
| Key | Action |
|---|---|
↑ / ↓ | Move between items |
Space / Enter | Check or uncheck the focused item |
← / → | Move the focused item left or right in the row (only row items move; Phase model stays at the right end) |
Esc | Save your changes and close (just close if nothing changed; during a save, close at once; after another session's change, discard yours) |
Ctrl+C | Close without saving |
Unchecked items keep their place, so checking one again puts it back where it was. Nothing changes under the input until Esc saves the layout. If the write fails, the editor stays open with your changes, and Esc tries again; if another session changed the layout while you were editing, it never overwrites it: Enter reloads the saved version, Esc discards your changes. Closing the editor gives you back the prompt you were writing.
Output from mods (cmd.ui.setStatus) always appears after the built-ins, and before the phase model at the right end, in the order the mods loaded. Unchecking every built-in still shows mod output; /statusline off is the way to hide the whole row.
The editor lists only the built-in items. To show anything else in the row, such as a CI result, a ticket number or a count, use a mod that calls cmd.ui.setStatus(text). Each mod gets one segment: a new call replaces its text, and null removes it. You don't need to write the mod yourself; describe what you want and Command Code builds it:
Command Code writes something like this and saves it in ~/.commandcode/mods/changed-files.ts, where it loads in every session:
The next session shows it in the row:
To try a mod without installing it, run cmd --mod ./changed-files.ts; after editing an installed one, run /reload. Mod text can use ANSI colors and OSC 8 links; other escape codes are removed. To hide mod output but keep the built-ins, set legacy-mods to "enabled": false in config.json (see below). The UI surface section of the mods page has the full setStatus contract.
| Command | Effect |
|---|---|
/statusline | Open the editor |
/statusline off | Hide the whole row, mod output included. Your selection is kept, and the on/off-only items above are unaffected |
/statusline on | Show the row again with your saved selection, or the default one |
/statusline reset | Forget your layout and go back to the default, in the order above |
Your items always get exactly one line under the input, in the order you set. When they don't fit your terminal, the line is cut with … at the edge rather than wrapping or reordering. The phase model sits at the right end of that line when it fits beside it, otherwise at the right end of the line below.
The layout is saved in ~/.commandcode/config.json under statusline. You rarely need to edit it by hand:
items sets the order, except that phase-model always draws at the right end. enabled: false on an item unchecks it; enabled: false at the top level is /statusline off. An item missing from items is unchecked, except the on/off-only items (permission-mode, ide, pull-request, taste, background-tasks, hints), which stay on. Other ids: model-reasoning, reasoning, cwd, session-name, version. legacy-mods is where mod output goes; leave it out (or set "items": []) and mod output is hidden.
A layout saved by a newer version of Command Code is never overwritten: the row uses the default layout and the editor opens read-only, until you update or run /statusline reset. A statusline value that isn't valid is also left untouched and shown read-only; fix or remove the statusline key, or run /statusline reset. If config.json itself isn't valid JSON, nothing can save the layout, /statusline reset included, until you fix or remove that file.
The row doesn't watch the file. A hand edit, or a save from another Command Code window, shows up the next time you open /statusline, run /statusline off, on or reset, or restart.
Bare /rc opens the picker: platform, setup, permission mode. /rc default, /rc auto-accept and /rc yolo connect straight into a mode. /rc status reports what is on, /rc off disconnects, and /rc off clear also deletes the bot's own messages. /rc is refused when the model asks for it and when it arrives from the chat, so the bot cannot change its own token or allowlist. See /rc for setup and what the chat can send.
Custom slash commands let you save frequently used prompts as markdown files. Define a command once, then run it anytime with dynamic arguments.
The command name comes from the markdown filename (without the .md extension).
| Type | Location | Menu label | Scope |
|---|---|---|---|
| Project | .commandcode/commands/ | (project) | This project only |
| User | ~/.commandcode/commands/ | (user) | All your projects |
The file's full trimmed body is the prompt that runs; the slash menu shows its first meaningful line (skipping YAML frontmatter and markdown markers, truncated to ~80 chars) plus the location label.
Organize commands in subdirectories to any depth. The subdirectory appears in the description label but does not affect the command name:
| File Location | Command | Menu shows |
|---|---|---|
.commandcode/commands/frontend/component.md | /component | (project: frontend) |
~/.commandcode/commands/git/commit.md | /commit | (user: git) |
.commandcode/commands/simple.md | /simple | (project) |
Placeholders in the command body are replaced with your arguments in a single pass (substituted text is never re-scanned, so an argument containing $1 lands literally):
| Placeholder | Description |
|---|---|
$ARGUMENTS / $@ | All arguments as a single string (${ARGUMENTS} / ${@} work too) |
$1, $2, … $N | Positional arguments, 1-indexed (there is no $0); missing args → "" |
${1}, ${2}, … | Braced positional - safe directly next to other text (v${1}.0) |
${N:-default} | Nth argument, or default when missing/empty |
${@:-default} | All arguments, or default when none were provided |
${@:N} | Arguments from the Nth position to the end |
${@:N:L} | L arguments starting at the Nth position (clamped to what exists) |
Arguments split on whitespace, respecting single and double quotes:
Example (.commandcode/commands/commit.md):
Edge cases: an out-of-range slice (${@:9} with three args) expands to an empty string; an unrecognized ${...} expression (e.g. a literal ${HOME}) is left untouched so shell/env-style text survives; a template with no placeholders passes through unchanged.
When multiple sources define the same name, dispatch resolves in this order - first writer wins:
- Built-in commands (the full set, including any the menu hides)
- Mod commands (added by active mods)
- Custom commands (
.commandcode/commands/,~/.commandcode/commands/) - Skills
So a custom command can never override a built-in, and a skill shadowed by any of the above resolves to its owner. Shadowed skills still render in the menu with a - shadowed by /<name> note so you know they exist, and they run under the skill: namespace: /skill:<name> bypasses this whole ladder and only ever resolves to a skill. Lookup is case-insensitive (/Reload resolves to /reload).
Installed skills are invocable as /<skill-name> and appear in the menu with a [skill] badge. A skill's argument-hint frontmatter leads its menu description (e.g. /pr-desc [skill] <branch> - Generate a PR…), and skills marked user-invocable: false stay model-invocable but never appear in the / menu. Duplicate skill names dedupe with project taking precedence over global.
Active mods can register their own slash commands; they slot in between built-ins and custom commands in both the menu and dispatch. Discovery is fault-tolerant - a broken commands directory or unreadable skill never breaks the menu; each source just degrades to empty.
- Explore the CLI Reference for flags and subcommands
- Create your first custom command and try it out
- Join our Discord community for feedback, requests, and support.