Skip to content

Slash commands

The composer’s / picker lists three kinds of thing: Kanna’s own built-in commands, and the Claude Code skills and slash commands it finds on disk.

Command Does
/clear Clear conversation history and free up context
/compact [instructions] Compact history, optionally focused on what you name
/cron … Schedule a recurring instruction

These are handled by Kanna, not forwarded to the model as text.

Typing one mid-turn queues it like any other message, so it runs when the current turn finishes rather than interrupting it.

Starts no turn at all. It drops the session token for every provider, stops the Codex process if one is running, and marks the transcript with a context-cleared divider.

Stopping the Codex process is not incidental — Codex reuses a live session for the same directory regardless of the token, so clearing the token alone would have no effect on the next turn.

Your transcript is not deleted. You keep reading it; the model starts fresh from the divider.

Summarises the conversation so far and continues from the summary. Optionally say what to keep:

/compact focus on the auth refactor, drop the CSS debugging

On Claude and OpenRouter the command goes to the CLI as-is. Codex has no compaction request of its own, so Kanna runs the summarisation itself and writes the result into the transcript in the same shape.

If the compaction errors, is cancelled, or comes back empty, nothing is committed — you keep the conversation you had.

You rarely need it: the Claude agent compacts on its own when the context window fills, and the meter in the composer shows how close you are. Kanna’s own automatic compaction is off by default so the two never race; KANNA_PROACTIVE_COMPACT=enabled turns it back on if you have disabled the CLI’s.

/cron is the deliberate exception to every rule above: any message whose first token is /cron is intercepted, valid or not.

Sending a mistyped schedule to the model as prompt text would silently arm nothing, and you would find out when the job never ran. So an invalid line produces an error card showing the line you typed, what is wrong with it, and — where the fix is unambiguous — a corrected command ready to send. Where it is not, the agent is asked to repair it.

See Cron Jobs for the grammar and schedules.

The picker also lists Claude Code skills and slash commands found on disk, including ones installed by plugins, so they are one keystroke away. They work on every provider:

  • Claude and OpenRouter resolve /name themselves, as the Claude Code CLI does.
  • Codex does not, so Kanna expands the command before sending it. A command file becomes its body with $ARGUMENTS and $1–$9 filled in; a skill is sent as a pointer to its SKILL.md with your arguments. The transcript still shows the line you typed, with a note that it was expanded.
  • Codex also gets a roster of your skills in its instructions, so it can pick one up on its own when it fits, the way Claude does.

Shell lines (!`cmd`) and @path references inside a command are not run during expansion. They are passed on for the agent to run or read with its own tools.

A project command named clear will not be reachable. Dispatch intercepts that name first, so it is dropped from the listing rather than shown and ignored. Rename it.