Slash Commands
Type / in the input to filter the list as you type. Enter runs the highlighted command.
The list also opens while the agent is working. There, Esc closes the list first, and
only a second Esc cancels the run. The list stays closed while a permission prompt is
waiting for your answer.
The filter is fuzzy: it matches the tail of a command or skill name, a subsequence of it, or a close
typo, so you rarely need to type a name exactly. /rse finds /resume, and typing /simplifyer
still lines up the simplifier in /code-simplifier. Built-ins, plugin commands, and skills all
join the same list, ranked by how closely they match the start of the name. The first one or two
characters match strictly as a prefix, so a barely-started buffer stays tight instead of surfacing
every name that merely contains those letters.
Installed skills from every scope (Skills: project, plugin, and user ~/.jan/skills) join the same popup: typing /deploy matches a skill named deploy (magenta row, alongside the cyan commands), Tab completes it, and Enter tells the agent to follow the skill. Disabled skills (via [skills].enabled) are not offered, and neither are user-invocable: false skills - those stay agent-invoked only.
Skills accept arguments, and there are two ways to invoke one:
/deploy staging- short form; arguments after the name are passed to the skill. If the name collides with a built-in command, the command wins./skill:deploy staging- explicit form, never collides with a command, and also works mid-prompt:fix the auth flow /skill:deploy hardenruns the skill with the surrounding prose as its arguments.
Either form loads the skill's full instructions into the conversation (no separate fetch step), announces the skill's folder so bundled files resolve relative paths, and renders one compact [skill:deploy] row in the transcript.
Session
| Command | Description |
|---|---|
/new | Start a new session |
/clear | Clear the conversation |
/threads | List saved threads for this project |
/resume [id] | Resume a thread. Bare: pick interactively |
/fork | Branch this session at a past message into a new thread, keeping this one |
/tree | Saved threads as a fork tree. Enter resumes one |
/worktree | The dedicated checkout this session works in, and what changed there |
/quit | Exit |
See Sessions.
Working
| Command | Description |
|---|---|
/goal [condition|clear] | Keep working until a condition is met. Bare: status |
/plan [exit|text] | Enter read-only plan mode, optionally with a first message |
/todo [add [phase|] text | clear] | Open the todo editor, append an item, or drop all |
/compact | Summarize older turns to free up context |
/context | Show what is filling the context window, by category. Opens a readout docked above the input, live while the turn keeps running; Esc or q closes it |
/usage [session|run|account|daily|requests|limits|<execution-id>] | Bare: an overview of both answers -- this session's estimate over your account's recorded spend, each labelled with its source and never added together. The session half draws immediately; the account half fills in when the read lands, or says why it could not. session shows the local estimate alone: total tokens and estimated cost, then the costliest models behind it, priced from what the provider publishes (a model it publishes no price for is listed as such rather than counted as free); m expands the model list past the top few. The other views read what the provider actually recorded, each leading with the figure it was opened for -- account spend, the newest day, whether spending is allowed -- with breakdowns folded behind the same m. Reported amounts print exactly as the provider sent them, so they never read as a local estimate. Same docked readout as /context, and only one is open at a time; the input field is inactive while it is up |
/cancel [N] | Cancel queued messages. Bare: all, or an index |
/agents | Inspect this session's subagents, running and finished. Enter opens one's run, drawn like the conversation (PgUp/PgDn to scroll); m messages it, x stops it |
/shells (alias /jobs) | Inspect background shell commands the agent left running: one • command row each, with how long it has run; x stops the selected one |
/stop | Stop every background shell command at once |
/monitors | Inspect the monitors watching for a condition: id, name, polls so far and script; x stops the selected one |
/find <term> | Search the whole transcript (case-insensitive) and jump to the nearest match, unfolding it if needed. A term that wraps across two lines is still found and highlighted on both, and the match count does not change when you resize the window. The exception is text a narrow window lays out differently from how it was written, such as a table row whose cells wrap, or a label cut short with …: there only what is on screen is searched, so a match inside it can come and go with the width. Enter / Shift+Enter step to the next / previous match, wrapping at the ends, while the input is empty (they type nothing, so the start of your next message is never eaten); Esc or the next message clears it. A miss is reported in the footer |
See Run modes, Goals and todos, and Context and compaction.
Setup
| Command | Description |
|---|---|
/model [id] | Switch model. Bare: pick interactively. Opening the picker re-lists each provider's models once per session; Ctrl+R inside it re-lists them again on demand |
/effort [low|medium|high] | Set reasoning effort. Bare: show current; low is faster, high thinks deeper |
/mcp | List, toggle, add, edit, and remove MCP servers; Enter opens a server's detail screen, where you can list its tools and sign in to it |
/plugin [list|install <spec>|remove <name>|search [query]|setup [name]] | Install and manage plugins. Installation opens setup automatically: masked API-key entry, then confirmation to enable declared MCP servers and sign in when required. Bare setup opens a single-plugin picker; setup <name> resumes that plugin directly without manual MCP configuration or restarting Jan |
/skills | List every skill Jan can see from this project, with its scope (project, plugin, user, built-in), invocation flags, and whether it is disabled. A skill hidden by a same-named higher-precedence one is marked shadowed by <scope> |
/reload [config|plugin|skills|system-prompt] | Re-read on-disk state into the running session without a restart (bare: all). config re-applies the project's agent.toml limits - context_window, compaction_ratio, compaction_reserve_tokens, max_tokens, send_reasoning, [budget].max_tokens - to the next run and lists what changed; the model, [tools], [provider] and [budget].max_usd still need a restart. plugin/skills re-scan and rebuild the catalog, reporting added/removed/changed entries. system-prompt re-reads the project instructions (AGENTS.md, or a legacy JAN.md where a directory has one), which apply on the next run |
/login | Sign in to Tokamak and save the API key |
/config [what you want] | View provider config (~/.jan/config.toml). With words, it is /vibe-setting |
/terminal-setup | Configure this terminal so Shift+Enter inserts a newline and, on macOS, Option+Delete deletes a word. Writes the terminal's own config where it can (VS Code, kitty, Ghostty, tmux) and prints the manual step where it cannot. Idempotent |
/settings [what you want] | With words (other than the max_parallel_subagents N shortcut), it is /vibe-setting. Bare, it opens the menu to edit settings in an interactive menu - the project's agent.toml ([agent] knobs context_window, compaction_ratio, compaction_reserve_tokens, max_tokens, max_parallel_subagents, [budget] limits, the [tools] / [skills] toggles) and user-wide ~/.jan/config.toml keys such as ask_timeout_secs in the one list (Enter edits a row, x resets to default, Esc cancels, clearing the field unsets). The leading providers row opens a manager for OpenAI-compatible providers in ~/.jan/config.toml: a adds, Enter edits, d twice deletes. The subagents row lists each subagent with its model; Enter picks one from the model picker (the smol and inherit roles included) and x clears the override. The smol_model row opens the model picker too (see Subagents). max_parallel_subagents N works as a one-shot shortcut. Writes apply on the next session (or after /reload config for the [agent]/[budget] limits) |
/vibe-setting <what you want> | Say what you want in plain words and the agent proposes the settings changes that get it. /settings <words> and /config <words> do the same. See below |
/vibe-setting
/vibe-setting I work on huge repos with Opus, stop compacting so often and show me its thinking
The session's model receives the /settings keys (name, file, type, default, current value, what
it does) and your sentence, in one request of its own. The conversation is not included, and
nothing is added to it. The model answers with a list of changes. Jan checks each one with the
same rules /settings uses, then shows a diff:
agent.toml (this project) context_window 128000 -> 1000000 Opus has a 1M window compaction_ratio 0.8 -> 0.9 compact later show_reasoning default (false) -> trueApply? [y/N]
Nothing is written until you press y. Enter, n or Esc
cancels. Accepted changes go through the /settings writer, and the note that follows says when
each one applies:
| Keys | Applies |
|---|---|
context_window, compaction_ratio, compaction_reserve_tokens, max_tokens, send_reasoning, budget.max_tokens | After /reload config, from the next run |
Everything else (max_parallel_subagents, tools.default, show_reasoning, ...) | When Jan restarts |
- It only changes
/settingskeys. The model, providers, API keys, MCP servers and skills are out of scope; when a request needs one, the reply names the command to use (/model,/login, ...). - It never touches credentials.
claude_code_aliasis not offered. - A change that loosens tool permissions (
tools.defaulttowardallow) needsyestyped out, not a single key. - A key it doesn't know, or a value outside its range, is listed as refused and never written.
- When the request is ambiguous ("make it faster"), it asks a question instead of guessing. Nothing is written.
It runs only while the agent is idle.
See Providers, MCP, Plugins, and Keybindings.
Other
| Command | Description |
|---|---|
/help | Show available commands and keyboard shortcuts |
/update | Install the latest published build. Takes effect on restart |
Bare /config is read-only. To change providers, use jan config set from the shell - see
Providers.