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 sandboxé d’exécuter des commandes sur un hôte réel (gateway ou node). Voyez cela comme un interverrouillage de sécurité :
les commandes ne sont autorisées que lorsque la politique + la liste d’autorisation + (éventuellement) l’approbation utilisateur sont toutes d’accord.
Les approbations d’exécution s’ajoutent en plus à la politique d’outils et au 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 d’approbation est omis, la valeur de tools.exec est utilisée.
L’exécution hôte utilise aussi l’état local des approbations sur cette machine. Un paramètre local
ask: "always" dans ~/.openclaw/exec-approvals.json continue d’afficher une invite même si
les valeurs par défaut de la session ou de la configuration demandent ask: "on-miss".
Utilisez openclaw approvals get, openclaw approvals get --gateway ou
openclaw approvals get --node <id|name|ip> pour inspecter la politique demandée,
les sources de politique hôte et le résultat effectif.
Pour la machine locale, openclaw exec-policy show expose la même vue fusionnée et
openclaw exec-policy set|preset peut synchroniser la politique locale demandée avec le
fichier local d’approbations hôte en une seule étape. Lorsqu’une portée locale demande host=node,
openclaw 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é effective.
Si l’interface de l’app compagnon n’est pas disponible, toute demande nécessitant une invite
est résolue par le repli ask (par défaut : refus).
Les clients natifs d’approbation dans le chat peuvent aussi exposer des affordances spécifiques au canal sur le
message d’approbation en attente. Par exemple, Matrix peut initialiser des raccourcis de réaction sur
l’invite d’approbation (✅ autoriser une fois, ❌ refuser et ♾️ toujours autoriser lorsque disponible)
tout en laissant les commandes /approve ... dans le message comme solution de secours.
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 headless)
- Les appelants authentifiés auprès de la Gateway sont des opérateurs de confiance pour cette Gateway.
- Les nœuds appairés étendent cette capacité d’opérateur de confiance à 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.
- Les exécutions approuvées sur l’hôte de nœud lient le contexte d’exécution canonique :
cwdcanonique,argvexact, liaison d’environnement lorsqu’elle est présente, et chemin d’exécutable épinglé lorsque applicable. - Pour les scripts shell et les invocations directes de fichier via interpréteur/runtime, 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 dérivé.
- Cette liaison de fichier est volontairement au mieux, et non un modèle sémantique complet de chaque chemin de chargement d’interpréteur/runtime. Si le mode d’approbation 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 à une couverture complète.
- service d’hôte de nœud transfère
system.runà la app macOS via IPC local. - app macOS applique les approbations + exécute la commande dans le contexte UI.
Paramètres et stockage
Les approbations résident dans un fichier JSON local sur l’hôte d’exécution :~/.openclaw/exec-approvals.json
Exemple de schéma :
Mode « YOLO » sans approbation
Si vous voulez que l’exécution hôte s’effectue sans invites d’approbation, vous devez ouvrir les deux couches de politique :- politique d’exécution demandée dans la configuration OpenClaw (
tools.exec.*) - politique locale d’approbations hôte dans
~/.openclaw/exec-approvals.json
tools.exec.security:fullsurgateway/nodetools.exec.ask:off- hôte
askFallback:full
tools.exec.host=autochoisit où l’exécution s’effectue : dans le sandbox s’il est disponible, sinon sur la gateway.- YOLO choisit comment l’exécution hôte est approuvée :
security=fullplusask=off. - En mode YOLO, OpenClaw n’ajoute pas de barrière distincte d’approbation heuristique contre l’obfuscation de commandes ni de couche de rejet préalable de script par-dessus la politique configurée d’exécution hôte.
autone transforme pas le routage gateway en substitution libre depuis une session sandboxée. Une demande par appelhost=nodeest autorisée depuisauto, ethost=gatewayn’est autorisé depuisautoque lorsqu’aucun runtime sandbox n’est actif. Si vous voulez une valeur par défaut stable non auto, définisseztools.exec.hostou utilisez/exec host=...explicitement.
allowlist / on-miss
ou deny.
Configuration persistante « ne jamais demander » pour l’hôte gateway :
tools.exec.host/security/asklocal- les valeurs par défaut de
~/.openclaw/exec-approvals.jsonlocal
openclaw approvals set --gateway ou
openclaw approvals set --node <id|name|ip>.
Pour un hôte node, appliquez plutôt le même fichier d’approbations sur ce nœud :
openclaw exec-policyne synchronise pas les approbations de nœudopenclaw exec-policy set --host nodeest rejeté- les approbations d’exécution sur nœud sont récupérées depuis le nœud à l’exécution ; les mises à jour ciblant le nœud doivent donc utiliser
openclaw approvals --node ...
/exec security=full ask=offne modifie que la session actuelle./elevated fullest un raccourci de type break-glass qui ignore aussi les approbations d’exécution pour cette session.
Paramètres de politique
Sécurité (exec.security)
- deny : bloque toutes les demandes d’exécution hôte.
- allowlist : autorise uniquement les commandes présentes dans la liste d’autorisation.
- full : autorise tout (équivalent à elevated).
Ask (exec.ask)
- off : ne jamais demander.
- on-miss : demander uniquement lorsqu’aucune correspondance de liste d’autorisation n’est trouvée.
- always : demander pour chaque commande.
- la confiance durable
allow-alwaysne supprime pas les invites lorsque le mode ask effectif estalways
Repli Ask (askFallback)
Si une invite est requise mais qu’aucune UI n’est joignable, le repli décide :
- deny : bloquer.
- allowlist : autoriser uniquement si la liste d’autorisation correspond.
- full : autoriser.
Renforcement de l’évaluation inline d’interpréteur (tools.exec.strictInlineEval)
Lorsque tools.exec.strictInlineEval=true, OpenClaw traite les formes d’évaluation de code inline comme nécessitant une approbation, même si le binaire de l’interpréteur lui-même figure dans la liste d’autorisation.
Exemples :
python -cnode -e,node --eval,node -pruby -eperl -e,perl -Ephp -rlua -eosascript -e
- ces commandes nécessitent toujours une approbation explicite ;
allow-alwaysne persiste pas automatiquement de nouvelles entrées de liste d’autorisation pour elles.
Liste d’autorisation (par agent)
Les listes d’autorisation sont par agent. Si plusieurs agents existent, changez d’agent dans l’app macOS. Les motifs sont des correspondances glob insensibles à la casse. Les motifs doivent se résoudre en chemins binaires (les entrées sur le seul basename sont ignorées). Les anciennes entréesagents.default sont migrées vers agents.main au chargement.
Les chaînes shell telles que echo ok && pwd exigent toujours que chaque segment de premier niveau satisfasse aux règles de liste d’autorisation.
Exemples :
~/Projects/**/bin/peekaboo~/.local/bin/*/opt/homebrew/bin/rg
- id UUID stable utilisé pour l’identité dans l’UI (facultatif)
- last used horodatage
- last used command
- last resolved path
Auto-allow skill CLIs
Lorsque Auto-allow skill CLIs est activé, les exécutables référencés par des Skills connus sont traités comme figurant dans la liste d’autorisation sur les nœuds (nœud macOS ou hôte de nœud headless). Cela utiliseskills.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.
Remarques importantes de confiance :
- Il s’agit d’une liste d’autorisation implicite de commodité, distincte des entrées manuelles de liste d’autorisation par chemin.
- Elle est destinée aux environnements d’opérateurs de confiance où la Gateway et le nœud partagent la même frontière de confiance.
- Si vous avez besoin d’une confiance explicite stricte, conservez
autoAllowSkills: falseet utilisez uniquement des entrées manuelles de liste d’autorisation par chemin.
Safe bins (stdin-only)
tools.exec.safeBins définit une petite liste de binaires stdin-only (par exemple cut)
pouvant s’exécuter en mode liste d’autorisation sans entrées explicites de liste d’autorisation. Les safe bins rejettent
les arguments de fichier positionnels et les jetons ressemblant à des chemins ; ils ne peuvent donc opérer que sur le flux entrant.
Considérez cela comme un chemin rapide étroit pour les filtres de flux, et non comme une liste de confiance générale.
N’ajoutez pas de binaires d’interpréteur ou de runtime (par exemple python3, node, ruby, bash, sh, zsh) à safeBins.
Si une commande peut évaluer du code, exécuter des sous-commandes ou lire des fichiers par conception, préférez des entrées explicites de liste d’autorisation et laissez les invites d’approbation activées.
Les safe bins personnalisés doivent définir un profil explicite dans tools.exec.safeBinProfiles.<bin>.
La validation est déterministe à partir de la seule forme de argv (sans vérification d’existence sur le système de fichiers hôte), ce qui
empêche un comportement d’oracle d’existence de fichier à partir des différences autoriser/refuser.
Les options orientées fichier sont refusées pour les safe bins par défaut (par exemple sort -o, sort --output,
sort --files0-from, sort --compress-program, sort --random-source,
sort --temporary-directory/-T, wc --files0-from, jq -f/--from-file,
grep -f/--file).
Les safe bins appliquent aussi une politique explicite de drapeaux par binaire pour les options qui cassent le comportement stdin-only
(par exemple sort -o/--output/--compress-program et les drapeaux récursifs de grep).
Les options longues sont validées de manière fermée en mode safe-bin : les drapeaux inconnus et les abréviations ambiguës sont rejetés.
Drapeaux refusés par profil safe-bin :
grep:--dereference-recursive,--directories,--exclude-from,--file,--recursive,-R,-d,-f,-rjq:--argfile,--from-file,--library-path,--rawfile,--slurpfile,-L,-fsort:--compress-program,--files0-from,--output,--random-source,--temporary-directory,-T,-owc:--files0-from
argv à être traités comme du texte littéral au moment de l’exécution (pas de globbing
et pas d’expansion de $VARS) pour les segments stdin-only, afin que des motifs comme * ou $HOME/... ne puissent pas être
utilisés pour dissimuler des lectures de fichiers.
Les safe bins doivent aussi se résoudre depuis des répertoires binaires de confiance (valeurs système par défaut plus
tools.exec.safeBinTrustedDirs facultatif). Les entrées PATH ne sont jamais automatiquement considérées comme fiables.
Les répertoires fiables par défaut pour les safe bins sont volontairement minimaux : /bin, /usr/bin.
Si votre exécutable safe-bin se trouve dans des chemins de gestionnaire de paquets/utilisateur (par exemple
/opt/homebrew/bin, /usr/local/bin, /opt/local/bin, /snap/bin), ajoutez-les explicitement
à tools.exec.safeBinTrustedDirs.
Les chaînages shell et les redirections ne sont pas automatiquement autorisés en mode liste d’autorisation.
Le chaînage shell (&&, ||, ;) est autorisé lorsque chaque segment de premier niveau satisfait à la liste d’autorisation
(y compris les safe bins ou l’auto-allow des Skills). Les redirections restent non prises en charge en mode liste d’autorisation.
La substitution de commande ($() / backticks) est rejetée lors de l’analyse de la liste d’autorisation, y compris à l’intérieur
de guillemets doubles ; utilisez des guillemets simples si vous avez besoin du texte littéral $().
Dans les approbations de l’app compagnon macOS, le texte shell brut contenant une syntaxe de contrôle ou d’expansion shell
(&&, ||, ;, |, `, $, <, >, (, )) est traité comme une absence de correspondance dans la liste d’autorisation, sauf si
le binaire shell lui-même figure dans la liste d’autorisation.
Pour les wrappers shell (bash|sh|zsh ... -c/-lc), les substitutions d’environnement à portée de requête sont réduites à une
petite liste d’autorisation explicite (TERM, LANG, LC_*, COLORTERM, NO_COLOR, FORCE_COLOR).
Pour les décisions allow-always en mode liste d’autorisation, les wrappers de distribution connus
(env, nice, nohup, stdbuf, timeout) persistent les chemins des exécutables internes au lieu des chemins des wrappers. Les multiplexeurs shell (busybox, toybox) sont aussi déballés pour les applets shell (sh, ash,
etc.) afin que les exécutables internes soient persistés au lieu des binaires multiplexeurs. Si un wrapper ou un
multiplexeur ne peut pas être déballé en toute sécurité, aucune entrée de liste d’autorisation n’est persistée automatiquement.
Si vous mettez des interpréteurs comme python3 ou node dans la liste d’autorisation, préférez tools.exec.strictInlineEval=true afin que l’évaluation inline nécessite toujours une approbation explicite. En mode strict, allow-always peut toujours persister des invocations bénignes d’interpréteur/script, mais les vecteurs d’évaluation inline ne sont pas persistés automatiquement.
Safe bins par défaut :
cut, uniq, head, tail, tr, wc
grep et sort ne figurent pas dans la liste par défaut. Si vous les activez explicitement, conservez des entrées explicites de liste d’autorisation pour
leurs workflows non stdin.
Pour grep en mode safe-bin, fournissez le motif avec -e/--regexp ; la forme positionnelle du motif est
rejetée afin que des opérandes de fichier ne puissent pas être dissimulés comme positionnels ambigus.
Safe bins versus liste d’autorisation
| Sujet | tools.exec.safeBins | Liste d’autorisation (exec-approvals.json) |
|---|---|---|
| Objectif | Autoriser automatiquement des filtres stdin étroits | Faire explicitement confiance à des exécutables spécifiques |
| Type de correspondance | Nom d’exécutable + politique argv safe-bin | Motif glob du chemin d’exécutable résolu |
| Portée des arguments | Restreinte par le profil safe-bin et les règles de jetons littéraux | Correspondance sur le chemin uniquement ; les arguments relèvent sinon de votre responsabilité |
| Exemples typiques | head, tail, tr, wc | jq, python3, node, ffmpeg, CLI personnalisées |
| Meilleur usage | Transformations de texte à faible risque dans des pipelines | Tout outil avec un comportement plus large ou des effets de bord |
safeBinsprovient de la configuration (tools.exec.safeBinsouagents.list[].tools.exec.safeBinspar agent).safeBinTrustedDirsprovient de la configuration (tools.exec.safeBinTrustedDirsouagents.list[].tools.exec.safeBinTrustedDirspar agent).safeBinProfilesprovient de la configuration (tools.exec.safeBinProfilesouagents.list[].tools.exec.safeBinProfilespar agent). Les clés de profil par agent remplacent les clés globales.- les entrées de liste d’autorisation résident dans
~/.openclaw/exec-approvals.jsonlocal à l’hôte sousagents.<id>.allowlist(ou via Control UI /openclaw approvals allowlist ...). openclaw security auditavertit avectools.exec.safe_bins_interpreter_unprofiledlorsque des binaires d’interpréteur/runtime apparaissent danssafeBinssans profils explicites.openclaw doctor --fixpeut générer les entrées personnalisées manquantessafeBinProfiles.<bin>sous la forme{}(à examiner et resserrer ensuite). Les binaires d’interpréteur/runtime ne sont pas générés automatiquement.
jq dans safeBins, OpenClaw rejette quand même le builtin env en mode safe-bin
afin que jq -n env ne puisse pas vider l’environnement du processus hôte sans chemin explicite dans la liste d’autorisation
ou invite d’approbation.
Édition dans Control UI
Utilisez la carte Control UI → Nodes → Exec approvals pour modifier les valeurs par défaut, les substitutions par agent et les listes d’autorisation. Choisissez une portée (Defaults ou un agent), ajustez la politique, ajoutez/supprimez des motifs de liste d’autorisation, puis cliquez sur Save. L’interface affiche les métadonnées last used par motif afin que vous puissiez garder la liste propre. Le sélecteur de cible choisit Gateway (approbations locales) ou un Node. Les nœuds doivent annoncersystem.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
~/.openclaw/exec-approvals.json local.
CLI : openclaw approvals prend en charge l’édition gateway ou nœud (voir Approvals CLI).
Flux d’approbation
Lorsqu’une invite est requise, la gateway diffuseexec.approval.requested aux clients opérateur.
Control UI et l’app macOS la résolvent via exec.approval.resolve, puis la gateway transfère la
demande approuvée à l’hôte de nœud.
Pour host=node, les demandes d’approbation incluent une charge utile canonique systemRunPlan. La gateway utilise
ce plan comme contexte de vérité pour la commande/le cwd/la session lors du transfert des demandes approuvées system.run.
Cela compte pour la latence d’approbation asynchrone :
- le chemin d’exécution node prépare un plan canonique en amont
- l’enregistrement d’approbation stocke ce plan et ses métadonnées de liaison
- une fois approuvée, l’appel final transféré
system.runré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, la gateway rejette l’exécution transférée comme incompatibilité d’approbation
Commandes d’interpréteur/runtime
Les exécutions d’interpréteur/runtime adossées à une approbation sont volontairement prudentes :- Le contexte exact
argv/cwd/envest toujours lié. - Les scripts shell directs et les formes directes de fichier runtime sont liés au mieux à un instantané concret d’un fichier local.
- Les formes courantes de wrapper de gestionnaire de paquets qui se résolvent quand même en un fichier local direct unique (par exemple
pnpm exec,pnpm node,npm exec,npx) sont déballées avant la liaison. - Si OpenClaw ne peut pas identifier exactement un fichier local concret pour une commande d’interpréteur/runtime (par exemple scripts de package, formes eval, chaînes de chargement spécifiques au runtime, ou formes multi-fichiers ambiguës), l’exécution adossée à une approbation est refusée au lieu de prétendre à une couverture sémantique qu’elle ne possède pas.
- Pour ces workflows, préférez le sandboxing, une frontière hôte distincte, ou un workflow explicite allowlist/full de confiance où l’opérateur accepte la sémantique plus large du runtime.
Exec finished / Exec denied). Si aucune décision n’arrive avant le
timeout, la demande est traitée comme un délai d’attente d’approbation et remontée comme motif de refus.
Comportement de livraison du suivi
Après la fin d’une exécution asynchrone approuvée, OpenClaw envoie un touragent de suivi à la même session.
- Si une cible de livraison externe valide existe (canal livrable plus cible
to), la livraison de suivi utilise ce canal. - Dans les flux webchat-only ou de session interne sans cible externe, la livraison de suivi reste limitée à la session (
deliver: false). - Si un appelant demande explicitement une livraison externe stricte sans canal externe résoluble, la demande échoue avec
INVALID_REQUEST. - Si
bestEffortDeliverest activé et qu’aucun canal externe ne peut être résolu, la livraison est rétrogradée à la session uniquement au lieu d’échouer.
- commande + arguments
cwd- identifiant d’agent
- chemin d’exécutable résolu
- métadonnées d’hôte + de politique
- Allow once → exécuter maintenant
- Always allow → ajouter à la liste d’autorisation + exécuter
- Deny → bloquer
Transfert des approbations vers les canaux de chat
Vous pouvez transférer les invites d’approbation d’exécution vers n’importe quel canal de chat (y compris les canaux de Plugin) et les approuver avec/approve. Cela utilise le pipeline normal de livraison sortante.
Configuration :
OC_I18N_900006
Répondez dans le chat :
OC_I18N_900007
La commande /approve gère à la fois les approbations d’exécution et les approbations de Plugin. Si l’ID ne correspond à aucune approbation d’exécution en attente, elle vérifie automatiquement les approbations de Plugin à la place.
Transfert des approbations de Plugin
Le transfert des approbations de Plugin utilise le même pipeline de livraison que les approbations d’exécution, mais possède sa propre configuration indépendante sousapprovals.plugin. Activer ou désactiver l’un n’affecte pas l’autre.
OC_I18N_900008
La forme de configuration est identique à approvals.exec : enabled, mode, agentFilter,
sessionFilter et targets fonctionnent de la même façon.
Les canaux qui prennent en charge les réponses interactives partagées affichent les mêmes boutons d’approbation pour les approbations d’exécution et de Plugin. Les canaux sans interface interactive partagée reviennent à du texte brut avec des instructions /approve.
Approbations dans le même chat sur n’importe quel canal
Lorsqu’une demande d’approbation d’exécution ou de Plugin provient d’une surface de chat livrable, le même chat peut désormais l’approuver avec/approve par défaut. Cela s’applique à des canaux tels que Slack, Matrix et
Microsoft Teams, en plus des flux existants Web UI et terminal UI.
Ce chemin partagé de commande texte utilise le modèle d’authentification normal du canal pour cette conversation. Si le
chat d’origine peut déjà envoyer des commandes et recevoir des réponses, les demandes d’approbation n’ont plus besoin d’un
adaptateur de livraison natif distinct juste pour rester en attente.
Discord et Telegram prennent aussi en charge /approve dans le même chat, mais ces canaux utilisent toujours leur
liste résolue d’approbateurs pour l’autorisation, même lorsque la livraison native d’approbation est désactivée.
Pour Telegram et les autres clients natifs d’approbation qui appellent directement la Gateway,
ce mécanisme de secours est volontairement limité aux échecs « approval not found ». Un vrai
refus/erreur d’approbation d’exécution ne réessaie pas silencieusement comme approbation de Plugin.
Livraison native des approbations
Certains canaux peuvent aussi servir de clients natifs d’approbation. Les clients natifs ajoutent les messages directs aux approbateurs, le fanout vers le chat d’origine et une interface interactive d’approbation spécifique au canal par-dessus le flux partagé/approve
dans le même chat.
Lorsque des cartes/boutons d’approbation natifs sont disponibles, cette interface native constitue le chemin principal
côté agent. L’agent ne doit pas non plus répéter une commande de chat en clair
/approve en double, sauf si le résultat de l’outil indique que les approbations par chat sont indisponibles ou
que l’approbation manuelle est le seul chemin restant.
Modèle générique :
- la politique d’exécution hôte décide toujours si une approbation d’exécution est requise
approvals.execcontrôle le transfert des invites d’approbation vers d’autres destinations de chatchannels.<channel>.execApprovalscontrôle si ce canal agit comme client natif d’approbation
- le canal prend en charge la livraison native des approbations
- les approbateurs peuvent être résolus à partir de
execApprovals.approversexplicites ou des sources de secours documentées de ce canal channels.<channel>.execApprovals.enabledn’est pas défini ou vaut"auto"
enabled: false pour désactiver explicitement un client natif d’approbation. Définissez enabled: true pour le forcer
lorsque des approbateurs peuvent être résolus. La livraison publique vers le chat d’origine reste explicite via
channels.<channel>.execApprovals.target.
FAQ : Why are there two exec approval configs for chat approvals?
- Discord :
channels.discord.execApprovals.* - Slack :
channels.slack.execApprovals.* - Telegram :
channels.telegram.execApprovals.*
/approve dans le même chat et les boutons d’approbation partagés.
Comportement partagé :
- Slack, Matrix, Microsoft Teams et chats livrables similaires utilisent le modèle d’authentification normal du canal
pour
/approvedans le même chat - lorsqu’un client natif d’approbation s’active automatiquement, la cible de livraison native par défaut est le DM des approbateurs
- pour Discord et Telegram, seuls les approbateurs résolus peuvent autoriser ou refuser
- les approbateurs Discord peuvent être explicites (
execApprovals.approvers) ou déduits decommands.ownerAllowFrom - les approbateurs Telegram peuvent être explicites (
execApprovals.approvers) ou déduits de la configuration propriétaire existante (allowFrom, plusdefaultToen message direct lorsqu’il est pris en charge) - les approbateurs Slack peuvent être explicites (
execApprovals.approvers) ou déduits decommands.ownerAllowFrom - les boutons natifs Slack préservent le type d’identifiant d’approbation, de sorte que les identifiants
plugin:peuvent résoudre des approbations de Plugin sans seconde couche locale de secours propre à Slack - le routage DM/canal natif Matrix et les raccourcis de réaction gèrent à la fois les approbations d’exécution et de Plugin ;
l’autorisation de Plugin provient toujours de
channels.matrix.dm.allowFrom - le demandeur n’a pas besoin d’être un approbateur
- le chat d’origine peut approuver directement avec
/approvelorsque ce chat prend déjà en charge les commandes et les réponses - les boutons natifs d’approbation Discord routent selon le type d’identifiant d’approbation : les identifiants
plugin:vont directement vers les approbations de Plugin, tout le reste va vers les approbations d’exécution - les boutons natifs d’approbation Telegram suivent le même repli borné exec-vers-plugin que
/approve - lorsque
targetnatif active la livraison vers le chat d’origine, les invites d’approbation incluent le texte de la commande - les approbations d’exécution en attente expirent après 30 minutes par défaut
- si aucune interface opérateur ou aucun client d’approbation configuré ne peut accepter la demande, l’invite revient à
askFallback
target: "dm"). Vous pouvez basculer vers channel ou both lorsque vous
voulez que les invites d’approbation apparaissent aussi dans le chat/sujet Telegram d’origine. Pour les sujets de forum Telegram,
OpenClaw préserve le sujet pour l’invite d’approbation et pour le suivi après approbation.
Voir :
Flux IPC macOS
OC_I18N_900009 Remarques de sécurité :- Mode du socket Unix
0600, jeton stocké dansexec-approvals.json. - Vérification de pair de même UID.
- Challenge/réponse (nonce + jeton HMAC + hachage de requête) + TTL court.
Événements système
Le cycle de vie d’exécution est exposé comme messages système :Exec running(uniquement si la commande dépasse le seuil de notification d’exécution)Exec finishedExec denied
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 empêche l’agent de réutiliser la sortie d’une exécution antérieure de la même commande dans la session. Le motif du refus est transmis avec une indication explicite qu’aucune sortie de commande n’est disponible, ce qui empêche l’agent d’affirmer qu’il existe une nouvelle sortie ou de répéter la commande refusée avec des résultats obsolètes issus d’une exécution antérieure réussie.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 qu’une approbation d’un agent ne fuite vers un autre.
- Les approbations ne s’appliquent qu’aux demandes 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 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.
Liens connexes
- Exec — outil d’exécution de commandes shell
- Sandboxing — modes sandbox et accès à l’espace de travail
- Security — modèle de sécurité et durcissement
- Sandbox vs Tool Policy vs Elevated — quand utiliser chacun