Skip to main content
failproofai viene fornito con 39 politiche integrate che catturano i comuni fallimenti degli agent. Ogni politica si attiva su un tipo di hook event specifico e sul nome dello strumento. Diciannove politiche accettano parametri che ti permettono di regolarne il comportamento senza scrivere codice. Cinque politiche di workflow applicano una pipeline commit → push → PR → CI prima che Claude si fermi.

Panoramica

Le politiche sono raggruppate per categorie:
  • block- — ferma l’agent dall’andare avanti.
  • warn- — fornisce all’agent un contesto aggiuntivo affinché possa correggersi automaticamente.
  • sanitize- — ripulisce i dati sensibili dall’output dello strumento prima che l’agent li veda.

Namespace

Ogni politica si trova in uno slot <namespace>/<name>. Le politiche integrate appartengono al namespace failproofai/ — ad esempio, failproofai/sanitize-jwt. Lo namespace previene collisioni quando carichi anche politiche personalizzate o di terze parti con nomi brevi simili. Nella tua configurazione puoi fare riferimento a una politica integrata con il suo nome breve o con il nome qualificato; entrambe le forme si risolvono nella stessa politica:
Se un nome non contiene /, failproofai lo tratta come appartenente al namespace predefinito failproofai. I nomi che contengono già / (ad es. myorg/foo, custom/my-hook) vengono mantenuti così come sono.
  • require- — blocca l’evento Stop fino a quando le condizioni non sono soddisfatte.

Ogni politica supporta un campo hint facoltativo in policyParams. L’hint viene aggiunto al messaggio di negazione o istruzione che Claude vede, fornendo una guida pratica senza modificare il codice della politica. Funziona con politiche integrate, personalizzate e di convenzione. Vedi Configurazione → hint per i dettagli.

Comandi pericolosi

Impedisci agli agent di eseguire operazioni difficili da annullare o che potrebbero danneggiare il sistema host.

block-sudo

Event: PreToolUse (Bash)
Default: Nega qualsiasi comando sudo.
Blocca gli invocazioni che includono la parola chiave sudo. L’abbinamento del pattern viene eseguito su token di comando analizzati, non sulla stringa grezza, per prevenire bypass tramite iniezione di operatori shell. Parametri: Esempio:
Con questa configurazione, sudo systemctl status nginx è consentito, ma sudo rm /etc/hosts è negato.
I pattern vengono abbinati ai token analizzati, non alla stringa di comando grezza. Ciò previene il bypass tramite operatori shell aggiunti (ad es. sudo systemctl status x; rm -rf / non corrisponde a sudo systemctl status *).

block-rm-rf

Event: PreToolUse (Bash)
Default: Nega rm -rf, rm -fr e altre forme di eliminazione ricorsiva simili.
Parametri: Esempio:

block-curl-pipe-sh

Event: PreToolUse (Bash)
Default: Nega curl <url> | bash, curl <url> | sh, wget <url> | bash e pattern simili.
Nessun parametro.

block-failproofai-commands

Event: PreToolUse (Bash)
Default: Nega i comandi che disinstallerebbero o disabiliterebbero failproofai stesso (ad es. npm uninstall failproofai, failproofai policies --uninstall).
Nessun parametro.

Comandi infra

Impedisci agli agent di codifica di eseguire CLI di infrastruttura o attivare pipeline CI/CD. Tutte le politiche di questa categoria sono opt-in (defaultEnabled: false) — gli agent che hanno legittimamente bisogno di chiamare kubectl, terraform, ecc. non saranno disturbati a meno che non abiliti la politica. Quando abilitata, ogni invocazione della CLI abbinata viene negata a meno che il comando non corrisponda a una voce in allowPatterns. La grammatica del pattern è la stessa di block-sudo: i token vengono abbinati ai argv analizzati, * è un carattere jolly per un token, e qualsiasi comando contenente un operatore shell standalone (&&, ||, |, ;) o un token con metacaratteri shell incorporati viene rifiutato prima dell’abbinamento della lista di consentiti per prevenire bypass di iniezione.

