docs/docs/fr/tools/exec-approvals.md
2026-04-28 07:57:13 +01:00

19 KiB
Raw Blame History

read_when sidebarTitle summary title x-i18n
Configurer les approbations exec ou les listes dautorisation
Mettre en œuvre lUX dapprobation exec dans lapp macOS
Examiner les invites déchappement au sandbox et leurs implications
Exec approvals Approbations exec de lhôte : réglages de politique, listes dautorisation, et workflow YOLO/strict Approbations Exec
generated_at model provider source_hash source_path workflow
2026-04-26T11:39:44Z gpt-5.4 openai 868cee97882f7298a092bdcb9ec8fd058a5d7cb8745fad2edd712fabfb512e52 tools/exec-approvals.md 15

Les approbations exec sont le garde-fou de lapp compagnon / de lhôte Node pour laisser un agent sandboxé exécuter des commandes sur un hôte réel (gateway ou node). Cest un verrou de sécurité : les commandes ne sont autorisées que lorsque la politique + la liste dautorisation + (lapprobation utilisateur facultative) sont toutes daccord. Les approbations exec se superposent par-dessus la politique doutils et le filtrage elevated (sauf si elevated est défini sur full, ce qui ignore les approbations).

La politique effective est la **plus stricte** entre `tools.exec.*` et les valeurs par défaut des approbations ; si un champ dapprobation est omis, la valeur `tools.exec` est utilisée. Lexec hôte utilise aussi létat dapprobation local sur cette machine — un `ask: "always"` local dans `~/.openclaw/exec-approvals.json` continue dafficher des invites même si les valeurs par défaut de session ou de configuration demandent `ask: "on-miss"`.

Inspection de la politique effective

Commande Ce quelle affiche
openclaw approvals get / --gateway / --node <id|name|ip> Politique demandée, sources de politique de lhôte, et résultat effectif.
openclaw exec-policy show Vue fusionnée de la machine locale.
openclaw exec-policy set / preset Synchroniser la politique locale demandée avec le fichier dapprobations de lhôte local en une seule étape.

Lorsquune portée locale demande host=node, exec-policy show rapporte cette portée comme gérée par le Node à lexécution au lieu de prétendre que le fichier local dapprobations est la source de vérité.

Si lUI de lapp compagnon nest pas disponible, toute requête qui devrait normalement afficher une invite est résolue par le fallback ask (par défaut : deny).

Les clients dapprobation de discussion natifs peuvent amorcer des affordances spécifiques au canal sur le message dapprobation en attente. Par exemple, Matrix amorce des raccourcis de réaction (`` autoriser une fois, `` refuser, `♾️` toujours autoriser) tout en laissant les commandes `/approve ...` dans le message comme solution de repli.

Où cela sapplique

Les approbations exec sont appliquées localement sur lhôte dexécution :

  • Hôte Gateway → processus openclaw sur la machine Gateway.
  • Hôte Node → runner Node (app compagnon macOS ou hôte Node headless).

Modèle de confiance

  • Les appelants authentifiés par la Gateway sont des opérateurs de confiance pour cette Gateway.
  • Les Node appairés étendent cette capacité dopérateur de confiance jusquà lhôte Node.
  • Les approbations exec réduisent le risque dexécution accidentelle, mais ne constituent pas une frontière dauthentification par utilisateur.
  • Les exécutions sur hôte Node approuvées lient le contexte dexécution canonique : cwd canonique, argv exact, liaison env lorsquelle est présente, et chemin dexécutable épinglé lorsque cela sapplique.
  • Pour les scripts shell et les invocations directes de fichiers dinterpréteur/runtime, OpenClaw essaie aussi de lier un opérande de fichier local concret. Si ce fichier lié change après lapprobation mais avant lexécution, lexécution est refusée au lieu dexécuter un contenu dérivant.
  • La liaison de fichier est intentionnellement best-effort, pas un modèle sémantique complet de chaque chemin de chargement dinterpréteur/runtime. Si le mode dapprobation ne peut pas identifier exactement un fichier local concret à lier, il refuse de créer une exécution adossée à une approbation au lieu de prétendre offrir une couverture complète.

Séparation macOS

  • Le service dhôte Node transmet system.run à lapp macOS via IPC local.
  • Lapp macOS applique les approbations et exécute la commande dans le contexte UI.

Réglages et stockage

Les approbations vivent dans un fichier JSON local sur lhôte dexécution :

~/.openclaw/exec-approvals.json

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",
          "lastUsedAt": 1737150000000,
          "lastUsedCommand": "rg -n TODO",
          "lastResolvedPath": "/Users/user/Projects/.../bin/rg"
        }
      ]
    }
  }
}

Réglages de politique

exec.security

- `deny` — bloquer toutes les requêtes dexec sur hôte. - `allowlist` — autoriser uniquement les commandes présentes dans la liste dautorisation. - `full` — tout autoriser (équivalent à elevated).

exec.ask

