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.
The three built-ins
Section titled “The three built-ins”| 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.
/clear
Section titled “/clear”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.
/compact
Section titled “/compact”Summarises the conversation so far and continues from the summary. Optionally say what to keep:
/compact focus on the auth refactor, drop the CSS debuggingOn 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 intercepts even when it is wrong
Section titled “/cron intercepts even when it is wrong”/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.
Skills and commands from disk
Section titled “Skills and commands from disk”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
/namethemselves, as the Claude Code CLI does. - Codex does not, so Kanna expands the command before sending it. A command
file becomes its body with
$ARGUMENTSand$1–$9filled in; a skill is sent as a pointer to itsSKILL.mdwith 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.