shell.exec va
bien pour ls ; c’est un désastre pour rm -rf /. db.query va bien contre
un replica ; contre prod c’est un risque. La différence vit dans les
arguments, et une règle de nom d’outil ne peut pas la voir.
Les clauses d’arguments (args_match_json) du Firewall comblent cette
lacune. Elles inspectent les arguments concrets que le modèle a choisis pour
un appel d’outil et décident le verdict à partir de leurs valeurs — de
sorte que vous pouvez permettre un outil largement tout en refusant la seule
forme dangereuse qu’il peut prendre. Cette page est le guide ciblé sur la
rédaction de ces clauses ; pour le vocabulaire complet des règles voir
Règles du Firewall, et pour le modèle de
politique qui les entoure, Firewall.
Les valeurs d’arguments n’existent qu’une fois que le modèle a choisi
comment appeler un outil, donc les clauses d’arguments ont leur place sur les
stages
response et mcp. Sur inbound — où
l’agent n’annonce que des définitions d’outils — il n’y a pas d’arguments
au moment de l’appel à vérifier.1. Quand valider les arguments d’appel d’outil
Recourez à une clause d’argument chaque fois qu’un outil est sûr en général mais dangereux dans une forme spécifique :Commandes destructrices
Autorisez
shell.exec, mais refusez quand la commande correspond à
rm -rf, mkfs ou dd if=.Rayon d'impact en production
Autorisez
db.query, mais refusez (ou mettez en attente d’approbation)
quand la cible de connexion est prod.Destinations internes
Autorisez un outil de fetch, mais refusez quand son argument
url/ip
tombe dans une plage RFC-1918 ou l’IP cloud-metadata.Opérations surdimensionnées
Autorisez un outil de masse, mais refusez quand un argument
limit ou
count dépasse un plafond numérique.2. La forme d’un ensemble de clauses
args_match_json est une chaîne encodée en JSON dont la valeur décodée
est un objet contenant une liste de clauses. Chaque clause est un triplet
{ path, op, value }, et toutes les clauses se combinent par AND — la
règle ne se déclenche que lorsque chaque clause est vraie. Décodée, la valeur
ressemble à :
"args_match_json": "{\"clauses\":[{\"path\":\"$.command\",\"op\":\"regex\",\"value\":\"rm -rf\"}]}".
Un args_match_json vide ou absent est vacueusement vrai — la règle
correspond sur son glob de nom d’outil seul, exactement comme le fait une
règle uniquement basée sur le nom.
3. Opérateurs
Sept opérateurs constituent le vocabulaire fermé. La console valide l’opérateur et la forme de sa valeur lorsque vous enregistrez, de sorte qu’une clause malformée ne persiste jamais.| Opérateur | Correspond quand |
|---|---|
eq | Égalité scalaire (les nombres sont comparés numériquement ; une incompatibilité de type est une non-correspondance). |
contains | Sous-chaîne — les deux opérandes doivent être des chaînes. |
regex | Un motif Go RE2 correspond à la valeur de chaîne (temps linéaire, pas de backreferences). |
in | La valeur est un élément du tableau JSON donné. |
cidr_match | L’IP de chaîne tombe dans le CIDR donné. |
gt / lt | Supérieur-à / inférieur-à numérique (les chaînes ne sont pas coercées). |
4. Syntaxe des chemins
Lepath d’une clause est un petit sous-ensemble JSONPath sur l’objet
d’arguments de l’outil :
$.foo, $.foo.bar — accès aux champs
$.foo, $.foo.bar — accès aux champs
Lire un champ d’objet de premier niveau ou imbriqué par son nom.
$.foo[0], $.arr[1].k — indexation de tableaux
$.foo[0], $.arr[1].k — indexation de tableaux
Indexer dans un tableau, en continuant optionnellement dans les champs de
l’élément.
$ — l'objet d'arguments entier
$ — l'objet d'arguments entier
Faire correspondre contre le blob d’arguments entier (utile avec
contains ou regex pour un scan grossier).5. Un exemple détaillé
Vous laissez vos agents exécutershell.exec librement, mais une suppression
forcée récursive ne devrait jamais atteindre le shell. Rédigez une règle de
stage response qui refuse shell.exec uniquement quand l’argument de
commande paraît destructeur.
Ouvrir l'éditeur de règles
Dans la console, ouvrez la politique firewall attachée à la clé de votre
agent (ou le défaut de l’espace de travail) et ajoutez une règle. Éditer
les politiques est une action Developer+ — les Members peuvent lire
les politiques mais pas les écrire.
Faire correspondre l'outil sur le stage response
Définissez le stage sur
response et le glob d’outil sur shell.exec.
Le stage response porte les arguments choisis par le modèle, dont la
clause a besoin.Ajouter la clause d'argument
Ajoutez une clause
regex sur $.command, puis définissez le verdict sur
deny :args_match_json est une chaîne encodée en JSON ; sa valeur décodée est
l’objet { "clauses": [ … ] } montré dans §2.L'exécuter en dry-run avant de vous y fier
Utilisez l’onglet Test pour évaluer la
règle contre un appel
shell.exec d’échantillon. Il renvoie le verdict,
la règle correspondante et la raison — rien n’est dispatché et rien n’est
persisté.shell.exec avec "command": "ls -la" passe comme auparavant,
tandis que "command": "rm -rf /var" est refusé. Un deny sur response
laisse le modèle voir une erreur d’outil et réagir — choisir un autre outil,
demander à l’utilisateur, ou s’arrêter — plutôt que de planter.
6. Les clauses fail closed — la règle, pas la requête
Si une clause ne peut pas être évaluée — le chemin ne se résout pas, les arguments sont malformés, ou une regex / un CIDR est invalide — la clause s’évalue à false et la règle simplement ne se déclenche pas. L’appel retombe sur la règle suivante ou ledefault_verdict de la politique. Une
clause cassée ne refuse jamais automatiquement et ne perturbe jamais le
relais.
7. Combiner les clauses avec le reste d’une règle
Les clauses d’arguments s’empilent avec tout le reste qu’une règle exprime — elles sont une condition combinée par AND parmi plusieurs :| Combiner avec | Effet |
|---|---|
tool_name_glob | La clause ne s’exécute qu’une fois que le nom d’outil correspond — le nom d’abord, les arguments ensuite. |
skill_name_glob | Filtrer différemment les arguments du même outil par skill propriétaire (par ex. plus strict sur community.*). |
verdict | Associer les clauses à deny, sanitize, pending_approval ou cap_cost, pas seulement deny. |
| Plusieurs clauses | Toutes doivent tenir — combiner une vérification de commande regex avec une vérification d’environnement in pour scoper un deny étroitement. |
8. Où cela s’insère
Règles du Firewall
La référence complète des règles — globs, clauses, assainisseurs, egress
et séquences.
Recettes d'arguments
Des recettes
args_match_json à copier-coller pour les formes
dangereuses courantes.Stages du firewall
Pourquoi les clauses d’arguments vivent sur
response et mcp, pas
inbound.Bloquer des outils
Refuser un outil purement et simplement quand aucun argument n’est sûr.