- `off` — ne jamais afficher dinvite. - `on-miss` — afficher une invite uniquement lorsquil ny a pas de correspondance dans la liste dautorisation. - `always` — afficher une invite pour chaque commande. La confiance durable `allow-always` **ne** supprime **pas** les invites lorsque le mode ask effectif est `always`.

askFallback

Résolution lorsquune invite est requise mais quaucune UI nest joignable.
  • deny — bloquer.
  • allowlist — autoriser uniquement si la liste dautorisation correspond.
  • full — autoriser.

tools.exec.strictInlineEval

Lorsque `true`, OpenClaw traite les formes dévaluation de code en ligne comme nécessitant une approbation même si le binaire de linterpréteur lui-même est dans la liste dautorisation. Défense en profondeur pour les chargeurs dinterpréteur qui ne correspondent pas proprement à un opérande de fichier stable unique.

Exemples détecté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 dautorisation pour elles.

Mode YOLO (sans approbation)

Si vous voulez quexec hôte sexécute sans invites dapprobation, vous devez ouvrir les deux couches de politique — la politique exec demandée dans la configuration OpenClaw (tools.exec.*) et la politique locale dapprobation de lhôte dans ~/.openclaw/exec-approvals.json.

YOLO est le comportement hôte par défaut sauf si vous le resserrez explicitement :

Couche Réglage YOLO
tools.exec.security full sur gateway/node
tools.exec.ask off
Hôte askFallback full
**Distinctions importantes :**
  • tools.exec.host=auto choisit exec sexécute : sandbox lorsquil est disponible, sinon gateway.
  • YOLO choisit comment lexec hôte est approuvé : security=full plus ask=off.
  • En mode YOLO, OpenClaw najoute pas de gate dapprobation heuristique séparée contre lobfuscation de commande ni de couche de rejet preflight de script par-dessus la politique configurée dexec hôte.
  • auto ne fait pas du routage gateway une dérogation gratuite depuis une session sandboxée. Une requête host=node par appel est autorisée depuis auto ; host=gateway nest autorisé depuis auto que lorsquaucun runtime sandbox nest actif. Pour une valeur par défaut stable non-auto, définissez tools.exec.host ou utilisez explicitement /exec host=....

Les fournisseurs soutenus par CLI qui exposent leur propre mode de permission non interactif peuvent suivre cette politique. Claude CLI ajoute --permission-mode bypassPermissions lorsque la politique exec demandée par OpenClaw est YOLO. Remplacez ce comportement backend avec des arguments Claude explicites sous agents.defaults.cliBackends.claude-cli.args / resumeArgs — par exemple --permission-mode default, acceptEdits, ou bypassPermissions.

Si vous voulez une configuration plus prudente, resserrez lune ou lautre couche vers allowlist / on-miss ou deny.

Configuration persistante « ne jamais demander » sur lhôte Gateway

```bash openclaw config set tools.exec.host gateway openclaw config set tools.exec.security full openclaw config set tools.exec.ask off openclaw gateway restart ``` ```bash openclaw approvals set --stdin <<'EOF' { version: 1, defaults: { security: "full", ask: "off", askFallback: "full" } } EOF ```

Raccourci local

openclaw exec-policy preset yolo

Ce raccourci local met à jour à la fois :

  • Le tools.exec.host/security/ask local.
  • Les valeurs par défaut locales de ~/.openclaw/exec-approvals.json.

Il est intentionnellement réservé au local. Pour modifier à distance les approbations de lhôte Gateway ou de lhôte Node, utilisez openclaw approvals set --gateway ou openclaw approvals set --node <id|name|ip>.

Hôte Node

Pour un hôte Node, appliquez à la place le même fichier dapprobations sur ce Node :

openclaw approvals set --node <id|name|ip> --stdin <<'EOF'
{
  version: 1,
  defaults: {
    security: "full",
    ask: "off",
    askFallback: "full"
  }
}
EOF
**Limites du local uniquement :**
  • openclaw exec-policy ne synchronise pas les approbations du Node.
  • openclaw exec-policy set --host node est rejeté.
  • Les approbations exec du Node sont récupérées depuis le Node à lexécution, donc les mises à jour ciblant le Node doivent utiliser openclaw approvals --node ....

Raccourci session uniquement

  • /exec security=full ask=off ne modifie que la session actuelle.
  • /elevated full est un raccourci break-glass qui ignore aussi les approbations exec pour cette session.

Si le fichier dapprobations de lhôte reste plus strict que la configuration, la politique de lhôte la plus stricte lemporte quand même.

Liste dautorisation (par agent)

Les listes dautorisation sont par agent. Si plusieurs agents existent, changez lagent que vous modifiez dans lapp macOS. Les motifs sont des correspondances glob.

Les motifs peuvent être des globs de chemin binaire résolu ou des globs de nom de commande nu. Les noms nus ne correspondent quaux 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 telles que echo ok && pwd exigent toujours que chaque segment de niveau supérieur respecte les règles de la liste dautorisation.

