Commands are handled by the Gateway. Most commands must be sent as a standalone message that starts withDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
/. 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:
Commands
Commands
Standalone
/... messages.Directives
Directives
/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.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.
Inline shortcuts
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
Enables parsing
/... in chat messages. On surfaces without native commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/Microsoft Teams), text commands still work even if you set this to false.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.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").Enables
! <cmd> to run host shell commands (/bash <cmd> is an alias; requires tools.elevated allowlists).Controls how long bash waits before switching to background mode (
0 backgrounds immediately).Enables
/config (reads/writes openclaw.json).Enables
/mcp (reads/writes OpenClaw-managed MCP config under mcp.servers).Enables
/plugins (plugin discovery/status plus install + enable/disable controls).Enables
/debug (runtime-only overrides).Enables
/restart plus gateway restart tool actions.Sets the explicit owner allowlist for owner-only command/tool surfaces. This is the human operator account that can approve dangerous actions and run commands such as
/diagnostics, /export-trajectory, and /config. It is separate from commands.allowFrom and from DM pairing access.Per-channel: makes owner-only commands require owner identity to run on that surface. When
true, the sender must either match a resolved owner candidate (for example an entry in commands.ownerAllowFrom or provider-native owner metadata) or hold internal operator.admin scope on an internal message channel. A wildcard entry in channel allowFrom, or an empty/unresolved owner-candidate list, is not sufficient — owner-only commands fail closed on that channel. Leave this off if you want owner-only commands gated only by ownerAllowFrom and the standard command allowlists.Controls how owner ids appear in the system prompt.
Optionally sets the HMAC secret used when
commands.ownerDisplay="hash".Per-provider allowlist for command authorization. When configured, it is the only authorization source for commands and directives (channel allowlists/pairing and
commands.useAccessGroups are ignored). Use "*" for a global default; provider-specific keys override it.Enforces allowlists/policies for commands when
commands.allowFrom is not set.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
Sessions and runs
Sessions and runs
/new [model]starts a new session;/resetis the reset alias./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./stopaborts the current run./session idle <duration|off>and/session max-age <duration|off>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 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.
Model and run controls
Model and run controls
/think <level>sets the thinking level. Options come from the active model’s provider profile; common levels areoff,minimal,low,medium, andhigh, with custom levels such asxhigh,adaptive,max, or binaryononly where supported. Aliases:/thinking,/t./verbose on|off|fulltoggles verbose output. Alias:/v./trace on|offtoggles 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=<auto|sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>shows or sets exec defaults./model [name|#|status]shows or sets the model./models [provider] [page] [limit=<n>|size=<n>|all]lists providers or models for a provider./queue <mode>manages queue behavior (steer,interrupt,followup,collect,steer-backlog) plus options likedebounce:2s cap:25 drop:summarize.
Discovery and status
Discovery and status
/helpshows the short help summary./commandsshows the generated command catalog./tools [compact|verbose]shows what the current agent can use right now./statusshows execution/runtime status, includingExecution/Runtimelabels 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 runningopenclaw 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, andcodex resume <thread-id>commands. See Diagnostics Export./crestodian <request>runs the Crestodian setup and repair helper from an owner DM./taskslists active/recent background tasks for the current session./context [list|detail|json]explains how context is assembled./whoamishows your sender id. Alias:/id./usage off|tokens|full|costcontrols the per-response usage footer or prints a local cost summary.
Skills, allowlists, approvals
Skills, allowlists, approvals
/skill <name> [input]runs a skill by name./allowlist [list|add|remove] ...manages allowlist entries. Text-only./approve <id> <decision>resolves exec approval prompts./btw <question>asks a side question without changing future session context. See BTW.
Subagents and ACP
Subagents and ACP
/subagents list|kill|log|info|send|steer|spawnmanages 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|helpmanages ACP sessions and runtime options./focus <target>binds the current Discord thread or Telegram topic/conversation to a session target./unfocusremoves the current binding./agentslists thread-bound agents for the current session./kill <id|#|all>aborts one or all running sub-agents./steer <id|#> <message>sends steering to a running sub-agent. Alias:/tell.
Owner-only writes and admin
Owner-only writes and admin
/config show|get|set|unsetreads or writesopenclaw.json. Owner-only. Requirescommands.config: true./mcp show|get|set|unsetreads or writes OpenClaw-managed MCP server config undermcp.servers. Owner-only. Requirescommands.mcp: true./plugins list|inspect|show|get|install|enable|disableinspects or mutates plugin state./pluginis an alias. Owner-only for writes. Requirescommands.plugins: true./debug show|set|unset|resetmanages runtime-only config overrides. Owner-only. Requirescommands.debug: true./restartrestarts OpenClaw when enabled. Default: enabled; setcommands.restart: falseto disable it./send on|off|inheritsets send policy. Owner-only.
Voice, TTS, channel control
Voice, TTS, channel control
/tts on|off|status|chat|latest|provider|limit|summary|audio|helpcontrols TTS. See TTS./activation mention|alwayssets group activation mode./bash <command>runs a host shell command. Text-only. Alias:! <command>. Requirescommands.bash: trueplustools.elevatedallowlists.!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)
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.
Argument and parser notes
Argument and parser 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. /allowlist add|removerequirescommands.config=trueand honors channelconfigWrites.- In multi-account channels, config-targeted
/allowlist --account <id>and/config set channels.<provider>.accounts.<id>...also honor the target account’sconfigWrites. /usagecontrols the per-response usage footer;/usage costprints a local cost summary from OpenClaw session logs./restartis enabled by default; setcommands.restart: falseto disable it./plugins install <spec>accepts the same plugin specs asopenclaw plugins install: local path/archive, npm package, orclawhub:<pkg>./plugins enable|disableupdates plugin config and may prompt for a restart.
Channel-specific behavior
Channel-specific behavior
- Discord-only native command:
/vc join|leave|statuscontrols voice channels (not available as text).joinrequires a guild and selected voice/stage channel. Requireschannels.discord.voiceand native commands. - Discord thread-binding commands (
/focus,/unfocus,/agents,/session idle,/session max-age) require effective thread bindings to be enabled (session.threadBindings.enabledand/orchannels.discord.threadBindings.enabled). - ACP command reference and runtime behavior: ACP agents.
Verbose / trace / fast / reasoning safety
Verbose / trace / fast / reasoning safety
/verboseis meant for debugging and extra visibility; keep it off in normal use./traceis narrower than/verbose: it only reveals plugin-owned trace/debug lines and keeps normal verbose tool chatter off./fast on|offpersists a session override. Use the Sessions UIinheritoption to clear it and fall back to config defaults./fastis provider-specific: OpenAI/OpenAI Codex map it toservice_tier=priorityon native Responses endpoints, while direct public Anthropic requests, including OAuth-authenticated traffic sent toapi.anthropic.com, map it toservice_tier=autoorstandard_only. See OpenAI and Anthropic.- Tool failure summaries are still shown when relevant, but detailed failure text is only included when
/verboseisonorfull. /reasoning,/verbose, and/traceare risky in group settings: they may reveal internal reasoning, tool output, or plugin diagnostics you did not intend to expose. Prefer leaving them off, especially in group chats.
Model switching
Model switching
/modelpersists the new session model immediately.- If the agent is idle, the next run uses it right away.
- If a run is already active, OpenClaw marks a live switch as pending and only restarts into the new model at a clean retry point.
- If tool activity or reply output has already started, the pending switch can stay queued until a later retry opportunity or the next user turn.
- In the local TUI,
/crestodian [request]returns from the normal agent TUI to Crestodian. This is separate from message-channel rescue mode and does not grant remote config authority.
Fast path and inline shortcuts
Fast path and inline shortcuts
- 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 and native arguments
Skill commands and native arguments
- 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. Dynamic choices are resolved against the target session model, so model-specific options such as
/thinklevels follow that session’s/modeloverride.
/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.
/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:
/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:
Overrides apply immediately to new config reads, but do not write to
openclaw.json. Use /debug reset to clear all overrides and return to the on-disk config.Plugin trace output
/trace lets you toggle session-scoped plugin trace/debug lines without turning on full verbose mode.
Examples:
/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 is validated before write; invalid changes are rejected.
/config updates persist across restarts.MCP updates
/mcp writes OpenClaw-managed MCP server definitions under mcp.servers. Owner-only. Disabled by default; enable with commands.mcp: true.
Examples:
/mcp stores config in OpenClaw config, not Pi-owned project settings. Runtime adapters decide which transports are actually executable.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 listand/plugins showuse real plugin discovery against the current workspace plus on-disk config./plugins enable|disableupdates plugin config only; it does not install or uninstall plugins.- After enable/disable changes, restart the gateway to apply them.
Surface notes
Sessions per surface
Sessions per surface
- 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 specifics
Slack specifics
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.
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.
/btw useful when you want a temporary clarification while the main task keeps going.
Example: