29 KiB
summary, read_when, title, sidebarTitle
| summary | read_when | title | sidebarTitle | ||
|---|---|---|---|---|---|
| Slash commands: text vs native, config, and supported commands |
|
Slash commands | 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).
When a conversation or thread is bound to an ACP session, normal follow-up text routes to that ACP harness. Gateway management commands still stay local: /acp ... always reaches the OpenClaw ACP command handler, and /status plus /unfocus stay local whenever command handling is enabled for the surface.
There are two related systems:
Standalone `/...` messages. `/think`, `/fast`, `/verbose`, `/trace`, `/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**. If `commands.allowFrom` is set, it is the only allowlist used; otherwise authorization comes from channel allowlists/pairing plus `commands.useAccessGroups`. Unauthorized senders see directives treated as plain text.
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,
mcp: false,
plugins: false,
debug: false,
restart: true,
ownerAllowFrom: ["discord:123456789012345678"],
ownerDisplay: "raw",
ownerDisplaySecret: "${OWNER_ID_HASH_SECRET}",
allowFrom: {
"*": ["user1"],
discord: ["user:123"],
},
useAccessGroups: true,
},
}
Command list
Current source-of-truth:
- core built-ins come from
src/auto-reply/commands-registry.shared.ts - generated dock commands come from
src/auto-reply/commands-registry.data.ts - plugin commands come from plugin
registerCommand()calls - actual availability on your gateway still depends on config flags, channel surface, and installed/enabled plugins
Core built-in commands
- `/new [model]` starts a new session; `/reset` is the reset alias. - Control UI intercepts typed `/new` to create and switch to a fresh dashboard session; typed `/reset` still runs the Gateway's in-place reset. - `/reset soft [message]` keeps the current transcript, drops reused CLI backend session ids, and reruns startup/system-prompt loading in-place. - `/compact [instructions]` compacts the session context. See [Compaction](/concepts/compaction). - `/stop` aborts the current run. - `/session idle ` and `/session max-age ` manage thread-binding expiry. - `/export-session [path]` exports the current session to HTML. Alias: `/export`. - `/export-trajectory [path]` asks for exec approval, then exports a JSONL [trajectory bundle](/tools/trajectory) for the current session. Use it when you need the prompt, tool, and transcript timeline for one OpenClaw session. In group chats, the approval prompt and export result go to the owner privately. Alias: `/trajectory`. - `/think ` sets the thinking level. Options come from the active model's provider profile; common levels are `off`, `minimal`, `low`, `medium`, and `high`, with custom levels such as `xhigh`, `adaptive`, `max`, or binary `on` only where supported. Aliases: `/thinking`, `/t`. - `/verbose on|off|full` toggles verbose output. Alias: `/v`. - `/trace on|off` toggles plugin trace output for the current session. - `/fast [status|on|off]` shows or sets fast mode. - `/reasoning [on|off|stream]` toggles reasoning visibility. Alias: `/reason`. - `/elevated [on|off|ask|full]` toggles elevated mode. Alias: `/elev`. - `/exec host= security= ask= node=` shows or sets exec defaults. - `/model [name|#|status]` shows or sets the model. - `/models [provider] [page] [limit=|size=|all]` lists configured/auth-available providers or models for a provider; add `all` to browse that provider's full catalog. - `/queue ` manages queue behavior (`steer`, legacy `queue`, `followup`, `collect`, `steer-backlog`, `interrupt`) plus options like `debounce:0.5s cap:25 drop:summarize`; `/queue default` or `/queue reset` clears the session override. See [Command queue](/concepts/queue) and [Steering queue](/concepts/queue-steering). - `/steer ` injects guidance into the active run for the current session, independent of `/queue` mode. It does not start a new run when the session is idle. Alias: `/tell`. See [Steer](/tools/steer). - `/help` shows the short help summary. - `/commands` shows the generated command catalog. - `/tools [compact|verbose]` shows what the current agent can use right now. - `/status` shows execution/runtime status, including `Execution`/`Runtime` labels and provider usage/quota when available. - `/diagnostics [note]` is the owner-only support-report flow for Gateway bugs and Codex harness runs. It asks for explicit exec approval every time before running `openclaw gateway diagnostics export --json`; do not approve diagnostics with an allow-all rule. After approval, it sends a pasteable report with the local bundle path, manifest summary, privacy notes, and relevant session ids. In group chats, the approval prompt and report go to the owner privately. When the active session uses the OpenAI Codex harness, the same approval also sends relevant Codex feedback to OpenAI servers and the completed reply lists the OpenClaw session ids, Codex thread ids, and `codex resume ` commands. See [Diagnostics Export](/gateway/diagnostics). - `/crestodian ` runs the Crestodian setup and repair helper from an owner DM. - `/tasks` lists active/recent background tasks for the current session. - `/context [list|detail|json]` explains how context is assembled. - `/whoami` shows your sender id. Alias: `/id`. - `/usage off|tokens|full|cost` controls the per-response usage footer or prints a local cost summary. - `/skill [input]` runs a skill by name. - `/allowlist [list|add|remove] ...` manages allowlist entries. Text-only. - `/approve ` resolves exec approval prompts. - `/btw ` asks a side question without changing future session context. Alias: `/side`. See [BTW](/tools/btw). - `/subagents list|kill|log|info|send|steer|spawn` manages sub-agent runs for the current session. - `/acp spawn|cancel|steer|close|sessions|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|help` manages ACP sessions and runtime options. - `/focus ` binds the current Discord thread or Telegram topic/conversation to a session target. - `/unfocus` removes the current binding. - `/agents` lists thread-bound agents for the current session. - `/kill ` aborts one or all running sub-agents. - `/subagents steer ` sends steering to a running sub-agent. See [Steer](/tools/steer). - `/config show|get|set|unset` reads or writes `openclaw.json`. Owner-only. Requires `commands.config: true`. - `/mcp show|get|set|unset` reads or writes OpenClaw-managed MCP server config under `mcp.servers`. Owner-only. Requires `commands.mcp: true`. - `/plugins list|inspect|show|get|install|enable|disable` inspects or mutates plugin state. `/plugin` is an alias. Owner-only for writes. Requires `commands.plugins: true`. - `/debug show|set|unset|reset` manages runtime-only config overrides. Owner-only. Requires `commands.debug: true`. - `/restart` restarts OpenClaw when enabled. Default: enabled; set `commands.restart: false` to disable it. - `/send on|off|inherit` sets send policy. Owner-only. - `/tts on|off|status|chat|latest|provider|limit|summary|audio|help` controls TTS. See [TTS](/tools/tts). - `/activation mention|always` sets group activation mode. - `/bash ` runs a host shell command. Text-only. Alias: `! `. Requires `commands.bash: true` plus `tools.elevated` allowlists. - `!poll [sessionId]` checks a background bash job. - `!stop [sessionId]` stops a background bash job.Generated dock commands
Dock commands switch the current session's reply route to another linked channel. See Channel docking for setup, examples, and troubleshooting.
Dock commands are generated from channel plugins with native-command support. Current bundled set:
/dock-discord(alias:/dock_discord)/dock-mattermost(alias:/dock_mattermost)/dock-slack(alias:/dock_slack)/dock-telegram(alias:/dock_telegram)
Use dock commands from a direct chat to switch the current session's reply route to another linked channel. The agent keeps the same session context, but future replies for that session are delivered to the selected channel peer.
Dock commands require session.identityLinks. The source sender and target peer must be in the same identity group, for example ["telegram:123", "discord:456"]. If a Telegram user with id 123 sends /dock_discord, OpenClaw stores lastChannel: "discord" and lastTo: "456" on the active session. If the sender is not linked to a Discord peer, the command replies with a setup hint instead of falling through to normal chat.
Docking changes the active session route only. It does not create channel accounts, grant access, bypass channel allowlists, or move transcript history to another session. Use /dock-telegram, /dock-slack, /dock-mattermost, or another generated dock command to switch the route again.
Bundled plugin commands
Bundled plugins can add more slash commands. Current bundled commands in this repo:
/dreaming [on|off|status|help]toggles memory dreaming. See Dreaming./pair [qr|status|pending|approve|cleanup|notify]manages device pairing/setup flow. See Pairing./phone status|arm <camera|screen|writes|all> [duration]|disarmtemporarily arms high-risk phone node commands./voice status|list [limit]|set <voiceId|name>manages Talk voice config. On Discord, the native command name is/talkvoice./card ...sends LINE rich card presets. See LINE./codex status|models|threads|resume|compact|review|diagnostics|account|mcp|skillsinspects and controls the bundled Codex app-server harness. See Codex harness.- QQBot-only commands:
/bot-ping/bot-version/bot-help/bot-upgrade/bot-logs
Dynamic skill commands
User-invocable skills are also exposed as slash commands:
/skill <name> [input]always works as the generic entrypoint.- skills may also appear as direct commands like
/prosewhen the skill/plugin registers them. - native skill-command registration is controlled by
commands.nativeSkillsandchannels.<provider>.commands.nativeSkills. - command specs can provide
descriptionLocalizationsfor native surfaces that support localized descriptions, including Discord.
/tools
/tools answers a runtime question, not a config question: what this agent can use right now in this conversation.
- Default
/toolsis compact and optimized for quick scanning. /tools verboseadds short descriptions.- Native-command surfaces that support arguments expose the same mode switch as
compact|verbose. - Results are session-scoped, so changing agent, channel, thread, sender authorization, or model can change the output.
/toolsincludes tools that are actually reachable at runtime, including core tools, connected plugin tools, and channel-owned tools.
For profile and override editing, use the Control UI Tools panel or config/catalog surfaces instead of treating /tools as a static catalog.
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. OpenClaw normalizes provider windows to% left; for MiniMax, remaining-only percent fields are inverted before display, andmodel_remainsresponses prefer the chat-model entry plus a model-tagged plan label. - Token/cache lines in
/statuscan fall back to the latest transcript usage entry when the live session snapshot is sparse. Existing nonzero live values still win, and transcript fallback can also recover the active runtime model label plus a larger prompt-oriented total when stored totals are missing or smaller. - Execution vs runtime:
/statusreportsExecutionfor the effective sandbox path andRuntimefor who is actually running the session:OpenClaw Pi Default,OpenAI Codex, a CLI backend, or an ACP backend. - 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:
/model
/model list
/model 3
/model openai/gpt-5.4
/model opus@anthropic:default
/model status
Notes:
/modeland/model listshow a compact, numbered picker (model family + available providers).- On Discord,
/modeland/modelsopen an interactive picker with provider and model dropdowns plus a Submit step. /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:
/debug show
/debug set messages.responsePrefix="[openclaw]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
/debug unset messages.responsePrefix
/debug reset
Plugin trace output
/trace lets you toggle session-scoped plugin trace/debug lines without turning on full verbose mode.
Examples:
/trace
/trace on
/trace off
Notes:
/tracewith no argument shows the current session trace state./trace onenables plugin trace lines for the current session./trace offdisables them again.- Plugin trace lines can appear in
/statusand as a follow-up diagnostic message after the normal assistant reply. /tracedoes not replace/debug;/debugstill manages runtime-only config overrides./tracedoes not replace/verbose; normal verbose tool/status output still belongs to/verbose.
Config updates
/config writes to your on-disk config (openclaw.json). Owner-only. Disabled by default; enable with commands.config: true.
Examples:
/config show
/config show messages.responsePrefix
/config get messages.responsePrefix
/config set messages.responsePrefix="[openclaw]"
/config unset messages.responsePrefix
MCP updates
/mcp writes OpenClaw-managed MCP server definitions under mcp.servers. Owner-only. Disabled by default; enable with commands.mcp: true.
Examples:
/mcp show
/mcp show context7
/mcp set context7={"command":"uvx","args":["context7-mcp"]}
/mcp unset context7
Plugin updates
/plugins lets operators inspect discovered plugins and toggle enablement in config. Read-only flows can use /plugin as an alias. Disabled by default; enable with commands.plugins: true.
Examples:
/plugins
/plugins list
/plugin show context7
/plugins enable context7
/plugins disable context7
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::discord:slash:` - Slack: `agent::slack:slash:` (prefix configurable via `channels.slack.slashCommand.sessionPrefix`) - Telegram: `telegram:slash:` (targets the chat session via `CommandTargetSessionKey`) - **`/stop`** targets the active chat session so it can abort the current run. `channels.slack.slashCommand` is still supported for a single `/openclaw`-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.Slack native exception: register `/agentstatus` (not `/status`) because Slack reserves `/status`. Text `/status` still works in Slack messages.
BTW side questions
/btw is a quick side question about the current session. /side is an alias.
Unlike normal chat:
- it uses the current session as background context,
- it runs as a separate tool-less one-shot call,
- it does not change future session context,
- it is not written to transcript history,
- it is delivered as a live side result instead of a normal assistant message.
That makes /btw useful when you want a temporary clarification while the main task keeps going.
Example:
/btw what are we doing right now?
/side what changed while the main run continued?
See BTW Side Questions for the full behavior and client UX details.