Exemples :

  • rg
  • ~/Projects/**/bin/peekaboo
  • ~/.local/bin/*
  • /opt/homebrew/bin/rg

Chaque entrée de liste dautorisation suit :

Champ Signification
id UUID stable utilisé pour lidentité UI
lastUsedAt Horodatage de la dernière utilisation
lastUsedCommand Dernière commande ayant correspondu
lastResolvedPath Dernier chemin binaire résolu

Auto-autoriser les CLI de Skills

Lorsque Auto-allow skill CLIs est activé, les exécutables référencés par des Skills connus sont traités comme autorisés sur les Node (Node macOS ou hôte Node headless). Cela utilise skills.bins via la RPC Gateway pour récupérer la liste des binaires de Skills. Désactivez cela si vous voulez des listes dautorisation strictement manuelles.

- Il sagit dune **liste dautorisation implicite de confort**, distincte des entrées manuelles de liste dautorisation par chemin. - Elle est destinée aux environnements opérateur de confiance où Gateway et Node partagent la même frontière de confiance. - Si vous exigez une confiance explicite stricte, gardez `autoAllowSkills: false` et utilisez uniquement des entrées manuelles de liste dautorisation par chemin.

Bins sûrs et transfert dapprobation

Pour les bins sûrs (chemin rapide stdin-only), les détails de liaison des interpréteurs, et la manière de transférer les invites dapprobation vers Slack/Discord/Telegram (ou de les exécuter comme clients dapprobation natifs), voir Exec approvals — avancé.

Édition dans la Control UI

Utilisez la carte Control UI → Nodes → Exec approvals pour modifier les valeurs par défaut, les remplacements par agent, et les listes dautorisation. Choisissez une portée (Defaults ou un agent), ajustez la politique, ajoutez/supprimez des motifs de liste dautorisation, puis cliquez sur Save. LUI 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 Node. Les Node doivent annoncer system.execApprovals.get/set (app macOS ou hôte Node headless). Si un Node nannonce pas encore les approbations exec, modifiez directement son ~/.openclaw/exec-approvals.json local.

CLI : openclaw approvals prend en charge lédition côté gateway ou côté node — voir CLI des approbations.

Flux dapprobation

Lorsquune invite est requise, la gateway diffuse exec.approval.requested aux clients opérateur. La Control UI et lapp macOS la résolvent via exec.approval.resolve, puis la gateway transmet la requête approuvée à lhôte Node.

Pour host=node, les requêtes dapprobation incluent un payload canonique systemRunPlan. La gateway utilise ce plan comme contexte de commande/cwd/session faisant autorité lors du transfert des requêtes system.run approuvées.

Cest important pour la latence dapprobation asynchrone :

  • Le chemin exec du Node prépare un plan canonique unique dès le départ.
  • Lenregistrement dapprobation stocke ce plan et ses métadonnées de liaison.
  • Une fois approuvé, lappel system.run final transmis réutilise le plan stocké au lieu de faire confiance à des modifications ultérieures de lappelant.
  • Si lappelant modifie command, rawCommand, cwd, agentId, ou sessionKey après la création de la requête dapprobation, la gateway rejette lexécution transmise comme incohérence dapprobation.

Événements système

Le cycle de vie exec apparaît comme des messages système :

  • Exec running (uniquement si la commande dépasse le seuil davis dexécution).
  • Exec finished.
  • Exec denied.

Ils sont publiés dans la session de lagent après que le Node a signalé lévénement. Les approbations exec sur hôte Gateway émettent les mêmes événements de cycle de vie lorsque la commande se termine (et éventuellement lorsquelle dure plus longtemps que le seuil). Les exec contrôlés par approbation réutilisent lid dapprobation comme runId dans ces messages pour une corrélation facile.

Comportement lors dun refus dapprobation

Lorsquune approbation exec asynchrone est refusée, OpenClaw empêche lagent de réutiliser la sortie dune exécution antérieure de la même commande dans la session. La raison du refus est transmise avec une indication explicite quaucune sortie de commande nest disponible, ce qui empêche lagent daffirmer quil existe une nouvelle sortie ou de répéter la commande refusée avec des résultats obsolètes dune exécution réussie antérieure.

Implications

  • full est puissant ; préférez les listes dautorisation lorsque cest possible.
  • ask vous garde dans la boucle tout en permettant des approbations rapides.
  • Les listes dautorisation par agent empêchent les approbations dun agent de fuiter vers les autres.
  • Les approbations ne sappliquent quaux requêtes exec sur hôte provenant dexpéditeurs autorisés. Les expéditeurs non autorisés ne peuvent pas émettre /exec.
  • /exec security=full est une commodité au niveau session pour les opérateurs autorisés et ignore les approbations par conception. Pour bloquer strictement lexec sur hôte, définissez la sécurité des approbations sur deny ou refusez loutil exec via la politique doutils.

Associé

Bins sûrs, liaison dinterpréteur, et transfert des approbations vers la discussion. Outil dexécution de commandes shell. Chemin break-glass qui ignore aussi les approbations. Modes sandbox et accès à lespace de travail. Modèle de sécurité et durcissement. Quand utiliser chaque contrôle. Comportement dauto-autorisation adossé aux Skills.