Strumento Exec
Esegui comandi shell nel workspace. Supporta l’esecuzione in foreground + background tramiteprocess.
Se process non è consentito, exec viene eseguito in modo sincrono e ignora yieldMs/background.
Le sessioni in background hanno scope per agent; process vede solo le sessioni dello stesso agent.
Parametri
command(obbligatorio)workdir(predefinito: cwd)env(override chiave/valore)yieldMs(predefinito 10000): passaggio automatico in background dopo il ritardobackground(bool): passa subito in backgroundtimeout(secondi, predefinito 1800): termina alla scadenzapty(bool): esegue in uno pseudo-terminale quando disponibile (CLI solo TTY, coding agent, terminal UI)host(auto | sandbox | gateway | node): dove eseguiresecurity(deny | allowlist | full): modalità di enforcement pergateway/nodeask(off | on-miss | always): prompt di approvazione pergateway/nodenode(string): id/nome node perhost=nodeelevated(bool): richiede la modalità elevated (esce dalla sandbox verso il percorso host configurato);security=fullviene forzato solo quando elevated si risolve infull
hostha come predefinitoauto: sandbox quando il runtime sandbox è attivo per la sessione, altrimenti gateway.autoè la strategia di instradamento predefinita, non un wildcard.host=nodeper chiamata è consentito daauto;host=gatewayper chiamata è consentito solo quando nessun runtime sandbox è attivo.- Senza configurazioni aggiuntive,
host=autocontinua a “funzionare e basta”: senza sandbox si risolve ingateway; con una sandbox attiva resta nella sandbox. elevatedesce dalla sandbox verso il percorso host configurato:gatewayper impostazione predefinita, oppurenodequandotools.exec.host=node(o il valore predefinito della sessione èhost=node). È disponibile solo quando l’accesso elevated è abilitato per la sessione/provider corrente.- Le approvazioni
gateway/nodesono controllate da~/.openclaw/exec-approvals.json. noderichiede un node associato (app companion o host node headless).- Se sono disponibili più node, imposta
exec.nodeotools.exec.nodeper selezionarne uno. exec host=nodeè l’unico percorso di esecuzione shell per i node; il wrapper legacynodes.runè stato rimosso.- Sugli host non Windows, exec usa
SHELLquando impostato; seSHELLèfish, preferiscebash(osh) daPATHper evitare script incompatibili con fish, poi usaSHELLcome fallback se nessuno dei due esiste. - Sugli host Windows, exec preferisce il rilevamento di PowerShell 7 (
pwsh) (Program Files, ProgramW6432, poi PATH), quindi usa Windows PowerShell 5.1 come fallback. - L’esecuzione host (
gateway/node) rifiutaenv.PATHe gli override del loader (LD_*/DYLD_*) per prevenire hijacking dei binari o codice iniettato. - OpenClaw imposta
OPENCLAW_SHELL=execnell’ambiente del comando generato (inclusi PTY ed esecuzione in sandbox) così le regole di shell/profilo possono rilevare il contesto dello strumento exec. - Importante: la sandbox è disattivata per impostazione predefinita. Se la sandbox è disattivata,
host=autoimplicito si risolve ingateway.host=sandboxesplicito continua invece a fallire in modo chiuso invece di eseguire silenziosamente sull’host gateway. Abilita la sandbox o usahost=gatewaycon approvazioni. - I controlli preflight degli script (per errori comuni di sintassi shell Python/Node) ispezionano solo i file all’interno del
confine effettivo di
workdir. Se il percorso di uno script si risolve fuori daworkdir, il preflight viene saltato per quel file. - Per lavori di lunga durata che iniziano subito, avviali una volta e affidati al
risveglio automatico al completamento quando è abilitato e il comando emette output o fallisce.
Usa
processper log, stato, input o interventi; non emulare la pianificazione con loop di sleep, loop di timeout o polling ripetuto. - Per lavori che devono avvenire più tardi o secondo una pianificazione, usa cron invece di
pattern sleep/delay con
exec.
Configurazione
tools.exec.notifyOnExit(predefinito: true): quando true, le sessioni exec passate in background accodano un evento di sistema e richiedono un heartbeat all’uscita.tools.exec.approvalRunningNoticeMs(predefinito: 10000): emette un singolo avviso “running” quando un exec protetto da approvazione dura più di questo valore (0 disabilita).tools.exec.host(predefinito:auto; si risolve insandboxquando il runtime sandbox è attivo, altrimenti ingateway)tools.exec.security(predefinito:denyper sandbox,fullper gateway + node quando non impostato)tools.exec.ask(predefinito:off)- L’exec host senza approvazione è il comportamento predefinito per gateway + node. Se vuoi il comportamento con approvazioni/allowlist, restringi sia
tools.exec.*sia il criterio host in~/.openclaw/exec-approvals.json; vedi Approvazioni exec. - YOLO deriva dai valori predefiniti del criterio host (
security=full,ask=off), non dahost=auto. Se vuoi forzare l’instradamento gateway o node, impostatools.exec.hosto usa/exec host=.... - In modalità
security=fullpiùask=off, l’exec host segue direttamente il criterio configurato; non esiste un prefiltro euristico aggiuntivo per l’offuscamento dei comandi. tools.exec.node(predefinito: non impostato)tools.exec.strictInlineEval(predefinito: false): quando true, le forme inline di eval degli interpreti comepython -c,node -e,ruby -e,perl -e,php -r,lua -eeosascript -erichiedono sempre approvazione esplicita.allow-alwayspuò comunque rendere persistenti invocazioni innocue di interpreti/script, ma le forme inline-eval continuano a chiedere conferma ogni volta.tools.exec.pathPrepend: elenco di directory da anteporre aPATHper le esecuzioni exec (solo gateway + sandbox).tools.exec.safeBins: binari sicuri solo-stdin che possono essere eseguiti senza voci esplicite nell’allowlist. Per i dettagli del comportamento, vedi Safe bins.tools.exec.safeBinTrustedDirs: directory esplicite aggiuntive considerate attendibili per i controlli del percorso degli eseguibili insafeBins. Le voci diPATHnon sono mai considerate attendibili automaticamente. I valori predefiniti integrati sono/bine/usr/bin.tools.exec.safeBinProfiles: criteri argv personalizzati facoltativi per safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Gestione di PATH
host=gateway: unisce il tuoPATHdella login shell nell’ambiente exec. Gli override dienv.PATHvengono rifiutati per l’esecuzione host. Il demone stesso continua comunque a essere eseguito con unPATHminimo:- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: eseguesh -lc(login shell) all’interno del container, quindi/etc/profilepuò reimpostarePATH. OpenClaw anteponeenv.PATHdopo il sourcing del profilo tramite una variabile env interna (senza interpolazione della shell); qui si applica anchetools.exec.pathPrepend.host=node: solo gli override env non bloccati che passi vengono inviati al node. Gli override dienv.PATHvengono rifiutati per l’esecuzione host e ignorati dagli host node. Se hai bisogno di voci PATH aggiuntive su un node, configura l’ambiente del servizio host node (systemd/launchd) oppure installa gli strumenti in posizioni standard.
Override di sessione (/exec)
Usa /exec per impostare valori predefiniti per sessione per host, security, ask e node.
Invia /exec senza argomenti per mostrare i valori correnti.
Esempio:
Modello di autorizzazione
/exec viene rispettato solo per mittenti autorizzati (allowlist dei canali/abbinamento più commands.useAccessGroups).
Aggiorna solo lo stato della sessione e non scrive la configurazione. Per disabilitare completamente exec, negalo tramite i
criteri degli strumenti (tools.deny: ["exec"] o per-agent). Le approvazioni host continuano comunque ad applicarsi a meno che tu non imposti esplicitamente
security=full e ask=off.
Approvazioni exec (app companion / host node)
Gli agent in sandbox possono richiedere un’approvazione per richiesta prima cheexec venga eseguito sull’host gateway o node.
Vedi Approvazioni exec per criteri, allowlist e flusso UI.
Quando sono richieste approvazioni, lo strumento exec restituisce subito
status: "approval-pending" e un id di approvazione. Una volta approvato (o negato / scaduto),
il Gateway emette eventi di sistema (Exec finished / Exec denied). Se il comando è ancora
in esecuzione dopo tools.exec.approvalRunningNoticeMs, viene emesso un singolo avviso Exec running.
Nei canali con card/pulsanti di approvazione nativi, l’agent dovrebbe affidarsi prima a
quell’UI nativa e includere un comando manuale /approve solo quando il
risultato dello strumento dice esplicitamente che le approvazioni in chat non sono disponibili o che il
percorso manuale è l’unico possibile.
Allowlist + safe bins
L’enforcement manuale dell’allowlist corrisponde solo ai percorsi binari risolti (nessuna corrispondenza per basename). Quandosecurity=allowlist, i comandi shell sono consentiti automaticamente solo se ogni segmento della pipeline è
in allowlist oppure è un safe bin. Il chaining (;, &&, ||) e i reindirizzamenti vengono rifiutati in
modalità allowlist a meno che ogni segmento di livello superiore soddisfi l’allowlist (inclusi i safe bin).
I reindirizzamenti continuano a non essere supportati.
La fiducia persistente allow-always non aggira questa regola: un comando concatenato richiede comunque che ogni
segmento di livello superiore corrisponda.
autoAllowSkills è un percorso di praticità separato nelle approvazioni exec. Non è la stessa cosa delle
voci manuali dell’allowlist dei percorsi. Per una fiducia esplicita rigorosa, mantieni autoAllowSkills disabilitato.
Usa i due controlli per scopi diversi:
tools.exec.safeBins: piccoli filtri stream solo-stdin.tools.exec.safeBinTrustedDirs: directory esplicite aggiuntive attendibili per i percorsi eseguibili dei safe bin.tools.exec.safeBinProfiles: criteri argv espliciti per safe bin personalizzati.- allowlist: fiducia esplicita per i percorsi eseguibili.
safeBins come un’allowlist generica e non aggiungere binari interprete/runtime (ad esempio python3, node, ruby, bash). Se ti servono, usa voci esplicite nell’allowlist e mantieni abilitati i prompt di approvazione.
openclaw security audit avvisa quando nelle voci safeBins degli interpreti/runtime mancano profili espliciti, e openclaw doctor --fix può creare lo scaffold per le voci personalizzate mancanti in safeBinProfiles.
openclaw security audit e openclaw doctor avvisano anche quando aggiungi esplicitamente di nuovo in safeBins binari dal comportamento ampio come jq.
Se aggiungi esplicitamente interpreti all’allowlist, abilita tools.exec.strictInlineEval così le forme inline di code-eval richiedono comunque una nuova approvazione.
Per i dettagli completi dei criteri e gli esempi, vedi Approvazioni exec e Safe bins versus allowlist.
Esempi
Foreground:apply_patch
apply_patch è un sotto-strumento di exec per modifiche strutturate a più file.
È abilitato per impostazione predefinita per i modelli OpenAI e OpenAI Codex. Usa la configurazione solo
quando vuoi disabilitarlo o limitarlo a modelli specifici:
- Disponibile solo per i modelli OpenAI/OpenAI Codex.
- Continuano ad applicarsi i criteri degli strumenti;
allow: ["write"]consente implicitamenteapply_patch. - La configurazione si trova in
tools.exec.applyPatch. tools.exec.applyPatch.enabledha come predefinitotrue; impostalo sufalseper disabilitare lo strumento per i modelli OpenAI.tools.exec.applyPatch.workspaceOnlyha come predefinitotrue(limitato al workspace). Impostalo sufalsesolo se vuoi intenzionalmente cheapply_patchscriva/elimini fuori dalla directory del workspace.
Correlati
- Approvazioni exec — gate di approvazione per i comandi shell
- Sandboxing — esecuzione di comandi in ambienti sandbox
- Processo in background — exec di lunga durata e strumento process
- Sicurezza — criteri degli strumenti e accesso elevated