Skip to main content
As políticas personalizadas permitem que você escreva regras para qualquer comportamento do agente: aplicar convenções do projeto, evitar desvios, bloquear operações destrutivas, detectar agentes travados ou integrar com Slack, fluxos de aprovação e muito mais. Elas utilizam o mesmo sistema de eventos de hook e as decisões allow, deny, instruct das políticas integradas.

Exemplo rápido

Instale com:

Duas formas de carregar políticas personalizadas

Opção 1: Baseada em convenção (recomendada)

Coloque arquivos *policies.{js,mjs,ts} na pasta .failproofai/policies/ e eles serão carregados automaticamente — sem flags ou alterações de configuração. Funciona como git hooks: basta adicionar o arquivo e pronto.
Como funciona:
  • Os diretórios do projeto e do usuário são verificados (união — não por primeiro escopo encontrado)
  • Os arquivos são carregados em ordem alfabética dentro de cada diretório. Use prefixos como 01-, 02- para controlar a ordem
  • Apenas arquivos que correspondam a *policies.{js,mjs,ts} são carregados; os demais são ignorados
  • Cada arquivo é carregado de forma independente (fail-open por arquivo)
  • Funciona junto com --custom explícito e políticas integradas
As políticas por convenção são a forma mais fácil de estabelecer um padrão de qualidade para sua organização. Faça commit de .failproofai/policies/ no git e todos os membros da equipe receberão as mesmas regras automaticamente — sem configuração individual. À medida que sua equipe descobre novos modos de falha, adicione uma política e faça push. Com o tempo, isso se torna um padrão de qualidade vivo que melhora a cada contribuição.

Opção 2: Caminho de arquivo explícito

O caminho absoluto resolvido é armazenado em policies-config.json como customPoliciesPath. O arquivo é carregado novamente a cada evento de hook — não há cache entre eventos.

Usando ambas juntas

As políticas por convenção e o arquivo --custom explícito podem coexistir. Ordem de carregamento:
  1. Arquivo customPoliciesPath explícito (se configurado)
  2. Arquivos de convenção do projeto ({cwd}/.failproofai/policies/, em ordem alfabética)
  3. Arquivos de convenção do usuário (~/.failproofai/policies/, em ordem alfabética)

API

Importação

customPolicies.add(hook)

Registra uma política. Chame quantas vezes forem necessárias para múltiplas políticas no mesmo arquivo.

Helpers de decisão

deny(message) - a mensagem aparece para Claude com o prefixo "Blocked by failproofai:". Um único deny interrompe toda avaliação subsequente. instruct(message) - a mensagem é anexada ao contexto de Claude para a chamada de ferramenta atual. Todas as mensagens instruct são acumuladas e entregues juntas.
Você pode adicionar orientações extras a qualquer mensagem deny ou instruct incluindo um campo hint em policyParams — sem necessidade de alteração no código. Isso também funciona para políticas personalizadas (custom/), de convenção do projeto (.failproofai-project/) e de convenção do usuário (.failproofai-user/). Consulte Configuração → hint para mais detalhes.

Mensagens informativas de allow

allow(message) permite a operação e envia uma mensagem informativa de volta para Claude. A mensagem é entregue como additionalContext na resposta stdout do handler do hook — o mesmo mecanismo usado por instruct, mas semanticamente diferente: é uma atualização de status, não um aviso. Casos de uso:
  • Confirmações de status: allow("All CI checks passed.") — informa Claude que tudo está em ordem
  • Explicações de fail-open: allow("GitHub CLI not installed, skipping CI check.") — informa Claude por que uma verificação foi pulada, dando contexto completo
  • Múltiplas mensagens se acumulam: se várias políticas retornarem allow(message), todas as mensagens são unidas com quebras de linha e entregues juntas

Campos do PolicyContext

Campos do SessionMetadata

Tipos de evento


Ordem de avaliação

As políticas são avaliadas nesta ordem:
  1. Políticas integradas (na ordem de definição)
  2. Políticas personalizadas explícitas de customPoliciesPath (na ordem de .add())
  3. Políticas de convenção do projeto em .failproofai/policies/ (arquivos em ordem alfabética, ordem de .add() dentro de cada arquivo)
  4. Políticas de convenção do usuário em ~/.failproofai/policies/ (arquivos em ordem alfabética, ordem de .add() dentro de cada arquivo)
O primeiro deny interrompe todas as políticas subsequentes. Todas as mensagens instruct são acumuladas e entregues juntas.

Importações transitivas

Arquivos de políticas personalizadas podem importar módulos locais usando caminhos relativos:
Todas as importações relativas acessíveis a partir do arquivo de entrada são resolvidas. Isso é implementado reescrevendo as importações de from "failproofai" para o caminho real do dist e criando arquivos .mjs temporários para garantir compatibilidade com ESM.

Filtragem por tipo de evento

Use match.events para limitar quando uma política é acionada:
Omita match completamente para disparar em todos os tipos de evento.

Tratamento de erros e modos de falha

As políticas personalizadas são fail-open: erros nunca bloqueiam as políticas integradas nem causam falha no handler do hook.
Para depurar erros de políticas personalizadas, monitore o arquivo de log:

Exemplo completo: múltiplas políticas


Exemplos

O diretório examples/ contém arquivos de políticas prontos para uso:

Usando exemplos com arquivo explícito

Usando exemplos baseados em convenção

Nenhum comando de instalação é necessário — os arquivos são detectados automaticamente no próximo evento de hook.