Skip to main content
Le policy personalizzate ti permettono di scrivere regole per qualsiasi comportamento dell’agente: applicare convenzioni di progetto, prevenire deviazioni, bloccare operazioni distruttive, rilevare agenti bloccati, o integrarti con Slack, workflow di approvazione e altro ancora. Utilizzano lo stesso sistema di hook event e le stesse decisioni allow, deny, instruct delle policy integrate.

Esempio rapido

Installalo:

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.
Come 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. 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 --custom esplicite e alle policy integrate
Le policy di convenzione sono il modo più semplice per costruire uno standard di qualità per la tua organizzazione. Committi .failproofai/policies/ su git e ogni membro del team otterrà automaticamente le stesse regole — nessuna configurazione per sviluppatore necessaria. Mentre il tuo team scopre nuovi modi di fallimento, aggiungi una policy e fai il push. Nel tempo questi diventano uno standard di qualità dinamico che continua a migliorare con ogni contributo.

Opzione 2: Percorso file esplicito

Il percorso assoluto risolto viene memorizzato in 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:
  1. File customPoliciesPath esplicito (se configurato)
  2. File di convenzione di progetto ({cwd}/.failproofai/policies/, alfabetico)
  3. 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.
Puoi aggiungere guidance extra a qualsiasi messaggio deny o instruct aggiungendo un campo hint in policyParams — nessun cambio di codice necessario. Questo funziona anche per le policy personalizzate (custom/), di convenzione di progetto (.failproofai-project/), e di convenzione utente (.failproofai-user/). Vedi Configuration → hint per i dettagli.

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:
  1. Policy integrate (in ordine di definizione)
  2. Policy personalizzate esplicite da customPoliciesPath (in ordine .add())
  3. Policy di convenzione da .failproofai/policies/ di progetto (file alfabetici, ordine .add() all’interno)
  4. 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:
Tutti gli import relativi raggiungibili dal file di ingresso vengono risolti. Questo viene implementato riscrivendo gli import from "failproofai" al percorso dist effettivo e creando file .mjs temporanei per garantire la compatibilità ESM.

Filtraggio per tipo di evento

Usa match.events per limitare quando una policy si attiva:
Ometti 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.
Per eseguire il debug degli errori di policy personalizzate, osserva il file di log:

Esempio completo: multiple policy


Esempi

La directory examples/ contiene file di policy pronti per l’uso:

Utilizzare esempi di file espliciti

Utilizzare esempi basati su convenzione

Nessun comando di installazione necessario — i file vengono racccolti automaticamente al prossimo hook event.