Slash-Befehle

Befehle werden vom Gateway verarbeitet. Die meisten Befehle müssen als eigenständige Nachricht gesendet werden, die mit / beginnt. Der Host-only Bash-Chat-Befehl verwendet ! <cmd> (mit /bash <cmd> als Alias).

Es gibt zwei verwandte Systeme:

  • Befehle: eigenständige /...-Nachrichten.
  • Direktiven: /think, /fast, /verbose, /reasoning, /elevated, /exec, /model, /queue.
    • Direktiven werden aus der Nachricht entfernt, bevor das Modell sie sieht.
    • In normalen Chat-Nachrichten (nicht nur Direktiven) werden sie als “Inline-Hinweise” behandelt und speichern keine Session-Einstellungen persistent.
    • In reinen Direktiven-Nachrichten (die Nachricht enthält nur Direktiven) werden sie in der Session gespeichert und mit einer Bestätigung beantwortet.
    • Direktiven werden nur für autorisierte Sender angewendet. Wenn commands.allowFrom gesetzt ist, ist dies die einzige verwendete Allowlist; ansonsten kommt die Autorisierung von Kanal-Allowlists/Pairing plus commands.useAccessGroups. Nicht autorisierte Sender sehen Direktiven als Klartext behandelt.

Es gibt auch einige Inline-Shortcuts (nur für Allowlist-/autorisierte Sender): /help, /commands, /status, /whoami (/id). Sie werden sofort ausgeführt, aus der Nachricht entfernt, bevor das Modell sie sieht, und der verbleibende Text durchläuft den normalen Flow.

Konfiguration

{
  commands: {
    native: "auto",
    nativeSkills: "auto",
    text: true,
    bash: false,
    bashForegroundMs: 2000,
    config: false,
    debug: false,
    restart: false,
    allowFrom: {
      "*": ["user1"],
      discord: ["user:123"],
    },
    useAccessGroups: true,
  },
}
  • commands.text (Standard true) aktiviert das Parsen von /... in Chat-Nachrichten.
    • Auf Oberflächen ohne native Befehle (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams) funktionieren Text-Befehle auch dann, wenn du dies auf false setzt.
  • commands.native (Standard "auto") registriert native Befehle.
    • Auto: an für Discord/Telegram; aus für Slack (bis du Slash-Befehle hinzufügst); ignoriert für Provider ohne native Unterstützung.
    • Setze channels.discord.commands.native, channels.telegram.commands.native oder channels.slack.commands.native zum Überschreiben pro Provider (bool oder "auto").
    • false löscht zuvor registrierte Befehle bei Discord/Telegram beim Start. Slack-Befehle werden in der Slack-App verwaltet und nicht automatisch entfernt.
  • commands.nativeSkills (Standard "auto") registriert Skill-Befehle nativ, wenn unterstützt.
    • Auto: an für Discord/Telegram; aus für Slack (Slack erfordert das Erstellen eines Slash-Befehls pro Skill).
    • Setze channels.discord.commands.nativeSkills, channels.telegram.commands.nativeSkills oder channels.slack.commands.nativeSkills zum Überschreiben pro Provider (bool oder "auto").
  • commands.bash (Standard false) aktiviert ! <cmd> zum Ausführen von Host-Shell-Befehlen (/bash <cmd> ist ein Alias; erfordert tools.elevated-Allowlists).
  • commands.bashForegroundMs (Standard 2000) steuert, wie lange Bash wartet, bevor es in den Hintergrundmodus wechselt (0 wechselt sofort).
  • commands.config (Standard false) aktiviert /config (liest/schreibt openclaw.json).
  • commands.debug (Standard false) aktiviert /debug (Runtime-only Overrides).
  • commands.allowFrom (optional) legt eine pro-Provider-Allowlist für die Befehlsautorisierung fest. Wenn konfiguriert, ist dies die einzige Autorisierungsquelle für Befehle und Direktiven (Kanal-Allowlists/Pairing und commands.useAccessGroups werden ignoriert). Verwende "*" für einen globalen Standard; provider-spezifische Keys überschreiben ihn.
  • commands.useAccessGroups (Standard true) erzwingt Allowlists/Policies für Befehle, wenn commands.allowFrom nicht gesetzt ist.

