2026-01-06 20:45:40 +00:00
---
summary: "Slash commands: text vs native, config, and supported commands"
read_when:
- Using or configuring chat commands
- Debugging command routing or permissions
---
# Slash commands
2026-01-12 06:38:16 +00:00
Commands are handled by the Gateway. Most commands must be sent as a **standalone** message that starts with `/` .
2026-01-12 15:05:01 +05:30
The host-only bash chat command uses `! <cmd>` (with `/bash <cmd>` as an alias).
2026-01-08 22:57:08 +01:00
2026-01-12 06:38:16 +00:00
There are two related systems:
- **Commands**: standalone `/...` messages.
2026-01-18 06:11:38 +00:00
- **Directives**: `/think` , `/verbose` , `/reasoning` , `/elevated` , `/exec` , `/model` , `/queue` .
2026-01-12 06:38:16 +00:00
- Directives are stripped from the message before the model sees it.
- In normal chat messages (not directive-only), they are treated as “inline hints” and do **not** persist session settings.
- In directive-only messages (the message contains only directives), they persist to the session and reply with an acknowledgement.
2026-01-18 05:35:22 +00:00
There are also a few **inline shortcuts** (allowlisted/authorized senders only): `/help` , `/commands` , `/status` , `/whoami` (`/id` ).
2026-01-12 06:38:16 +00:00
They run immediately, are stripped before the model sees the message, and the remaining text continues through the normal flow.
2026-01-06 20:45:40 +00:00
## Config
```json5
{
commands: {
2026-01-12 21:49:44 +00:00
native: "auto",
2026-01-16 20:11:01 +00:00
nativeSkills: "auto",
2026-01-06 20:45:40 +00:00
text: true,
2026-01-12 15:05:01 +05:30
bash: false,
bashForegroundMs: 2000,
2026-01-11 02:17:10 +01:00
config: false,
debug: false,
2026-01-09 05:49:11 +00:00
restart: false,
2026-01-06 20:45:40 +00:00
useAccessGroups: true
}
}
```
- `commands.text` (default `true` ) enables parsing `/...` in chat messages.
2026-01-11 02:44:32 +00:00
- On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/MS Teams), text commands still work even if you set this to `false` .
2026-01-12 21:49:44 +00:00
- `commands.native` (default `"auto"` ) registers native commands.
- Auto: on for Discord/Telegram; off for Slack (until you add slash commands); ignored for providers without native support.
2026-01-13 06:16:43 +00:00
- Set `channels.discord.commands.native` , `channels.telegram.commands.native` , or `channels.slack.commands.native` to override per provider (bool or `"auto"` ).
2026-01-12 21:49:44 +00:00
- `false` clears previously registered commands on Discord/Telegram at startup. Slack commands are managed in the Slack app and are not removed automatically.
2026-01-16 20:11:01 +00:00
- `commands.nativeSkills` (default `"auto"` ) registers **skill** commands natively when supported.
- Auto: on for Discord/Telegram; off for Slack (Slack requires creating a slash command per skill).
- Set `channels.discord.commands.nativeSkills` , `channels.telegram.commands.nativeSkills` , or `channels.slack.commands.nativeSkills` to override per provider (bool or `"auto"` ).
2026-01-12 15:05:01 +05:30
- `commands.bash` (default `false` ) enables `! <cmd>` to run host shell commands (`/bash <cmd>` is an alias; requires `tools.elevated` allowlists).
- `commands.bashForegroundMs` (default `2000` ) controls how long bash waits before switching to background mode (`0` backgrounds immediately).
2026-01-11 02:17:10 +01:00
- `commands.config` (default `false` ) enables `/config` (reads/writes `clawdbot.json` ).
- `commands.debug` (default `false` ) enables `/debug` (runtime-only overrides).
2026-01-06 20:45:40 +00:00
- `commands.useAccessGroups` (default `true` ) enforces allowlists/policies for commands.
## Command list
Text + native (when enabled):
- `/help`
2026-01-08 16:02:54 +01:00
- `/commands`
2026-01-20 13:19:55 +00:00
- `/skill <name> [input]` (run a skill by name)
2026-01-17 04:54:16 +00:00
- `/status` (show current status; includes provider usage/quota for the current model provider when available)
2026-01-21 05:31:07 +00:00
- `/allowlist` (list/add/remove allowlist entries)
2026-01-24 12:56:40 -08:00
- `/approve <id> allow-once|allow-always|deny` (resolve exec approval prompts)
2026-01-15 01:06:19 +00:00
- `/context [list|detail|json]` (explain “context”; `detail` shows per-file + per-tool + per-skill + system prompt size)
2026-01-11 11:45:25 +00:00
- `/whoami` (show your sender id; alias: `/id` )
2026-01-18 04:44:52 +00:00
- `/subagents list|stop|log|info|send` (inspect, stop, log, or message sub-agent runs for the current session)
2026-01-11 02:17:10 +01:00
- `/config show|get|set|unset` (persist config to disk, owner-only; requires `commands.config: true` )
- `/debug show|set|unset|reset` (runtime overrides, owner-only; requires `commands.debug: true` )
2026-01-19 00:04:58 +00:00
- `/usage off|tokens|full|cost` (per-response usage footer or local cost summary)
2026-01-24 09:40:18 +00:00
- `/tts on|off|status|provider|limit|summary|audio` (control TTS; see [/tts ](/tts ))
2026-01-24 09:58:06 +00:00
- Discord: native command is `/voice` (Discord reserves `/tts` ); text `/tts` still works.
2026-01-06 23:05:05 +00:00
- `/stop`
2026-01-06 20:45:40 +00:00
- `/restart`
2026-01-15 05:25:35 +00:00
- `/dock-telegram` (alias: `/dock_telegram` ) (switch replies to Telegram)
- `/dock-discord` (alias: `/dock_discord` ) (switch replies to Discord)
- `/dock-slack` (alias: `/dock_slack` ) (switch replies to Slack)
2026-01-06 20:45:40 +00:00
- `/activation mention|always` (groups only)
- `/send on|off|inherit` (owner-only)
2026-01-20 14:28:53 +00:00
- `/reset` or `/new [model]` (optional model hint; remainder is passed through)
2026-01-15 01:13:36 -06:00
- `/think <off|minimal|low|medium|high|xhigh>` (dynamic choices by model/provider; aliases: `/thinking` , `/t` )
2026-01-17 05:33:27 +00:00
- `/verbose on|full|off` (alias: `/v` )
2026-01-10 00:53:19 +01:00
- `/reasoning on|off|stream` (alias: `/reason` ; when on, sends a separate message prefixed `Reasoning:` ; `stream` = Telegram draft only)
2026-01-22 05:32:13 +00:00
- `/elevated on|off|ask|full` (alias: `/elev` ; `full` skips exec approvals)
2026-01-18 06:11:38 +00:00
- `/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>` (send `/exec` to show current)
2026-01-09 17:14:35 +01:00
- `/model <name>` (alias: `/models` ; or `/<alias>` from `agents.defaults.models.*.alias` )
2026-01-08 03:40:39 +01:00
- `/queue <mode>` (plus options like `debounce:2s cap:25 drop:summarize` ; send `/queue` to see current settings)
2026-01-12 15:05:01 +05:30
- `/bash <command>` (host-only; alias for `! <command>` ; requires `commands.bash: true` + `tools.elevated` allowlists)
2026-01-06 20:45:40 +00:00
Text-only:
2026-01-07 18:12:17 +01:00
- `/compact [instructions]` (see [/concepts/compaction ](/concepts/compaction ))
2026-01-12 15:05:01 +05:30
- `! <command>` (host-only; one at a time; use `!poll` + `!stop` for long-running jobs)
- `!poll` (check output / status; accepts optional `sessionId` ; `/bash poll` also works)
- `!stop` (stop the running bash job; accepts optional `sessionId` ; `/bash stop` also works)
2026-01-06 20:45:40 +00:00
2026-01-08 03:22:14 +01:00
Notes:
- Commands accept an optional `:` between the command and args (e.g. `/think: high` , `/send: on` , `/help:` ).
2026-01-20 14:28:53 +00:00
- `/new <model>` accepts a model alias, `provider/model` , or a provider name (fuzzy match); if no match, the text is treated as the message body.
2026-01-18 05:35:22 +00:00
- For full provider usage breakdown, use `clawdbot status --usage` .
2026-01-21 05:31:07 +00:00
- `/allowlist add|remove` requires `commands.config=true` and honors channel `configWrites` .
2026-01-19 00:04:58 +00:00
- `/usage` controls the per-response usage footer; `/usage cost` prints a local cost summary from Clawdbot session logs.
2026-01-09 05:49:11 +00:00
- `/restart` is disabled by default; set `commands.restart: true` to enable it.
2026-01-09 02:07:33 +01:00
- `/verbose` is meant for debugging and extra visibility; keep it **off** in normal use.
- `/reasoning` (and `/verbose` ) are risky in group settings: they may reveal internal reasoning or tool output you did not intend to expose. Prefer leaving them off, especially in group chats.
2026-01-12 06:10:17 +00:00
- **Fast path:** command-only messages from allowlisted senders are handled immediately (bypass queue + model).
2026-01-15 07:53:12 +00:00
- **Group mention gating:** command-only messages from allowlisted senders bypass mention requirements.
2026-01-15 01:06:19 +00:00
- **Inline shortcuts (allowlisted senders only):** certain commands also work when embedded in a normal message and are stripped before the model sees the remaining text.
- Example: `hey /status` triggers a status reply, and the remaining text continues through the normal flow.
2026-01-18 05:35:22 +00:00
- Currently: `/help` , `/commands` , `/status` , `/whoami` (`/id` ).
2026-01-12 06:38:16 +00:00
- Unauthorized command-only messages are silently ignored, and inline `/...` tokens are treated as plain text.
2026-01-16 12:10:20 +00:00
- **Skill commands:** `user-invocable` skills are exposed as slash commands. Names are sanitized to `a-z0-9_` (max 32 chars); collisions get numeric suffixes (e.g. `_2` ).
2026-01-20 13:19:55 +00:00
- `/skill <name> [input]` runs a skill by name (useful when native command limits prevent per-skill commands).
2026-01-19 13:11:25 +01:00
- By default, skill commands are forwarded to the model as a normal request.
- Skills may optionally declare `command-dispatch: tool` to route the command directly to a tool (deterministic, no model).
2026-01-23 00:49:32 +00:00
- Example: `/prose` (OpenProse plugin) — see [OpenProse ](/prose ).
2026-01-15 01:13:36 -06:00
- **Native command arguments:** Discord uses autocomplete for dynamic options (and button menus when you omit required args). Telegram and Slack show a button menu when a command supports choices and you omit the arg.
2026-01-12 06:38:16 +00:00
2026-01-18 05:35:22 +00:00
## Usage surfaces (what shows where)
2026-01-12 06:53:40 +00:00
2026-01-17 04:54:16 +00:00
- **Provider usage/quota** (example: “Claude 80% left”) shows up in `/status` for the current model provider when usage tracking is enabled.
2026-01-18 05:35:22 +00:00
- **Per-response tokens/cost** is controlled by `/usage off|tokens|full` (appended to normal replies).
2026-01-12 06:53:40 +00:00
- `/model status` is about **models/auth/endpoints** , not usage.
2026-01-12 06:38:16 +00:00
## Model selection (`/model`)
`/model` is implemented as a directive.
Examples:
```
/model
/model list
/model 3
/model openai/gpt-5.2
/model opus@anthropic:claude -cli
/model status
```
Notes:
- `/model` and `/model list` show a compact, numbered picker (model family + available providers).
- `/model <#>` selects from that picker (and prefers the current provider when possible).
- `/model status` shows the detailed view, including configured provider endpoint (`baseUrl` ) and API mode (`api` ) when available.
2026-01-08 03:22:14 +01:00
2026-01-09 16:38:52 +01:00
## Debug overrides
2026-01-11 02:17:10 +01:00
`/debug` lets you set **runtime-only** config overrides (memory, not disk). Owner-only. Disabled by default; enable with `commands.debug: true` .
2026-01-09 16:38:52 +01:00
Examples:
```
/debug show
/debug set messages.responsePrefix="[clawdbot]"
2026-01-13 06:16:43 +00:00
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
2026-01-09 16:38:52 +01:00
/debug unset messages.responsePrefix
/debug reset
```
Notes:
- Overrides apply immediately to new config reads, but do **not** write to `clawdbot.json` .
- Use `/debug reset` to clear all overrides and return to the on-disk config.
2026-01-10 03:00:24 +01:00
## Config updates
2026-01-11 02:17:10 +01:00
`/config` writes to your on-disk config (`clawdbot.json` ). Owner-only. Disabled by default; enable with `commands.config: true` .
2026-01-10 03:00:24 +01:00
Examples:
```
/config show
/config show messages.responsePrefix
2026-01-10 03:02:39 +01:00
/config get messages.responsePrefix
2026-01-10 03:00:24 +01:00
/config set messages.responsePrefix="[clawdbot]"
/config unset messages.responsePrefix
```
Notes:
- Config is validated before write; invalid changes are rejected.
- `/config` updates persist across restarts.
2026-01-06 20:45:40 +00:00
## Surface notes
- **Text commands** run in the normal chat session (DMs share `main` , groups have their own session).
2026-01-11 02:44:32 +00:00
- **Native commands** use isolated sessions:
- Discord: `agent:<agentId>:discord:slash:<userId>`
2026-01-13 06:16:43 +00:00
- Slack: `agent:<agentId>:slack:slash:<userId>` (prefix configurable via `channels.slack.slashCommand.sessionPrefix` )
2026-01-11 02:44:32 +00:00
- Telegram: `telegram:slash:<userId>` (targets the chat session via `CommandTargetSessionKey` )
2026-01-06 23:05:05 +00:00
- **`/stop` ** targets the active chat session so it can abort the current run.
2026-01-15 01:13:36 -06:00
- **Slack:** `channels.slack.slashCommand` is still supported for a single `/clawd` -style command. If you enable `commands.native` , you must create one Slack slash command per built-in command (same names as `/help` ). Command argument menus for Slack are delivered as ephemeral Block Kit buttons.