Skip to main content
failproofai est livré avec 39 politiques intégrées qui interceptent les modes d’échec courants des agents. Chaque politique se déclenche sur un type d’événement hook et un nom d’outil spécifiques. Dix-neuf politiques acceptent des paramètres permettant d’affiner leur comportement sans écrire de code. Cinq politiques de workflow imposent un pipeline commit → push → PR → CI avant que Claude ne s’arrête.

Vue d’ensemble

Les politiques sont regroupées par catégories :
  • block- — empêche l’agent de poursuivre.
  • warn- — fournit à l’agent du contexte supplémentaire pour qu’il puisse se corriger.
  • sanitize- — nettoie les données sensibles de la sortie d’un outil avant que l’agent ne les voie.

Espaces de noms

Chaque politique occupe un emplacement <namespace>/<name>. Les politiques intégrées appartiennent à l’espace de noms failproofai/ — par exemple, failproofai/sanitize-jwt. L’espace de noms évite les collisions lorsque vous chargez également des politiques personnalisées ou tierces portant des noms courts similaires. Dans votre configuration, vous pouvez désigner une politique intégrée par son nom court ou son nom qualifié ; les deux formes pointent vers la même politique :
Si un nom ne contient pas de /, failproofai considère qu’il appartient à l’espace de noms par défaut failproofai. Les noms contenant déjà un / (par ex. myorg/foo, custom/my-hook) sont conservés tels quels.
  • require- — bloque l’événement Stop jusqu’à ce que les conditions soient remplies.

Toute politique supporte un champ hint optionnel dans policyParams. Le hint est ajouté au message deny ou instruct que Claude reçoit, offrant des conseils pratiques sans modifier le code de la politique. Fonctionne avec les politiques intégrées, personnalisées et de convention. Voir Configuration → hint pour les détails.

Commandes dangereuses

Empêche les agents d’exécuter des opérations difficiles à annuler ou susceptibles d’endommager le système hôte.

block-sudo

Événement : PreToolUse (Bash)
Par défaut : Bloque toute commande sudo.
Bloque les invocations contenant le mot-clé sudo. La correspondance de motif s’effectue sur les tokens de commande analysés, et non sur la chaîne brute, afin d’empêcher les contournements par injection d’opérateurs shell. Paramètres : Exemple :
Avec cette configuration, sudo systemctl status nginx est autorisé, mais sudo rm /etc/hosts est bloqué.
Les motifs sont comparés aux tokens analysés, et non à la chaîne de commande brute. Cela empêche les contournements par opérateurs shell ajoutés (par ex. sudo systemctl status x; rm -rf / ne correspond pas à sudo systemctl status *).

block-rm-rf

Événement : PreToolUse (Bash)
Par défaut : Bloque rm -rf, rm -fr et les formes similaires de suppression récursive.
Paramètres : Exemple :

block-curl-pipe-sh

Événement : PreToolUse (Bash)
Par défaut : Bloque curl <url> | bash, curl <url> | sh, wget <url> | bash et les motifs similaires.
Aucun paramètre.

block-failproofai-commands

Événement : PreToolUse (Bash)
Par défaut : Bloque les commandes qui désinstalleraient ou désactiveraient failproofai lui-même (par ex. npm uninstall failproofai, failproofai policies --uninstall).
Aucun paramètre.

Commandes infra

Empêche les agents de code d’exécuter des CLI d’infrastructure ou de déclencher des pipelines CI/CD. Toutes les politiques de cette catégorie sont opt-in (defaultEnabled: false) — les agents qui ont légitimement besoin d’appeler kubectl, terraform, etc. ne seront pas perturbés, sauf si vous activez explicitement la politique. Une fois activée, toute invocation du CLI correspondant est bloquée, à moins que la commande ne corresponde à une entrée de allowPatterns. La grammaire des motifs est identique à celle de block-sudo : les tokens sont comparés aux argv analysés, * est un joker pour un token, et toute commande contenant un opérateur shell autonome (&&, ||, |, ;) ou un token avec des métacaractères shell intégrés est rejetée avant la vérification de la liste d’autorisation, afin d’éviter les contournements par injection.

block-kubectl

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation de kubectl.
Paramètres : Exemple :
Avec cette configuration, kubectl get pods est autorisé mais kubectl apply -f deploy.yaml est bloqué.

block-terraform

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation de terraform ou tofu (OpenTofu).
Paramètres : Exemple :

block-aws-cli

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation du CLI aws.
Paramètres : Exemple :

block-gcloud

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation du CLI gcloud (Google Cloud).
Paramètres : Exemple :

block-az-cli

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation du CLI az (Azure).
Paramètres : Exemple :

block-helm

Événement : PreToolUse (Bash)
Par défaut : Bloque toute invocation de helm.
Paramètres : Exemple :

block-gh-pipeline

Événement : PreToolUse (Bash)
Par défaut : Bloque les sous-commandes gh CLI suivantes qui modifient l’état ou déclenchent des pipelines :
  • gh workflow run, gh workflow enable, gh workflow disable
  • gh run rerun, gh run cancel
  • gh pr merge
  • gh release create, gh release delete
  • gh cache delete
  • gh secret set, gh secret delete
Les sous-commandes gh en lecture seule telles que gh pr view, gh pr list, gh run list, gh release view et gh api repos/.../... ne sont pas visées par cette politique — elles sont couramment nécessaires pour les vérifications de workflow (y compris require-ci-green-before-stop de failproofai). Paramètres : Exemple :

Secrets (sanitizers)

Empêche les agents de faire fuiter des identifiants dans leur contexte ou leur sortie. Les politiques sanitizer se déclenchent sur les événements PostToolUse. Lorsque Claude exécute une commande Bash, lit un fichier ou appelle un outil quelconque, ces politiques inspectent la sortie avant qu’elle ne soit renvoyée à Claude. Si un motif secret est détecté, la politique retourne une décision deny qui empêche la transmission de la sortie.

sanitize-jwt

Événement : PostToolUse (tous les outils)
Par défaut : Masque les tokens JWT (trois segments base64url séparés par .).
Aucun paramètre.

sanitize-api-keys

Événement : PostToolUse (tous les outils)
Par défaut : Masque les formats de clés API courants : Anthropic (sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), clés d’accès AWS (AKIA), clés Stripe (sk_live_, sk_test_), et clés API Google (AIza).
Paramètres : Exemple :

sanitize-connection-strings

