Skip to content

Custom Commands

You can define your own slash commands in commands.json. Each command has a prompt that is sent to Claude Code when the user invokes it.

Example

[
{
"command": "review",
"description": "Review the current diff",
"prompt": "Review the current uncommitted changes. Check for: bugs, security issues, performance problems, and code quality. Be specific about line numbers and suggest concrete fixes."
},
{
"command": "explain",
"description": "Explain selected code",
"prompt": "Explain the following code in detail, covering what it does, how it works, and any potential issues:\n\n{{args}}"
}
]

Placeholders

PlaceholderReplaced with
{{args}}Everything the user typed after the command name

If {{args}} is included and the user types nothing after the command, it is replaced with an empty string.

Conflict detection

Commands that share a name with built-in commands (start, end, status, help, workspace, repo) are rejected on startup. Choose unique names.

Session requirement

Custom commands require an active repo. If no repo is selected, the bot prompts the user to clone one first.

Lifecycle

  1. User invokes /review (or any custom command)
  2. Bot checks an active session exists (auto-starts in the active repo if needed)
  3. Bot sends the prompt text to Claude Code (with {{args}} substituted)
  4. Claude responds in the chat as usual

Commands do not interrupt an in-progress session — they queue the prompt while Claude finishes its current work.