Exec-Genehmigungen
Exec-Genehmigungen sind die Schutzmaßnahme der Companion-App / des Node-Hosts, damit ein in einer Sandbox ausgeführter Agent Befehle auf einem echten Host (gateway oder node) ausführen darf. Verstehen Sie das wie eine Sicherheitsverriegelung:
Befehle sind nur erlaubt, wenn Richtlinie + Allowlist + (optionale) Benutzerfreigabe alle übereinstimmen.
Exec-Genehmigungen gelten zusätzlich zur Tool-Richtlinie und zum Elevated-Gating (außer wenn elevated auf full gesetzt ist; dann werden Genehmigungen übersprungen).
Die wirksame Richtlinie ist die strengere von tools.exec.* und den Standardwerten der Genehmigungen; wenn ein Genehmigungsfeld fehlt, wird der Wert aus tools.exec verwendet.
Host-Exec verwendet auch den lokalen Genehmigungsstatus auf diesem Rechner. Ein hostlokales
ask: "always" in ~/.openclaw/exec-approvals.json sorgt weiterhin für Rückfragen, selbst wenn
Sitzungs- oder Konfigurationsstandards ask: "on-miss" anfordern.
Verwenden Sie openclaw approvals get, openclaw approvals get --gateway oder
openclaw approvals get --node <id|name|ip>, um die angeforderte Richtlinie,
die Quellen der Host-Richtlinie und das wirksame Ergebnis zu prüfen.
Für den lokalen Rechner zeigt openclaw exec-policy show dieselbe zusammengeführte Ansicht an, und
openclaw exec-policy set|preset kann die lokal angeforderte Richtlinie in einem Schritt mit der
lokalen Host-Genehmigungsdatei synchronisieren. Wenn ein lokaler Geltungsbereich host=node anfordert,
meldet openclaw exec-policy show diesen Geltungsbereich zur Laufzeit als Node-verwaltet, statt
vorzutäuschen, dass die lokale Genehmigungsdatei die tatsächlich maßgebliche Quelle ist.
Wenn die UI der Companion-App nicht verfügbar ist, wird jede Anfrage, die eine Rückfrage erfordert,
durch den Ask-Fallback aufgelöst (Standard: deny).
Native Chat-Genehmigungsclients können auf der ausstehenden Genehmigungsnachricht auch kanalspezifische Bedienmöglichkeiten anbieten. Matrix kann zum Beispiel Reaktionskürzel auf der
Genehmigungsabfrage vorbereiten (✅ einmal erlauben, ❌ ablehnen und ♾️ immer erlauben, wenn verfügbar)
und trotzdem die /approve ...-Befehle als Fallback in der Nachricht belassen.
Wo dies gilt
Exec-Genehmigungen werden lokal auf dem Ausführungshost erzwungen:- Gateway-Host →
openclaw-Prozess auf dem Gateway-Rechner - Node-Host → Node-Runner (macOS-Companion-App oder Headless-Node-Host)
- Für das Gateway authentifizierte Aufrufer sind vertrauenswürdige Operatoren für dieses Gateway.
- Gekoppelte Nodes erweitern diese Fähigkeit als vertrauenswürdiger Operator auf den Node-Host.
- Exec-Genehmigungen verringern das Risiko versehentlicher Ausführung, sind aber keine Authentifizierungsgrenze pro Benutzer.
- Genehmigte Ausführungen auf dem Node-Host binden den kanonischen Ausführungskontext: kanonisches cwd, exaktes argv, env-Bindung falls vorhanden und angehefteten ausführbaren Pfad, sofern zutreffend.
- Für Shell-Skripte und direkte Interpreter-/Runtime-Dateiaufrufe versucht OpenClaw außerdem, genau einen konkreten lokalen Dateiopeanden zu binden. Wenn sich diese gebundene Datei nach der Genehmigung, aber vor der Ausführung ändert, wird die Ausführung verweigert, statt abgewichenen Inhalt auszuführen.
- Diese Dateibindung ist absichtlich Best-Effort und kein vollständiges semantisches Modell jedes Interpreter-/Runtime-Ladepfads. Wenn der Genehmigungsmodus nicht genau eine konkrete lokale Datei zur Bindung identifizieren kann, verweigert er die Erstellung einer genehmigungsgestützten Ausführung, statt vollständige Abdeckung vorzutäuschen.
- Node-Host-Service leitet
system.runüber lokales IPC an die macOS-App weiter. - macOS-App erzwingt Genehmigungen und führt den Befehl im UI-Kontext aus.
Einstellungen und Speicherung
Genehmigungen liegen in einer lokalen JSON-Datei auf dem Ausführungshost:~/.openclaw/exec-approvals.json
Beispielschema:
„YOLO“-Modus ohne Genehmigungen
Wenn Host-Exec ohne Genehmigungsabfragen ausgeführt werden soll, müssen Sie beide Richtlinienebenen öffnen:- angeforderte Exec-Richtlinie in der OpenClaw-Konfiguration (
tools.exec.*) - hostlokale Genehmigungsrichtlinie in
~/.openclaw/exec-approvals.json
tools.exec.security:fullaufgateway/nodetools.exec.ask:off- host
askFallback:full
tools.exec.host=autowählt aus, wo Exec ausgeführt wird: in der Sandbox, wenn verfügbar, andernfalls auf dem Gateway.- YOLO wählt aus, wie Host-Exec genehmigt wird:
security=fullplusask=off. - Im YOLO-Modus fügt OpenClaw keine zusätzliche heuristische Genehmigungsschranke für Befehlsverschleierung und keine Skript-Preflight-Ablehnungsebene zusätzlich zur konfigurierten Host-Exec-Richtlinie hinzu.
automacht Gateway-Routing nicht zu einer freien Umgehung aus einer Sandbox-Sitzung heraus. Eine Anfrage pro Aufruf mithost=nodeist vonautoaus erlaubt, undhost=gatewayist vonautoaus nur erlaubt, wenn keine Sandbox-Runtime aktiv ist. Wenn Sie einen stabilen Nicht-auto-Standard wollen, setzen Sietools.exec.hostoder verwenden Sie/exec host=...explizit.
allowlist / on-miss
oder deny.
Dauerhafte Einrichtung „nie nachfragen“ für Gateway-Hosts:
- lokale
tools.exec.host/security/ask - lokale Standardwerte in
~/.openclaw/exec-approvals.json
openclaw approvals set --gateway oder
openclaw approvals set --node <id|name|ip>.
Für einen Node-Host wenden Sie stattdessen dieselbe Genehmigungsdatei auf diesem Node an:
openclaw exec-policysynchronisiert keine Node-Genehmigungenopenclaw exec-policy set --host nodewird abgelehnt- Node-Exec-Genehmigungen werden zur Laufzeit vom Node abgerufen, daher müssen zielgerichtete Aktualisierungen für Nodes
openclaw approvals --node ...verwenden
/exec security=full ask=offändert nur die aktuelle Sitzung./elevated fullist eine Notfall-Kurzform, die für diese Sitzung auch Exec-Genehmigungen überspringt.
Richtlinienschalter
Sicherheit (exec.security)
- deny: alle Host-Exec-Anfragen blockieren.
- allowlist: nur Befehle aus der Allowlist erlauben.
- full: alles erlauben (entspricht elevated).
Ask (exec.ask)
- off: nie nachfragen.
- on-miss: nur nachfragen, wenn die Allowlist nicht passt.
- always: bei jedem Befehl nachfragen.
- Dauerhaftes Vertrauen per
allow-alwaysunterdrückt Rückfragen nicht, wenn der wirksame Ask-Modusalwaysist
Ask-Fallback (askFallback)
Wenn eine Rückfrage erforderlich ist, aber keine UI erreichbar ist, entscheidet der Fallback:
- deny: blockieren.
- allowlist: nur erlauben, wenn die Allowlist passt.
- full: erlauben.
Härtung für Inline-Interpreter-Eval (tools.exec.strictInlineEval)
Wenn tools.exec.strictInlineEval=true, behandelt OpenClaw Inline-Code-Eval-Formen als nur nach Genehmigung erlaubt, selbst wenn die Interpreter-Binärdatei selbst in der Allowlist steht.
Beispiele:
python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
- benötigen diese Befehle weiterhin eine explizite Genehmigung;
- persistiert
allow-alwaysdafür nicht automatisch neue Allowlist-Einträge.
Allowlist (pro Agent)
Allowlists gelten pro Agent. Wenn mehrere Agenten vorhanden sind, wechseln Sie in der macOS-App den Agenten, den Sie bearbeiten. Muster sind globale Übereinstimmungen ohne Beachtung der Groß-/Kleinschreibung. Muster sollten zu Binärpfaden aufgelöst werden (Einträge nur mit Basename werden ignoriert). Alteagents.default-Einträge werden beim Laden nach agents.main migriert.
Shell-Ketten wie echo ok && pwd erfordern weiterhin, dass jedes Top-Level-Segment die Allowlist-Regeln erfüllt.
Beispiele:
~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
- id stabile UUID für die UI-Identität (optional)
- last used Zeitstempel
- last used command
- last resolved path
Skill-CLIs automatisch erlauben
Wenn Auto-allow skill CLIs aktiviert ist, werden von bekannten Skills referenzierte ausführbare Dateien auf Nodes (macOS-Node oder Headless-Node-Host) als auf der Allowlist behandelt. Dabei wirdskills.bins über die Gateway-RPC verwendet, um die Liste der Skill-Binaries abzurufen. Deaktivieren Sie dies, wenn Sie strikte manuelle Allowlists möchten.
Wichtige Vertrauenshinweise:
- Dies ist eine implizite Convenience-Allowlist, getrennt von manuellen Pfad-Allowlist-Einträgen.
- Sie ist für vertrauenswürdige Operatorumgebungen gedacht, in denen Gateway und Node dieselbe Vertrauensgrenze teilen.
- Wenn Sie striktes explizites Vertrauen benötigen, belassen Sie
autoAllowSkills: falseund verwenden Sie nur manuelle Pfad-Allowlist-Einträge.
Sichere Binaries (nur stdin)
tools.exec.safeBins definiert eine kleine Liste von nur-stdin-Binärdateien (zum Beispiel cut),
die im Allowlist-Modus ohne explizite Allowlist-Einträge ausgeführt werden können. Sichere Binaries lehnen
positionale Dateiar gumente und pfadähnliche Tokens ab, sodass sie nur auf dem eingehenden Stream arbeiten können.
Behandeln Sie dies als engen Schnellpfad für Stream-Filter, nicht als allgemeine Vertrauensliste.
Fügen Sie keine Interpreter- oder Runtime-Binaries (zum Beispiel python3, node, ruby, bash, sh, zsh) zu safeBins hinzu.
Wenn ein Befehl Code auswerten, Unterbefehle ausführen oder per Design Dateien lesen kann, bevorzugen Sie explizite Allowlist-Einträge und lassen Sie Genehmigungsabfragen aktiviert.
Benutzerdefinierte sichere Binaries müssen ein explizites Profil in tools.exec.safeBinProfiles.<bin> definieren.
Die Validierung erfolgt deterministisch allein aus der argv-Form (keine Host-Dateisystem-Existenzprüfungen),
wodurch Oracle-Verhalten zur Dateiexistenz durch Allow/Deny-Unterschiede verhindert wird.
Dateiorientierte Optionen werden für standardmäßige sichere Binaries abgelehnt (zum Beispiel sort -o, sort --output,
sort --files0-from, sort --compress-program, sort --random-source,
sort --temporary-directory/-T, wc --files0-from, jq -f/--from-file,
grep -f/--file).
Sichere Binaries erzwingen außerdem eine explizite Richtlinie pro Binärdatei für Flags, die das Nur-stdin-Verhalten aufheben (zum Beispiel sort -o/--output/--compress-program und rekursive grep-Flags).
Lange Optionen werden im Modus für sichere Binaries fail-closed validiert: unbekannte Flags und mehrdeutige
Abkürzungen werden abgelehnt.
Abgelehnte Flags nach Safe-Bin-Profil:
grep:--dereference-recursive,--directories,--exclude-from,--file,--recursive,-R,-d,-f,-rjq:--argfile,--from-file,--library-path,--rawfile,--slurpfile,-L,-fsort:--compress-program,--files0-from,--output,--random-source,--temporary-directory,-T,-owc:--files0-from
$VARS-Expansion) für nur-stdin-Segmente, sodass Muster wie * oder $HOME/... nicht
verwendet werden können, um Dateilesevorgänge einzuschmuggeln.
Sichere Binaries müssen außerdem aus vertrauenswürdigen Binary-Verzeichnissen aufgelöst werden (Systemstandardwerte plus optionale
tools.exec.safeBinTrustedDirs). PATH-Einträge werden niemals automatisch als vertrauenswürdig eingestuft.
Die standardmäßigen vertrauenswürdigen Verzeichnisse für sichere Binaries sind absichtlich minimal: /bin, /usr/bin.
Wenn sich Ihre ausführbare sichere Binary in Paketmanager-/Benutzerpfaden befindet (zum Beispiel
/opt/homebrew/bin, /usr/local/bin, /opt/local/bin, /snap/bin), fügen Sie sie explizit
zu tools.exec.safeBinTrustedDirs hinzu.
Shell-Verkettung und Umleitungen werden im Allowlist-Modus nicht automatisch erlaubt.
Shell-Verkettung (&&, ||, ;) ist erlaubt, wenn jedes Top-Level-Segment die Allowlist erfüllt
(einschließlich sicherer Binaries oder automatischer Skill-Allowlist). Umleitungen bleiben im Allowlist-Modus nicht unterstützt.
Befehlssubstitution ($() / Backticks) wird beim Allowlist-Parsen abgelehnt, auch innerhalb
doppelter Anführungszeichen; verwenden Sie einfache Anführungszeichen, wenn Sie wörtlichen $()-Text benötigen.
Bei Genehmigungen in der macOS-Companion-App wird roher Shell-Text, der Shell-Steuer- oder Expansionssyntax enthält
(&&, ||, ;, |, `, $, <, >, (, )), als Allowlist-Fehlschlag behandelt, sofern
nicht die Shell-Binary selbst auf der Allowlist steht.
Für Shell-Wrapper (bash|sh|zsh ... -c/-lc) werden anfragebezogene env-Überschreibungen auf eine
kleine explizite Allowlist reduziert (TERM, LANG, LC_*, COLORTERM, NO_COLOR, FORCE_COLOR).
Bei Entscheidungen allow-always im Allowlist-Modus persistieren bekannte Dispatch-Wrapper
(env, nice, nohup, stdbuf, timeout) innere ausführbare Pfade statt Wrapper-Pfade.
Shell-Multiplexer (busybox, toybox) werden auch für Shell-Applets (sh, ash,
usw.) entpackt, sodass innere ausführbare Dateien statt Multiplexer-Binaries persistiert werden. Wenn ein Wrapper oder
Multiplexer nicht sicher entpackt werden kann, wird kein Allowlist-Eintrag automatisch persistiert.
Wenn Sie Interpreter wie python3 oder node auf die Allowlist setzen, bevorzugen Sie tools.exec.strictInlineEval=true, damit Inline-Eval weiterhin eine explizite Genehmigung erfordert. Im strikten Modus kann allow-always weiterhin harmlose Interpreter-/Skriptaufrufe persistieren, aber Inline-Eval-Träger werden nicht automatisch persistiert.
Standardmäßige sichere Binaries:
cut, uniq, head, tail, tr, wc
grep und sort sind nicht in der Standardliste. Wenn Sie sie aktivieren, behalten Sie explizite Allowlist-Einträge für
ihre Nicht-stdin-Workflows bei.
Für grep im Safe-Bin-Modus geben Sie das Muster mit -e/--regexp an; die
positionale Musterform wird abgelehnt, damit Dateiopeanden nicht als mehrdeutige positionale Argumente eingeschmuggelt werden können.
Sichere Binaries im Vergleich zur Allowlist
| Thema | tools.exec.safeBins | Allowlist (exec-approvals.json) |
|---|---|---|
| Ziel | Enge stdin-Filter automatisch erlauben | Bestimmten ausführbaren Dateien explizit vertrauen |
| Übereinstimmungstyp | Name der ausführbaren Datei + Safe-Bin-argv-Richtlinie | Glob-Muster für aufgelösten Pfad der ausführbaren Datei |
| Argumentbereich | Durch Safe-Bin-Profil und Regeln für Literal-Tokens eingeschränkt | Nur Pfadabgleich; Argumente liegen ansonsten in Ihrer Verantwortung |
| Typische Beispiele | head, tail, tr, wc | jq, python3, node, ffmpeg, benutzerdefinierte CLIs |
| Beste Verwendung | Texttransformationen mit geringem Risiko in Pipelines | Jedes Tool mit breiterem Verhalten oder Nebeneffekten |
safeBinskommt aus der Konfiguration (tools.exec.safeBinsoder pro Agentagents.list[].tools.exec.safeBins).safeBinTrustedDirskommt aus der Konfiguration (tools.exec.safeBinTrustedDirsoder pro Agentagents.list[].tools.exec.safeBinTrustedDirs).safeBinProfileskommt aus der Konfiguration (tools.exec.safeBinProfilesoder pro Agentagents.list[].tools.exec.safeBinProfiles). Profilschlüssel pro Agent überschreiben globale Schlüssel.- Allowlist-Einträge liegen in der hostlokalen
~/.openclaw/exec-approvals.jsonunteragents.<id>.allowlist(oder über die Control UI /openclaw approvals allowlist ...). openclaw security auditwarnt mittools.exec.safe_bins_interpreter_unprofiled, wenn Interpreter-/Runtime-Binaries insafeBinsohne explizite Profile erscheinen.openclaw doctor --fixkann fehlende benutzerdefiniertesafeBinProfiles.<bin>-Einträge als{}vorbereiten (anschließend prüfen und verschärfen). Interpreter-/Runtime-Binaries werden nicht automatisch vorbereitet.
jq explizit in safeBins aufnehmen, lehnt OpenClaw das Built-in env im Safe-Bin-
Modus weiterhin ab, sodass jq -n env die Host-Prozessumgebung nicht ohne expliziten Allowlist-Pfad
oder Genehmigungsabfrage ausgeben kann.
Bearbeiten in der Control UI
Verwenden Sie die Karte Control UI → Nodes → Exec approvals, um Standardwerte, agentbezogene Überschreibungen und Allowlists zu bearbeiten. Wählen Sie einen Geltungsbereich (Standards oder einen Agenten), passen Sie die Richtlinie an, fügen Sie Allowlist-Muster hinzu/entfernen Sie sie und klicken Sie dann auf Save. Die UI zeigt pro Muster Metadaten zu last used an, damit Sie die Liste übersichtlich halten können. Die Zielauswahl wählt Gateway (lokale Genehmigungen) oder einen Node. Nodes müssensystem.execApprovals.get/set ankündigen (macOS-App oder Headless-Node-Host).
Wenn ein Node noch keine Exec-Genehmigungen ankündigt, bearbeiten Sie seine lokale
~/.openclaw/exec-approvals.json direkt.
CLI: openclaw approvals unterstützt das Bearbeiten von Gateway oder Node (siehe Approvals CLI).
Genehmigungsablauf
Wenn eine Rückfrage erforderlich ist, sendet das Gatewayexec.approval.requested an Operator-Clients.
Die Control UI und die macOS-App lösen dies über exec.approval.resolve auf, danach leitet das Gateway die
genehmigte Anfrage an den Node-Host weiter.
Für host=node enthalten Genehmigungsanfragen eine kanonische Payload systemRunPlan. Das Gateway verwendet
diesen Plan als maßgeblichen Befehls-/cwd-/Sitzungskontext, wenn genehmigte system.run-
Anfragen weitergeleitet werden.
Das ist wichtig für die Latenz asynchroner Genehmigungen:
- der Node-Exec-Pfad bereitet einen kanonischen Plan im Voraus vor
- der Genehmigungsdatensatz speichert diesen Plan und seine Bindungsmetadaten
- nach der Genehmigung verwendet der endgültig weitergeleitete
system.run-Aufruf den gespeicherten Plan erneut, statt späteren Änderungen des Aufrufers zu vertrauen - wenn der Aufrufer
command,rawCommand,cwd,agentIdodersessionKeyändert, nachdem die Genehmigungsanfrage erstellt wurde, lehnt das Gateway die weitergeleitete Ausführung als Genehmigungsabweichung ab
Interpreter-/Runtime-Befehle
Genehmigungsgestützte Interpreter-/Runtime-Ausführungen sind absichtlich konservativ:- Exakter argv-/cwd-/env-Kontext wird immer gebunden.
- Direkte Shell-Skript- und direkte Runtime-Dateiformen werden bestmöglich an genau einen konkreten lokalen Dateisnapshot gebunden.
- Häufige Paketmanager-Wrapper-Formen, die sich trotzdem zu genau einer direkten lokalen Datei auflösen (zum Beispiel
pnpm exec,pnpm node,npm exec,npx), werden vor der Bindung entpackt. - Wenn OpenClaw für einen Interpreter-/Runtime-Befehl nicht genau eine konkrete lokale Datei identifizieren kann (zum Beispiel Paketskripte, Eval-Formen, Runtime-spezifische Loader-Ketten oder mehrdeutige Mehrdatei- Formen), wird die genehmigungsgestützte Ausführung abgelehnt, statt semantische Abdeckung zu behaupten, die sie nicht hat.
- Für solche Workflows bevorzugen Sie Sandboxing, eine separate Host-Grenze oder einen explizit vertrauenswürdigen Allowlist-/Full-Workflow, bei dem der Operator die weitergehende Runtime-Semantik akzeptiert.
Exec finished / Exec denied) zuzuordnen. Wenn vor dem
Timeout keine Entscheidung eingeht, wird die Anfrage als Genehmigungs-Timeout behandelt und als Ablehnungsgrund ausgegeben.
Verhalten bei Follow-up-Zustellung
Nachdem ein genehmigter asynchroner Exec abgeschlossen ist, sendet OpenClaw einen Follow-up-Turn des Typsagent an dieselbe Sitzung.
- Wenn ein gültiges externes Zustellungsziel existiert (zustellbarer Channel plus Ziel
to), verwendet die Follow-up-Zustellung diesen Channel. - In reinen Webchat- oder internen Sitzungsabläufen ohne externes Ziel bleibt die Follow-up-Zustellung sitzungsintern (
deliver: false). - Wenn ein Aufrufer explizit strikte externe Zustellung anfordert, aber kein externer Channel aufgelöst werden kann, schlägt die Anfrage mit
INVALID_REQUESTfehl. - Wenn
bestEffortDeliveraktiviert ist und kein externer Channel aufgelöst werden kann, wird die Zustellung auf sitzungsintern herabgestuft, statt fehlzuschlagen.
- Befehl + Argumente
- cwd
- Agent-ID
- aufgelösten Pfad der ausführbaren Datei
- Host- + Richtlinienmetadaten
- Allow once → jetzt ausführen
- Always allow → zur Allowlist hinzufügen + ausführen
- Deny → blockieren
Genehmigungsweiterleitung an Chat-Channels
Sie können Exec-Genehmigungsabfragen an jeden Chat-Channel (einschließlich Plugin-Channels) weiterleiten und sie mit/approve genehmigen. Dies verwendet die normale Pipeline für ausgehende Zustellung.
Konfiguration:
OC_I18N_900006
Antwort im Chat:
OC_I18N_900007
Der Befehl /approve verarbeitet sowohl Exec-Genehmigungen als auch Plugin-Genehmigungen. Wenn die ID nicht zu einer ausstehenden Exec-Genehmigung passt, prüft er automatisch stattdessen Plugin-Genehmigungen.
Weiterleitung von Plugin-Genehmigungen
Die Weiterleitung von Plugin-Genehmigungen verwendet dieselbe Zustellungspipeline wie Exec-Genehmigungen, hat aber eine eigene unabhängige Konfiguration unterapprovals.plugin. Das Aktivieren oder Deaktivieren der einen wirkt sich nicht auf die andere aus.
OC_I18N_900008
Die Form der Konfiguration ist identisch mit approvals.exec: enabled, mode, agentFilter,
sessionFilter und targets funktionieren auf dieselbe Weise.
Channels, die gemeinsame interaktive Antworten unterstützen, rendern dieselben Genehmigungsbuttons sowohl für Exec- als auch für
Plugin-Genehmigungen. Channels ohne gemeinsame interaktive UI fallen auf Klartext mit /approve-
Anweisungen zurück.
Genehmigungen im selben Chat auf jedem Channel
Wenn eine Exec- oder Plugin-Genehmigungsanfrage von einer zustellbaren Chat-Oberfläche ausgeht, kann derselbe Chat sie jetzt standardmäßig mit/approve genehmigen. Dies gilt für Channels wie Slack, Matrix und
Microsoft Teams zusätzlich zu den bestehenden Abläufen über Web-UI und Terminal-UI.
Dieser gemeinsame Textbefehlsweg verwendet das normale Channel-Auth-Modell für diese Konversation. Wenn der
ursprüngliche Chat bereits Befehle senden und Antworten empfangen kann, benötigen Genehmigungsanfragen nicht länger einen
separaten nativen Zustellungsadapter, nur um ausstehend zu bleiben.
Discord und Telegram unterstützen ebenfalls /approve im selben Chat, aber diese Channels verwenden weiterhin ihre
aufgelöste Liste der Genehmigenden für die Autorisierung, selbst wenn native Genehmigungszustellung deaktiviert ist.
Für Telegram und andere native Genehmigungsclients, die das Gateway direkt aufrufen,
ist dieser Fallback absichtlich auf Fehler „Genehmigung nicht gefunden“ begrenzt. Ein echter
Exec-Genehmigungsfehler bzw. eine echte Ablehnung wird nicht stillschweigend erneut als Plugin-Genehmigung versucht.
Native Genehmigungszustellung
Einige Channels können auch als native Genehmigungsclients fungieren. Native Clients fügen DMs für Genehmigende, Fanout in den Ursprungs-Chat und kanalspezifische interaktive Genehmigungs-UX zusätzlich zum gemeinsamen/approve-Ablauf im selben Chat hinzu.
Wenn native Genehmigungskarten/-Buttons verfügbar sind, ist diese native UI der primäre
agentenseitige Pfad. Der Agent sollte dann nicht zusätzlich einen doppelten Klartext-
Befehl /approve im Chat ausgeben, außer wenn das Tool-Ergebnis sagt, dass Chat-Genehmigungen nicht verfügbar sind oder
manuelle Genehmigung der einzig verbleibende Weg ist.
Allgemeines Modell:
- die Host-Exec-Richtlinie entscheidet weiterhin, ob eine Exec-Genehmigung erforderlich ist
approvals.execsteuert die Weiterleitung von Genehmigungsabfragen an andere Chat-Zielechannels.<channel>.execApprovalssteuert, ob dieser Channel als nativer Genehmigungsclient fungiert
- der Channel unterstützt native Genehmigungszustellung
- Genehmigende können aus expliziten
execApprovals.approversoder den dokumentierten Fallback-Quellen dieses Channels aufgelöst werden channels.<channel>.execApprovals.enabledist nicht gesetzt oder"auto"
enabled: false, um einen nativen Genehmigungsclient explizit zu deaktivieren. Setzen Sie enabled: true, um
ihn zu erzwingen, wenn Genehmigende aufgelöst werden. Öffentliche Zustellung an den Ursprungs-Chat bleibt explizit über
channels.<channel>.execApprovals.target.
FAQ: Warum gibt es zwei Exec-Genehmigungskonfigurationen für Chat-Genehmigungen?
- Discord:
channels.discord.execApprovals.* - Slack:
channels.slack.execApprovals.* - Telegram:
channels.telegram.execApprovals.*
/approve-Ablauf im selben Chat und den gemeinsamen Genehmigungsbuttons hinzu.
Gemeinsames Verhalten:
- Slack, Matrix, Microsoft Teams und ähnliche zustellbare Chats verwenden das normale Channel-Auth-Modell
für
/approveim selben Chat - wenn ein nativer Genehmigungsclient automatisch aktiviert wird, ist das standardmäßige native Zustellungsziel DMs für Genehmigende
- bei Discord und Telegram können nur aufgelöste Genehmigende genehmigen oder ablehnen
- Discord-Genehmigende können explizit sein (
execApprovals.approvers) oder auscommands.ownerAllowFromabgeleitet werden - Telegram-Genehmigende können explizit sein (
execApprovals.approvers) oder aus vorhandener Owner-Konfiguration abgeleitet werden (allowFrom, plusdefaultTofür Direktnachrichten, wo unterstützt) - Slack-Genehmigende können explizit sein (
execApprovals.approvers) oder auscommands.ownerAllowFromabgeleitet werden - native Slack-Buttons bewahren die Art der Genehmigungs-ID, sodass
plugin:-IDs Plugin-Genehmigungen ohne eine zweite Slack-lokale Fallback-Ebene auflösen können - natives Matrix-DM-/Channel-Routing und Reaktionskürzel verarbeiten sowohl Exec- als auch Plugin-Genehmigungen;
die Plugin-Autorisierung kommt weiterhin aus
channels.matrix.dm.allowFrom - der Anfragende muss kein Genehmigender sein
- der Ursprungs-Chat kann direkt mit
/approvegenehmigen, wenn dieser Chat bereits Befehle und Antworten unterstützt - native Discord-Genehmigungsbuttons routen nach Art der Genehmigungs-ID:
plugin:-IDs gehen direkt zu Plugin-Genehmigungen, alles andere geht zu Exec-Genehmigungen - native Telegram-Genehmigungsbuttons folgen demselben begrenzten Exec-zu-Plugin-Fallback wie
/approve - wenn natives
targetdie Zustellung an den Ursprungs-Chat aktiviert, enthalten Genehmigungsabfragen den Befehlstext - ausstehende Exec-Genehmigungen laufen standardmäßig nach 30 Minuten ab
- wenn keine Operator-UI oder kein konfigurierter Genehmigungsclient die Anfrage annehmen kann, fällt die Abfrage auf
askFallbackzurück
target: "dm"). Sie können zu channel oder both wechseln, wenn Sie möchten,
dass Genehmigungsabfragen auch im ursprünglichen Telegram-Chat/Topic erscheinen. Bei Telegram-Forenthemen
bewahrt OpenClaw das Thema sowohl für die Genehmigungsabfrage als auch für das Follow-up nach der Genehmigung.
Siehe:
macOS-IPC-Ablauf
OC_I18N_900009 Sicherheitshinweise:- Unix-Socket-Modus
0600, Token gespeichert inexec-approvals.json. - Same-UID-Peer-Prüfung.
- Challenge/Response (Nonce + HMAC-Token + Request-Hash) + kurze TTL.
Systemereignisse
Der Exec-Lebenszyklus wird als Systemnachrichten angezeigt:Exec running(nur wenn der Befehl den Schwellenwert für die Laufmeldung überschreitet)Exec finishedExec denied
runId, damit sie leicht zugeordnet werden können.
Verhalten bei abgelehnter Genehmigung
Wenn eine asynchrone Exec-Genehmigung abgelehnt wird, verhindert OpenClaw, dass der Agent Ausgaben eines früheren Laufs desselben Befehls in der Sitzung wiederverwendet. Der Ablehnungsgrund wird zusammen mit einer expliziten Anweisung übergeben, dass keine Befehlsausgabe verfügbar ist, was verhindert, dass der Agent behauptet, es gebe neue Ausgabe, oder den abgelehnten Befehl mit veralteten Ergebnissen eines früheren erfolgreichen Laufs wiederholt.Auswirkungen
- full ist mächtig; bevorzugen Sie wenn möglich Allowlists.
- ask hält Sie im Ablauf, ermöglicht aber weiterhin schnelle Genehmigungen.
- Allowlists pro Agent verhindern, dass die Genehmigungen eines Agenten in andere übergreifen.
- Genehmigungen gelten nur für Host-Exec-Anfragen von autorisierten Sendern. Nicht autorisierte Sender können
/execnicht ausführen. /exec security=fullist eine Sitzungs-Kurzform für autorisierte Operatoren und überspringt Genehmigungen absichtlich. Um Host-Exec vollständig zu blockieren, setzen Sie die Genehmigungssicherheit aufdenyoder verweigern Sie das Toolexecüber die Tool-Richtlinie.
Verwandt
- Exec — Tool zur Ausführung von Shell-Befehlen
- Sandboxing — Sandbox-Modi und Workspace-Zugriff
- Sicherheit — Sicherheitsmodell und Härtung
- Sandbox vs Tool-Richtlinie vs Elevated — wann was verwendet werden sollte