Files
openclaw/docs/tools/slash-commands.md
T
Peter Steinberger a95486cefc feat: session rail with read-only session companion in Control UI chat (#113698)
* feat(protocol): add session companion schemas

* feat(gateway): add session companion service

* feat(gateway): expose session companion rpc

* fix(gateway): harden companion runtime limits

* test(gateway): fix companion type assertions

* test(gateway): align companion test target

* feat(ui): replace observer HUD and side chat with session rail

* docs: session rail companion for control ui

* test(ui): align session rail client mock

* fix(ui): drop stale chat search import

* fix: satisfy session companion lint contracts

* refactor(gateway): isolate companion state contract

* fix(ui): keep session rail reachable while idle

* fix(agents): clamp derived openai prompt cache keys at boundary

* fix(ai): clamp chatgpt responses session_id affinity header

* fix(ci): align session companion branch gates

* fix(ui): require run id for sessionless terminal chat events

* fix(agents): scope internal run events to transcript

* chore: revert changelog edit (release generation owns changelog)
2026-07-25 08:14:32 -07:00

25 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, and always-on access-group enforcement. 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 external `SIGUSR1` restart requests. 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.

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