Exec-Tool
Führt Shell-Befehle im Workspace aus. Unterstützt Ausführung im Vordergrund und Hintergrund überprocess.
Wenn process nicht erlaubt ist, läuft exec synchron und ignoriert yieldMs/background.
Hintergrundsitzungen sind pro Agent begrenzt; process sieht nur Sitzungen desselben Agents.
Parameter
command(erforderlich)workdir(Standard: cwd)env(Überschreibungen für Schlüssel/Wert)yieldMs(Standard 10000): automatischer Hintergrundmodus nach Verzögerungbackground(bool): sofort im Hintergrund ausführentimeout(Sekunden, Standard 1800): bei Ablauf beendenpty(bool): in einem Pseudo-Terminal ausführen, wenn verfügbar (TTY-only-CLIs, Coding-Agents, Terminal-UIs)host(auto | sandbox | gateway | node): wo ausgeführt werden sollsecurity(deny | allowlist | full): Durchsetzungsmodus fürgateway/nodeask(off | on-miss | always): Genehmigungsaufforderungen fürgateway/nodenode(string): Node-ID/-Name fürhost=nodeelevated(bool): erhöhten Modus anfordern (aus der Sandbox auf den konfigurierten Host-Pfad ausbrechen);security=fullwird nur erzwungen, wennelevatedzufullaufgelöst wird
hostverwendet standardmäßigauto: Sandbox, wenn die Sandbox-Laufzeit für die Sitzung aktiv ist, sonst Gateway.autoist die Standard-Routing-Strategie, kein Wildcard.host=nodepro Aufruf ist ausautoheraus erlaubt;host=gatewaypro Aufruf ist nur erlaubt, wenn keine Sandbox-Laufzeit aktiv ist.- Ohne zusätzliche Konfiguration funktioniert
host=autoweiterhin einfach: keine Sandbox bedeutet Auflösung zugateway; eine aktive Sandbox bedeutet, dass in der Sandbox geblieben wird. elevatedverlässt die Sandbox auf den konfigurierten Host-Pfad: standardmäßiggatewayodernode, wenntools.exec.host=nodegesetzt ist (oder die Sitzungsstandardeinstellunghost=nodeist). Es ist nur verfügbar, wenn erhöhter Zugriff für die aktuelle Sitzung bzw. den aktuellen Provider aktiviert ist.- Genehmigungen für
gateway/nodewerden über~/.openclaw/exec-approvals.jsongesteuert. nodeerfordert einen gekoppelten Node (Begleit-App oder headless Node-Host).- Wenn mehrere Nodes verfügbar sind, setzen Sie
exec.nodeodertools.exec.node, um einen auszuwählen. exec host=nodeist der einzige Shell-Ausführungspfad für Nodes; der Legacy-Wrappernodes.runwurde entfernt.- Auf Nicht-Windows-Hosts verwendet exec
SHELL, wenn gesetzt; wennSHELLauffishgesetzt ist, wirdbash(odersh) ausPATHbevorzugt, um mit fish inkompatible Skripte zu vermeiden, und erst dann aufSHELLzurückgegriffen, wenn keines von beiden existiert. - Auf Windows-Hosts bevorzugt exec die Erkennung von PowerShell 7 (
pwsh) (Program Files, ProgramW6432, dann PATH), und fällt dann auf Windows PowerShell 5.1 zurück. - Host-Ausführung (
gateway/node) lehntenv.PATHund Loader-Überschreibungen (LD_*/DYLD_*) ab, um Binary-Hijacking oder eingeschleusten Code zu verhindern. - OpenClaw setzt
OPENCLAW_SHELL=execin der Umgebungsvariablen des gestarteten Befehls (einschließlich PTY- und Sandbox-Ausführung), damit Shell-/Profilregeln den Kontext des Exec-Tools erkennen können. - Wichtig: Sandboxing ist standardmäßig deaktiviert. Wenn Sandboxing deaktiviert ist, wird implizites
host=autozugatewayaufgelöst. Expliziteshost=sandboxschlägt weiterhin geschlossen fehl, statt stillschweigend auf dem Gateway-Host zu laufen. Aktivieren Sie Sandboxing oder verwenden Siehost=gatewaymit Genehmigungen. - Script-Preflight-Prüfungen (für häufige Python-/Node-Shell-Syntaxfehler) untersuchen nur Dateien innerhalb der
effektiven
workdir-Grenze. Wenn ein Skriptpfad außerhalb vonworkdiraufgelöst wird, wird der Preflight für diese Datei übersprungen. - Für lang laufende Arbeiten, die jetzt starten, starten Sie sie einmal und verlassen Sie sich auf das automatische
Completion-Wake, wenn es aktiviert ist und der Befehl Ausgabe erzeugt oder fehlschlägt.
Verwenden Sie
processfür Logs, Status, Eingaben oder Eingriffe; emulieren Sie kein Scheduling mit Sleep-Schleifen, Timeout-Schleifen oder wiederholtem Polling. - Für Arbeiten, die später oder nach Zeitplan stattfinden sollen, verwenden Sie cron statt
exec-Sleep-/Delay-Mustern.
Konfiguration
tools.exec.notifyOnExit(Standard: true): Wenn true, stellen im Hintergrund ausgeführte Exec-Sitzungen beim Beenden ein Systemereignis in die Queue und fordern einen Heartbeat an.tools.exec.approvalRunningNoticeMs(Standard: 10000): sendet einen einzelnen Hinweis „läuft“, wenn ein genehmigungspflichtiger Exec länger als diesen Wert läuft (0 deaktiviert).tools.exec.host(Standard:auto; wird zusandboxaufgelöst, wenn die Sandbox-Laufzeit aktiv ist, sonst zugateway)tools.exec.security(Standard:denyfür Sandbox,fullfür Gateway + Node, wenn nicht gesetzt)tools.exec.ask(Standard:off)- Host-Exec ohne Genehmigung ist der Standard für Gateway + Node. Wenn Sie Genehmigungen/Allowlist-Verhalten möchten, verschärfen Sie sowohl
tools.exec.*als auch die Host-~/.openclaw/exec-approvals.json; siehe Exec approvals. - YOLO kommt von den Standardwerten der Host-Richtlinie (
security=full,ask=off), nicht vonhost=auto. Wenn Sie Gateway- oder Node-Routing erzwingen möchten, setzen Sietools.exec.hostoder verwenden Sie/exec host=.... - Im Modus
security=fullplusask=offfolgt Host-Exec direkt der konfigurierten Richtlinie; es gibt keinen zusätzlichen heuristischen Vorfilter für Befehlsverschleierung. tools.exec.node(Standard: nicht gesetzt)tools.exec.strictInlineEval(Standard: false): Wenn true, erfordern Inline-Interpreter-Eval-Formen wiepython -c,node -e,ruby -e,perl -e,php -r,lua -eundosascript -eimmer eine explizite Genehmigung.allow-alwayskann weiterhin harmlose Interpreter-/Skriptaufrufe dauerhaft speichern, aber Inline-Eval-Formen fragen trotzdem jedes Mal nach.tools.exec.pathPrepend: Liste von Verzeichnissen, die für Exec-Läufe anPATHvorangestellt werden (nur Gateway + Sandbox).tools.exec.safeBins: stdin-only sichere Binaries, die ohne explizite Allowlist-Einträge ausgeführt werden können. Details zum Verhalten finden Sie unter Safe bins.tools.exec.safeBinTrustedDirs: zusätzliche explizite Verzeichnisse, denen bei Pfadprüfungen fürsafeBinsvertraut wird.PATH-Einträge werden niemals automatisch als vertrauenswürdig behandelt. Eingebaute Standardwerte sind/binund/usr/bin.tools.exec.safeBinProfiles: optionale benutzerdefinierte argv-Richtlinie pro Safe Bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
PATH-Behandlung
host=gateway: führt IhrenPATHaus der Login-Shell mit der Exec-Umgebung zusammen. Überschreibungen vonenv.PATHwerden für Host-Ausführung abgelehnt. Der Daemon selbst läuft weiterhin mit minimalemPATH:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: führtsh -lc(Login-Shell) im Container aus, sodass/etc/profilePATHzurücksetzen kann. OpenClaw stelltenv.PATHnach dem Laden des Profils über eine interne Umgebungsvariable voran (ohne Shell-Interpolation);tools.exec.pathPrependgilt auch hier.host=node: Nur nicht blockierte env-Überschreibungen, die Sie übergeben, werden an den Node gesendet. Überschreibungen vonenv.PATHwerden für Host-Ausführung abgelehnt und von Node-Hosts ignoriert. Wenn Sie zusätzliche PATH-Einträge auf einem Node benötigen, konfigurieren Sie die Service-Umgebung des Node-Hosts (systemd/launchd) oder installieren Sie Tools an Standardorten.
Sitzungsüberschreibungen (/exec)
Verwenden Sie /exec, um pro Sitzung Standardwerte für host, security, ask und node festzulegen.
Senden Sie /exec ohne Argumente, um die aktuellen Werte anzuzeigen.
Beispiel:
Autorisierungsmodell
/exec wird nur für autorisierte Sender berücksichtigt (Kanal-Allowlists/Pairing plus commands.useAccessGroups).
Es aktualisiert nur den Sitzungsstatus und schreibt keine Konfiguration. Um exec vollständig zu deaktivieren, sperren Sie es per Tool-
Richtlinie (tools.deny: ["exec"] oder pro Agent). Host-Genehmigungen gelten weiterhin, es sei denn, Sie setzen explizit
security=full und ask=off.
Exec-Genehmigungen (Begleit-App / Node-Host)
Sandboxed Agents können pro Anfrage eine Genehmigung verlangen, bevorexec auf dem Gateway- oder Node-Host ausgeführt wird.
Siehe Exec approvals für Richtlinie, Allowlist und UI-Ablauf.
Wenn Genehmigungen erforderlich sind, gibt das Exec-Tool sofort mit
status: "approval-pending" und einer Genehmigungs-ID zurück. Sobald genehmigt (oder abgelehnt / mit Timeout beendet),
sendet das Gateway Systemereignisse (Exec finished / Exec denied). Wenn der Befehl nach tools.exec.approvalRunningNoticeMs
noch läuft, wird ein einzelner Hinweis Exec running ausgegeben.
Auf Kanälen mit nativen Genehmigungskarten/-Buttons sollte sich der Agent zuerst auf diese
native UI verlassen und einen manuellen /approve-Befehl nur dann einfügen, wenn das Tool-
Ergebnis ausdrücklich sagt, dass Chat-Genehmigungen nicht verfügbar sind oder manuelle Genehmigung der
einzige Weg ist.
Allowlist + Safe Bins
Die manuelle Durchsetzung der Allowlist gleicht nur aufgelöste Binary-Pfade ab (keine Basename-Treffer). Wennsecurity=allowlist, werden Shell-Befehle nur dann automatisch erlaubt, wenn jedes Pipeline-Segment
allowgelistet oder ein Safe Bin ist. Verkettungen (;, &&, ||) und Umleitungen werden im
Allowlist-Modus abgelehnt, es sei denn, jedes Top-Level-Segment erfüllt die Allowlist (einschließlich Safe Bins).
Umleitungen bleiben nicht unterstützt.
Dauerhaftes Vertrauen per allow-always umgeht diese Regel nicht: Ein verketteter Befehl erfordert weiterhin, dass jedes
Top-Level-Segment übereinstimmt.
autoAllowSkills ist ein separater Komfortpfad in den Exec-Genehmigungen. Er ist nicht dasselbe wie
manuelle Pfad-Allowlist-Einträge. Für strikt explizites Vertrauen lassen Sie autoAllowSkills deaktiviert.
Verwenden Sie die beiden Steuerelemente für unterschiedliche Aufgaben:
tools.exec.safeBins: kleine, stdin-only Stream-Filter.tools.exec.safeBinTrustedDirs: explizite zusätzliche vertrauenswürdige Verzeichnisse für ausführbare Safe-Bin-Pfade.tools.exec.safeBinProfiles: explizite argv-Richtlinie für benutzerdefinierte Safe Bins.- Allowlist: explizites Vertrauen für Pfade zu ausführbaren Dateien.
safeBins nicht als generische Allowlist, und fügen Sie keine Interpreter-/Laufzeit-Binaries hinzu (zum Beispiel python3, node, ruby, bash). Wenn Sie diese benötigen, verwenden Sie explizite Allowlist-Einträge und lassen Sie Genehmigungsaufforderungen aktiviert.
openclaw security audit warnt, wenn bei Einträgen für Interpreter-/Laufzeit-safeBins explizite Profile fehlen, und openclaw doctor --fix kann fehlende benutzerdefinierte safeBinProfiles-Einträge erzeugen.
openclaw security audit und openclaw doctor warnen auch, wenn Sie explizit Binaries mit breitem Verhalten wie jq wieder zu safeBins hinzufügen.
Wenn Sie Interpreter explizit allowlisten, aktivieren Sie tools.exec.strictInlineEval, damit Inline-Code-Eval-Formen weiterhin eine neue Genehmigung erfordern.
Vollständige Richtliniendetails und Beispiele finden Sie unter Exec approvals und Safe bins versus allowlist.
Beispiele
Vordergrund:apply_patch
apply_patch ist ein Untertool von exec für strukturierte Bearbeitungen über mehrere Dateien hinweg.
Es ist standardmäßig für OpenAI- und OpenAI-Codex-Modelle aktiviert. Verwenden Sie Konfiguration nur,
wenn Sie es deaktivieren oder auf bestimmte Modelle beschränken möchten:
- Nur für OpenAI-/OpenAI-Codex-Modelle verfügbar.
- Die Tool-Richtlinie gilt weiterhin;
allow: ["write"]erlaubt implizitapply_patch. - Die Konfiguration liegt unter
tools.exec.applyPatch. tools.exec.applyPatch.enabledist standardmäßigtrue; setzen Sie es auffalse, um das Tool für OpenAI-Modelle zu deaktivieren.tools.exec.applyPatch.workspaceOnlyist standardmäßigtrue(innerhalb des Workspace begrenzt). Setzen Sie es nur dann auffalse, wenn Sie ausdrücklich möchten, dassapply_patchaußerhalb des Workspace-Verzeichnisses schreibt/löscht.
Verwandt
- Exec Approvals — Genehmigungsschranken für Shell-Befehle
- Sandboxing — Ausführen von Befehlen in sandboxed Umgebungen
- Background Process — lang laufendes exec- und process-Tool
- Security — Tool-Richtlinie und erhöhter Zugriff