Outil Exec
Exécutez des commandes shell dans l’espace de travail. Prend en charge l’exécution au premier plan + en arrière-plan viaprocess.
Si process n’est pas autorisé, exec s’exécute de manière synchrone et ignore yieldMs/background.
Les sessions d’arrière-plan sont limitées par agent ; process ne voit que les sessions du même agent.
Paramètres
command(obligatoire)workdir(par défaut : cwd)env(remplacements clé/valeur)yieldMs(par défaut 10000) : passage automatique en arrière-plan après le délaibackground(bool) : arrière-plan immédiattimeout(secondes, par défaut 1800) : arrêt à l’expirationpty(bool) : exécution dans un pseudo-terminal quand disponible (CLI TTY-only, agents de codage, interfaces terminales)host(auto | sandbox | gateway | node) : emplacement d’exécutionsecurity(deny | allowlist | full) : mode d’application pourgateway/nodeask(off | on-miss | always) : invites d’approbation pourgateway/nodenode(string) : identifiant/nom du nœud pourhost=nodeelevated(bool) : demander le mode élevé (sortir du sandbox vers le chemin d’hôte configuré) ;security=fulln’est imposé que lorsque elevated se résout enfull
hosta pour valeur par défautauto: sandbox quand le runtime sandbox est actif pour la session, sinon gateway.autoest la stratégie de routage par défaut, pas un joker.host=nodepar appel est autorisé depuisauto;host=gatewaypar appel n’est autorisé que lorsqu’aucun runtime sandbox n’est actif.- Sans configuration supplémentaire,
host=auto« fonctionne simplement » : sans sandbox, il se résout versgateway; avec un sandbox actif, il reste dans le sandbox. elevatedsort du sandbox vers le chemin d’hôte configuré :gatewaypar défaut, ounodequandtools.exec.host=node(ou que la valeur par défaut de la session esthost=node). Il n’est disponible que lorsque l’accès élevé est activé pour la session/le fournisseur actuel.- Les approbations
gateway/nodesont contrôlées par~/.openclaw/exec-approvals.json. nodenécessite un nœud appairé (application compagnon ou hôte de nœud headless).- Si plusieurs nœuds sont disponibles, définissez
exec.nodeoutools.exec.nodepour en sélectionner un. exec host=nodeest le seul chemin d’exécution shell pour les nœuds ; l’enveloppe héritéenodes.runa été supprimée.- Sur les hôtes non Windows, exec utilise
SHELLs’il est défini ; siSHELLvautfish, il préfèrebash(oush) depuisPATHpour éviter les scripts incompatibles avec fish, puis revient àSHELLsi aucun des deux n’existe. - Sur les hôtes Windows, exec préfère découvrir PowerShell 7 (
pwsh) (Program Files, ProgramW6432, puis PATH), puis revient à Windows PowerShell 5.1. - L’exécution sur l’hôte (
gateway/node) rejetteenv.PATHet les remplacements du chargeur (LD_*/DYLD_*) afin d’empêcher le détournement de binaires ou l’injection de code. - OpenClaw définit
OPENCLAW_SHELL=execdans l’environnement de la commande lancée (y compris pour l’exécution PTY et sandbox) afin que les règles shell/profil puissent détecter le contexte de l’outil exec. - Important : le sandboxing est désactivé par défaut. Si le sandboxing est désactivé, le
host=autoimplicite se résout versgateway. Unhost=sandboxexplicite échoue quand même de manière sûre au lieu de s’exécuter silencieusement sur l’hôte gateway. Activez le sandboxing ou utilisezhost=gatewayavec approbations. - Les vérifications préalables des scripts (pour les erreurs courantes de syntaxe shell Python/Node) n’inspectent que les fichiers à l’intérieur de
la limite effective de
workdir. Si un chemin de script se résout en dehors deworkdir, la vérification préalable est ignorée pour ce fichier. - Pour un travail de longue durée qui démarre maintenant, démarrez-le une seule fois et fiez-vous au
réveil automatique à l’achèvement lorsqu’il est activé et que la commande produit une sortie ou échoue.
Utilisez
processpour les journaux, l’état, l’entrée ou l’intervention ; n’émulez pas une planification avec des boucles sleep, des boucles timeout ou des interrogations répétées. - Pour un travail qui doit se produire plus tard ou selon un planning, utilisez cron au lieu de
schémas de sleep/délai avec
exec.
Configuration
tools.exec.notifyOnExit(par défaut : true) : quand true, les sessions exec passées en arrière-plan mettent en file un événement système et demandent un heartbeat à la sortie.tools.exec.approvalRunningNoticeMs(par défaut : 10000) : émettre un unique avis « en cours d’exécution » lorsqu’un exec soumis à approbation dure plus longtemps que cette valeur (0 désactive).tools.exec.host(par défaut :auto; se résout verssandboxquand le runtime sandbox est actif, sinon versgateway)tools.exec.security(par défaut :denypour sandbox,fullpour gateway + node quand non défini)tools.exec.ask(par défaut :off)- L’exécution hôte sans approbation est la valeur par défaut pour gateway + node. Si vous voulez des approbations/un comportement d’allowlist, resserrez à la fois
tools.exec.*et la politique d’hôte~/.openclaw/exec-approvals.json; voir Approbations Exec. - Le mode YOLO vient des valeurs par défaut de la politique d’hôte (
security=full,ask=off), pas dehost=auto. Si vous voulez forcer le routage gateway ou node, définisseztools.exec.hostou utilisez/exec host=.... - En mode
security=fullplusask=off, l’exécution hôte suit directement la politique configurée ; il n’y a pas de préfiltre heuristique supplémentaire pour l’obfuscation des commandes. tools.exec.node(par défaut : non défini)tools.exec.strictInlineEval(par défaut : false) : quand true, les formes d’évaluation inline de l’interpréteur, commepython -c,node -e,ruby -e,perl -e,php -r,lua -eetosascript -e, nécessitent toujours une approbation explicite.allow-alwayspeut toujours rendre persistantes des invocations bénignes d’interpréteur/script, mais les formes d’évaluation inline demandent quand même une approbation à chaque fois.tools.exec.pathPrepend: liste de répertoires à préfixer àPATHpour les exécutions exec (gateway + sandbox uniquement).tools.exec.safeBins: binaires sûrs stdin-only pouvant s’exécuter sans entrées explicites dans l’allowlist. Pour les détails de comportement, voir Safe bins.tools.exec.safeBinTrustedDirs: répertoires explicites supplémentaires approuvés pour les vérifications de chemin des exécutablessafeBins. Les entréesPATHne sont jamais approuvées automatiquement. Les valeurs par défaut intégrées sont/binet/usr/bin.tools.exec.safeBinProfiles: politique argv personnalisée facultative par safe bin (minPositional,maxPositional,allowedValueFlags,deniedFlags).
Gestion de PATH
host=gateway: fusionne lePATHde votre shell de connexion dans l’environnement exec. Les remplacements deenv.PATHsont rejetés pour l’exécution sur l’hôte. Le daemon lui-même continue à s’exécuter avec unPATHminimal :- macOS:
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux:
/usr/local/bin,/usr/bin,/bin
- macOS:
host=sandbox: exécutesh -lc(shell de connexion) dans le conteneur, donc/etc/profilepeut réinitialiserPATH. OpenClaw préfixeenv.PATHaprès le chargement du profil via une variable d’environnement interne (sans interpolation shell) ;tools.exec.pathPrepends’applique ici aussi.host=node: seuls les remplacements d’environnement non bloqués que vous fournissez sont envoyés au nœud. Les remplacements deenv.PATHsont rejetés pour l’exécution sur l’hôte et ignorés par les hôtes de nœud. Si vous avez besoin d’entrées PATH supplémentaires sur un nœud, configurez l’environnement du service hôte du nœud (systemd/launchd) ou installez les outils dans des emplacements standard.
Remplacements de session (/exec)
Utilisez /exec pour définir des valeurs par défaut par session pour host, security, ask et node.
Envoyez /exec sans argument pour afficher les valeurs actuelles.
Exemple :
Modèle d’autorisation
/exec n’est pris en compte que pour les expéditeurs autorisés (allowlists/appairage de canal plus commands.useAccessGroups).
Il met à jour uniquement l’état de la session et n’écrit pas la configuration. Pour désactiver complètement exec, refusez-le via la
politique d’outil (tools.deny: ["exec"] ou par agent). Les approbations d’hôte s’appliquent toujours sauf si vous définissez explicitement
security=full et ask=off.
Approbations Exec (application compagnon / hôte de nœud)
Les agents sandboxés peuvent exiger une approbation par requête avant queexec ne s’exécute sur l’hôte gateway ou node.
Voir Approbations Exec pour la politique, l’allowlist et le flux UI.
Lorsque des approbations sont requises, l’outil exec renvoie immédiatement avec
status: "approval-pending" et un identifiant d’approbation. Une fois approuvée (ou refusée / expirée),
la Gateway émet des événements système (Exec finished / Exec denied). Si la commande est toujours
en cours d’exécution après tools.exec.approvalRunningNoticeMs, un unique avis Exec running est émis.
Sur les canaux avec cartes/boutons d’approbation natifs, l’agent doit s’appuyer sur cette
UI native en priorité et n’inclure une commande /approve manuelle que lorsque le
résultat de l’outil indique explicitement que les approbations par chat ne sont pas disponibles ou que l’approbation manuelle est
le seul chemin possible.
Allowlist + safe bins
L’application manuelle de l’allowlist correspond uniquement aux chemins binaires résolus (aucune correspondance sur le nom de base). Quandsecurity=allowlist, les commandes shell sont automatiquement autorisées uniquement si chaque segment du pipeline est
dans l’allowlist ou est un safe bin. L’enchaînement (;, &&, ||) et les redirections sont rejetés en
mode allowlist à moins que chaque segment de premier niveau ne satisfasse l’allowlist (y compris les safe bins).
Les redirections restent non prises en charge.
La confiance durable allow-always ne contourne pas cette règle : une commande enchaînée exige toujours que chaque
segment de premier niveau corresponde.
autoAllowSkills est un chemin pratique distinct dans les approbations exec. Ce n’est pas la même chose que
les entrées manuelles d’allowlist par chemin. Pour une confiance explicite stricte, laissez autoAllowSkills désactivé.
Utilisez les deux contrôles pour des rôles différents :
tools.exec.safeBins: petits filtres de flux stdin-only.tools.exec.safeBinTrustedDirs: répertoires explicites supplémentaires approuvés pour les chemins d’exécutable safe-bin.tools.exec.safeBinProfiles: politique argv explicite pour les safe bins personnalisés.- allowlist : confiance explicite pour les chemins d’exécutable.
safeBins comme une allowlist générique, et n’ajoutez pas de binaires d’interpréteur/runtime (par exemple python3, node, ruby, bash). Si vous en avez besoin, utilisez des entrées explicites dans l’allowlist et laissez les invites d’approbation activées.
openclaw security audit avertit lorsque des entrées safeBins d’interpréteur/runtime n’ont pas de profils explicites, et openclaw doctor --fix peut générer les entrées personnalisées safeBinProfiles manquantes.
openclaw security audit et openclaw doctor avertissent également lorsque vous ajoutez explicitement à nouveau des binaires au comportement large comme jq dans safeBins.
Si vous autorisez explicitement des interpréteurs dans l’allowlist, activez tools.exec.strictInlineEval afin que les formes d’évaluation inline du code nécessitent toujours une nouvelle approbation.
Pour les détails complets de la politique et des exemples, voir Approbations Exec et Safe bins versus allowlist.
Exemples
Premier plan :apply_patch
apply_patch est un sous-outil de exec pour des modifications structurées sur plusieurs fichiers.
Il est activé par défaut pour les modèles OpenAI et OpenAI Codex. Utilisez la configuration uniquement
si vous voulez le désactiver ou le limiter à des modèles spécifiques :
- Disponible uniquement pour les modèles OpenAI/OpenAI Codex.
- La politique d’outil s’applique toujours ;
allow: ["write"]autorise implicitementapply_patch. - La configuration se trouve sous
tools.exec.applyPatch. tools.exec.applyPatch.enableda pour valeur par défauttrue; définissez-la surfalsepour désactiver l’outil pour les modèles OpenAI.tools.exec.applyPatch.workspaceOnlya pour valeur par défauttrue(contenu dans l’espace de travail). Définissez-la surfalseuniquement si vous voulez intentionnellement queapply_patchécrive/supprime en dehors du répertoire de l’espace de travail.
Lié
- Approbations Exec — barrières d’approbation pour les commandes shell
- Sandboxing — exécution de commandes dans des environnements sandboxés
- Background Process —
execde longue durée et outil process - Security — politique d’outil et accès élevé