Slash Commands
Commands werden vom Gateway verarbeitet. Die meisten Commands müssen als eigenständige Nachricht gesendet werden, die mit / beginnt.
Der Host-only Bash-Chat-Command verwendet ! <cmd> (mit /bash <cmd> als Alias).
Es gibt zwei verwandte Systeme:
- Commands: eigenständige
/...Nachrichten. - Directives:
/think,/verbose,/reasoning,/elevated,/exec,/model,/queue.- Directives werden aus der Nachricht entfernt, bevor das Modell sie sieht.
- In normalen Chat-Nachrichten (nicht nur Directives) werden sie als “Inline-Hinweise” behandelt und speichern keine Session-Einstellungen dauerhaft.
- In reinen Directive-Nachrichten (die Nachricht enthält nur Directives) werden sie in der Session gespeichert und mit einer Bestätigung beantwortet.
- Directives werden nur für autorisierte Absender angewendet (Channel-Allowlists/Pairing plus
commands.useAccessGroups). Nicht autorisierte Absender sehen Directives als normalen Text.
Es gibt auch ein paar Inline-Shortcuts (nur für Absender auf der Allowlist): /help, /commands, /status, /whoami (/id).
Sie werden sofort ausgeführt, vor dem Modell entfernt, und der restliche Text wird normal weiterverarbeitet.
Config
{
commands: {
native: "auto",
nativeSkills: "auto",
text: true,
bash: false,
bashForegroundMs: 2000,
config: false,
debug: false,
restart: false,
useAccessGroups: true,
},
}
commands.text(Standardtrue) aktiviert das Parsen von/...in Chat-Nachrichten.- Auf Plattformen ohne native Commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams) funktionieren Text-Commands auch, wenn du das auf
falsesetzt.
- Auf Plattformen ohne native Commands (WhatsApp/WebChat/Signal/iMessage/Google Chat/MS Teams) funktionieren Text-Commands auch, wenn du das auf
commands.native(Standard"auto") registriert native Commands.- Auto: an für Discord/Telegram; aus für Slack (bis du Slash Commands hinzufügst); ignoriert für Provider ohne native Unterstützung.
- Setze
channels.discord.commands.native,channels.telegram.commands.nativeoderchannels.slack.commands.native, um pro Provider zu überschreiben (bool oder"auto"). falselöscht zuvor registrierte Commands auf Discord/Telegram beim Start. Slack-Commands werden in der Slack-App verwaltet und nicht automatisch entfernt.
commands.nativeSkills(Standard"auto") registriert Skill-Commands nativ, wenn unterstützt.- Auto: an für Discord/Telegram; aus für Slack (Slack erfordert einen Slash Command pro Skill).
- Setze
channels.discord.commands.nativeSkills,channels.telegram.commands.nativeSkillsoderchannels.slack.commands.nativeSkills, um pro Provider zu überschreiben (bool oder"auto").
commands.bash(Standardfalse) aktiviert! <cmd>zum Ausführen von Host-Shell-Befehlen (/bash <cmd>ist ein Alias; erforderttools.elevatedAllowlists).commands.bashForegroundMs(Standard2000) steuert, wie lange Bash wartet, bevor es in den Hintergrundmodus wechselt (0= sofort im Hintergrund).commands.config(Standardfalse) aktiviert/config(liest/schreibtopenclaw.json).commands.debug(Standardfalse) aktiviert/debug(nur Runtime-Overrides).commands.useAccessGroups(Standardtrue) erzwingt Allowlists/Policies für Commands.
Command-Liste
Text + nativ (wenn aktiviert):
/help/commands/skill <name> [input](führt einen Skill nach Namen aus)/status(zeigt aktuellen Status; 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(löst Exec-Approval-Prompts auf)/context [list|detail|json](erklärt “Context”;detailzeigt pro Datei + pro Tool + pro Skill + System-Prompt-Größe)/whoami(zeigt deine Sender-ID; Alias:/id)/subagents list|stop|log|info|send(inspiziert, stoppt, loggt oder sendet Nachrichten an Sub-Agent-Runs für die aktuelle Session)/config show|get|set|unset(speichert Config auf Disk, nur Owner; erfordertcommands.config: true)/debug show|set|unset|reset(Runtime-Overrides, nur Owner; erfordertcommands.debug: true)/usage off|tokens|full|cost(Nutzungs-Footer pro Antwort oder lokale Kostenzusammenfassung)/tts off|always|inbound|tagged|status|provider|limit|summary|audio(steuert TTS; siehe /tts)- Discord: nativer Command ist
/voice(Discord reserviert/tts); Text/ttsfunktioniert weiterhin.
- Discord: nativer Command ist
/stop/restart/dock-telegram(Alias:/dock_telegram) (schaltet Antworten auf Telegram um)/dock-discord(Alias:/dock_discord) (schaltet Antworten auf Discord um)/dock-slack(Alias:/dock_slack) (schaltet Antworten auf Slack um)/activation mention|always(nur Gruppen)/send on|off|inherit(nur Owner)/resetoder/new [model](optionaler Model-Hinweis; Rest wird durchgereicht)/think <off|minimal|low|medium|high|xhigh>(dynamische Auswahl nach Model/Provider; Aliase:/thinking,/t)/verbose on|full|off(Alias:/v)/reasoning on|off|stream(Alias:/reason; wenn an, sendet eine separate Nachricht mit PräfixReasoning:;stream= nur Telegram-Draft)/elevated on|off|ask|full(Alias:/elev;fullüberspringt Exec-Approvals)/exec host=<sandbox|gateway|node> security=<deny|allowlist|full> ask=<off|on-miss|always> node=<id>(sende/exec, um aktuelle Einstellungen zu sehen)/model <name>(Alias:/models; oder/<alias>ausagents.defaults.models.*.alias)/queue <mode>(plus Optionen wiedebounce:2s cap:25 drop:summarize; sende/queue, um aktuelle Einstellungen zu sehen)/bash <command>(nur Host; Alias für! <command>; erfordertcommands.bash: true+tools.elevatedAllowlists)
Nur Text:
/compact [instructions](siehe /concepts/compaction)! <command>(nur Host; einer zur Zeit; nutze!poll+!stopfür lang laufende Jobs)!poll(prüft Output/Status; akzeptiert optionalesessionId;/bash pollfunktioniert auch)!stop(stoppt den laufenden Bash-Job; akzeptiert optionalesessionId;/bash stopfunktioniert auch)
Hinweise:
- Commands akzeptieren ein optionales
:zwischen Command und Args (z. B./think: high,/send: on,/help:). /new <model>akzeptiert einen Model-Alias,provider/modeloder einen Provider-Namen (Fuzzy-Match); wenn kein Match, wird der Text als Nachrichteninhalt behandelt.- Für eine vollständige Provider-Nutzungsaufschlüsselung nutze
openclaw status --usage. /allowlist add|removeerfordertcommands.config=trueund respektiert Channel-configWrites./usagesteuert den Nutzungs-Footer pro Antwort;/usage costgibt eine lokale Kostenzusammenfassung aus OpenClaw-Session-Logs aus./restartist standardmäßig deaktiviert; setzecommands.restart: true, um es zu aktivieren./verboseist für Debugging und zusätzliche Sichtbarkeit gedacht; lass es im normalen Betrieb aus./reasoning(und/verbose) sind riskant in Gruppeneinstellungen: sie können internes Reasoning oder Tool-Output offenlegen, das du nicht teilen wolltest. Lass sie besser aus, besonders in Gruppenchats.- Fast Path: reine Command-Nachrichten von Absendern auf der Allowlist werden sofort verarbeitet (umgehen Queue + Model).
- Gruppen-Mention-Gating: reine Command-Nachrichten von Absendern auf der Allowlist umgehen Mention-Anforderungen.
- Inline-Shortcuts (nur Absender auf Allowlist): bestimmte Commands funktionieren auch eingebettet in einer normalen Nachricht und werden entfernt, bevor das Modell den restlichen Text sieht.
- Beispiel:
hey /statuslöst eine Status-Antwort aus, und der restliche Text wird normal weiterverarbeitet.
- Beispiel:
- Aktuell:
/help,/commands,/status,/whoami(/id). - Nicht autorisierte reine Command-Nachrichten werden stillschweigend ignoriert, und Inline-
/...-Tokens werden als normaler Text behandelt. - Skill-Commands:
user-invocableSkills werden als Slash Commands bereitgestellt. Namen werden aufa-z0-9_bereinigt (max. 32 Zeichen); Kollisionen erhalten numerische Suffixe (z. B._2)./skill <name> [input]führt einen Skill nach Namen aus (nützlich, wenn native Command-Limits pro-Skill-Commands verhindern).- Standardmäßig werden Skill-Commands als normale Anfrage an das Modell weitergeleitet.
- Skills können optional
command-dispatch: tooldeklarieren, um den Command direkt an ein Tool zu routen (deterministisch, kein Modell). - Beispiel:
/prose(OpenProse-Plugin) — siehe OpenProse.
- Native Command-Argumente: Discord nutzt Autocomplete für dynamische Optionen (und Button-Menüs, wenn du erforderliche Args weglässt). Telegram und Slack zeigen ein Button-Menü, wenn ein Command Auswahlmöglichkeiten unterstützt und du das Arg weglässt.
Nutzungsoberflächen (was wird wo angezeigt)
- Provider-Nutzung/Quota (Beispiel: “Claude 80% übrig”) wird in
/statusfür den aktuellen Model-Provider angezeigt, wenn Nutzungstracking aktiviert ist. - Tokens/Kosten pro Antwort wird durch
/usage off|tokens|fullgesteuert (an normale Antworten angehängt). /model statuszeigt Models/Auth/Endpoints, nicht Nutzung.
Model-Auswahl (/model)
/model ist als Directive 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 (Model-Familie + verfügbare Provider)./model <#>wählt aus diesem Picker aus (und bevorzugt den aktuellen Provider, wenn möglich)./model statuszeigt die detaillierte Ansicht, einschließlich konfiguriertem Provider-Endpoint (baseUrl) und API-Modus (api), wenn verfügbar.
Debug-Overrides
/debug ermöglicht nur Runtime-Config-Overrides (Speicher, nicht Disk). Nur Owner. Standardmäßig deaktiviert; aktiviere 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-Reads angewendet, schreiben aber nicht in
openclaw.json. - Nutze
/debug reset, um alle Overrides zu löschen und zur On-Disk-Config zurückzukehren.
Config-Updates
/config schreibt in deine On-Disk-Config (openclaw.json). Nur Owner. Standardmäßig deaktiviert; aktiviere 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 bestehen.
Plattform-Hinweise
- Text-Commands laufen in der normalen Chat-Session (DMs teilen sich
main, Gruppen haben ihre eigene Session). - Native Commands nutzen 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-Style-Command unterstützt. Wenn ducommands.nativeaktivierst, musst du einen Slack-Slash-Command pro eingebautem Command erstellen (gleiche Namen wie/help). Command-Argument-Menüs für Slack werden als ephemere Block-Kit-Buttons bereitgestellt.