Befehlsliste

Text + nativ (wenn aktiviert):

  • /help
  • /commands
  • /skill <name> [input] (einen Skill nach Name ausführen)
  • /status (aktuellen Status anzeigen; enthält Provider-Nutzung/Quota für den aktuellen Model-Provider, wenn verfügbar)
  • /allowlist (Allowlist-Einträge auflisten/hinzufügen/entfernen)
  • /approve <id> allow-once|allow-always|deny (Exec-Genehmigungs-Prompts auflösen)
  • /context [list|detail|json] (“Kontext” erklären; detail zeigt pro-Datei + pro-Tool + pro-Skill + System-Prompt-Größe)
  • /export-session [path] (Alias: /export) (aktuelle Session als HTML mit vollständigem System-Prompt exportieren)
  • /whoami (deine Sender-ID anzeigen; Alias: /id)
  • /session idle <duration|off> (Inaktivitäts-Auto-Unfocus für fokussierte Thread-Bindungen verwalten)
  • /session max-age <duration|off> (harte Max-Age-Auto-Unfocus für fokussierte Thread-Bindungen verwalten)
  • /subagents list|kill|log|info|send|steer|spawn (Sub-Agent-Runs für die aktuelle Session inspizieren, steuern oder spawnen)
  • /acp spawn|cancel|steer|close|status|set-mode|set|cwd|permissions|timeout|model|reset-options|doctor|install|sessions (ACP-Runtime-Sessions inspizieren und steuern)
  • /agents (thread-gebundene Agents für diese Session auflisten)
  • /focus <target> (Discord: diesen Thread oder einen neuen Thread an ein Session/Subagent-Ziel binden)
  • /unfocus (Discord: die aktuelle Thread-Bindung entfernen)
  • /kill <id|#|all> (einen oder alle laufenden Sub-Agents für diese Session sofort abbrechen; keine Bestätigungsnachricht)
  • /steer <id|#> <message> (einen laufenden Sub-Agent sofort steuern: im laufenden Run wenn möglich, sonst aktuelle Arbeit abbrechen und mit der Steer-Nachricht neu starten)
  • /tell <id|#> <message> (Alias für /steer)
  • /config show|get|set|unset (Config auf Festplatte speichern, nur Owner; erfordert commands.config: true)
  • /debug show|set|unset|reset (Runtime-Overrides, nur Owner; erfordert commands.debug: true)
  • /usage off|tokens|full|cost (pro-Antwort-Nutzungsfooter oder lokale Kostenübersicht)
  • /tts off|always|inbound|tagged|status|provider|limit|summary|audio (TTS steuern; siehe /tts)
    • Discord: nativer Befehl ist /voice (Discord reserviert /tts); Text-/tts funktioniert weiterhin.
  • /stop
  • /restart
  • /dock-telegram (Alias: /dock_telegram) (Antworten auf Telegram umleiten)
  • /dock-discord (Alias: /dock_discord) (Antworten auf Discord umleiten)
  • /dock-slack (Alias: /dock_slack) (Antworten auf Slack umleiten)
  • /activation mention|always (nur Gruppen)
  • /send on|off|inherit (nur Owner)
  • /reset oder /new [model] (optionaler Modell-Hinweis; Rest wird durchgereicht)
  • /think <off|minimal|low|medium|high|xhigh> (dynamische Auswahl nach Modell/Provider; Aliase: /thinking, /t)
  • /fast status|on|off (ohne Argument wird der aktuelle effektive Fast-Mode-Status angezeigt)
  • /verbose on|full|off (Alias: /v)
  • /reasoning on|off|stream (Alias: /reason; wenn an, wird eine separate Nachricht mit Präfix Reasoning: gesendet; stream = nur Telegram-Draft)
  • /elevated on|off|ask|full (Alias: /elev; full überspringt Exec-Genehmigungen)
  • /exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id> (/exec senden zeigt aktuellen Status)
  • /model <name> (Alias: /models; oder /<alias> aus agents.defaults.models.*.alias)
  • /queue <mode> (plus Optionen wie debounce:2s cap:25 drop:summarize; /queue senden zeigt aktuelle Einstellungen)
  • /bash <command> (nur Host; Alias für ! <command>; erfordert commands.bash: true + tools.elevated-Allowlists)

