Slash Commands
Slash commands: text vs native, config, and supported 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.
- Directives are only applied for ''authorized senders'' (channel allowlists/pairing plus ''commands.useAccessGroups'').
Unauthorized senders see directives treated as plain text.
There are also a few ''inline shortcuts'' (allowlisted/authorized senders only): ''/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: '{'
native: "auto",
nativeSkills: "auto",
text: true,
bash: false,
bashForegroundMs: 2000,
config: false,
debug: false,
restart: false,
useAccessGroups: true,
'}',
'}'- ''commands.text'' (default ''true'') 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''.
- ''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'', or ''channels.slack.commands.native'' to override per provider (bool or ''"auto"'').
- ''false'' clears 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'', or ''channels.slack.commands.nativeSkills'' to override per provider (bool or ''"auto"'').
- ''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).
- ''commands.config'' (default ''false'') enables ''/config'' (reads/writes ''openclaw.json'').
- ''commands.debug'' (default ''false'') enables ''/debug'' (runtime-only overrides).
- ''commands.useAccessGroups'' (default ''true'') 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"; ''detail'' shows 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; requires ''commands.config: true'')
- ''/debug show|set|unset|reset'' (runtime overrides, owner-only; requires ''commands.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 ''/tts'' still works.
- ''/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)
- ''/reset'' or ''/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 prefixed ''Reasoning:''; ''stream'' = Telegram draft only)
- ''/elevated on|off|ask|full'' (alias: ''/elev''; ''full'' skips exec approvals)
- ''/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>'' (send ''/exec'' to show current)
- ''/model <name>'' (alias: ''/models''; or ''/<alias>'' from ''agents.defaults.models.*.alias'')
- ''/queue <mode>'' (plus options like ''debounce:2s cap:25 drop:summarize''; send ''/queue'' to see current settings)
- ''/bash <command>'' (host-only; alias for ''! <command>''; requires ''commands.bash: true'' + ''tools.elevated'' allowlists)
Text-only:
- ''/compact [instructions]'' (see ''/concepts/compaction'')
- ''! <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)
Notes:
- 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 ''openclaw status --usage''.