mirror of
https://github.com/openclaw/openclaw.git
synced 2026-07-10 00:11:19 +00:00
* feat(ui): redesign session goal into interactive composer pill with elapsed time and /goal edit * docs: align goal command table cell padding * docs: regenerate docs map for goal Control UI section
24 KiB
24 KiB
| title | sidebarTitle | summary | read_when | |||
|---|---|---|---|---|---|---|
| Slash commands | Slash commands | All available slash commands, directives, and inline shortcuts — configuration, routing, and per-surface behavior. |
|
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
Standalone `/...` messages handled by the Gateway. Must be sent as the only content in the message. `/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. - 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.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.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,
},
}
Enables parsing `/...` in chat messages. On surfaces without native commands
(WhatsApp, WebChat, Signal, iMessage, Google Chat, Microsoft Teams), text
commands work even when set to `false`.
Registers native commands. Auto: on for Discord/Telegram; off for Slack;
ignored for providers without native support. Override per-channel with
`channels..commands.native`. On Discord, `false` skips slash-command
registration; previously registered commands may stay visible until removed.
Registers skill commands natively when supported. Auto: on for
Discord/Telegram; off for Slack. Override with
`channels..commands.nativeSkills`.
Enables `! ` to run host shell commands (`/bash ` alias). Requires
`tools.elevated` allowlists.
How long bash waits before switching to background mode (`0` backgrounds
immediately).
Enables `/config` (reads/writes `openclaw.json`). Owner-only.
Enables `/mcp` (reads/writes OpenClaw-managed MCP config under `mcp.servers`). Owner-only.
Enables `/plugins` (plugin discovery/status plus install + enable/disable). Owner-only for writes.
Enables `/debug` (runtime-only config overrides). Owner-only.
Enables `/restart` and gateway restart tool actions.
Explicit owner allowlist for owner-only command surfaces. Separate from
`commands.allowFrom` and DM pairing access.
Per-channel: requires owner identity for owner-only commands. When `true`,
sender must match `commands.ownerAllowFrom` or hold internal `operator.admin`
scope. A wildcard `allowFrom` entry is **not** sufficient.
Controls how owner ids appear in the system prompt.
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. Use `"*"` for a
global default; provider-specific keys override it.
Enforces allowlists/policies for commands when `commands.allowFrom` is not set.
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.