Nur Text:

  • /compact [instructions] (siehe /concepts/compaction)
  • ! <command> (nur Host; einzeln; verwende !poll + !stop für lang laufende Jobs)
  • !poll (Ausgabe/Status prüfen; akzeptiert optionale sessionId; /bash poll funktioniert auch)
  • !stop (laufenden Bash-Job stoppen; akzeptiert optionale sessionId; /bash stop funktioniert auch)

Hinweise:

  • Befehle akzeptieren ein optionales : zwischen Befehl und Argumenten (z.B. /think: high, /send: on, /help:).
  • /new <model> akzeptiert einen Modell-Alias, provider/model oder einen Provider-Namen (Fuzzy-Match); bei keinem Treffer wird der Text als Nachrichteninhalt behandelt.
  • Für eine vollständige Provider-Nutzungsaufschlüsselung verwende openclaw status --usage.
  • /allowlist add|remove erfordert commands.config=true und berücksichtigt Kanal-configWrites.
  • Bei Multi-Account-Kanälen berücksichtigen config-gezielte /allowlist --account <id> und /config set channels.<provider>.accounts.<id>... ebenfalls die configWrites des Ziel-Accounts.
  • /usage steuert den pro-Antwort-Nutzungsfooter; /usage cost gibt eine lokale Kostenübersicht aus den OpenClaw-Session-Logs aus.
  • /restart ist standardmäßig aktiviert; setze commands.restart: false zum Deaktivieren.
  • Discord-only nativer Befehl: /vc join|leave|status steuert Voice-Channels (erfordert channels.discord.voice und native Befehle; nicht als Text verfügbar).
  • Discord Thread-Bindungsbefehle (/focus, /unfocus, /agents, /session idle, /session max-age) erfordern, dass effektive Thread-Bindungen aktiviert sind (session.threadBindings.enabled und/oder channels.discord.threadBindings.enabled).
  • ACP-Befehlsreferenz und Runtime-Verhalten: ACP Agents.
  • /verbose ist zum Debuggen und für zusätzliche Sichtbarkeit gedacht; lass es im normalen Betrieb aus.
  • /fast on|off speichert einen Session-Override. Verwende die Sessions-UI-Option inherit, um ihn zu löschen und auf Config-Defaults zurückzufallen.
  • Tool-Fehlerübersichten werden weiterhin angezeigt, wenn relevant, aber detaillierter Fehlertext wird nur eingeblendet, wenn /verbose auf on oder full steht.
  • /reasoning (und /verbose) sind in Gruppen-Settings riskant: sie können internes Reasoning oder Tool-Output offenlegen, das du nicht preisgeben wolltest. Lass sie bevorzugt aus, besonders in Gruppenchats.
  • Fast Path: reine Befehlsnachrichten von Allowlist-Sendern werden sofort verarbeitet (Queue + Modell umgangen).
  • Gruppen-Mention-Gating: reine Befehlsnachrichten von Allowlist-Sendern umgehen Mention-Anforderungen.
  • Inline-Shortcuts (nur Allowlist-Sender): bestimmte Befehle funktionieren auch eingebettet in eine normale Nachricht und werden entfernt, bevor das Modell den verbleibenden Text sieht.
    • Beispiel: hey /status löst eine Status-Antwort aus, und der verbleibende Text durchläuft den normalen Flow.
  • Aktuell: /help, /commands, /status, /whoami (/id).
  • Nicht autorisierte reine Befehlsnachrichten werden still ignoriert, und inline /...-Tokens werden als Klartext behandelt.
  • Skill-Befehle: user-invocable Skills werden als Slash-Befehle exponiert. Namen werden zu a-z0-9_ sanitized (max. 32 Zeichen); Kollisionen bekommen numerische Suffixe (z.B. _2).
    • /skill <name> [input] führt einen Skill nach Name aus (nützlich, wenn Native-Command-Limits Pro-Skill-Befehle verhindern).
    • Standardmäßig werden Skill-Befehle als normale Anfrage an das Modell weitergeleitet.
    • Skills können optional command-dispatch: tool deklarieren, um den Befehl direkt an ein Tool zu routen (deterministisch, kein Modell).
    • Beispiel: /prose (OpenProse-Plugin) — siehe OpenProse.
  • Native Befehlsargumente: Discord verwendet Autocomplete für dynamische Optionen (und Button-Menüs, wenn du erforderliche Args weglässt). Telegram und Slack zeigen ein Button-Menü, wenn ein Befehl Auswahlmöglichkeiten unterstützt und du das Argument weglässt.

