allow, deny, instruct delle politiche incorporate.
Esempio rapido
Due modi per caricare politiche personalizzate
Opzione 1: Basata su convenzione (consigliato)
Rilascia file*policies.{js,mjs,ts} in .failproofai/policies/ e vengono caricati automaticamente — non sono necessari flag o modifiche di configurazione. Funziona come git hooks: rilascia un file e funziona.
- Entrambe le directory di progetto e utente vengono scansionate (unione — non first-scope-wins)
- I file vengono caricati alfabeticamente all’interno di ogni directory. Usa il prefisso
01-,02-per controllare l’ordine - Solo i file corrispondenti a
*policies.{js,mjs,ts}vengono caricati; gli altri file vengono ignorati - Ogni file viene caricato indipendentemente (fail-open per file)
- Funziona insieme a
--customespliciti e politiche incorporate
Opzione 2: Percorso file esplicito
policies-config.json come customPoliciesPath. Il file viene caricato nuovamente ad ogni evento hook — non c’è caching tra gli eventi.
Usare entrambi insieme
Le politiche di convenzione e il file--custom esplicito possono coesistere. Ordine di caricamento:
- File
customPoliciesPathesplicito (se configurato) - File di convenzione di progetto (
{cwd}/.failproofai/policies/, alfabetici) - File di convenzione utente (
~/.failproofai/policies/, alfabetici)
API
Importazione
customPolicies.add(hook)
Registra una politica. Chiamala tutte le volte che è necessario per più politiche nello stesso file.
Helper per decisioni
deny(message) - il messaggio appare a Claude con il prefisso "Blocked by failproofai:". Un singolo deny fa cortocircuito su tutta la valutazione successiva.
instruct(message) - il messaggio viene aggiunto al contesto di Claude per la chiamata dello strumento corrente. Tutti i messaggi instruct vengono accumulati e consegnati insieme.
Messaggi allow informativi
allow(message) consente l’operazione e invia un messaggio informativo a Claude. Il messaggio viene consegnato come additionalContext nella risposta stdout del gestore hook — lo stesso meccanismo utilizzato da instruct, ma semanticamente diverso: è un aggiornamento di stato, non un avviso.
Casi d’uso:
- Conferme di stato:
allow("All CI checks passed.")— comunica a Claude che tutto è verde - Spiegazioni fail-open:
allow("GitHub CLI not installed, skipping CI check.")— comunica a Claude perché un controllo è stato saltato in modo che abbia il contesto completo - Più messaggi si accumulano: se più politiche restituiscono
allow(message), tutti i messaggi vengono uniti con newline e consegnati insieme
Campi PolicyContext
Campi SessionMetadata
Tipi di evento
Ordine di valutazione
Le politiche vengono valutate in questo ordine:- Politiche incorporate (in ordine di definizione)
- Politiche personalizzate esplicite da
customPoliciesPath(in ordine.add()) - Politiche di convenzione da
.failproofai/policies/di progetto (file alfabetici, ordine.add()all’interno) - Politiche di convenzione da
~/.failproofai/policies/utente (file alfabetici, ordine.add()all’interno)
Il primo
deny fa cortocircuito su tutte le politiche successive. Tutti i messaggi instruct vengono accumulati e consegnati insieme.Importazioni transitive
I file di politiche personalizzate possono importare moduli locali usando percorsi relativi:from "failproofai" al percorso dist effettivo e creando file .mjs temporanei per garantire compatibilità ESM.
Filtraggio dei tipi di evento
Usamatch.events per limitare quando una politica si attiva:
match per attivarsi su ogni tipo di evento.
Gestione degli errori e modalità di fallimento
Le politiche personalizzate sono fail-open: gli errori non bloccano mai le politiche incorporate o fanno bloccare il gestore hook.Esempio completo: più politiche
Esempi
La directoryexamples/ contiene file di politiche pronti all’uso:

