exec is een muterend shelloppervlak: opdrachten kunnen bestanden maken, bewerken of verwijderen overal waar de geselecteerde host of het sandbox-bestandssysteem dat toestaat. Het uitschakelen van OpenClaw-bestandssysteemtools zoals write, edit of apply_patch maakt exec niet alleen-lezen.
Ondersteunt uitvoering op de voorgrond en achtergrond via process. Als process niet is toegestaan, voert exec synchroon uit en negeert het yieldMs/background.
Achtergrondsessies zijn per agent gescoped; process ziet alleen sessies van dezelfde agent.
Parameters
Shellopdracht om uit te voeren.
Werkdirectory voor de opdracht.
Key/value-omgevingsoverschrijvingen die boven op de geërfde omgeving worden samengevoegd.
Zet de opdracht automatisch op de achtergrond na deze vertraging (ms).
Zet de opdracht onmiddellijk op de achtergrond in plaats van te wachten op
yieldMs.Overschrijf de geconfigureerde exec-time-out voor deze aanroep. Stel
timeout: 0 alleen in wanneer de opdracht zonder time-out van het exec-proces moet draaien.Voer uit in een pseudo-terminal wanneer beschikbaar. Gebruik dit voor TTY-only CLI’s, coding agents en terminal-UI’s.
Waar moet worden uitgevoerd.
auto wordt opgelost naar sandbox wanneer een sandboxruntime actief is en anders naar gateway.Genegeerd voor normale toolaanroepen.
gateway- / node-beveiliging wordt beheerd door
tools.exec.security en het hostgoedkeuringsbestand; verhoogde modus kan
security=full alleen afdwingen wanneer de operator expliciet verhoogde toegang verleent.De basisvraagmodus komt uit
tools.exec.ask en hostgoedkeuringen.
Voor modelaanroepen afkomstig uit kanalen wordt ask per aanroep genegeerd wanneer de
effectieve hostvraag off is; anders kan deze alleen worden aangescherpt naar een strengere
modus. Vertrouwde interne/API-aanroepers die exec-tools construeren met een
expliciete ask-waarde blijven ongewijzigd.Node-id/naam wanneer
host=node.Vraag verhoogde modus aan — ontsnap uit de sandbox naar het geconfigureerde hostpad.
security=full wordt alleen afgedwongen wanneer verhoogd oplost naar full.hoststaat standaard opauto: sandbox wanneer een sandboxruntime actief is voor de sessie, anders gateway.hostaccepteert alleenauto,sandbox,gatewayofnode. Het is geen hostname-selector; waarden die op hostnames lijken, worden geweigerd voordat de opdracht draait.autois de standaardrouteringsstrategie, geen wildcard. Per aanroep ishost=nodetoegestaan vanuitauto; per aanroep ishost=gatewayalleen toegestaan wanneer er geen sandboxruntime actief is.tools.exec.modeis de genormaliseerde beleidsknop. Waarden zijndeny,allowlist,ask,autoenfull.autovoert deterministische allowlist-/safe-bin-matches rechtstreeks uit en routeert elk resterend geval voor exec-goedkeuring via OpenClaw’s native automatische reviewer voordat een mens wordt gevraagd.ask/ask=alwaysvraagt nog steeds elke keer een mens.- Zonder extra config werkt
host=autonog steeds gewoon: geen sandbox betekent dat het oplost naargateway; een live sandbox betekent dat het in de sandbox blijft. elevatedontsnapt uit de sandbox naar het geconfigureerde hostpad: standaardgateway, ofnodewanneertools.exec.host=node(of de sessiestandaardhost=nodeis). Het is alleen beschikbaar wanneer verhoogde toegang is ingeschakeld voor de huidige sessie/provider.gateway/node-goedkeuringen worden beheerd door het hostgoedkeuringsbestand.nodevereist een gekoppelde node (companion-app of headless node-host).- Als meerdere nodes beschikbaar zijn, stel dan
exec.nodeoftools.exec.nodein om er één te selecteren. exec host=nodeis het enige shelluitvoeringspad voor nodes; de verouderdenodes.run-wrapper is verwijderd.timeoutgeldt voor uitvoering op de voorgrond, achtergrond,yieldMs, gateway, sandbox en nodesystem.run. Als het wordt weggelaten, gebruikt OpenClawtools.exec.timeoutSec; explicietetimeout: 0schakelt de time-out van het exec-proces voor die aanroep uit.- Op niet-Windows-hosts gebruikt exec
SHELLwanneer ingesteld; alsSHELLfishis, geeft het de voorkeur aanbash(ofsh) uitPATHom fish-incompatibele scripts te vermijden, en valt daarna terug opSHELLals geen van beide bestaat. - Op Windows-hosts geeft exec de voorkeur aan PowerShell 7 (
pwsh)-detectie (Program Files, ProgramW6432, daarna PATH), en valt daarna terug op Windows PowerShell 5.1. - Op niet-Windows gateway-hosts gebruiken bash- en zsh-execopdrachten een opstartsnapshot. OpenClaw legt sourcebare
aliassen/functies en een kleine veilige omgevingsset uit shellopstartbestanden vast in
$OPENCLAW_STATE_DIR/cache/shell-snapshots/, en sourcet die snapshot daarna vóór elke execopdracht. Variabelen die op geheimen lijken worden uitgesloten; sandbox- en node-exec gebruiken deze snapshot niet. StelOPENCLAW_EXEC_SHELL_SNAPSHOT=0in de Gateway-procesomgeving in om dit snapshotpad uit te schakelen. - Hostuitvoering (
gateway/node) weigertenv.PATHen loader-overschrijvingen (LD_*/DYLD_*) om binary hijacking of geïnjecteerde code te voorkomen. - OpenClaw stelt
OPENCLAW_SHELL=execin de omgeving van de gespawnde opdracht in (inclusief PTY- en sandboxuitvoering), zodat shell-/profielregels exec-toolcontext kunnen detecteren. - Voor runs afkomstig uit kanalen stelt OpenClaw ook een smalle JSON-payload met afzender-/chatidentiteit beschikbaar in
OPENCLAW_CHANNEL_CONTEXTwanneer het kanaal die id’s heeft geleverd. openclaw channels loginwordt geblokkeerd vanuitexecomdat het een interactieve kanaal-auth-flow is; voer het uit in een terminal op de gateway-host, of gebruik de kanaaleigen login-tool vanuit chat wanneer die bestaat.- Belangrijk: sandboxing staat standaard uit. Als sandboxing uit staat, lost impliciete
host=autoop naargateway. Explicietehost=sandboxfaalt nog steeds gesloten in plaats van stilzwijgend op de gateway-host te draaien. Schakel sandboxing in of gebruikhost=gatewaymet goedkeuringen. - Script-preflightcontroles (voor veelvoorkomende Python/Node-shellsyntaxisfouten) inspecteren alleen bestanden binnen de
effectieve
workdir-grens. Als een scriptpad buitenworkdiroplost, wordt preflight voor dat bestand overgeslagen. - Voor langlopende werkzaamheden die nu starten: start ze één keer en vertrouw op automatisch
voltooiingswekken wanneer dit is ingeschakeld en de opdracht uitvoer produceert of faalt.
Gebruik
processvoor logs, status, invoer of interventie; emuleer geen planning met slaaplussen, time-outlussen of herhaald pollen. - Voor werk dat later of volgens een schema moet gebeuren, gebruik Cron in plaats van
exec-slaap-/vertragingspatronen.
Config
tools.exec.notifyOnExit(standaard: true): wanneer true, plaatsen op de achtergrond gezette execsessies een systeemevent in de wachtrij en vragen ze bij afsluiten een Heartbeat aan.tools.exec.approvalRunningNoticeMs(standaard: 10000): geef één enkele melding “actief” wanneer een exec met goedkeuringspoort langer draait dan dit (0 schakelt uit).tools.exec.timeoutSec(standaard: 1800): standaard exec-time-out per opdracht in seconden.timeoutper aanroep overschrijft dit;timeout: 0per aanroep schakelt de time-out van het exec-proces uit.tools.exec.host(standaard:auto; lost op naarsandboxwanneer sandboxruntime actief is, andersgateway)tools.exec.security(standaard:denyvoor sandbox,fullvoor gateway + node wanneer niet ingesteld)tools.exec.ask(standaard:off)- Host-exec zonder goedkeuring is de standaard voor gateway + node. Als je goedkeurings-/allowlistgedrag wilt, maak dan zowel
tools.exec.*als het hostgoedkeuringsbestand strenger; zie Exec-goedkeuringen. - YOLO komt uit de hostbeleidsstandaarden (
security=full,ask=off), niet uithost=auto. Als je gateway- of node-routering wilt afdwingen, stel dantools.exec.hostin of gebruik/exec host=.... - In de modus
security=fullplusask=offvolgt host-exec rechtstreeks het geconfigureerde beleid; er is geen extra heuristische prefilter voor opdrachtobfuscatie of script-preflightweigering. tools.exec.node(standaard: niet ingesteld)tools.exec.strictInlineEval(standaard: false): wanneer true vereisen inline interpreter-evalvormen zoalspython -c,node -e,ruby -e,perl -e,php -r,lua -eenosascript -ereviewer- of expliciete goedkeuring. Inmode=autokan het normale exec-goedkeuringspad de native automatische reviewer een duidelijk laag-risico eenmalige opdracht laten toestaan; directe node-hostsystem.run-aanroepen vereisen nog steeds expliciete goedkeuring omdat ze de opdracht niet aan een menselijke goedkeuringsroute kunnen doorgeven. Als de reviewer daarom vraagt, gaat het verzoek naar een mens.allow-alwayskan nog steeds goedaardige interpreter-/scriptaanroepen persistent maken, maar inline-evalvormen worden geen duurzame toestemmingsregels.tools.exec.commandHighlighting(standaard: false): wanneer true kunnen goedkeuringsprompts parser-afgeleide opdrachtsegmenten in de opdrachttekst markeren. Stel dit globaal of per agent in optrueom markering van opdrachttekst in te schakelen zonder het exec-goedkeuringsbeleid te wijzigen.tools.exec.pathPrepend: lijst met directories om vóórPATHte plaatsen voor exec-runs (alleen gateway + sandbox).tools.exec.safeBins: stdin-only veilige binaries die zonder expliciete allowlist-items kunnen draaien. Zie voor gedragsdetails Veilige binaries.tools.exec.safeBinTrustedDirs: aanvullende expliciete directories die worden vertrouwd voorsafeBins-padcontroles.PATH-items worden nooit automatisch vertrouwd. Ingebouwde standaarden zijn/binen/usr/bin.tools.exec.safeBinProfiles: optioneel aangepast argv-beleid per veilige binary (minPositional,maxPositional,allowedValueFlags,deniedFlags).
PATH-afhandeling
host=gateway: voegt dePATHvan je login-shell samen in de execomgeving.env.PATH-overschrijvingen worden geweigerd voor hostuitvoering. De daemon zelf draait nog steeds met een minimalePATH:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin- Om te voorkomen dat gebruikersshellconfiguratie (zoals
~/.zshenvof/etc/zshenv) prioriteitspaden tijdens het opstarten overschrijft, wordentools.exec.pathPrepend-items veilig vóór de uiteindelijkePATHbinnen de shellopdracht geplaatst, direct vóór uitvoering.
- Om te voorkomen dat gebruikersshellconfiguratie (zoals
- macOS:
host=sandbox: draaitsh -lc(login-shell) binnen de container, dus/etc/profilekanPATHresetten. OpenClaw plaatstenv.PATHna het sourcen van het profiel vóór via een interne env-var (geen shellinterpolatie);tools.exec.pathPrependgeldt hier ook.host=node: alleen niet-geblokkeerde env-overschrijvingen die je doorgeeft, worden naar de node gestuurd.env.PATH-overschrijvingen worden geweigerd voor hostuitvoering en genegeerd door node-hosts. Als je extra PATH-items op een node nodig hebt, configureer dan de serviceomgeving van de node-host (systemd/launchd) of installeer tools op standaardlocaties.
Sessie-overschrijvingen (/exec)
Gebruik /exec om per sessie standaarden in te stellen voor host, security, ask en node.
Stuur /exec zonder argumenten om de huidige waarden te tonen.
Voorbeeld:
Autorisatiemodel
/exec wordt alleen gehonoreerd voor geautoriseerde afzenders (kanaal-allowlists/koppeling plus commands.useAccessGroups).
Het werkt alleen sessiestatus bij en schrijft geen configuratie. Geautoriseerde afzenders van externe kanalen mogen
deze sessiestandaarden instellen. Interne gateway-/webchatclients hebben operator.admin nodig om ze permanent op te slaan.
Om exec hard uit te schakelen, weiger je het via toolbeleid (tools.deny: ["exec"] of per agent). Hostgoedkeuringen
blijven gelden, tenzij je expliciet security=full en ask=off instelt.
Exec-goedkeuringen (companion-app / Node-host)
Agents in een sandbox kunnen per aanvraag goedkeuring vereisen voordatexec op de gateway of Node-host wordt uitgevoerd.
Zie Exec-goedkeuringen voor het beleid, de allowlist en de UI-flow.
Wanneer goedkeuringen vereist zijn, retourneert de exec-tool onmiddellijk met
status: "approval-pending" en een goedkeurings-id. Zodra goedgekeurd (of geweigerd / verlopen),
zendt de Gateway opdrachtvoortgang en systeemgebeurtenissen voor voltooiing alleen uit voor goedgekeurde runs
(Exec running / Exec finished). Geweigerde of verlopen goedkeuringen zijn terminaal en
wekken de agentsessie niet met een systeemgebeurtenis voor weigering.
Op kanalen met native goedkeuringskaarten/-knoppen moet de agent eerst op die
native UI vertrouwen en alleen een handmatige /approve-opdracht opnemen wanneer het
toolresultaat expliciet zegt dat chatgoedkeuringen niet beschikbaar zijn of dat handmatige goedkeuring het
enige pad is.
Allowlist + veilige bins
Handmatige allowlist-afdwinging matcht opgeloste globs voor binaire paden en globs voor kale opdrachtnamen. Kale namen matchen alleen opdrachten die via PATH worden aangeroepen, dusrg kan
/opt/homebrew/bin/rg matchen wanneer de opdracht rg is, maar niet ./rg of /tmp/rg.
Wanneer security=allowlist is, worden shellopdrachten alleen automatisch toegestaan als elk pijplijnsegment
op de allowlist staat of een veilige bin is. Chaining (;, &&, ||) en omleidingen
worden in allowlist-modus geweigerd, tenzij elk topniveausegment aan de
allowlist voldoet (inclusief veilige bins). Omleidingen blijven niet ondersteund.
Duurzaam allow-always-vertrouwen omzeilt die regel niet: een chained opdracht vereist nog steeds dat elk
topniveausegment matcht.
autoAllowSkills is een afzonderlijk gemakspad in exec-goedkeuringen. Het is niet hetzelfde als
handmatige allowlist-items voor paden. Houd autoAllowSkills uitgeschakeld voor strikt expliciet vertrouwen.
Gebruik de twee besturingselementen voor verschillende taken:
tools.exec.safeBins: kleine, alleen-stdin streamfilters.tools.exec.safeBinTrustedDirs: expliciete extra vertrouwde mappen voor uitvoerbare paden van veilige bins.tools.exec.safeBinProfiles: expliciet argv-beleid voor aangepaste veilige bins.- allowlist: expliciet vertrouwen voor uitvoerbare paden.
safeBins niet als een generieke allowlist en voeg geen interpreter-/runtime-binaries toe (bijvoorbeeld python3, node, ruby, bash). Als je die nodig hebt, gebruik dan expliciete allowlist-items en laat goedkeuringsprompts ingeschakeld.
openclaw security audit waarschuwt wanneer interpreter-/runtime-items in safeBins geen expliciete profielen hebben, en openclaw doctor --fix kan ontbrekende aangepaste safeBinProfiles-items scaffolden.
openclaw security audit en openclaw doctor waarschuwen ook wanneer je expliciet bins met breed gedrag, zoals jq, weer aan safeBins toevoegt.
Als je interpreters expliciet op de allowlist zet, schakel dan tools.exec.strictInlineEval in zodat inline code-eval-vormen nog steeds reviewer- of expliciete goedkeuring vereisen.
Zie voor volledige beleidsdetails en voorbeelden Exec-goedkeuringen en Veilige bins versus allowlist.
Voorbeelden
Voorgrond:apply_patch
apply_patch is een subtool van exec voor gestructureerde bewerkingen over meerdere bestanden.
Deze is standaard ingeschakeld voor OpenAI- en OpenAI Codex-modellen. Gebruik configuratie alleen
wanneer je deze wilt uitschakelen of beperken tot specifieke modellen:
- Alleen beschikbaar voor OpenAI-/OpenAI Codex-modellen.
- Toolbeleid blijft van toepassing;
allow: ["write"]staat implicietapply_patchtoe. deny: ["write"]weigertapply_patchniet; weigerapply_patchexpliciet of gebruikdeny: ["group:fs"]wanneer patch-schrijfbewerkingen ook geblokkeerd moeten worden.- Configuratie staat onder
tools.exec.applyPatch. tools.exec.applyPatch.enabledis standaardtrue; stel dit in opfalseom de tool voor OpenAI-modellen uit te schakelen.tools.exec.applyPatch.workspaceOnlyis standaardtrue(beperkt tot de workspace). Stel dit alleen in opfalseals je bewust wilt datapply_patchbuiten de workspacemap schrijft/verwijdert.
Gerelateerd
- Exec-goedkeuringen — goedkeuringspoorten voor shellopdrachten
- Sandboxing — opdrachten uitvoeren in sandboxomgevingen
- Achtergrondproces — langlopende exec- en process-tool
- Beveiliging — toolbeleid en verhoogde toegang