Tools
Outil d’exécution
Exécute des commandes shell dans l’espace de travail. exec est une interface shell permettant les modifications : les commandes peuvent créer, modifier ou supprimer des fichiers partout où le système de fichiers de l’hôte ou du bac à sable sélectionné le permet. La désactivation des outils de système de fichiers OpenClaw tels que write, edit ou apply_patch ne rend pas exec accessible en lecture seule.
Prend en charge l’exécution au premier plan et en arrière-plan via process. Si process n’est pas autorisé, exec s’exécute de manière synchrone et ignore yieldMs/background. Les sessions en arrière-plan sont propres à chaque agent ; process ne voit que les sessions du même agent.
Paramètres
commandstringrequiredCommande shell à exécuter.
workdirstringdefault: cwdRépertoire de travail de la commande.
envobjectRemplacements de variables d’environnement sous forme de paires clé/valeur, fusionnés avec l’environnement hérité.
yieldMsnumberdefault: 10000Place automatiquement la commande en arrière-plan après ce délai (ms).
backgroundbooleandefault: falsePlace immédiatement la commande en arrière-plan au lieu d’attendre yieldMs.
timeoutnumberdefault: tools.exec.timeoutSecRemplace le délai d’expiration d’exécution configuré pour cet appel, en secondes. S’applique aux exécutions au premier plan, en arrière-plan, avec yieldMs, via le Gateway, dans le bac à sable et via system.run du Node. timeout: 0 désactive le délai d’expiration du processus d’exécution pour cet appel.
ptybooleandefault: falseExécute dans un pseudo-terminal lorsqu’il est disponible. À utiliser pour les CLI réservées aux TTY, les agents de codage et les interfaces utilisateur de terminal.
host'auto' | 'sandbox' | 'gateway' | 'node'default: autoEmplacement d’exécution. auto est résolu en sandbox lorsqu’un environnement d’exécution de bac à sable est actif, et en gateway dans le cas contraire.
security'deny' | 'allowlist' | 'full'Ignoré pour les appels d’outils normaux. La sécurité de gateway/node est contrôlée par tools.exec.security et le fichier d’approbations de l’hôte ; le mode élevé ne peut imposer security=full que lorsque l’opérateur accorde explicitement un accès élevé.
ask'off' | 'on-miss' | 'always'Le mode de demande de référence provient de tools.exec.ask et des approbations de l’hôte. Pour les appels de modèle provenant d’un canal, la valeur ask propre à l’appel est ignorée lorsque la demande effective de l’hôte est off ; sinon, elle peut uniquement imposer un mode plus strict. Les appelants internes/de l’API approuvés qui construisent des outils d’exécution avec une valeur ask explicite restent inchangés.
nodestringIdentifiant/nom du Node lorsque host=node.
elevatedbooleandefault: falseDemande le mode élevé : sort de la sandbox pour accéder au chemin d’hôte configuré. security=full est imposé uniquement lorsque le mode élevé est résolu sur full.
Remarques :
hostaccepte uniquementauto,sandbox,gatewayounode. Ce n’est pas un sélecteur de nom d’hôte ; les valeurs qui ressemblent à des noms d’hôte sont rejetées avant l’exécution de la commande.- L’utilisation de
host=nodepour un appel est autorisée depuisauto; l’utilisation dehost=gatewaypour un appel n’est autorisée que lorsqu’aucun environnement d’exécution sandbox n’est actif. - Sans configuration supplémentaire,
host=auto« fonctionne tout simplement » : en l’absence de sandbox, il se résout engateway; si une sandbox est active, il reste dans la sandbox. elevatedpermet de sortir de la sandbox pour utiliser le chemin d’hôte configuré :gatewaypar défaut, ounodelorsquetools.exec.host=node(ou que la valeur par défaut de la session esthost=node). Cette option n’est disponible que lorsque l’accès élevé est activé pour la session ou le fournisseur actuel.- Les approbations de
gateway/nodesont contrôlées par le fichier d’approbations de l’hôte. nodenécessite un Node appairé (application compagnon ou hôte Node sans interface graphique). Si plusieurs Nodes sont disponibles, définissezexec.nodeoutools.exec.nodepour en sélectionner un.exec host=nodeest le seul chemin d’exécution de commandes shell pour les Nodes ; l’ancien wrappernodes.runa été supprimé.- Sur les hôtes autres que Windows, l’exécution utilise
SHELLlorsqu’il est défini ; siSHELLvautfish, elle privilégiebash(oush) depuisPATHafin d’éviter les constructions propres à bash incompatibles avec fish, puis se rabat surSHELLsi aucun des deux n’existe. - Sur les hôtes Windows, l’exécution privilégie la détection de PowerShell 7 (
pwsh) (Program Files, ProgramW6432, puis PATH), puis se rabat sur Windows PowerShell 5.1. - Sur les hôtes Gateway autres que Windows, les commandes d’exécution bash et zsh utilisent un instantané de démarrage. OpenClaw capture les alias et fonctions pouvant être chargés ainsi qu’un petit ensemble sûr de variables d’environnement depuis les fichiers de démarrage du shell dans
$OPENCLAW_STATE_DIR/cache/shell-snapshots/, puis charge cet instantané avant chaque commande d’exécution. Les variables dont le nom semble indiquer un secret sont exclues ; les exécutions dans le bac à sable et sur un Node n’utilisent pas cet instantané. DéfinissezOPENCLAW_EXEC_SHELL_SNAPSHOT=0dans l’environnement du processus Gateway pour désactiver ce chemin d’instantané. - L’exécution sur l’hôte (
gateway/node) rejetteenv.PATHet les substitutions 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 dans un PTY et dans un bac à sable), afin que les règles de shell/profil puissent détecter le contexte de l’outil exec. - Pour les exécutions provenant d’un canal, OpenClaw expose également dans
OPENCLAW_CHANNEL_CONTEXTune charge utile JSON restreinte contenant l’identité de l’expéditeur et de la discussion, lorsque le canal a fourni ces identifiants. execne peut pas exécuter les commandes shellopenclaw channels loginou/approve:openclaw channels loginest un flux interactif d’authentification de canal, et/approvedoit passer par le gestionnaire de commandes d’approbation, et non par un shell. Exécutez la connexion au canal dans un terminal sur l’hôte du Gateway, ou utilisez un outil d’agent de connexion propre au canal lorsqu’il en existe un (par exemplewhatsapp_login).- Important : l’exécution en bac à sable est désactivée par défaut. Si elle est désactivée, la valeur implicite
host=autoest résolue engateway. La valeur explicitehost=sandboxéchoue toujours de manière sécurisée au lieu d’exécuter silencieusement la commande sur l’hôte du Gateway. Activez l’exécution en bac à sable ou utilisezhost=gatewayavec des approbations. - Les vérifications préalables des scripts (pour les erreurs courantes de syntaxe shell Python/Node) inspectent uniquement les fichiers situés dans les limites du
workdireffectif. Si le chemin d’un script est résolu en dehors deworkdir, la vérification préalable est ignorée pour ce fichier. Elle est également entièrement ignorée lorsquehost=gatewayet que la politique effective estsecurity=fullavecask=off. - Pour un travail de longue durée qui commence maintenant, lancez-le une seule fois et fiez-vous au réveil automatique à la fin lorsqu’il est activé et que la commande produit une sortie ou échoue. Utilisez
processpour les journaux, l’état, les entrées ou les interventions ; n’émulez pas une planification avec des boucles de mise en veille, des boucles de délai d’expiration ou des interrogations répétées. - Pour un travail qui doit avoir lieu ultérieurement ou selon une planification, utilisez Cron plutôt que des modèles de mise en veille ou de temporisation avec
exec.
Configuration
| Clé | Valeur par défaut | Remarques |
|---|---|---|
tools.exec.timeoutSec |
1800 |
Délai d’expiration par défaut de chaque commande exec, en secondes. La valeur timeout de l’appel le remplace ; timeout: 0 au niveau de l’appel désactive le délai d’expiration du processus exec. |
tools.exec.host |
auto |
Se résout en sandbox lorsqu’un environnement d’exécution sandbox est actif, sinon en gateway. |
tools.exec.security |
deny pour sandbox, full pour gateway/node si non défini |
|
tools.exec.ask |
off |
|
tools.exec.mode |
non défini | Paramètre de stratégie normalisé. Consultez Modes ci-dessous. Ne peut pas être combiné avec tools.exec.security/tools.exec.ask. |
tools.exec.reviewer.model |
modèle principal configuré de l’agent | Remplacement facultatif du fournisseur/modèle pour la révision avec mode=auto. |
tools.exec.reviewer.timeoutMs |
30000 |
Délai d’expiration par étape pour la préparation et l’exécution du modèle de révision avant le recours à un humain. |
tools.exec.node |
non défini | |
tools.exec.notifyOnExit |
true |
Lorsque cette option est vraie, les sessions exec exécutées en arrière-plan mettent en file d’attente un événement système et demandent un Heartbeat à leur arrêt. |
tools.exec.approvalRunningNoticeMs |
10000 |
Émet une seule notification « en cours d’exécution » lorsqu’une commande exec soumise à approbation s’exécute au-delà de cette durée (0 désactive cette notification). |
tools.exec.strictInlineEval |
false |
Consultez Évaluation en ligne. |
tools.exec.commandHighlighting |
false |
Lorsque cette option est vraie, les demandes d’approbation peuvent mettre en évidence dans le texte de la commande les segments déduits par l’analyseur. À définir globalement ou par agent ; ne modifie pas la stratégie d’approbation. |
tools.exec.pathPrepend |
non défini | Liste des répertoires à ajouter au début de PATH pour les exécutions exec (gateway + sandbox uniquement). |
tools.exec.safeBins |
non défini | Binaires sûrs acceptant uniquement stdin, qui peuvent s’exécuter sans entrée explicite dans la liste d’autorisation. Consultez Binaires sûrs. |
tools.exec.safeBinTrustedDirs |
/bin, /usr/bin |
Répertoires explicites supplémentaires approuvés pour les vérifications de chemin de safeBins. Les entrées de PATH ne sont jamais approuvées automatiquement. |
tools.exec.safeBinProfiles |
non défini | Stratégie argv personnalisée facultative par binaire sûr (minPositional, maxPositional, allowedValueFlags, deniedFlags). |
L’exécution exec sur l’hôte sans approbation est le comportement par défaut pour gateway et node (security=full, ask=off) — cela provient des valeurs par défaut de la stratégie de l’hôte, et non de host=auto. Si vous souhaitez un comportement fondé sur les approbations ou une liste d’autorisation, renforcez à la fois tools.exec.* et le fichier d’approbations de l’hôte ; consultez Approbations exec. Pour imposer le routage vers gateway ou node quel que soit l’état de la sandbox, définissez tools.exec.host ou utilisez /exec host=....
Exemple :
{ tools: { exec: { pathPrepend: ["~/bin", "/opt/oss/bin"], }, },}Modes
tools.exec.mode est le paramètre de stratégie normalisé. Le définir permet de déduire security/ask et il ne peut pas être combiné avec des valeurs explicites pour tools.exec.security/tools.exec.ask.
| Mode | security | ask | Comportement |
|---|---|---|---|
deny |
deny |
off |
L’exécution est refusée. |
allowlist |
allowlist |
off |
Seules les commandes figurant dans la liste d’autorisation ou utilisant des binaires sûrs sont exécutées ; aucune autre autorisation n’est demandée. |
ask |
allowlist |
on-miss |
Les correspondances avec la liste d’autorisation sont exécutées directement ; tout le reste nécessite l’autorisation d’une personne. |
auto |
allowlist |
on-miss |
Les correspondances avec la liste d’autorisation ou les binaires sûrs sont exécutées directement ; tout le reste passe par l’évaluateur automatique natif d’OpenClaw avant de demander l’autorisation d’une personne. |
full |
full |
off |
Aucune étape d’approbation. |
ask/ask=always demande toujours l’autorisation d’une personne, quel que soit le mode.
L’approbation issue de l’évaluation automatique est à usage unique. Sur le Gateway, OpenClaw fournit à l’évaluateur le chemin résolu de l’exécutable et impose que l’exécution utilise ce même chemin. Les commandes qui ne peuvent pas être réduites à un seul plan d’exécution applicable, telles que les heredocs, les expansions du shell ou les guillemets non pris en charge dans les wrappers, nécessitent l’approbation d’une personne, même si le modèle les autoriserait autrement.
Les approbations de commandes du serveur d’application Codex qui ne sont pas déjà déterminées par une politique explicite du runtime ou une politique native utilisent le parcours d’approbation humaine. OpenClaw n’exécute pas son évaluateur d’exécution configuré pour ces requêtes, car Codex n’expose pas d’exécutable résolu applicable permettant de lier la décision d’évaluation à la commande exécutée par Codex.
Évaluation intégrée (strictInlineEval)
Lorsque tools.exec.strictInlineEval vaut true, les formes d’évaluation intégrées de l’interpréteur nécessitent l’autorisation de l’évaluateur ou une approbation explicite : python -c, node -e, ruby -e, perl -e, php -r, lua -e, osascript -e, ainsi que les formes similaires des autres interpréteurs et vecteurs de commande pris en charge (awk, find -exec, make, sed, xargs, entre autres). Avec mode=auto, le parcours normal d’approbation de l’exécution peut permettre à l’évaluateur automatique natif d’autoriser une commande ponctuelle présentant clairement un faible risque ; les appels directs à system.run sur l’hôte Node nécessitent toujours une approbation explicite, car ils ne peuvent pas transmettre la commande à un parcours d’approbation humaine. Si l’évaluateur demande une approbation, la requête est transmise à une personne. allow-always peut toujours mémoriser les invocations bénignes d’interpréteurs ou de scripts, mais les formes d’évaluation intégrées ne deviennent pas des règles d’autorisation permanentes.
Gestion de PATH
host=gateway: fusionne lePATHde votre shell de connexion avec l’environnement d’exécution. Les substitutions deenv.PATHsont refusées pour l’exécution sur l’hôte. Le démon lui-même continue de s’exécuter avec unPATHminimal :- macOS :
/opt/homebrew/bin,/usr/local/bin,/usr/bin,/bin - Linux :
/usr/local/bin,/usr/bin,/bin - Pour empêcher la configuration du shell utilisateur, comme
~/.zshenvou/etc/zshenv, de remplacer les chemins prioritaires au démarrage, les entrées detools.exec.pathPrependsont ajoutées de manière sécurisée au début duPATHfinal dans la commande shell juste avant l’exécution.
- macOS :
host=sandbox: exécutesh -lc(shell de connexion) dans le conteneur, de sorte que/etc/profilepeut réinitialiserPATH. OpenClaw ajouteenv.PATHau début du chemin après le chargement du profil au moyen d’une variable d’environnement interne, sans interpolation du shell ;tools.exec.pathPrepends’applique également ici.host=node: seules les substitutions d’environnement non bloquées que vous fournissez sont envoyées au Node. Les substitutions deenv.PATHsont refusées pour l’exécution sur l’hôte et ignorées par les hôtes Node. Si vous avez besoin d’entrées PATH supplémentaires sur un Node, configurez l’environnement du service de l’hôte Node (systemd/launchd) ou installez les outils dans des emplacements standard.
Association d’un Node par agent (utilisez l’index de la liste des agents dans la configuration) :
openclaw config get agents.listopenclaw config set 'agents.list[0].tools.exec.node' "node-id-or-name"Interface de contrôle : la page Devices comprend un petit panneau « Exec node binding » pour les mêmes paramètres.
Substitutions de session (/exec)
Utilisez /exec pour définir les valeurs par défaut propres à la session de host, security, ask et node. Envoyez /exec sans argument pour afficher les valeurs actuelles.
Exemple :
/exec host=auto security=allowlist ask=on-miss node=mac-1/exec est pris en compte uniquement pour les expéditeurs autorisés (listes d’autorisation ou appairage du canal, plus commands.useAccessGroups). Il met à jour uniquement l’état de la session et n’écrit pas dans la configuration. Les expéditeurs autorisés de canaux externes peuvent définir ces valeurs par défaut de session. Les clients internes du Gateway ou du chat web ont besoin de operator.admin pour les rendre persistantes.
Pour désactiver complètement l’exécution, refusez-la au moyen de la politique des outils (tools.deny: ["exec"] ou par agent). Les approbations de l’hôte continuent de s’appliquer, sauf si vous définissez explicitement security=full et ask=off.
Approbations d’exécution (application compagnon / hôte Node)
Les agents en bac à sable peuvent exiger une approbation pour chaque requête avant l’exécution de exec sur le Gateway ou l’hôte Node. Consultez Approbations d’exécution pour en savoir plus sur la politique, la liste d’autorisation et le parcours dans l’interface utilisateur.
Lorsqu’une approbation humaine est requise, les parcours de l’hôte Node et les parcours non natifs du Gateway renvoient immédiatement status: "approval-pending" ainsi qu’un identifiant d’approbation. Les parcours natifs du chat et du Gateway de l’interface Web peuvent à la place attendre en ligne et renvoyer le résultat final de la commande après l’approbation. Un résultat approval-pending signifie que la commande n’a pas démarré ; les avertissements de basculement vers le premier plan n’apparaissent donc que si la commande approuvée est effectivement exécutée en ligne. Les exécutions asynchrones approuvées émettent des événements système de progression et de fin de commande (Exec running / Exec finished) ; les approbations refusées ou arrivées à expiration sont définitives et ne réactivent pas la session de l’agent avec un événement système de refus.
Sur les canaux disposant de cartes ou de boutons d’approbation natifs, l’agent doit utiliser en priorité cette interface native et n’inclure une commande manuelle /approve que lorsque le résultat de l’outil indique explicitement que les approbations dans le chat sont indisponibles ou que l’approbation manuelle constitue le seul parcours possible.
Liste d’autorisation et binaires sûrs
L’application manuelle de la liste d’autorisation fait correspondre les motifs glob des chemins binaires résolus et ceux des noms de commandes seuls. Les noms seuls correspondent uniquement aux commandes invoquées par l’intermédiaire de PATH ; rg peut donc correspondre à /opt/homebrew/bin/rg lorsque la commande est rg, mais pas à ./rg ni à /tmp/rg.
Lorsque security=allowlist, les commandes shell sont automatiquement autorisées uniquement si chaque segment du pipeline figure dans la liste d’autorisation ou correspond à un binaire sûr. Les enchaînements (;, &&, ||) et les redirections sont refusés en mode liste d’autorisation, sauf si chaque segment de premier niveau satisfait la liste d’autorisation, y compris les binaires sûrs. Les redirections restent non prises en charge. La confiance permanente accordée par allow-always ne contourne pas cette règle : chaque segment de premier niveau d’une commande enchaînée doit toujours correspondre.
autoAllowSkills est un parcours pratique distinct dans les approbations d’exécution, différent des entrées manuelles de chemins dans la liste d’autorisation. Pour une confiance explicite stricte, laissez autoAllowSkills désactivé.
Utilisez les deux contrôles à des fins différentes :
tools.exec.safeBins: petits filtres de flux limités à l’entrée standard.tools.exec.safeBinTrustedDirs: répertoires de confiance supplémentaires explicitement définis pour les chemins des exécutables sûrs.tools.exec.safeBinProfiles: politique d’arguments explicite pour les binaires sûrs personnalisés.- liste d’autorisation : confiance explicite accordée aux chemins des exécutables.
Ne considérez pas safeBins comme une liste d’autorisation générique et n’y ajoutez pas de binaires d’interpréteur ou de runtime, par exemple python3, node, ruby ou bash. Si vous en avez besoin, utilisez des entrées explicites dans la liste d’autorisation et conservez les demandes d’approbation activées.
openclaw security audit émet un avertissement lorsque des entrées d’interpréteur ou de runtime dans safeBins ne disposent pas de profils explicites, et openclaw doctor --fix peut générer la structure des entrées personnalisées manquantes dans safeBinProfiles. openclaw security audit et openclaw doctor émettent également un avertissement lorsque vous réintroduisez explicitement dans safeBins des binaires au comportement étendu tels que jq (jq peut lire les données d’environnement et charger du code jq depuis des modules ou des fichiers de démarrage ; préférez donc des entrées explicites dans la liste d’autorisation ou des exécutions soumises à approbation). L’utilisation de jq comme binaire sûr est refusée même lorsqu’il figure explicitement dans la liste. Si vous placez explicitement des interpréteurs dans la liste d’autorisation, activez tools.exec.strictInlineEval afin que les formes d’évaluation de code intégrées nécessitent toujours l’autorisation de l’évaluateur ou une approbation explicite.
Pour obtenir les détails complets de la politique et des exemples, consultez Approbations d’exécution et Binaires sûrs et liste d’autorisation.
Exemples
Premier plan :
{ "tool": "exec", "command": "ls -la" }Arrière-plan et interrogation :
{"tool":"exec","command":"npm run build","yieldMs":1000}{"tool":"process","action":"poll","sessionId":"<id>"}L’interrogation sert à obtenir l’état à la demande, et non à créer des boucles d’attente. Si la réactivation automatique à la fin est activée, la commande peut réactiver la session lorsqu’elle produit une sortie ou échoue.
Envoi de touches (style tmux) :
{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Enter"]}{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["C-c"]}{"tool":"process","action":"send-keys","sessionId":"<id>","keys":["Up","Up","Enter"]}Soumission (envoie uniquement CR) :
{ "tool": "process", "action": "submit", "sessionId": "<id>" }Collage (encadré par défaut) :
{ "tool": "process", "action": "paste", "sessionId": "<id>", "text": "line1\nline2\n" }apply_patch
apply_patch est un sous-outil de exec destiné aux modifications structurées de plusieurs fichiers. Il est activé par défaut et disponible avec tous les fournisseurs de modèles ; allowModels permet de restreindre son utilisation. Utilisez la configuration uniquement lorsque vous souhaitez le désactiver ou le limiter à certains modèles :
{ tools: { exec: { applyPatch: { workspaceOnly: true, allowModels: ["gpt-5.6-sol"] }, }, },}Remarques :
- La politique des outils continue de s’appliquer ;
allow: ["write"]autorise implicitementapply_patch. deny: ["write"]ne refuse pasapply_patch; refusez explicitementapply_patchou utilisezdeny: ["group:fs"]lorsque les écritures de correctifs doivent également être bloquées.- La configuration se trouve sous
tools.exec.applyPatch. tools.exec.applyPatch.enabledvauttruepar défaut ; définissez-le surfalsepour désactiver l’outil.tools.exec.applyPatch.workspaceOnlyvauttruepar défaut, ce qui limite les modifications à l’espace de travail. Définissez-le surfalseuniquement si vous souhaitez intentionnellement queapply_patchécrive ou supprime des éléments en dehors du répertoire de l’espace de travail.tools.exec.applyPatch.allowModelsest une liste d’autorisation facultative d’identifiants de modèles, sous forme brute commegpt-5.4ou complète commeopenai/gpt-5.4. Lorsqu’elle est définie, seuls les modèles correspondants obtiennent l’outil ; lorsqu’elle ne l’est pas, tous les modèles l’obtiennent.
Pages connexes
- Approbations d’exécution — étapes d’approbation pour les commandes shell
- Mise en bac à sable — exécution de commandes dans des environnements en bac à sable
- Processus en arrière-plan — outils d’exécution et de traitement pour les commandes de longue durée
- Sécurité — politique des outils et accès privilégié