allow, deny, instruct delle policy integrate.
Esempio rapido
Due modi per caricare policy personalizzate
Opzione 1: Basata su convenzione (consigliato)
Inserisci file*policies.{js,mjs,ts} in .failproofai/policies/ e verranno caricati automaticamente — nessun flag o cambio di configurazione necessario. Funziona come i git hooks: inserisci un file e basta.
- Entrambe le directory di progetto e utente vengono scansionate (unione — non first-scope-wins)
- I file vengono caricati alfabeticamente all’interno di ogni directory. Utilizza il prefisso
01-,02-per controllare l’ordine - Vengono caricati solo i file che corrispondono a
*policies.{js,mjs,ts}; gli altri file vengono ignorati - Ogni file viene caricato in modo indipendente (fail-open per file)
- Funziona insieme alle policy
--customesplicite e alle policy integrate
Opzione 2: Percorso file esplicito
policies-config.json come customPoliciesPath. Il file viene caricato fresh su ogni hook event - non c’è caching tra gli eventi.
Utilizzare entrambi insieme
Le policy di convenzione e il file--custom esplicito possono coesistere. Ordine di caricamento:
- File
customPoliciesPathesplicito (se configurato) - File di convenzione di progetto (
{cwd}/.failproofai/policies/, alfabetico) - File di convenzione utente (
~/.failproofai/policies/, alfabetico)
API
Import
customPolicies.add(hook)
Registra una policy. Chiama questa funzione tutte le volte necessarie per più policy nello stesso file.
Helper per decisioni
deny(message) - il messaggio appare a Claude con prefisso "Blocked by failproofai:". Un singolo deny cortocircuita 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) permette l’operazione e invia un messaggio informativo indietro 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 avvertimento.
Casi d’uso:
- Conferme di stato:
allow("All CI checks passed.")— dice a Claude che tutto è verde - Spiegazioni fail-open:
allow("GitHub CLI not installed, skipping CI check.")— dice a Claude perché un controllo è stato saltato così ha il contesto completo - Più messaggi si accumulano: se più policy restituiscono ciascuna
allow(message), tutti i messaggi vengono uniti con newline e consegnati insieme
Campi PolicyContext
Campi SessionMetadata
Tipi di evento
Ordine di valutazione
Le policy vengono valutate in questo ordine:- Policy integrate (in ordine di definizione)
- Policy personalizzate esplicite da
customPoliciesPath(in ordine.add()) - Policy di convenzione da
.failproofai/policies/di progetto (file alfabetici, ordine.add()all’interno) - Policy di convenzione da
~/.failproofai/policies/utente (file alfabetici, ordine.add()all’interno)
Il primo
deny cortocircuita tutte le policy successive. Tutti i messaggi instruct vengono accumulati e consegnati insieme.Import transitivi
I file di policy personalizzate possono importare moduli locali utilizzando percorsi relativi:from "failproofai" al percorso dist effettivo e creando file .mjs temporanei per garantire la compatibilità ESM.
Filtraggio per tipo di evento
Usamatch.events per limitare quando una policy si attiva:
match completamente per attivarsi su ogni tipo di evento.
Gestione degli errori e modalità di fallimento
Le policy personalizzate sono fail-open: gli errori non bloccano mai le policy integrate o fanno crashare il gestore hook.Esempio completo: multiple policy
Esempi
La directoryexamples/ contiene file di policy pronti per l’uso:

