Skip to main content
Les politiques personnalisées vous permettent d’écrire des règles pour n’importe quel comportement d’agent : appliquer des conventions de projet, prévenir la dérive, bloquer les opérations destructives, détecter les agents bloqués, ou s’intégrer avec Slack, des workflows d’approbation, et plus encore. Elles utilisent le même système d’événements de hook et les mêmes décisions allow, deny, instruct que les politiques intégrées.

Exemple rapide

Installation :

Deux façons de charger des politiques personnalisées

Option 1 : Par convention (recommandée)

Déposez des fichiers *policies.{js,mjs,ts} dans .failproofai/policies/ et ils sont chargés automatiquement — aucun indicateur ni modification de configuration nécessaire. Cela fonctionne comme les hooks git : déposez un fichier, ça marche tout de suite.
Fonctionnement :
  • Les répertoires du projet et de l’utilisateur sont tous les deux analysés (union — pas de premier-scope-wins)
  • Les fichiers sont chargés par ordre alphabétique dans chaque répertoire. Préfixez avec 01-, 02- pour contrôler l’ordre
  • Seuls les fichiers correspondant à *policies.{js,mjs,ts} sont chargés ; les autres fichiers sont ignorés
  • Chaque fichier est chargé indépendamment (fail-open par fichier)
  • Fonctionne en parallèle avec les fichiers --custom explicites et les politiques intégrées
Les politiques de convention sont le moyen le plus simple d’établir un standard de qualité pour votre organisation. Commitez .failproofai/policies/ dans git et chaque membre de l’équipe reçoit automatiquement les mêmes règles — aucune configuration individuelle nécessaire. Au fur et à mesure que votre équipe découvre de nouveaux modes d’échec, ajoutez une politique et poussez-la. Ces politiques deviennent avec le temps un standard de qualité vivant qui s’améliore à chaque contribution.

Option 2 : Chemin de fichier explicite

Le chemin absolu résolu est stocké dans policies-config.json sous la clé customPoliciesPath. Le fichier est rechargé à chaque événement de hook - il n’y a pas de mise en cache entre les événements.

Utiliser les deux ensemble

Les politiques de convention et le fichier --custom explicite peuvent coexister. Ordre de chargement :
  1. Fichier customPoliciesPath explicite (si configuré)
  2. Fichiers de convention du projet ({cwd}/.failproofai/policies/, alphabétique)
  3. Fichiers de convention de l’utilisateur (~/.failproofai/policies/, alphabétique)

API

Import

customPolicies.add(hook)

Enregistre une politique. Appelez cette fonction autant de fois que nécessaire pour plusieurs politiques dans le même fichier.

Fonctions d’aide aux décisions

deny(message) - le message apparaît à Claude préfixé par "Blocked by failproofai:". Un seul deny court-circuite toute évaluation ultérieure. instruct(message) - le message est ajouté au contexte de Claude pour l’appel d’outil en cours. Tous les messages instruct sont accumulés et délivrés ensemble.
Vous pouvez ajouter des instructions supplémentaires à n’importe quel message deny ou instruct en ajoutant un champ hint dans policyParams — aucune modification de code nécessaire. Cela fonctionne également pour les politiques personnalisées (custom/), les politiques de convention de projet (.failproofai-project/) et les politiques de convention utilisateur (.failproofai-user/). Voir Configuration → hint pour plus de détails.

Messages allow informationnels

allow(message) autorise l’opération et envoie un message informationnel à Claude. Le message est délivré sous forme d’additionalContext dans la réponse stdout du gestionnaire de hook — le même mécanisme utilisé par instruct, mais sémantiquement différent : c’est une mise à jour de statut, pas un avertissement. Cas d’usage :
  • Confirmations de statut : allow("All CI checks passed.") — indique à Claude que tout est en ordre
  • Explications fail-open : allow("GitHub CLI not installed, skipping CI check.") — indique à Claude pourquoi une vérification a été ignorée pour qu’il dispose du contexte complet
  • Accumulation de plusieurs messages : si plusieurs politiques retournent chacune allow(message), tous les messages sont joints avec des sauts de ligne et délivrés ensemble

Champs de PolicyContext

Champs de SessionMetadata

Types d’événements


Ordre d’évaluation

Les politiques sont évaluées dans cet ordre :
  1. Politiques intégrées (dans l’ordre de définition)
  2. Politiques personnalisées explicites depuis customPoliciesPath (dans l’ordre des .add())
  3. Politiques de convention du projet .failproofai/policies/ (fichiers alphabétiques, ordre des .add() à l’intérieur)
  4. Politiques de convention de l’utilisateur ~/.failproofai/policies/ (fichiers alphabétiques, ordre des .add() à l’intérieur)
Le premier deny court-circuite toutes les politiques suivantes. Tous les messages instruct sont accumulés et délivrés ensemble.

Imports transitifs

Les fichiers de politiques personnalisées peuvent importer des modules locaux en utilisant des chemins relatifs :
Tous les imports relatifs accessibles depuis le fichier d’entrée sont résolus. Ceci est implémenté en réécrivant les imports from "failproofai" vers le chemin dist réel et en créant des fichiers .mjs temporaires pour assurer la compatibilité ESM.

Filtrage par type d’événement

Utilisez match.events pour limiter le déclenchement d’une politique :
Omettez entièrement match pour se déclencher à chaque type d’événement.

Gestion des erreurs et modes de défaillance

Les politiques personnalisées sont fail-open : les erreurs ne bloquent jamais les politiques intégrées ni ne font planter le gestionnaire de hook.
Pour déboguer les erreurs de politiques personnalisées, surveillez le fichier de log :

Exemple complet : plusieurs politiques


Exemples

Le répertoire examples/ contient des fichiers de politiques prêts à l’emploi :

Utiliser les exemples de fichiers explicites

Utiliser les exemples basés sur la convention

Aucune commande d’installation nécessaire — les fichiers sont récupérés automatiquement lors du prochain événement de hook.