block-kubectl

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione di kubectl.
Parametri: Esempio:
Con questa configurazione, kubectl get pods è consentito ma kubectl apply -f deploy.yaml è negato.

block-terraform

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione di terraform o tofu (OpenTofu).
Parametri: Esempio:

block-aws-cli

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione della CLI aws.
Parametri: Esempio:

block-gcloud

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione della CLI gcloud (Google Cloud).
Parametri: Esempio:

block-az-cli

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione della CLI az (Azure).
Parametri: Esempio:

block-helm

Event: PreToolUse (Bash)
Default: Nega qualsiasi invocazione di helm.
Parametri: Esempio:

block-gh-pipeline

Event: PreToolUse (Bash)
Default: Nega i seguenti sottocomandi della CLI gh che mutano lo stato o attivano pipeline:
  • gh workflow run, gh workflow enable, gh workflow disable
  • gh run rerun, gh run cancel
  • gh pr merge
  • gh release create, gh release delete
  • gh cache delete
  • gh secret set, gh secret delete
I sottocomandi di sola lettura di gh come gh pr view, gh pr list, gh run list, gh release view e gh api repos/.../... non vengono abbinati da questa politica — sono regolarmente necessari per i controlli del workflow (incluso il proprio require-ci-green-before-stop di failproofai). Parametri: Esempio:

Segreti (sanitizer)

Impedisci agli agent di far trapelare credenziali nel loro contesto o output. Le politiche sanitizer si attivano su eventi PostToolUse. Quando Claude esegue un comando Bash, legge un file o chiama qualsiasi strumento, queste politiche ispezionano l’output prima che venga restituito a Claude. Se viene rilevato un pattern di segreto, la politica restituisce una decisione di negazione che impedisce al output di essere passato indietro.

sanitize-jwt

Event: PostToolUse (tutti gli strumenti)
Default: Oscura i token JWT (tre segmenti base64url separati da .).
Nessun parametro.

sanitize-api-keys

Event: PostToolUse (tutti gli strumenti)
Default: Oscura i formati comuni di chiave API: Anthropic (sk-ant-), OpenAI (sk-), GitHub PAT (ghp_), chiavi di accesso AWS (AKIA), chiavi Stripe (sk_live_, sk_test_) e chiavi API Google (AIza).
Parametri: Esempio:

sanitize-connection-strings

