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.allowFromgesetzt ist, ist dies die einzige verwendete Allowlist; ansonsten kommt die Autorisierung von Kanal-Allowlists/Pairing pluscommands.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(Standardtrue) 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
falsesetzt.
- Auf Oberflächen ohne native Befehle (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams) funktionieren Text-Befehle auch dann, wenn du dies auf
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.nativeoderchannels.slack.commands.nativezum Überschreiben pro Provider (bool oder"auto"). falselö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.nativeSkillsoderchannels.slack.commands.nativeSkillszum Überschreiben pro Provider (bool oder"auto").
commands.bash(Standardfalse) aktiviert! <cmd>zum Ausführen von Host-Shell-Befehlen (/bash <cmd>ist ein Alias; erforderttools.elevated-Allowlists).commands.bashForegroundMs(Standard2000) steuert, wie lange Bash wartet, bevor es in den Hintergrundmodus wechselt (0wechselt sofort).commands.config(Standardfalse) aktiviert/config(liest/schreibtopenclaw.json).commands.debug(Standardfalse) 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 undcommands.useAccessGroupswerden ignoriert). Verwende"*"für einen globalen Standard; provider-spezifische Keys überschreiben ihn.commands.useAccessGroups(Standardtrue) erzwingt Allowlists/Policies für Befehle, wenncommands.allowFromnicht 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;detailzeigt 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; erfordertcommands.config: true)/debug show|set|unset|reset(Runtime-Overrides, nur Owner; erfordertcommands.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-/ttsfunktioniert weiterhin.
- Discord: nativer Befehl ist
/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)/resetoder/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äfixReasoning: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>(/execsenden zeigt aktuellen Status)/model <name>(Alias:/models; oder/<alias>ausagents.defaults.models.*.alias)/queue <mode>(plus Optionen wiedebounce:2s cap:25 drop:summarize;/queuesenden zeigt aktuelle Einstellungen)/bash <command>(nur Host; Alias für! <command>; erfordertcommands.bash: true+tools.elevated-Allowlists)
Nur Text:
/compact [instructions](siehe /concepts/compaction)! <command>(nur Host; einzeln; verwende!poll+!stopfür lang laufende Jobs)!poll(Ausgabe/Status prüfen; akzeptiert optionalesessionId;/bash pollfunktioniert auch)!stop(laufenden Bash-Job stoppen; akzeptiert optionalesessionId;/bash stopfunktioniert auch)
Hinweise:
- Befehle akzeptieren ein optionales
:zwischen Befehl und Argumenten (z.B./think: high,/send: on,/help:). /new <model>akzeptiert einen Modell-Alias,provider/modeloder 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|removeerfordertcommands.config=trueund berücksichtigt Kanal-configWrites.- Bei Multi-Account-Kanälen berücksichtigen config-gezielte
/allowlist --account <id>und/config set channels.<provider>.accounts.<id>...ebenfalls dieconfigWritesdes Ziel-Accounts. /usagesteuert den pro-Antwort-Nutzungsfooter;/usage costgibt eine lokale Kostenübersicht aus den OpenClaw-Session-Logs aus./restartist standardmäßig aktiviert; setzecommands.restart: falsezum Deaktivieren.- Discord-only nativer Befehl:
/vc join|leave|statussteuert Voice-Channels (erfordertchannels.discord.voiceund 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.enabledund/oderchannels.discord.threadBindings.enabled). - ACP-Befehlsreferenz und Runtime-Verhalten: ACP Agents.
/verboseist zum Debuggen und für zusätzliche Sichtbarkeit gedacht; lass es im normalen Betrieb aus./fast on|offspeichert einen Session-Override. Verwende die Sessions-UI-Optioninherit, 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
/verboseaufonoderfullsteht. /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 /statuslöst eine Status-Antwort aus, und der verbleibende Text durchläuft den normalen Flow.
- Beispiel:
- Aktuell:
/help,/commands,/status,/whoami(/id). - Nicht autorisierte reine Befehlsnachrichten werden still ignoriert, und inline
/...-Tokens werden als Klartext behandelt. - Skill-Befehle:
user-invocableSkills werden als Slash-Befehle exponiert. Namen werden zua-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: tooldeklarieren, 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
/statusfür den aktuellen Model-Provider, wenn Nutzungstracking aktiviert ist. - Pro-Antwort Tokens/Kosten wird durch
/usage off|tokens|fullgesteuert (an normale Antworten angehängt). /model statusbetrifft 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:
/modelund/model listzeigen einen kompakten, nummerierten Picker (Modellfamilie + verfügbare Provider).- Auf Discord öffnen
/modelund/modelseinen 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 statuszeigt 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 überchannels.slack.slashCommand.sessionPrefix) - Telegram:
telegram:slash:<userId>(zielt auf die Chat-Session überCommandTargetSessionKey)
- Discord:
/stopzielt auf die aktive Chat-Session, damit es den aktuellen Run abbrechen kann.- Slack:
channels.slack.slashCommandwird weiterhin für einen einzelnen/openclaw-artigen Befehl unterstützt. Wenn ducommands.nativeaktivierst, 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/statusreserviert. Text-/statusfunktioniert weiterhin in Slack-Nachrichten.
- Slack-Native-Ausnahme: Registriere