Visão geral
As políticas são agrupadas em categorias:block-— impede o agente de prosseguir.warn-— fornece ao agente contexto adicional para que ele possa se corrigir.sanitize-— remove dados sensíveis da saída da ferramenta antes que o agente os veja.
Namespaces
Cada política vive em um slot<namespace>/<nome>. As políticas integradas pertencem ao namespace failproofai/ — por exemplo, failproofai/sanitize-jwt. O namespace previne colisões quando você também carrega políticas personalizadas ou de terceiros com nomes curtos similares.
Na sua configuração, você pode referenciar uma política integrada pelo nome curto ou pelo nome qualificado; ambas as formas resolvem para a mesma política:
/, o failproofai o trata como pertencente ao namespace padrão failproofai. Nomes que já contêm / (ex.: myorg/foo, custom/my-hook) são mantidos como estão.
require-— bloqueia o evento Stop até que as condições sejam atendidas.
Comandos perigosos
Impede agentes de executar operações difíceis de desfazer ou que possam danificar o sistema host.block-sudo
Evento: PreToolUse (Bash)Padrão: Nega qualquer comando
sudo.
Bloqueia invocações que incluem a palavra-chave sudo. A correspondência de padrões é feita em tokens de comando analisados, não na string bruta, para evitar bypass via injeção de operadores shell.
Parâmetros:
Exemplo:
sudo systemctl status nginx é permitido, mas sudo rm /etc/hosts é negado.
Os padrões são comparados com tokens analisados, não com a string de comando bruta. Isso previne bypass via operadores shell anexados (ex.:
sudo systemctl status x; rm -rf / não corresponde a sudo systemctl status *).block-rm-rf
Evento: PreToolUse (Bash)Padrão: Nega
rm -rf, rm -fr, e formas similares de exclusão recursiva.
Parâmetros:
Exemplo:
block-curl-pipe-sh
Evento: PreToolUse (Bash)Padrão: Nega
curl <url> | bash, curl <url> | sh, wget <url> | bash, e padrões similares.
Sem parâmetros.
block-failproofai-commands
Evento: PreToolUse (Bash)Padrão: Nega comandos que desinstalariam ou desabilitariam o próprio failproofai (ex.:
npm uninstall failproofai, failproofai policies --uninstall).
Sem parâmetros.
Comandos de infraestrutura
Impede agentes de codificação de executar CLIs de infraestrutura ou acionar pipelines de CI/CD. Todas as políticas nesta categoria são opt-in (defaultEnabled: false) — agentes que legitimamente precisam chamar kubectl, terraform, etc. não serão afetados a menos que você habilite a política. Quando habilitada, toda invocação da CLI correspondente é negada, a menos que o comando corresponda a uma entrada em allowPatterns.
A gramática de padrões é a mesma de block-sudo: os tokens são comparados com argv analisado, * é um curinga para um token, e qualquer comando contendo um operador shell autônomo (&&, ||, |, ;) ou um token com metacaracteres shell embutidos é rejeitado antes da correspondência da lista de permissões para evitar bypasses de injeção.
block-kubectl
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação de
kubectl.
Parâmetros:
Exemplo:
kubectl get pods é permitido, mas kubectl apply -f deploy.yaml é negado.
block-terraform
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação de
terraform ou tofu (OpenTofu).
Parâmetros:
Exemplo:
block-aws-cli
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação da CLI
aws.
Parâmetros:
Exemplo:
block-gcloud
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação da CLI
gcloud (Google Cloud).
Parâmetros:
Exemplo:
block-az-cli
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação da CLI
az (Azure).
Parâmetros:
Exemplo:
block-helm
Evento: PreToolUse (Bash)Padrão: Nega qualquer invocação de
helm.
Parâmetros:
Exemplo:
block-gh-pipeline
Evento: PreToolUse (Bash)Padrão: Nega os seguintes subcomandos da CLI
gh que mutam estado ou acionam pipelines:
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 somente leitura, como gh pr view, gh pr list, gh run list, gh release view, e gh api repos/.../..., não são correspondidos por esta política — eles são rotineiramente necessários para verificações de fluxo de trabalho (incluindo o próprio require-ci-green-before-stop do failproofai).
Parâmetros:
Exemplo:
Segredos (sanitizadores)
Impede agentes de vazar credenciais em seu contexto ou saída. As políticas de sanitização são acionadas em eventos PostToolUse. Quando o Claude executa um comando Bash, lê um arquivo ou chama qualquer ferramenta, essas políticas inspecionam a saída antes que ela seja retornada ao Claude. Se um padrão de segredo for detectado, a política retorna uma decisão de deny que impede a saída de ser repassada.sanitize-jwt
Evento: PostToolUse (todas as ferramentas)Padrão: Redige tokens JWT (três segmentos base64url separados por
.).
Sem parâmetros.
sanitize-api-keys
Evento: PostToolUse (todas as ferramentas)Padrão: Redige formatos comuns de chaves de API: Anthropic (
sk-ant-), OpenAI (sk-), GitHub PATs (ghp_), chaves de acesso AWS (AKIA), chaves Stripe (sk_live_, sk_test_), e chaves de API do Google (AIza).
Parâmetros:
Exemplo:
sanitize-connection-strings
Evento: PostToolUse (todas as ferramentas)Padrão: Redige strings de conexão de banco de dados que contêm credenciais embutidas (ex.:
postgresql://user:password@host/db).
Sem parâmetros.
sanitize-private-key-content
Evento: PostToolUse (todas as ferramentas)Padrão: Redige blocos PEM (
-----BEGIN PRIVATE KEY-----, -----BEGIN RSA PRIVATE KEY-----, etc.).
Sem parâmetros.
sanitize-bearer-tokens
Evento: PostToolUse (todas as ferramentas)Padrão: Redige cabeçalhos
Authorization: Bearer <token> onde o token tem 20 ou mais caracteres.
Sem parâmetros.
Ambiente
Protege configurações de ambiente sensíveis de serem lidas ou expostas por agentes.block-env-files
Evento: PreToolUse (Bash, Read)Padrão: Nega a leitura de arquivos
.env via cat .env, chamadas da ferramenta Read com .env como caminho de arquivo, etc.
Não bloqueia .envrc ou outros arquivos relacionados a ambiente — somente arquivos com o nome exato .env.
Sem parâmetros.
protect-env-vars
Evento: PreToolUse (Bash)Padrão: Nega comandos que imprimem variáveis de ambiente:
printenv, env, echo $VAR.
Sem parâmetros.
Acesso a arquivos
Mantém os agentes trabalhando dentro dos limites do projeto e longe de arquivos sensíveis.block-read-outside-cwd
Evento: PreToolUse (Read, Bash)Padrão: Nega a leitura de arquivos fora da raiz do projeto. O limite é
CLAUDE_PROJECT_DIR (definido uma vez por sessão pelo Claude Code), com fallback para o diretório de trabalho atual da sessão quando essa variável não está definida. Usar a raiz do projeto em vez do cwd ativo significa que o limite permanece estável mesmo após o Claude fazer cd para um subdiretório.
Parâmetros:
Exemplo:
block-secrets-write
Evento: PreToolUse (Write, Edit)Padrão: Nega escritas em arquivos comumente usados para chaves privadas e certificados:
id_rsa, id_ed25519, *.key, *.pem, *.p12, *.pfx.
Parâmetros:
Exemplo:
Git
Previne pushes acidentais, force-pushes e erros de branch difíceis de desfazer.block-push-master
Evento: PreToolUse (Bash)Padrão: Nega
git push origin main e git push origin master.
Parâmetros:
Exemplo:
block-work-on-main
Evento: PreToolUse (Bash)Padrão: Nega
git commit, git merge, git rebase, e git cherry-pick enquanto a árvore de trabalho está em main ou master. Criação e troca de branches (git checkout, git checkout -b, git switch, git switch -c) não são afetados.
Parâmetros:
block-force-push
Evento: PreToolUse (Bash)Padrão: Nega
git push --force e git push -f.
Sem parâmetros específicos de política. Use o hint transversal para sugerir alternativas:
warn-git-amend
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a prosseguir com cuidado ao executar
git commit --amend. Não bloqueia o comando.
Sem parâmetros.
warn-git-stash-drop
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a confirmar antes de executar
git stash drop. Não bloqueia o comando.
Sem parâmetros.
warn-all-files-staged
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a revisar o que está sendo adicionado ao stage quando executa
git add -A ou git add .. Não bloqueia o comando.
Sem parâmetros.
Banco de dados
Detecta operações SQL destrutivas antes que sejam executadas no banco de dados.warn-destructive-sql
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a confirmar antes de executar SQL contendo
DROP TABLE, DROP DATABASE, ou DELETE sem uma cláusula WHERE.
Sem parâmetros.
warn-schema-alteration
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a confirmar antes de executar instruções
ALTER TABLE.
Sem parâmetros.
Avisos
Fornece contexto extra aos agentes antes de operações potencialmente arriscadas, mas não destrutivas.warn-large-file-write
Evento: PreToolUse (Write)Padrão: Instrui o Claude a confirmar antes de escrever arquivos maiores que 1024 KB. Parâmetros:
Exemplo:
O handler do hook impõe um limite de 1 MB no stdin para payloads. Para testar esta política com conteúdo pequeno, defina
thresholdKb para um valor bem abaixo de 1024.warn-package-publish
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a confirmar antes de executar
npm publish.
Sem parâmetros.
warn-background-process
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a ter cuidado ao iniciar processos em segundo plano via
nohup, &, disown, ou screen.
Sem parâmetros.
warn-global-package-install
Evento: PreToolUse (Bash)Padrão: Instrui o Claude a confirmar antes de executar
npm install -g, yarn global add, ou pip install sem um ambiente virtual.
Sem parâmetros.
Gerenciadores de pacotes
Define quais gerenciadores de pacotes o agente está autorizado a usar.prefer-package-manager
Evento: PreToolUse (Bash)Padrão: Desabilitado. Quando habilitado, bloqueia qualquer comando de gerenciador de pacotes que não esteja na lista
allowed e instrui o Claude a reescrever o comando usando um gerenciador permitido.
Detecta: pip, pip3, python -m pip, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo.
A lista de bloqueio integrada cobre: pip, pip3, npm, npx, yarn, pnpm, pnpx, bun, bunx, uv, poetry, pipenv, conda, cargo. Use
blocked para adicionar gerenciadores que não estão nesta lista.
Exemplo de configuração:
pip install flask e pdm install flask são ambos negados com uma mensagem instruindo o Claude a usar uv ou bun. Comandos como uv pip install flask são permitidos porque uv está na lista de permissões e é verificado primeiro.
Comportamento de IA
Detecta quando agentes ficam presos ou se comportam de forma inesperada.warn-repeated-tool-calls
Evento: PreToolUse (todas as ferramentas)Padrão: Instrui o Claude a reconsiderar quando a mesma ferramenta é chamada 3 ou mais vezes com parâmetros idênticos — um sinal comum de que o agente está preso em um loop. Sem parâmetros.
Fluxo de trabalho
Impõe um fluxo de trabalho disciplinado ao fim da sessão. Estas políticas são acionadas no evento Stop e negam ao agente a possibilidade de parar até que cada condição seja atendida. Elas seguem uma cadeia de dependência natural: commit → push → PR → CI. Se uma política negar, as políticas posteriores na cadeia são ignoradas (deny provoca curto-circuito). Todas as políticas de fluxo de trabalho são fail-open: se a ferramenta necessária não estiver disponível (ex.:gh não instalado, sem remote git), a política permite com uma mensagem informativa explicando por que a verificação foi ignorada.
Semântica de Stop por CLI
A aplicação de Stop funciona de forma ligeiramente diferente entre os sete CLIs suportados, pois cada um expõe um contrato de hook diferente para “agente finalizado”. O resultado é o mesmo — o agente não consegue parar enquanto um gate de fluxo de trabalho estiver falhando — mas a mecânica difere. A tabela abaixo resume; apenas o Pi tem uma peculiaridade visível ao usuário que vale entender antes de habilitar uma políticarequire-*-before-stop.
Limitação do Pi. O
AgentEndEvent do Pi (o equivalente upstream do hook Stop do Claude) não tem tipo Result — quando ele é acionado, o loop do agente do Pi já saiu. O Pi não pode ser forçado a repetir o mesmo loop da forma que Claude / Copilot / Cursor / OpenCode podem. O failproofai desloca o gate para o evento before_agent_start do Pi (que é acionado após o próximo prompt do usuário), para que a verificação do fluxo de trabalho ainda seja aplicada, apenas no próximo turno em vez do atual.O que isso significa na prática:- Após o Pi parar, o motivo da negação é capturado na memória, indexado pelo ID de sessão do Pi. O próximo prompt que você enviar no mesmo processo do Pi o consome: o LLM vê a diretiva
MANDATORY ACTION REQUIREDno topo de seu prompt de sistema, faz o commit (ou push / abre o PR / aguarda o CI), e só então continua com sua solicitação. O motivo de negação capturado é de uso único — uma vez consumido, o gate é liberado. - O gate é limitado ao tempo de vida do processo do Pi. Se você der
Ctrl+Cno Pi ou sair entre turnos, a entrada na memória é descartada junto com o processo e o gate é perdido. Claude, Copilot, Cursor e OpenCode têm o mesmo limite (matar o agente faz o gate ser perdido) — o Pi apenas torna isso mais visível porque o agente sai visivelmente antes do gate ser acionado. - Uma negação pendente também é limpa no
session_shutdownpor qualquer motivo (new/resume/fork/quit), então um gate obsoleto de uma sessão anterior não pode vazar para uma nova sessão iniciada no mesmo processo do Pi.
Stop em qualquer um dos outros cinco CLIs suportados. Estamos acompanhando o upstream do Pi para um futuro tipo Result no AgentEndEvent que nos permitiria fechar essa lacuna.require-commit-before-stop
Evento: StopPadrão: Nega a parada quando há alterações não commitadas (arquivos modificados, staged ou não rastreados). Retorna uma mensagem informativa quando o diretório de trabalho está limpo. Sem parâmetros.
require-push-before-stop
Evento: StopPadrão: Nega a parada quando há commits não enviados ou quando o branch atual não tem um branch de rastreamento remoto. Sugere
git push -u para criar um branch de rastreamento, se necessário. Falha de forma aberta se nenhum remote estiver configurado.
Parâmetros:
Exemplo:
require-pr-before-stop
Evento: StopPadrão: Nega a parada quando não existe pull request para o branch atual, ou quando o PR existente está fechado sem merge. Instrui o Claude a criar um PR com
gh pr create. Quando o PR está merged, a política permite (o trabalho foi entregue) e a mensagem sugere sair do branch (git checkout main && git pull).
Sem parâmetros.
Esta política requer que o GitHub CLI (
gh) esteja instalado e autenticado.
Execute gh auth login com um token de acesso pessoal que tenha o escopo repo para acesso de leitura a pull requests. Se gh não estiver instalado ou não estiver autenticado, a política falha de forma aberta e reporta o motivo ao Claude.require-no-conflicts-before-stop
Evento: StopPadrão: Nega a parada quando o branch atual não pode ser mesclado de forma limpa no branch base. A política primeiro confirma se há um PR
OPEN no GitHub para o branch — sem um, não há alvo de merge a aplicar, então toda a política provoca curto-circuito para allow. Uma vez confirmado um PR OPEN, duas sondagens independentes são executadas:
- Local —
git merge-tree --write-tree --name-only origin/<baseBranch> HEAD. Em caso de conflito, a mensagem de deny nomeia os arquivos em conflito para que o Claude saiba exatamente o que resolver. - GitHub — reutiliza o resultado de
gh pr view --json mergeable,statejá obtido na verificação prévia. Detecta conflitos que umorigin/<baseBranch>local desatualizado perderia (ex.: alguém lançou um PR conflitante emmaindesde o último fetch). Um resultadoCONFLICTINGnega. Um resultadoUNKNOWNtambém nega e instrui o Claude a aguardar ~10 segundos e verificar novamente antes de tentar parar — isso previne falsos negativos enquanto o GitHub recomputa.
gh não está instalado, nenhum PR existe para o branch, o estado do PR não é OPEN (ex.: MERGED, CLOSED), ou gh pr view retorna saída não analisável. Também falha de forma aberta quando origin/<baseBranch> está faltando localmente ou quando não há commits à frente do base — esses fall-throughs da Camada 1 ainda consultam a mesclabilidade do PR em cache antes de permitir.
Parâmetros:
O GitHub CLI (
gh) é necessário para esta política. A política usa gh pr view para confirmar que um PR OPEN existe antes de executar qualquer sondagem de conflito — sem gh, a política provoca curto-circuito para allow. Execute gh auth login com um token de acesso pessoal que tenha o escopo repo para acesso de leitura a pull requests.require-ci-green-before-stop
Evento: StopPadrão: Nega a parada quando as verificações de CI estão falhando ou ainda em execução no branch atual. Verifica tanto execuções de workflow do GitHub Actions quanto verificações de bots de terceiros (ex.: CodeRabbit, SonarCloud, Codecov). Trata conclusões
skipped, cancelled e neutral como não-falhando (o último cobre, por exemplo, alertas do Socket Security em PRs de contribuidores externos, onde o aplicativo intencionalmente reporta neutro em vez de sucesso/falha). Retorna uma mensagem informativa quando todas as verificações passam.
Sem parâmetros.
Esta política requer que o GitHub CLI (
gh) esteja instalado e autenticado.
Execute gh auth login com um token de acesso pessoal que tenha o escopo repo para acesso de leitura a execuções de workflow do Actions e à API de Checks. Se gh não estiver instalado ou não estiver autenticado, a política falha de forma aberta e reporta o motivo ao Claude.Desabilitando políticas individuais
Remova uma política específica deenabledPolicies na sua configuração, ou desative-a na aba Políticas do painel.
enabledPolicies não são executadas, mesmo que existam entradas de policyParams para elas.
