Files
openclaw/docs/tools/slash-commands.md
2026-06-22 09:37:09 +08:00

23 KiB

title, sidebarTitle, summary, read_when
title sidebarTitle summary read_when
Slash commands Slash commands All available slash commands, directives, and inline shortcuts — configuration, routing, and per-surface behavior.
Using or configuring chat commands
Debugging command routing or permissions
Understanding how skill commands are registered

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.

Core commands

| 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