Standalone /... messages handled by the Gateway. Must be sent as the
only content in the message.
Slash commands
The Gateway handles commands sent as standalone messages starting with /.
Host-only bash commands use ! <cmd> (with /bash <cmd> as an alias).
When a conversation is bound to an ACP session, normal text routes to the ACP
harness. Gateway management commands remain local: /acp ... always reaches
the OpenClaw command handler, and /status plus /unfocus stay local whenever
command handling is enabled for the surface.
Three command types
Section titled “Three command types”/think, /fast, /verbose, /trace, /reasoning, /elevated,
/exec, /model, /queue — stripped from the message before the model
sees it. Persist session settings when sent alone; act as inline hints
when sent with other text.
/help, /commands, /status, /whoami — run immediately and are
stripped before the model sees the remaining text. Authorized senders only.
Directive behavior details
- Directives are stripped from the message before the model sees it.
- In directive-only messages (the message is only directives), they persist to the session and reply with an acknowledgement.
- In normal chat messages with other text, they act as inline hints and do not persist session settings.
- Directives only apply for authorized senders. If
commands.allowFromis set, it is the only allowlist used; otherwise authorization comes from channel allowlists/pairing pluscommands.useAccessGroups. Unauthorized senders see directives treated as plain text.
Configuration
Section titled “Configuration”{ 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
Section titled “Command list”Commands come from three sources:
- Core built-ins:
src/auto-reply/commands-registry.shared.ts - Generated dock commands:
src/auto-reply/commands-registry.data.ts - Plugin commands: plugin
registerCommand()calls
Availability depends on config flags, channel surface, and installed/enabled plugins.
Core commands
Section titled “Core commands”Sessions and runs
| Command | Description |
|---|---|
/new [model] | Archive the current session and start a fresh one |
/reset [soft [message]] | Reset the current session in place. soft keeps the transcript, drops reused CLI backend session ids, and reruns startup |
| `/name |
| Compact the session context. See [Compaction](/en/concepts/compaction) | |/stop| Abort the current run | |/session idle <duration|off>| Manage thread-binding idle expiry | |/session max-age <duration|off>| Manage thread-binding max-age expiry | |/export-session [path]| Export the current session to HTML. Alias:/export| |/export-trajectory [path]| Export a JSONL trajectory bundle for the current session. Alias:/trajectory` |
<Note> Control UI intercepts typed `/new` to create and switch to a fresh dashboard session, except when `session.dmScope: "main"` is configured and the current parent is the agent's main session — in that case `/new` resets the main session in place. Typed `/reset` still runs the Gateway's in-place reset. Use `/model default` when you want to clear a pinned session model selection.</Note><AccordionGroup> <Accordion title="verbose / trace / fast / reasoning safety"> - `/verbose` is for debugging — keep it **off** in normal use. - `/trace` reveals only plugin-owned trace/debug lines; normal verbose chatter stays off. - `/fast auto|on|off` persists a session override; use the Sessions UI `inherit` option to clear it. - `/fast` is provider-specific: OpenAI/Codex map it to `service_tier=priority`; direct Anthropic requests map it to `service_tier=auto` or `standard_only`. - `/reasoning`, `/verbose`, and `/trace` are risky in group settings — they may reveal internal reasoning or plugin diagnostics. Keep them off in group chats.
</Accordion> <Accordion title="Model switching details"> - `/model` persists the new model immediately to the session. - If the agent is idle, the next run uses it right away. - If a run is active, the switch is marked pending and applied at the next clean retry point.
</Accordion></AccordionGroup>Dock commands
Section titled “Dock commands”Dock commands switch the active session’s reply route to another linked channel. See Channel docking for setup and troubleshooting.
Generated from channel plugins with native-command support:
/dock-discord(alias:/dock_discord)/dock-mattermost(alias:/dock_mattermost)/dock-slack(alias:/dock_slack)/dock-telegram(alias:/dock_telegram)
Dock commands require session.identityLinks. The source sender and target peer
must be in the same identity group.
Bundled plugin commands
Section titled “Bundled plugin commands”| Command | Description |
|---|---|
/dreaming [on|off|status|help] | Toggle memory dreaming (owner or Gateway admin). See Dreaming |
/pair [qr|status|pending|approve|cleanup|notify] | Manage device pairing. See Pairing |
/phone status|arm ...|disarm | Temporarily arm high-risk phone node commands |
/voice status|list|set <voiceId> | Manage Talk voice config. Discord native name: /talkvoice |
/card ... | Send LINE rich card presets. See LINE |
/codex status|models|threads|resume|compact|review|diagnostics|account|mcp|skills | Control the Codex app-server harness. See Codex harness |
QQBot-only: /bot-ping, /bot-version, /bot-help, /bot-upgrade, /bot-logs
Skill commands
Section titled “Skill commands”User-invocable skills are exposed as slash commands:
/skill <name> [input]always works as the generic entrypoint.- Skills may register as direct commands (e.g.
/prosefor OpenProse). - Native skill-command registration is controlled by
commands.nativeSkillsandchannels.<provider>.commands.nativeSkills. - Names are sanitized to
a-z0-9_(max 32 chars); collisions get numeric suffixes.
Skill command dispatch
By default, skill commands route to the model as a normal request.
Skills can declare command-dispatch: tool to route directly to a tool
(deterministic, no model involvement). Example: /prose (OpenProse plugin)
— see OpenProse.
Native command arguments
Discord uses autocomplete for dynamic options and button menus when required
args are omitted. Telegram and Slack show a button menu for commands with
choices. Dynamic choices resolve against the target session model, so model-
specific options like /think levels follow the session’s /model override.
/tools — what the agent can use now
Section titled “/tools — what the agent can use now”/tools answers a runtime question: what this agent can use right now in this
conversation — not a static config catalog.
/tools # compact view/tools verbose # with short descriptionsResults are session-scoped. Changing agent, channel, thread, sender authorization, or model can change the output. For profile and override editing, use the Control UI Tools panel or config surfaces.
/model — model selection
Section titled “/model — model selection”/model # show model picker/model list # same/model 3 # select by number from picker/model openai/gpt-5.4/model opus@anthropic:default/model default # clear the session model selection/model status # detailed view with endpoint and API modeOn Discord, /model and /models open an interactive picker with provider and
model dropdowns. The picker respects agents.defaults.models, including
provider/* entries.
/config — on-disk config writes
Section titled “/config — on-disk config writes”/config show/config show messages.responsePrefix/config get messages.responsePrefix/config set messages.responsePrefix="[openclaw]"/config unset messages.responsePrefixConfig is validated before write. Invalid changes are rejected. /config
updates persist across restarts.
/mcp — MCP server config
Section titled “/mcp — MCP server config”/mcp show/mcp show context7/mcp set context7={"command":"uvx","args":["context7-mcp"]}/mcp unset context7/mcp stores config in OpenClaw config, not embedded-agent project settings.
/debug — runtime-only overrides
Section titled “/debug — runtime-only overrides”/debug show/debug set messages.responsePrefix="[openclaw]"/debug set channels.whatsapp.allowFrom=["+1555","+4477"]/debug unset messages.responsePrefix/debug reset/plugins — plugin management
Section titled “/plugins — plugin management”/plugins/plugins list/plugin show context7/plugins enable context7/plugins disable context7/plugins install ./path/to/plugin/plugins enable|disable updates plugin config and hot-reloads the Gateway
plugin runtime for new agent turns. /plugins install restarts managed
Gateways automatically because plugin source modules changed.
/trace — plugin trace output
Section titled “/trace — plugin trace output”/trace # show current trace state/trace on/trace off/trace reveals session-scoped plugin trace/debug lines without full verbose
mode. It does not replace /debug (runtime overrides) or /verbose (normal
tool output).
/btw — side questions
Section titled “/btw — side questions”/btw is a quick side question about the current session context. Alias: /side.
/btw what are we doing right now?/side what changed while the main run continued?Unlike a normal message:
- Uses the current session as background context.
- In Codex harness sessions, runs as an ephemeral Codex side thread.
- Does not change future session context.
- Is not written to transcript history.
See BTW side questions for the full behavior.
Surface notes
Section titled “Surface notes”Session scoping per surface
- Text commands: run in the normal chat session (DMs share
main, groups have their own session). - Native Discord commands: `agent:
:discord:slash:
- **Native Slack commands:**agent:
:slack:slash:
(prefix configurable viachannels.slack.slashCommand.sessionPrefix) - **Native Telegram commands:** telegram:slash:
(targets the chat session viaCommandTargetSessionKey) - **/login codex** sends device pairing codes only through private chat or Web UI response paths. Telegram group/topic invocations ask the owner to DM the bot instead. - **/stop`** targets the active chat session to abort the current run.
Slack specifics
channels.slack.slashCommand supports a single /openclaw-style command.
With commands.native: true, create one Slack slash command per built-in
command. Register /agentstatus (not /status) because Slack reserves
/status. Text /status still works in Slack messages.
Fast path and inline shortcuts
- Command-only messages from allowlisted senders are handled immediately (bypass queue + model).
- Inline shortcuts (
/help,/commands,/status,/whoami) also work embedded in normal messages and are stripped before the model sees the remaining text. - Unauthorized command-only messages are silently ignored; inline
/...tokens are treated as plain text.
Argument notes
- Commands accept an optional
:between the command and args (/think: high,/send: on). - `/new
accepts a model alias,provider/model, or a provider name (fuzzy match); if no match, the text is treated as the message body. - /allowlist add|removerequirescommands.config: trueand honors channelconfigWrites`.
Provider usage and status
Section titled “Provider usage and status”- Provider usage/quota (e.g., “Claude 80% left”) shows in
/statusfor the current model provider when usage tracking is enabled. - Token/cache lines in
/statuscan fall back to the latest transcript usage entry when the live session snapshot is sparse. - Execution vs runtime:
/statusreportsExecutionfor the effective sandbox path andRuntimefor who is running the session:OpenClaw Default,OpenAI Codex, a CLI backend, or an ACP backend. - Per-response tokens/cost: controlled by
/usage off|tokens|full. /model statusis about models/auth/endpoints, not usage.
Related
Section titled “Related”How skill slash commands are registered and gated.
Build a skill that registers its own slash command.
Side questions without changing session context.
Guide the agent mid-run with /steer.