Nutzungsoberflächen (was wo angezeigt wird)

  • Provider-Nutzung/Quota (Beispiel: “Claude 80% left”) erscheint in /status für den aktuellen Model-Provider, wenn Nutzungstracking aktiviert ist.
  • Pro-Antwort Tokens/Kosten wird durch /usage off|tokens|full gesteuert (an normale Antworten angehängt).
  • /model status betrifft Modelle/Auth/Endpoints, nicht die Nutzung.

Modellauswahl (/model)

/model ist als Direktive implementiert.

Beispiele:

/model
/model list
/model 3
/model openai/gpt-5.2
/model opus@anthropic:default
/model status

Hinweise:

  • /model und /model list zeigen einen kompakten, nummerierten Picker (Modellfamilie + verfügbare Provider).
  • Auf Discord öffnen /model und /models einen interaktiven Picker mit Provider- und Modell-Dropdowns plus einem Submit-Schritt.
  • /model <#> wählt aus diesem Picker (und bevorzugt den aktuellen Provider, wenn möglich).
  • /model status zeigt die Detailansicht, einschließlich konfiguriertem Provider-Endpoint (baseUrl) und API-Modus (api), wenn verfügbar.

Debug-Overrides

/debug ermöglicht Runtime-only Config-Overrides (Speicher, nicht Festplatte). Nur Owner. Standardmäßig deaktiviert; aktivieren mit commands.debug: true.

Beispiele:

/debug show
/debug set messages.responsePrefix="[openclaw]"
/debug set channels.whatsapp.allowFrom=["+1555","+4477"]
/debug unset messages.responsePrefix
/debug reset

Hinweise:

  • Overrides werden sofort auf neue Config-Lesevorgänge angewendet, schreiben aber nicht in openclaw.json.
  • Verwende /debug reset, um alle Overrides zu löschen und zur gespeicherten Config zurückzukehren.

Config-Updates

/config schreibt in deine gespeicherte Config (openclaw.json). Nur Owner. Standardmäßig deaktiviert; aktivieren mit commands.config: true.

Beispiele:

/config show
/config show messages.responsePrefix
/config get messages.responsePrefix
/config set messages.responsePrefix="[openclaw]"
/config unset messages.responsePrefix

Hinweise:

  • Config wird vor dem Schreiben validiert; ungültige Änderungen werden abgelehnt.
  • /config-Updates bleiben über Neustarts hinweg erhalten.

Oberflächen-Hinweise

  • Text-Befehle laufen in der normalen Chat-Session (DMs teilen sich main, Gruppen haben ihre eigene Session).
  • Native Befehle verwenden isolierte Sessions:
    • Discord: agent:<agentId>:discord:slash:<userId>
    • Slack: agent:<agentId>:slack:slash:<userId> (Präfix konfigurierbar über channels.slack.slashCommand.sessionPrefix)
    • Telegram: telegram:slash:<userId> (zielt auf die Chat-Session über CommandTargetSessionKey)
  • /stop zielt auf die aktive Chat-Session, damit es den aktuellen Run abbrechen kann.
  • Slack: channels.slack.slashCommand wird weiterhin für einen einzelnen /openclaw-artigen Befehl unterstützt. Wenn du commands.native aktivierst, musst du einen Slack-Slash-Befehl pro eingebautem Befehl erstellen (gleiche Namen wie /help). Befehlsargument-Menüs für Slack werden als ephemere Block-Kit-Buttons geliefert.
    • Slack-Native-Ausnahme: Registriere /agentstatus (nicht /status), weil Slack /status reserviert. Text-/status funktioniert weiterhin in Slack-Nachrichten.