Slash commands
Commands are handled by the Gateway. Most commands must be sent as a standalone message that starts with/.
The host-only bash chat command uses ! <cmd> (with /bash <cmd> as an alias).
There are two related systems:
- Commands: standalone
/...messages. - Directives:
/think,/verbose,/reasoning,/elevated,/exec,/model,/queue.- 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.
/help, /commands, /status, /whoami (/id).
They run immediately, are stripped before the model sees the message, and the remaining text continues through the normal flow.
Config
commands.text(defaulttrue) enables parsing/...in chat messages.- On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams), text commands still work even if you set this to
false.
- On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams), text commands still work even if you set this to
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.
- Set
channels.discord.commands.native,channels.telegram.commands.native, orchannels.slack.commands.nativeto override per provider (bool or"auto"). falseclears previously registered commands on Discord/Telegram at startup. Slack commands are managed in the Slack app and are not removed automatically.
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, orchannels.slack.commands.nativeSkillsto override per provider (bool or"auto").
commands.bash(defaultfalse) enables! <cmd>to run host shell commands (/bash <cmd>is an alias; requirestools.elevatedallowlists).commands.bashForegroundMs(default2000) controls how long bash waits before switching to background mode (0backgrounds immediately).commands.config(defaultfalse) enables/config(reads/writesclawdia.json).commands.debug(defaultfalse) enables/debug(runtime-only overrides).commands.useAccessGroups(defaulttrue) enforces allowlists/policies for commands.
Command list
Text + native (when enabled):/help/commands/skill <name> [input](run a skill by name)/status(show current status; includes provider usage/quota for the current model provider when available)/allowlist(list/add/remove allowlist entries)/approve <id> allow-once|allow-always|deny(resolve exec approval prompts)/context [list|detail|json](explain “context”;detailshows per-file + per-tool + per-skill + system prompt size)/whoami(show your sender id; alias:/id)/subagents list|stop|log|info|send(inspect, stop, log, or message sub-agent runs for the current session)/config show|get|set|unset(persist config to disk, owner-only; requirescommands.config: true)/debug show|set|unset|reset(runtime overrides, owner-only; requirescommands.debug: true)/usage off|tokens|full|cost(per-response usage footer or local cost summary)/tts off|always|inbound|tagged|status|provider|limit|summary|audio(control TTS; see /tts)- Discord: native command is
/voice(Discord reserves/tts); text/ttsstill works.
- Discord: native command is
/stop/restart/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)/activation mention|always(groups only)/send on|off|inherit(owner-only)/resetor/new [model](optional model hint; remainder is passed through)/think <off|minimal|low|medium|high|xhigh>(dynamic choices by model/provider; aliases:/thinking,/t)/verbose on|full|off(alias:/v)/reasoning on|off|stream(alias:/reason; when on, sends a separate message prefixedReasoning:;stream= Telegram draft only)/elevated on|off|ask|full(alias:/elev;fullskips exec approvals)/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>(send/execto show current)/model <name>(alias:/models; or/<alias>fromagents.defaults.models.*.alias)/queue <mode>(plus options likedebounce:2s cap:25 drop:summarize; send/queueto see current settings)/bash <command>(host-only; alias for! <command>; requirescommands.bash: true+tools.elevatedallowlists)
/compact [instructions](see /concepts/compaction)! <command>(host-only; one at a time; use!poll+!stopfor long-running jobs)!poll(check output / status; accepts optionalsessionId;/bash pollalso works)!stop(stop the running bash job; accepts optionalsessionId;/bash stopalso works)
- Commands accept an optional
:between the command and args (e.g./think: high,/send: on,/help:). /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.- For full provider usage breakdown, use
clawdia status --usage. /allowlist add|removerequirescommands.config=trueand honors channelconfigWrites./usagecontrols the per-response usage footer;/usage costprints a local cost summary from Clawdia session logs./restartis disabled by default; setcommands.restart: trueto enable it./verboseis 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.- Fast path: command-only messages from allowlisted senders are handled immediately (bypass queue + model).
- Group mention gating: command-only messages from allowlisted senders bypass mention requirements.
- 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 /statustriggers a status reply, and the remaining text continues through the normal flow.
- Example:
- Currently:
/help,/commands,/status,/whoami(/id). - Unauthorized command-only messages are silently ignored, and inline
/...tokens are treated as plain text. - Skill commands:
user-invocableskills are exposed as slash commands. Names are sanitized toa-z0-9_(max 32 chars); collisions get numeric suffixes (e.g._2)./skill <name> [input]runs a skill by name (useful when native command limits prevent per-skill commands).- By default, skill commands are forwarded to the model as a normal request.
- Skills may optionally declare
command-dispatch: toolto route the command directly to a tool (deterministic, no model). - Example:
/prose(OpenProse plugin) — see OpenProse.
- 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.
Usage surfaces (what shows where)
- Provider usage/quota (example: “Claude 80% left”) shows up in
/statusfor the current model provider when usage tracking is enabled. - Per-response tokens/cost is controlled by
/usage off|tokens|full(appended to normal replies). /model statusis about models/auth/endpoints, not usage.
Model selection (/model)
/model is implemented as a directive.
Examples:
/modeland/model listshow a compact, numbered picker (model family + available providers)./model <#>selects from that picker (and prefers the current provider when possible)./model statusshows the detailed view, including configured provider endpoint (baseUrl) and API mode (api) when available.
Debug overrides
/debug lets you set runtime-only config overrides (memory, not disk). Owner-only. Disabled by default; enable with commands.debug: true.
Examples:
- Overrides apply immediately to new config reads, but do not write to
clawdia.json. - Use
/debug resetto clear all overrides and return to the on-disk config.
Config updates
/config writes to your on-disk config (clawdia.json). Owner-only. Disabled by default; enable with commands.config: true.
Examples:
- Config is validated before write; invalid changes are rejected.
/configupdates persist across restarts.
Surface notes
- Text commands run in the normal chat session (DMs share
main, groups have their own session). - Native commands use isolated sessions:
- Discord:
agent:<agentId>:discord:slash:<userId> - Slack:
agent:<agentId>:slack:slash:<userId>(prefix configurable viachannels.slack.slashCommand.sessionPrefix) - Telegram:
telegram:slash:<userId>(targets the chat session viaCommandTargetSessionKey)
- Discord:
/stoptargets the active chat session so it can abort the current run.- Slack:
channels.slack.slashCommandis still supported for a single/clawd-style command. If you enablecommands.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.
