allow, deny, instruct das políticas integradas.
Exemplo rápido
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.
- 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
--customexplícito e políticas integradas
Opção 2: Caminho de arquivo explícito
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:
- Arquivo
customPoliciesPathexplícito (se configurado) - Arquivos de convenção do projeto (
{cwd}/.failproofai/policies/, em ordem alfabética) - 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.
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:- Políticas integradas (na ordem de definição)
- Políticas personalizadas explícitas de
customPoliciesPath(na ordem de.add()) - Políticas de convenção do projeto em
.failproofai/policies/(arquivos em ordem alfabética, ordem de.add()dentro de cada arquivo) - 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:from "failproofai" para o caminho real do dist e criando arquivos .mjs temporários para garantir compatibilidade com ESM.
Filtragem por tipo de evento
Usematch.events para limitar quando uma política é acionada:
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.Exemplo completo: múltiplas políticas
Exemplos
O diretórioexamples/ contém arquivos de políticas prontos para uso:

