Tools
Approbations dâexĂ©cution
Les approbations dâexĂ©cution sont le garde-fou de lâapp compagnon / de lâhĂŽte de nĆud qui permet Ă un agent en bac Ă sable dâexĂ©cuter des commandes sur un hĂŽte rĂ©el (gateway ou node). Un verrou de sĂ©curitĂ© : les commandes ne sont autorisĂ©es que lorsque la politique + la liste dâautorisation + lâapprobation utilisateur (facultative) concordent toutes. Les approbations dâexĂ©cution sâempilent par-dessus la politique dâoutils et le contrĂŽle dâĂ©lĂ©vation (sauf si lâĂ©lĂ©vation est dĂ©finie sur full, ce qui ignore les approbations).
Pour une vue dâensemble axĂ©e sur les modes de deny, allowlist, ask, auto, full, la correspondance Codex Guardian et les permissions du harnais ACPX, consultez
Modes de permission.
Inspecter la politique effective
| Commande | Ce quâelle affiche |
|---|---|
openclaw approvals get / --gateway / --node <id|name|ip> |
Politique demandĂ©e, sources de politique de lâhĂŽte et rĂ©sultat effectif. |
openclaw exec-policy show |
Vue fusionnée de la machine locale. |
openclaw exec-policy set / preset |
Synchronise la politique locale demandĂ©e avec le fichier local dâapprobations de lâhĂŽte en une Ă©tape. |
Quand une portĂ©e locale demande host=node, exec-policy show signale cette portĂ©e comme gĂ©rĂ©e par le nĆud Ă lâexĂ©cution au lieu de prĂ©tendre que le fichier local dâapprobations est la source de vĂ©ritĂ©.
Si lâinterface de lâapp compagnon nâest pas disponible, toute demande qui dĂ©clencherait normalement une invite est rĂ©solue par le repli ask (par dĂ©faut : deny).
OĂč cela sâapplique
Les approbations dâexĂ©cution sont appliquĂ©es localement sur lâhĂŽte dâexĂ©cution :
- HĂŽte Gateway â processus
openclawsur la machine Gateway. - HĂŽte Node â exĂ©cuteur de nĆud (app compagnon macOS ou hĂŽte de nĆud sans interface).
ModĂšle de confiance
- Les appelants authentifiés auprÚs du Gateway sont des opérateurs approuvés pour ce Gateway.
- Les nĆuds appairĂ©s Ă©tendent cette capacitĂ© dâopĂ©rateur approuvĂ© Ă lâhĂŽte de nĆud.
- Les approbations dâexĂ©cution rĂ©duisent le risque dâexĂ©cution accidentelle, mais ne constituent pas une frontiĂšre dâauthentification par utilisateur ni une politique de systĂšme de fichiers en lecture seule.
- Une fois approuvĂ©e, une commande peut modifier des fichiers selon les permissions de systĂšme de fichiers de lâhĂŽte ou du bac Ă sable sĂ©lectionnĂ©.
- Les exĂ©cutions approuvĂ©es sur hĂŽte de nĆud lient le contexte dâexĂ©cution canonique : cwd canonique, argv exact, liaison dâenvironnement lorsquâelle est prĂ©sente et chemin dâexĂ©cutable Ă©pinglĂ© le cas Ă©chĂ©ant.
- Pour les scripts shell et les invocations directes de fichiers par interprĂ©teur/environnement dâexĂ©cution, OpenClaw essaie aussi de lier un opĂ©rande de fichier local concret. Si ce fichier liĂ© change aprĂšs lâapprobation mais avant lâexĂ©cution, lâexĂ©cution est refusĂ©e au lieu dâexĂ©cuter un contenu qui a dĂ©rivĂ©.
- La liaison de fichiers est volontairement au mieux, pas un modĂšle sĂ©mantique complet de chaque chemin de chargeur dâinterprĂ©teur/environnement dâexĂ©cution. Si le mode dâapprobation ne peut pas identifier exactement un fichier local concret Ă lier, il refuse dâĂ©mettre une exĂ©cution adossĂ©e Ă une approbation au lieu de prĂ©tendre offrir une couverture complĂšte.
Séparation macOS
- Le service dâhĂŽte de nĆud transmet
system.runĂ lâapp macOS via lâIPC local. - Lâapp macOS applique les approbations et exĂ©cute la commande dans le contexte de lâinterface utilisateur.
ParamĂštres et stockage
Les approbations rĂ©sident dans un fichier JSON local sur lâhĂŽte dâexĂ©cution. Quand
OPENCLAW_STATE_DIR est dĂ©fini, le fichier suit ce rĂ©pertoire dâĂ©tat ;
sinon, il utilise le rĂ©pertoire dâĂ©tat OpenClaw par dĂ©faut :
$OPENCLAW_STATE_DIR/exec-approvals.json# otherwise~/.openclaw/exec-approvals.jsonLe socket dâapprobation par dĂ©faut suit la mĂȘme racine :
$OPENCLAW_STATE_DIR/exec-approvals.sock, ou
~/.openclaw/exec-approvals.sock lorsque la variable nâest pas dĂ©finie.
Exemple de schéma :
{ "version": 1, "socket": { "path": "~/.openclaw/exec-approvals.sock", "token": "base64url-token" }, "defaults": { "security": "deny", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": false }, "agents": { "main": { "security": "allowlist", "ask": "on-miss", "askFallback": "deny", "autoAllowSkills": true, "allowlist": [ { "id": "B0C8C0B3-2C2D-4F8A-9A3C-5A4B3C2D1E0F", "pattern": "~/Projects/**/bin/rg", "source": "allow-always", "commandText": "rg -n TODO", "lastUsedAt": 1737150000000, "lastUsedCommand": "rg -n TODO", "lastResolvedPath": "/Users/user/Projects/.../bin/rg" } ] } }}Boutons de politique
tools.exec.mode
tools.exec.mode est la surface de politique normalisĂ©e privilĂ©giĂ©e pour lâexĂ©cution hĂŽte.
Les valeurs sont :
deny- bloque lâexĂ©cution hĂŽte.allowlist- exĂ©cute uniquement les commandes figurant dans la liste dâautorisation sans demander.ask- utilise la politique de liste dâautorisation et demande en cas dâabsence de correspondance.auto- utilise la politique de liste dâautorisation, exĂ©cute directement les correspondances dĂ©terministes et envoie les absences dâapprobation au rĂ©viseur automatique natif dâOpenClaw avant de revenir Ă une voie dâapprobation humaine.full- exĂ©cute lâhĂŽte sans invites dâapprobation.
Les anciens tools.exec.security / tools.exec.ask restent pris en charge et prévalent encore
lorsquâils sont dĂ©finis Ă une portĂ©e de session ou dâagent plus Ă©troite.
exec.security
security"deny" | "allowlist" | "full"deny- bloque toutes les demandes dâexĂ©cution hĂŽte.allowlist- autorise uniquement les commandes figurant dans la liste dâautorisation.full- autorise tout (Ă©quivalent Ă lâĂ©lĂ©vation).
exec.ask
ask"off" | "on-miss" | "always"Politique de demande configurĂ©e pour lâexĂ©cution hĂŽte. ContrĂŽle le comportement
de base des invites dâapprobation depuis tools.exec.ask et les valeurs par dĂ©faut des approbations de lâhĂŽte. Le
paramĂštre dâoutil ask par appel (voir Outil Exec)
ne peut que renforcer cette base, et les appels de modĂšle dâorigine canal lâignorent
lorsque la demande effective de lâhĂŽte est off.
off- ne jamais demander.on-miss- demander uniquement lorsque la liste dâautorisation ne correspond pas.always- demander pour chaque commande. La confiance durableallow-alwaysne supprime pas les invites lorsque le mode ask effectif estalways.
askFallback
askFallback"deny" | "allowlist" | "full"RĂ©solution lorsquâune invite est requise mais quâaucune interface utilisateur nâest joignable. Si ce
champ est omis, OpenClaw utilise deny par défaut.
deny- bloquer.allowlist- autoriser uniquement si la liste dâautorisation correspond.full- autoriser.
tools.exec.strictInlineEval
strictInlineEvalbooleanLorsque true, OpenClaw traite les formes dâĂ©valuation de code en ligne comme nĂ©cessitant uniquement une approbation,
mĂȘme si le binaire de lâinterprĂ©teur lui-mĂȘme figure dans la liste dâautorisation. DĂ©fense en profondeur
pour les chargeurs dâinterprĂ©teur qui ne se mappent pas proprement Ă un opĂ©rande de fichier
stable unique.
Exemples interceptés par le mode strict :
python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
En mode strict, ces commandes nécessitent toujours une approbation explicite, et
allow-always ne persiste pas automatiquement de nouvelles entrĂ©es de liste dâautorisation pour elles.
tools.exec.commandHighlighting
commandHighlightingbooleandefault: falseContrĂŽle uniquement la prĂ©sentation dans les invites dâapprobation dâexĂ©cution. Lorsquâil est activĂ©,
OpenClaw peut joindre des segments de commande dĂ©rivĂ©s de lâanalyseur afin que les invites dâapprobation Web
puissent mettre en évidence les jetons de commande. Définissez-le sur true pour activer
la mise en évidence du texte de commande.
Ce paramĂštre ne modifie pas security, ask, la correspondance de liste dâautorisation,
le comportement strict dâĂ©valuation en ligne, la transmission des approbations ni lâexĂ©cution des commandes.
Il peut ĂȘtre dĂ©fini globalement sous tools.exec.commandHighlighting ou par
agent sous agents.list[].tools.exec.commandHighlighting.
Mode YOLO (sans approbation)
Si vous voulez que lâexĂ©cution hĂŽte sâexĂ©cute sans invites dâapprobation, vous devez ouvrir
les deux couches de politique : la politique dâexĂ©cution demandĂ©e dans la configuration OpenClaw
(tools.exec.*) et la politique dâapprobations locale Ă lâhĂŽte dans
le fichier dâapprobations de lâhĂŽte dâexĂ©cution.
OpenClaw définit par défaut les askFallback omis sur deny. Définissez explicitement
askFallback de lâhĂŽte sur full lorsquâune invite dâapprobation sans interface utilisateur doit
se rabattre sur lâautorisation.
| Couche | ParamĂštre YOLO |
|---|---|
tools.exec.security |
full sur gateway/node |
tools.exec.ask |
off |
askFallback de lâhĂŽte |
full |
Les fournisseurs adossés à la CLI qui exposent leur propre mode de permission non interactif
peuvent suivre cette politique. Claude CLI ajoute
--permission-mode bypassPermissions lorsque la politique dâexĂ©cution effective dâOpenClaw
est YOLO. Pour les sessions live Claude gĂ©rĂ©es par OpenClaw, la politique dâexĂ©cution effective dâOpenClaw
fait autorité sur le mode de permission natif de Claude :
YOLO normalise les lancements live en --permission-mode bypassPermissions, et
une politique dâexĂ©cution effective restrictive normalise les lancements live en
--permission-mode default, mĂȘme si les arguments bruts du backend Claude spĂ©cifient un autre
mode.
Si vous voulez une configuration plus conservatrice, resserrez la politique dâexĂ©cution OpenClaw Ă
allowlist / on-miss ou deny.
Configuration persistante « ne jamais demander » de lâhĂŽte Gateway
Définir la politique de configuration demandée
openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.security fullopenclaw config set tools.exec.ask offopenclaw gateway restartFaire correspondre le fichier dâapprobations de lâhĂŽte
openclaw approvals set --stdin <<'EOF'{ version: 1, defaults: { security: "full", ask: "off", askFallback: "full" }}EOFRaccourci local
openclaw exec-policy preset yoloCe raccourci local met à jour les deux éléments :
tools.exec.host/security/asklocal.- Les valeurs par dĂ©faut du fichier local dâapprobations, y compris
askFallback: "full".
Il est volontairement uniquement local. Pour modifier Ă distance les approbations dâhĂŽte Gateway ou dâhĂŽte de nĆud, utilisez openclaw approvals set --gateway ou
openclaw approvals set --node <id|name|ip>.
HĂŽte de nĆud
Pour un hĂŽte de nĆud, appliquez plutĂŽt le mĂȘme fichier dâapprobations sur ce nĆud :
openclaw approvals set --node <id|name|ip> --stdin <<'EOF'{ version: 1, defaults: { security: "full", ask: "off", askFallback: "full" }}EOFRaccourci limité à la session
/exec security=full ask=offmodifie uniquement la session actuelle./elevated fullest un raccourci de dernier recours qui ignore les approbations dâexĂ©cution uniquement lorsque la politique demandĂ©e et le fichier dâapprobations de lâhĂŽte se rĂ©solvent tous deux ensecurity: "full"etask: "off". Un fichier dâhĂŽte plus strict, commeask: "always", dĂ©clenche toujours une invite.
Si le fichier dâapprobations de lâhĂŽte reste plus strict que la configuration, la politique dâhĂŽte plus stricte lâemporte toujours.
Liste dâautorisation (par agent)
Les listes dâautorisation sont par agent. Sâil existe plusieurs agents, changez lâagent que vous modifiez dans lâapp macOS. Les motifs sont des correspondances glob.
Les motifs peuvent ĂȘtre des globs de chemins binaires rĂ©solus ou des globs de noms de commande seuls.
Les noms seuls ne correspondent quâaux commandes invoquĂ©es via PATH, donc rg peut correspondre Ă
/opt/homebrew/bin/rg lorsque la commande est rg, mais pas Ă ./rg ni Ă
/tmp/rg. Utilisez un glob de chemin lorsque vous voulez faire confiance Ă un emplacement
binaire spécifique.
Les anciennes entrées agents.default sont migrées vers agents.main au chargement.
Les chaĂźnes shell comme echo ok && pwd doivent toujours avoir chaque segment de premier niveau
conforme aux rĂšgles de liste dâautorisation.
Exemples :
rg~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
Restreindre les arguments avec argPattern
Ajoutez argPattern lorsquâune entrĂ©e de liste dâautorisation doit correspondre Ă un binaire et Ă une
forme dâarguments spĂ©cifique. OpenClaw Ă©value lâexpression rĂ©guliĂšre
par rapport aux arguments de commande analysés, en excluant le jeton exécutable
(argv[0]). Pour les entrées rédigées manuellement, les arguments sont joints avec un
seul espace, donc ancrez le motif lorsque vous avez besoin dâune correspondance exacte.
{ "version": 1, "agents": { "main": { "allowlist": [ { "pattern": "python3", "argPattern": "^safe\\.py$" } ] } }}Cette entrée autorise python3 safe.py ; python3 other.py est un échec de correspondance
de la liste dâautorisation. Si une entrĂ©e par chemin uniquement pour le mĂȘme binaire est Ă©galement prĂ©sente, les
arguments sans correspondance peuvent toujours se rabattre sur cette entrĂ©e par chemin uniquement. Omettez lâentrĂ©e par chemin uniquement
lorsque lâobjectif est de restreindre le binaire aux arguments dĂ©clarĂ©s.
Les entrĂ©es enregistrĂ©es par les flux dâapprobation peuvent utiliser un format de sĂ©parateur interne pour la
correspondance exacte de argv. PrĂ©fĂ©rez lâinterface utilisateur ou le flux dâapprobation pour rĂ©gĂ©nĂ©rer ces
entrées au lieu de modifier manuellement la valeur encodée. Si OpenClaw ne peut pas
analyser argv pour un segment de commande, les entrées avec argPattern ne correspondent pas.
Chaque entrĂ©e de liste dâautorisation prend en charge :
| Champ | Signification |
|---|---|
pattern |
Glob de chemin binaire résolu ou glob de nom de commande seul |
argPattern |
Regex argv facultative ; les entrées omises sont par chemin uniquement |
id |
UUID stable utilisĂ© pour lâidentitĂ© dans lâinterface utilisateur |
source |
Source de lâentrĂ©e, comme allow-always |
commandText |
Texte de commande capturĂ© lorsquâun flux dâapprobation a créé lâentrĂ©e |
lastUsedAt |
Horodatage de derniĂšre utilisation |
lastUsedCommand |
DerniĂšre commande ayant correspondu |
lastResolvedPath |
Dernier chemin binaire résolu |
Autorisation automatique des CLI de Skills
Lorsque Autorisation automatique des CLI de Skills est activé, les exécutables référencés par
des Skills connus sont traitĂ©s comme autorisĂ©s sur les nĆuds (nĆud macOS ou hĂŽte de nĆud
headless). Cela utilise skills.bins via le RPC Gateway pour récupérer la
liste des binaires de Skills. DĂ©sactivez cette option si vous voulez des listes dâautorisation manuelles strictes.
Binaires sĂ»rs et transfert dâapprobation
Pour les binaires sĂ»rs (le chemin rapide stdin uniquement), les dĂ©tails de liaison des interprĂ©teurs, et la maniĂšre de transfĂ©rer les invites dâapprobation vers Slack/Discord/Telegram (ou de les exĂ©cuter comme clients dâapprobation natifs), consultez Approbations dâexĂ©cution - avancĂ©.
Modification dans Control UI
Utilisez la carte Control UI â Nodes â Exec approvals pour modifier les valeurs par dĂ©faut, les remplacements par agent et les listes dâautorisation. Choisissez une portĂ©e (valeurs par dĂ©faut ou un agent), ajustez la politique, ajoutez/supprimez des motifs de liste dâautorisation, puis Enregistrer. Lâinterface utilisateur affiche les mĂ©tadonnĂ©es de derniĂšre utilisation par motif afin que vous puissiez garder la liste propre.
Le sĂ©lecteur de cible choisit Gateway (approbations locales) ou un nĆud.
Les nĆuds doivent annoncer system.execApprovals.get/set (app macOS ou
hĂŽte de nĆud headless). Si un nĆud nâannonce pas encore les approbations dâexĂ©cution,
modifiez directement son fichier dâapprobations local.
CLI : openclaw approvals prend en charge la modification du gateway ou du nĆud - voir
CLI dâapprobations.
Flux dâapprobation
Lorsquâune invite est requise, le gateway diffuse
exec.approval.requested aux clients opĂ©rateurs. Control UI et lâapp macOS
la résolvent via exec.approval.resolve, puis le gateway transfÚre la
requĂȘte approuvĂ©e Ă lâhĂŽte de nĆud.
Pour host=node, les requĂȘtes dâapprobation incluent une charge utile canonique systemRunPlan.
Le gateway utilise ce plan comme contexte
command/cwd/session faisant autoritĂ© lors du transfert des requĂȘtes system.run
approuvées.
Câest important pour la latence dâapprobation asynchrone :
- Le chemin dâexĂ©cution du nĆud prĂ©pare un plan canonique en amont.
- Lâenregistrement dâapprobation stocke ce plan et ses mĂ©tadonnĂ©es de liaison.
- Une fois approuvĂ©, lâappel final
system.runtransfĂ©rĂ© rĂ©utilise le plan stockĂ© au lieu de faire confiance Ă des modifications ultĂ©rieures de lâappelant. - Si lâappelant modifie
command,rawCommand,cwd,agentIdousessionKeyaprĂšs la crĂ©ation de la demande dâapprobation, le gateway rejette lâexĂ©cution transfĂ©rĂ©e comme non-concordance dâapprobation.
ĂvĂ©nements systĂšme
Le cycle de vie dâexĂ©cution est exposĂ© sous forme de messages systĂšme :
Exec running(uniquement si la commande dĂ©passe le seuil de notification dâexĂ©cution).Exec finished.
Ils sont publiĂ©s dans la session de lâagent aprĂšs que le nĆud a signalĂ© lâĂ©vĂ©nement.
Les approbations dâexĂ©cution refusĂ©es sont terminales pour la commande hĂŽte elle-mĂȘme : la commande
ne sâexĂ©cute pas. Pour les approbations asynchrones de lâagent principal avec une session dâorigine,
OpenClaw publie le refus dans cette session comme suivi interne afin que
lâagent puisse cesser dâattendre la commande asynchrone et Ă©viter une rĂ©paration de rĂ©sultat manquant.
Sâil nây a pas de session ou si la session ne peut pas ĂȘtre reprise, OpenClaw peut toujours
signaler un refus concis Ă lâopĂ©rateur ou Ă la route de chat directe. Les refus pour
les sessions de sous-agent ne sont pas renvoyés dans le sous-agent.
Les approbations dâexĂ©cution hĂ©bergĂ©es par Gateway Ă©mettent les mĂȘmes Ă©vĂ©nements de cycle de vie lorsque la
commande se termine (et Ă©ventuellement lorsquâelle sâexĂ©cute plus longtemps que le seuil).
Les exĂ©cutions soumises Ă approbation rĂ©utilisent lâidentifiant dâapprobation comme runId dans ces
messages pour faciliter la corrélation.
Comportement en cas dâapprobation refusĂ©e
Lorsquâune approbation dâexĂ©cution asynchrone est refusĂ©e, OpenClaw traite la commande hĂŽte comme terminale et fail-closed. Pour les sessions de lâagent principal, le refus est remis comme suivi de session interne qui indique Ă lâagent que la commande asynchrone ne sâest pas exĂ©cutĂ©e. Cela prĂ©serve la continuitĂ© de la transcription sans exposer de sortie de commande obsolĂšte. Si la remise Ă la session est indisponible, OpenClaw se rabat sur un refus concis Ă lâopĂ©rateur ou au chat direct lorsquâune route sĂ»re existe.
Implications
fullest puissant ; prĂ©fĂ©rez les listes dâautorisation lorsque câest possible.askvous garde dans la boucle tout en permettant des approbations rapides.- Les listes dâautorisation par agent empĂȘchent les approbations dâun agent de fuiter vers dâautres.
- Les approbations ne sâappliquent quâaux requĂȘtes dâexĂ©cution hĂŽte provenant dâexpĂ©diteurs autorisĂ©s. Les expĂ©diteurs non autorisĂ©s ne peuvent pas Ă©mettre
/exec. /exec security=fullest une commoditĂ© au niveau de la session pour les opĂ©rateurs autorisĂ©s et ignore les approbations par conception. Pour bloquer strictement lâexĂ©cution hĂŽte, dĂ©finissez la sĂ©curitĂ© des approbations surdenyou refusez lâoutilexecvia la politique dâoutils.
Connexe
Binaires sĂ»rs, liaison dâinterprĂ©teur et transfert dâapprobation vers le chat.
Outil dâexĂ©cution de commandes shell.
Chemin de dernier recours qui ignore aussi les approbations.
Modes de sandbox et accĂšs Ă lâespace de travail.
ModÚle de sécurité et durcissement.
Quand utiliser chaque contrĂŽle.
Comportement dâautorisation automatique adossĂ© aux Skills.