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:
/, 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.
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:
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:
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 disablegh run rerun,gh run cancelgh pr mergegh release create,gh release deletegh cache deletegh secret set,gh secret delete
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:
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:
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 politicarequire-*-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 REQUIREDin 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+Csu 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_shutdownper 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.
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: StopDefault: 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: StopDefault: 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: StopDefault: 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: StopDefault: 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:
- Locale —
git 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. - GitHub — riusa il risultato
gh pr view --json mergeable,stategià recuperato nel precheck. Cattura i conflitti che unorigin/<baseBranch>locale stantio perderebbe (ad es. qualcuno ha atterrato una PR in conflitto sumaindall’ultimo fetch). Un risultatoCONFLICTINGnega. Un risultatoUNKNOWNnega 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.
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: StopDefault: 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 daenabledPolicies nella tua configurazione, o disabilitala nella tab Politiche della dashboard.
enabledPolicies non vengono eseguite, anche se esistono voci policyParams per loro.
