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
| Placeholder | Replaced 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
- User invokes
/review(or any custom command) - Bot checks an active session exists (auto-starts in the active repo if needed)
- Bot sends the
prompttext to Claude Code (with{{args}}substituted) - 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.