Skip to main content
Le politiche personalizzate ti permettono di scrivere regole per qualsiasi comportamento di agenti: applicare convenzioni di progetto, prevenire derive, bloccare operazioni distruttive, rilevare agenti bloccati, o integrarsi con Slack, flussi di approvazione e altro ancora. Utilizzano lo stesso sistema di eventi hook e le decisioni allow, deny, instruct delle politiche incorporate.

Esempio rapido

Installalo:

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.
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. 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 --custom espliciti e politiche incorporate
Le politiche di convenzione sono il modo più semplice per costruire uno standard di qualità per la tua organizzazione. Committa .failproofai/policies/ a git e ogni membro del team ottiene automaticamente le stesse regole — nessuna configurazione per sviluppatore necessaria. Man mano che il tuo team scopre nuove modalità di fallimento, aggiungi una politica e fai il push. Nel tempo questi diventano uno standard di qualità vivo che continua a migliorare con ogni contributo.

Opzione 2: Percorso file esplicito

Il percorso assoluto risolto viene archiviato in 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:
  1. File customPoliciesPath esplicito (se configurato)
  2. File di convenzione di progetto ({cwd}/.failproofai/policies/, alfabetici)
  3. 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.
Puoi aggiungere una guida aggiuntiva a qualsiasi messaggio deny o instruct aggiungendo un campo hint in policyParams — nessuna modifica del codice necessaria. Questo funziona anche per le politiche 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) 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:
  1. Politiche incorporate (in ordine di definizione)
  2. Politiche personalizzate esplicite da customPoliciesPath (in ordine .add())
  3. Politiche di convenzione da .failproofai/policies/ di progetto (file alfabetici, ordine .add() all’interno)
  4. 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:
Tutte le importazioni relative raggiungibili dal file di entry vengono risolte. Questo viene implementato riscrivendo le importazioni from "failproofai" al percorso dist effettivo e creando file .mjs temporanei per garantire compatibilità ESM.

Filtraggio dei tipi di evento

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

Esempio completo: più politiche


Esempi

La directory examples/ contiene file di politiche pronti all’uso:

Utilizzo di esempi di file espliciti

Utilizzo di esempi basati su convenzione

Nessun comando di installazione necessario — i file vengono prelevati automaticamente al prossimo evento hook.