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 openclaw sur 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 :

text
$OPENCLAW_STATE_DIR/exec-approvals.json# otherwise~/.openclaw/exec-approvals.json

Le 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 :

json
{  "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 durable allow-always ne supprime pas les invites lorsque le mode ask effectif est always.

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

strictInlineEvalboolean

Lorsque 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 -c
  • node -e, node --eval, node -p
  • ruby -e
  • perl -e, perl -E
  • php -r
  • lua -e
  • osascript -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: false

ContrĂŽ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

    bash
    openclaw config set tools.exec.host gatewayopenclaw config set tools.exec.security fullopenclaw config set tools.exec.ask offopenclaw gateway restart
  • Faire correspondre le fichier d’approbations de l’hĂŽte

    bash
    openclaw approvals set --stdin <<'EOF'{  version: 1,  defaults: {    security: "full",    ask: "off",    askFallback: "full"  }}EOF
  • Raccourci local

    bash
    openclaw exec-policy preset yolo

    Ce raccourci local met à jour les deux éléments :

    • tools.exec.host/security/ask local.
    • 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 :

    bash
    openclaw approvals set --node <id|name|ip> --stdin <<'EOF'{  version: 1,  defaults: {    security: "full",    ask: "off",    askFallback: "full"  }}EOF

    Raccourci limité à la session

    • /exec security=full ask=off modifie uniquement la session actuelle.
    • /elevated full est 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 en security: "full" et ask: "off". Un fichier d’hĂŽte plus strict, comme ask: "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.

    json
    {  "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.run transfĂ©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, agentId ou sessionKey aprĂš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

    • full est puissant ; prĂ©fĂ©rez les listes d’autorisation lorsque c’est possible.
    • ask vous 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=full est 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 sur deny ou refusez l’outil exec via la politique d’outils.

    Connexe

    Was this useful?
    On this page

    On this page