Événement : PostToolUse (tous les outils)
Par défaut : Masque les chaînes de connexion aux bases de données contenant des identifiants intégrés (par ex. postgresql://user:password@host/db).
Aucun paramètre.

sanitize-private-key-content

Événement : PostToolUse (tous les outils)
Par défaut : Masque les blocs PEM (-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----, etc.).
Aucun paramètre.

sanitize-bearer-tokens

Événement : PostToolUse (tous les outils)
Par défaut : Masque les en-têtes Authorization: Bearer <token> dont le token comporte 20 caractères ou plus.
Aucun paramètre.

Environnement

Protège la configuration d’environnement sensible contre la lecture ou l’exposition par les agents.

block-env-files

Événement : PreToolUse (Bash, Read)
Par défaut : Bloque la lecture des fichiers .env via cat .env, les appels à l’outil Read avec .env comme chemin de fichier, etc.
Ne bloque pas .envrc ni les autres fichiers liés à l’environnement — uniquement les fichiers nommés exactement .env. Aucun paramètre.

protect-env-vars

Événement : PreToolUse (Bash)
Par défaut : Bloque les commandes qui affichent les variables d’environnement : printenv, env, echo $VAR.
Aucun paramètre.

Accès aux fichiers

Maintient les agents dans les limites du projet et à l’écart des fichiers sensibles.

block-read-outside-cwd

Événement : PreToolUse (Read, Bash)
Par défaut : Bloque la lecture de fichiers situés en dehors de la racine du projet. La limite est définie par CLAUDE_PROJECT_DIR (défini une fois par session par Claude Code), avec repli sur le répertoire de travail courant de la session si cette variable n’est pas définie. L’utilisation de la racine du projet plutôt que du cwd en temps réel garantit une limite stable, même après que Claude se soit déplacé dans un sous-répertoire avec cd.
Paramètres : Exemple :

block-secrets-write

Événement : PreToolUse (Write, Edit)
Par défaut : Bloque les écritures dans les fichiers couramment utilisés pour les clés privées et les certificats : id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Paramètres : Exemple :

Git

Prévient les pushs accidentels, les force-pushs et les erreurs de branche difficiles à annuler.

block-push-master

Événement : PreToolUse (Bash)
Par défaut : Bloque git push origin main et git push origin master.
Paramètres : Exemple :
Pour autoriser le push sur toutes les branches (ce qui revient à désactiver cette politique sans la retirer de enabledPolicies), définissez protectedBranches: [].

block-work-on-main

Événement : PreToolUse (Bash)
Par défaut : Bloque git commit, git merge, git rebase et git cherry-pick lorsque l’arbre de travail est sur main ou master. La création et le changement de branche (git checkout, git checkout -b, git switch, git switch -c) ne sont pas affectés.
Paramètres :

block-force-push

Événement : PreToolUse (Bash)
Par défaut : Bloque git push --force et git push -f.
Aucun paramètre spécifique à la politique. Utilisez le hint transversal pour suggérer des alternatives :

warn-git-amend

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de procéder avec précaution lors de l’exécution de git commit --amend. Ne bloque pas la commande.
Aucun paramètre.

warn-git-stash-drop

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de confirmer avant d’exécuter git stash drop. Ne bloque pas la commande.
Aucun paramètre.

warn-all-files-staged

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de vérifier ce qu’il indexe lors de l’exécution de git add -A ou git add .. Ne bloque pas la commande.
Aucun paramètre.

Base de données

Intercepte les opérations SQL destructives avant qu’elles ne s’exécutent sur votre base de données.

warn-destructive-sql

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de confirmer avant d’exécuter un SQL contenant DROP TABLE, DROP DATABASE ou DELETE sans clause WHERE.
Aucun paramètre.

warn-schema-alteration

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de confirmer avant d’exécuter des instructions ALTER TABLE.
Aucun paramètre.

Avertissements

Fournit aux agents du contexte supplémentaire avant des opérations potentiellement risquées mais non destructives.

warn-large-file-write

Événement : PreToolUse (Write)
Par défaut : Demande à Claude de confirmer avant d’écrire des fichiers de plus de 1024 Ko.
Paramètres : Exemple :
Le gestionnaire de hook impose une limite de 1 Mo sur les payloads stdin. Pour tester cette politique avec un contenu de petite taille, définissez thresholdKb à une valeur bien inférieure à 1024.

warn-package-publish

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de confirmer avant d’exécuter npm publish.
Aucun paramètre.

warn-background-process

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude d’être prudent lors du lancement de processus en arrière-plan via nohup, &, disown ou screen.
Aucun paramètre.

warn-global-package-install

Événement : PreToolUse (Bash)
Par défaut : Demande à Claude de confirmer avant d’exécuter npm install -g, yarn global add ou pip install sans environnement virtuel.
Aucun paramètre.

Gestionnaires de paquets

Impose les gestionnaires de paquets que l’agent est autorisé à utiliser.

prefer-package-manager

Événement : PreToolUse (Bash)
Par défaut : Désactivé. Lorsqu’il est activé, bloque toute commande d’un gestionnaire de paquets absent de la liste allowed et indique à Claude de réécrire la commande en utilisant un gestionnaire autorisé.
Détecte : pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. La liste de blocage intégrée couvre : pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Utilisez blocked pour ajouter des gestionnaires absents de cette liste. Exemple de configuration :
Avec cette configuration, pip install flask et pdm install flask sont tous deux bloqués avec un message indiquant à Claude d’utiliser uv ou bun à la place. Les commandes comme uv pip install flask sont autorisées car uv figure dans la liste d’autorisation et est vérifié en premier.

Comportement de l’IA

Détecte quand les agents sont bloqués ou se comportent de manière inattendue.

warn-repeated-tool-calls

Événement : PreToolUse (tous les outils)
Par défaut : Demande à Claude de reconsidérer lorsque le même outil est appelé 3 fois ou plus avec des paramètres identiques — signe courant que l’agent est coincé dans une boucle.
Aucun paramètre.

Workflow

Impose un workflow de fin de session discipliné. Ces politiques se déclenchent sur l’événement Stop et empêchent l’agent de s’arrêter tant que chaque condition n’est pas remplie. Elles suivent une chaîne de dépendance naturelle : commit → push → PR → CI. Si une politique refuse, les politiques suivantes dans la chaîne sont ignorées (court-circuit sur deny). Toutes les politiques de workflow sont fail-open : si l’outil requis n’est pas disponible (par ex. gh non installé, pas de remote git), la politique autorise avec un message informatif expliquant pourquoi la vérification a été ignorée.

Sémantique Stop par CLI

L’application du Stop se présente légèrement différemment selon les six CLI supportés, car chacun expose un contrat de hook “agent terminé” différent. Le résultat est le même — l’agent ne peut pas s’arrêter tant qu’une porte de workflow est en échec — mais les mécanismes diffèrent. Le tableau ci-dessous résume la situation ; seul Pi présente une particularité visible par l’utilisateur qu’il convient de comprendre avant d’activer une politique require-*-before-stop.
Limitation de Pi. L’AgentEndEvent de Pi (l’équivalent upstream du hook Stop de Claude) n’a pas de type Result — au moment où il se déclenche, la boucle agent de Pi a déjà terminé. Pi ne peut pas être forcé à relancer la même boucle comme Claude / Copilot / Cursor / OpenCode le peuvent. failproofai déplace la porte vers l’événement before_agent_start de Pi (qui se déclenche après le prochain prompt utilisateur) afin que la vérification de workflow s’applique quand même, simplement au tour suivant plutôt qu’au tour courant.Ce que cela signifie en pratique :
  • Après l’arrêt de Pi, la raison du deny est capturée en mémoire, indexée par l’identifiant de session Pi. Le tout prochain prompt soumis dans le même processus Pi la draine : le LLM voit la directive MANDATORY ACTION REQUIRED en tête de son system prompt, effectue le commit (ou le push / ouvre la PR / attend le CI), puis continue avec votre demande. La raison du deny capturée est à usage unique — une fois drainée, la porte est levée.
  • La porte est bornée par la durée de vie du processus Pi. Si vous faites Ctrl+C sur Pi ou quittez entre deux tours, l’entrée en mémoire est perdue avec le processus et la porte est manquée. Claude, Copilot, Cursor et OpenCode ont la même contrainte (tuer l’agent fait manquer la porte) — Pi la rend simplement plus visible car l’agent se termine visiblement avant que la porte ne se déclenche.
  • Un deny en attente est également effacé à session_shutdown pour toute raison (new / resume / fork / quit), afin qu’une porte périmée d’une session précédente ne puisse pas fuiter dans une nouvelle session démarrée dans le même processus Pi.
Si vous avez besoin d’une relance dans la même boucle à la manière de Claude, exécutez vos politiques Stop sous l’un des cinq autres CLI supportés. Nous suivons l’évolution de Pi en amont pour un futur type Result sur AgentEndEvent qui nous permettrait de combler cet écart.

require-commit-before-stop

Événement : Stop
Par défaut : Bloque l’arrêt lorsqu’il y a des modifications non commitées (fichiers modifiés, indexés ou non suivis). Retourne un message informatif lorsque le répertoire de travail est propre.
Aucun paramètre.

require-push-before-stop

Événement : Stop
Par défaut : Bloque l’arrêt lorsqu’il y a des commits non pushés ou lorsque la branche courante n’a pas de branche de suivi distante. Suggère git push -u pour créer une branche de suivi si nécessaire. Fail-open si aucun remote n’est configuré.
Paramètres : Exemple :

require-pr-before-stop

Événement : Stop
Par défaut : Bloque l’arrêt lorsqu’aucune pull request n’existe pour la branche courante, ou lorsque la PR existante est fermée sans avoir été mergée. Demande à Claude de créer une PR avec gh pr create. Lorsque la PR est mergée, la politique autorise (le travail est livré) et le message suggère de quitter la branche (git checkout main && git pull).
Aucun paramètre.
Cette politique nécessite que GitHub CLI (gh) soit installé et authentifié. Exécutez gh auth login avec un personal access token ayant le scope repo pour accéder en lecture aux pull requests. Si gh n’est pas installé ou non authentifié, la politique fail-open et signale la raison à Claude.

require-no-conflicts-before-stop

Événement : Stop
Par défaut : Bloque l’arrêt lorsque la branche courante ne peut pas être mergée proprement dans la branche de base. La politique vérifie d’abord l’existence d’une PR OPEN sur GitHub pour la branche — sans PR, il n’y a pas de cible de merge à appliquer, donc toute la politique court-circuite vers allow. Une fois une PR OPEN confirmée, deux sondes indépendantes s’exécutent :
  1. Localegit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. En cas de conflit, le message deny liste les fichiers en conflit afin que Claude sache exactement quoi résoudre.
  2. GitHub — réutilise le résultat gh pr view --json mergeable,state déjà récupéré lors de la prévérification. Détecte les conflits qu’un origin/<baseBranch> local obsolète manquerait (par ex. si quelqu’un a mergé une PR conflictuelle sur main depuis le dernier fetch). Un résultat CONFLICTING bloque. Un résultat UNKNOWN bloque également et demande à Claude d’attendre ~10 secondes et de revérifier avant de tenter un nouvel arrêt — cela évite les faux négatifs pendant que GitHub recalcule.
Court-circuite entièrement vers allow lorsque : gh n’est pas installé, aucune PR n’existe pour la branche, l’état de la PR n’est pas OPEN (par ex. MERGED, CLOSED), ou gh pr view retourne une sortie non analysable. Fail-open également lorsque origin/<baseBranch> est absent localement ou lorsqu’aucun commit n’est en avance sur la base — ces court-circuits de couche 1 consultent quand même la mergeabilité en cache de la PR avant d’autoriser. Paramètres :
GitHub CLI (gh) est requis pour cette politique. Elle utilise gh pr view pour confirmer l’existence d’une PR OPEN avant d’exécuter toute sonde de conflit — sans gh, la politique court-circuite vers allow. Exécutez gh auth login avec un personal access token ayant le scope repo pour accéder en lecture aux pull requests.

require-ci-green-before-stop

Événement : Stop
Par défaut : Bloque l’arrêt lorsque les vérifications CI échouent ou sont encore en cours sur la branche courante. Vérifie à la fois les exécutions de workflows GitHub Actions et les vérifications de bots tiers (par ex. CodeRabbit, SonarCloud, Codecov). Traite les conclusions skipped, cancelled et neutral comme non-échouantes (cette dernière couvre par ex. les alertes Socket Security sur les PRs de contributeurs externes, où l’application signale intentionnellement neutral plutôt que success/failure). Retourne un message informatif lorsque toutes les vérifications réussissent.
Aucun paramètre.
Cette politique nécessite que GitHub CLI (gh) soit installé et authentifié. Exécutez gh auth login avec un personal access token ayant le scope repo pour accéder en lecture aux exécutions de workflows Actions et à l’API Checks. Si gh n’est pas installé ou non authentifié, la politique fail-open et signale la raison à Claude.


Désactiver des politiques individuelles

Retirez une politique spécifique de enabledPolicies dans votre configuration, ou désactivez-la dans l’onglet Politiques du tableau de bord.
Les politiques absentes de enabledPolicies ne s’exécutent pas, même si des entrées policyParams existent pour elles.