Event: PostToolUse (tutti gli strumenti)
Default: Oscura le stringhe di connessione al database che contengono credenziali incorporate (ad es. postgresql://user:password@host/db).
Nessun parametro.

sanitize-private-key-content

Event: PostToolUse (tutti gli strumenti)
Default: Oscura i blocchi PEM (-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----, ecc.).
Nessun parametro.

sanitize-bearer-tokens

Event: PostToolUse (tutti gli strumenti)
Default: Oscura gli header Authorization: Bearer <token> dove il token contiene 20 o più caratteri.
Nessun parametro.

Ambiente

Proteggi la configurazione dell’ambiente sensibile dall’essere letta o esposta da agent.

block-env-files

Event: PreToolUse (Bash, Read)
Default: Nega la lettura di file .env tramite cat .env, chiamate dello strumento Read con .env come percorso del file, ecc.
Non blocca .envrc o altri file adiacenti all’ambiente — solo file denominati esattamente .env. Nessun parametro.

protect-env-vars

Event: PreToolUse (Bash)
Default: Nega i comandi che stampano variabili d’ambiente: printenv, env, echo $VAR.
Nessun parametro.

Accesso ai file

Mantieni gli agent dentro i confini del progetto e lontani dai file sensibili.

block-read-outside-cwd

Event: PreToolUse (Read, Bash)
Default: Nega la lettura di file al di fuori della radice del progetto. Il confine è CLAUDE_PROJECT_DIR (impostato una volta per sessione da Claude Code), con fallback alla directory di lavoro corrente della sessione quando quella variabile non è impostata. Utilizzare la radice del progetto piuttosto che il cwd in tempo reale significa che il confine rimane stabile anche dopo che Claude fa cd in una subdirectory.
Parametri: Esempio:

block-secrets-write

Event: PreToolUse (Write, Edit)
Default: Nega le scritture su file comunemente utilizzati per chiavi private e certificati: id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Parametri: Esempio:

Git

Previeni push accidentali, force-push e errori di branch difficili da annullare.

block-push-master

Event: PreToolUse (Bash)
Default: Nega git push origin main e git push origin master.
Parametri: Esempio:
Per consentire il push a tutti i branch (disabilitando effettivamente questa politica senza rimuoverla da enabledPolicies), imposta protectedBranches: [].

block-work-on-main

Event: PreToolUse (Bash)
Default: Nega git commit, git merge, git rebase e git cherry-pick mentre l’albero di lavoro è su main o master. La creazione e il cambio di branch (git checkout, git checkout -b, git switch, git switch -c) non sono interessati.
Parametri:

block-force-push

Event: PreToolUse (Bash)
Default: Nega git push --force e git push -f.
Nessun parametro specifico della politica. Usa il hint cross-cutting per suggerire alternative:

warn-git-amend

Event: PreToolUse (Bash)
Default: Istruisce Claude a procedere con cautela quando esegue git commit --amend. Non blocca il comando.
Nessun parametro.

warn-git-stash-drop

Event: PreToolUse (Bash)
Default: Istruisce Claude a confermare prima di eseguire git stash drop. Non blocca il comando.
Nessun parametro.

warn-all-files-staged

Event: PreToolUse (Bash)
Default: Istruisce Claude a rivedere cosa sta staged quando esegue git add -A o git add .. Non blocca il comando.
Nessun parametro.

Database

Cattura le operazioni SQL distruttive prima che vengono eseguite sul tuo database.

warn-destructive-sql

Event: PreToolUse (Bash)
Default: Istruisce Claude a confermare prima di eseguire SQL contenente DROP TABLE, DROP DATABASE o DELETE senza una clausola WHERE.
Nessun parametro.

warn-schema-alteration

Event: PreToolUse (Bash)
Default: Istruisce Claude a confermare prima di eseguire istruzioni ALTER TABLE.
Nessun parametro.

Avvisi

Fornisci agli agent un contesto extra prima di operazioni potenzialmente rischiose ma non distruttive.

warn-large-file-write

Event: PreToolUse (Write)
Default: Istruisce Claude a confermare prima di scrivere file più grandi di 1024 KB.
Parametri: Esempio:
Il gestore dell’hook applica un limite stdin di 1 MB sui payload. Per testare questa politica con contenuto piccolo, imposta thresholdKb a un valore ben al di sotto di 1024.

warn-package-publish

Event: PreToolUse (Bash)
Default: Istruisce Claude a confermare prima di eseguire npm publish.
Nessun parametro.

warn-background-process

Event: PreToolUse (Bash)
Default: Istruisce Claude a fare attenzione quando avvia processi in background tramite nohup, &, disown o screen.
Nessun parametro.

warn-global-package-install

Event: PreToolUse (Bash)
Default: Istruisce Claude a confermare prima di eseguire npm install -g, yarn global add o pip install senza un ambiente virtuale.
Nessun parametro.

Gestori di pacchetti

Applica quale gestore di pacchetti l’agent è autorizzato a utilizzare.

prefer-package-manager

Event: PreToolUse (Bash)
Default: Disabilitato. Quando abilitato, blocca qualsiasi comando del gestore di pacchetti non nell’elenco allowed e dice a Claude di riscrivere il comando usando un gestore autorizzato.
Rileva: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. L’elenco di blocco integrato copre: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Usa blocked per aggiungere gestori non in questo elenco. Configurazione di esempio:
Con questa configurazione, pip install flask e pdm install flask sono entrambi negati con un messaggio che dice a Claude di usare uv o bun invece. I comandi come uv pip install flask sono consentiti perché uv è nell’elenco di consentiti e viene controllato per primo.

Comportamento AI

Rileva quando gli agent rimangono bloccati o si comportano inaspettatamente.

warn-repeated-tool-calls

Event: PreToolUse (tutti gli strumenti)
Default: Istruisce Claude a riconsiderare quando lo stesso strumento viene chiamato 3+ volte con parametri identici — un segno comune che l’agent è bloccato in un loop.
Nessun parametro.

Workflow

Applica un workflow di fine sessione disciplinato. Queste politiche si attivano sull’evento Stop e negano all’agent di fermarsi fino a quando ogni condizione non è soddisfatta. Seguono una catena di dipendenza naturale: commit → push → PR → CI. Se una politica nega, le politiche successive nella catena vengono saltate (negare shortcircuit). Tutte le politiche di workflow sono fail-open: se lo strumento richiesto non è disponibile (ad es. gh non installato, nessun remote git), la politica consente con un messaggio informativo che spiega perché il controllo è stato saltato.

Semantica di Stop per CLI

L’applicazione di Stop varia leggermente tra i sette CLI supportati perché ognuno espone un contratto di hook diverso per il completamento dell’agent. Il risultato è lo stesso — l’agent non riuscirà a fermarsi mentre un gate di workflow sta fallendo — ma la meccanica differisce. La tabella sottostante riassume; solo Pi ha una peculiarità visibile all’utente che vale la pena comprendere prima di abilitare una politica require-*-before-stop.
Limitazione di Pi. L’evento AgentEndEvent di Pi (l’equivalente upstream dell’hook Stop di Claude) non ha un tipo Result — nel momento in cui si attiva, il loop di agent di Pi è già uscito. Pi non può essere forzato a riprovare lo stesso loop nel modo in cui Claude / Copilot / Cursor / OpenCode possono. failproofai sposta il gate all’evento before_agent_start di Pi (che si attiva dopo il prossimo prompt dell’utente) in modo che il controllo del workflow ancora si applichi, solo al turno successivo piuttosto che al turno corrente.Cosa significa nella pratica:
  • Dopo che Pi si ferma, il motivo della negazione viene catturato in memoria keyed dall’ID sessione di Pi. Il prossimo prompt che invii nello stesso processo Pi lo scarica: l’LLM vede la direttiva MANDATORY ACTION REQUIRED in cima al suo prompt di sistema, fa il commit (o push / apre il PR / aspetta CI), e solo allora continua con la tua richiesta. Il motivo della negazione catturato è monouso — una volta scaricato, il gate è pulito.
  • Il gate è limitato dalla durata del processo di Pi. Se fai Ctrl+C su Pi o esci tra i turni, la voce in memoria viene eliminata insieme al processo e il gate viene mancato. Claude, Copilot, Cursor e OpenCode hanno lo stesso limite (uccidi l’agent e il gate viene mancato) — Pi lo rende solo più visibile perché l’agent si ferma visibilmente prima che il gate si attivi.
  • Una negazione in sospeso viene anche cancellata su session_shutdown per qualsiasi motivo (new / resume / fork / quit), quindi un gate stantio da una sessione precedente non può fuoriuscire in una sessione fresca avviata nello stesso processo Pi.
Se hai bisogno del retry dello stesso loop nello stile di Claude, esegui le tue politiche di Stop sotto uno dei cinque altri CLI supportati. Stiamo monitorando Pi upstream per un tipo Result futuro su AgentEndEvent che ci permetterebbe di chiudere questo gap.

require-commit-before-stop

Event: Stop
Default: Nega il stop quando ci sono modifiche non committate (file modificati, staged o untracked). Restituisce un messaggio informativo quando la directory di lavoro è pulita.
Nessun parametro.

require-push-before-stop

Event: Stop
Default: Nega il stop quando ci sono commit non pushati o quando il branch corrente non ha un branch di tracking remoto. Suggerisce git push -u per creare un branch di tracking se necessario. Si apre se nessun remote è configurato.
Parametri: Esempio:

require-pr-before-stop

Event: Stop
Default: Nega il stop quando non esiste una pull request per il branch corrente, o quando la PR esistente è chiusa senza essere mergiata. Istruisce Claude a creare una PR con gh pr create. Quando la PR è mergiata, la politica consente (il lavoro è stato spedito) e il messaggio suggerisce di passare dal branch (git checkout main && git pull).
Nessun parametro.
Questa politica richiede che la GitHub CLI (gh) sia installata e autenticata. Esegui gh auth login con un token di accesso personale che ha scope repo per l’accesso in lettura alle pull request. Se gh non è installato o non autenticato, la politica si apre e riporta il motivo a Claude.

require-no-conflicts-before-stop

Event: Stop
Default: Nega il stop quando il branch corrente non può essere cleanly mergiato nel branch base. La politica prima conferma che esiste una PR OPEN su GitHub per il branch — senza una, non c’è target di merge da applicare, quindi l’intera politica shortcircuit per consentire. Una volta confermata una PR OPEN, due probe indipendenti vengono eseguite:
  1. Localegit merge-tree --write-tree --name-only origin/<baseBranch> HEAD. Su conflitto, il messaggio di negazione nomina i file in conflitto in modo che Claude sappia esattamente cosa risolvere.
  2. GitHub — riusa il risultato gh pr view --json mergeable,state già recuperato nel precheck. Cattura i conflitti che un origin/<baseBranch> locale stantio perderebbe (ad es. qualcuno ha atterrato una PR in conflitto su main dall’ultimo fetch). Un risultato CONFLICTING nega. Un risultato UNKNOWN nega anche e istruisce Claude ad aspettare ~10 secondi e ri-controllare prima di tentare di fermarsi di nuovo — questo previene falsi negativi mentre GitHub ricalcola.
Si salta interamente (consente) quando: gh non è installato, non esiste PR per il branch, lo stato della PR non è OPEN (ad es. MERGED, CLOSED), o gh pr view restituisce output non parseable. Si apre anche quando origin/<baseBranch> manca localmente o quando non ci sono commit davanti a base — quei fallthrough del Layer 1 consultano ancora il mergeability della PR cachato prima di consentire. Parametri:
GitHub CLI (gh) è richiesta per questa politica. La politica usa gh pr view per confermare che una PR OPEN esiste prima di eseguire qualsiasi probe di conflitto — senza gh, la politica shortcircuit per consentire. Esegui gh auth login con un token di accesso personale che ha scope repo per l’accesso in lettura alle pull request.

require-ci-green-before-stop

Event: Stop
Default: Nega il stop quando i controlli CI stanno fallendo o sono ancora in corso sul branch corrente. Controlla sia i workflow di GitHub Actions che i controlli di bot di terze parti (ad es. CodeRabbit, SonarCloud, Codecov). Tratta skipped, cancelled e neutral conclusioni come non-fallenti (quest’ultimo copre ad es. avvisi Socket Security su PR di collaboratori esterni, dove l’app intenzionalmente riporta neutral anziché success/failure). Restituisce un messaggio informativo quando tutti i controlli passano.
Nessun parametro.
Questa politica richiede che la GitHub CLI (gh) sia installata e autenticata. Esegui gh auth login con un token di accesso personale che ha scope repo per l’accesso in lettura a workflow run di Actions e all’API Checks. Se gh non è installato o non autenticato, la politica si apre e riporta il motivo a Claude.


Disabilitare politiche individuali

Rimuovi una politica specifica da enabledPolicies nella tua configurazione, o disabilitala nella tab Politiche della dashboard.
Le politiche non elencate in enabledPolicies non vengono eseguite, anche se esistono voci policyParams per loro.