allow, deny, instruct que las políticas integradas.
Ejemplo rápido
Dos formas de cargar políticas personalizadas
Opción 1: Basada en convenciones (recomendada)
Coloca archivos*policies.{js,mjs,ts} en .failproofai/policies/ y se cargarán automáticamente, sin necesidad de flags ni cambios de configuración. Funciona como los git hooks: basta con añadir el archivo y ya está.
- Se analizan tanto el directorio del proyecto como el del usuario (unión — no gana el primero en alcance)
- Los archivos se cargan en orden alfabético dentro de cada directorio. Usa prefijos como
01-,02-para controlar el orden - Solo se cargan los archivos que coincidan con
*policies.{js,mjs,ts}; los demás se ignoran - Cada archivo se carga de forma independiente (fallo abierto por archivo)
- Funciona junto con
--customexplícito y las políticas integradas
Opción 2: Ruta de archivo explícita
policies-config.json como customPoliciesPath. El archivo se carga de nuevo en cada evento de hook; no hay caché entre eventos.
Usar ambas opciones juntas
Las políticas por convención y el archivo--custom explícito pueden coexistir. Orden de carga:
- Archivo
customPoliciesPathexplícito (si está configurado) - Archivos de convención del proyecto (
{cwd}/.failproofai/policies/, alfabético) - Archivos de convención del usuario (
~/.failproofai/policies/, alfabético)
API
Importación
customPolicies.add(hook)
Registra una política. Llámalo tantas veces como necesites para definir múltiples políticas en el mismo archivo.
Funciones de decisión
deny(message) — el mensaje aparece ante Claude con el prefijo "Blocked by failproofai:". Un solo deny interrumpe toda evaluación posterior.
instruct(message) — el mensaje se añade al contexto de Claude para la llamada a la herramienta actual. Todos los mensajes instruct se acumulan y se entregan juntos.
Mensajes allow informativos
allow(message) permite la operación y envía un mensaje informativo a Claude. El mensaje se entrega como additionalContext en la respuesta stdout del handler del hook, el mismo mecanismo que usa instruct, pero con un significado diferente: es una actualización de estado, no una advertencia.
Casos de uso:
- Confirmaciones de estado:
allow("All CI checks passed.")— informa a Claude de que todo está en orden - Explicaciones de fallo abierto:
allow("GitHub CLI not installed, skipping CI check.")— indica a Claude por qué se omitió una verificación para que tenga el contexto completo - Los mensajes múltiples se acumulan: si varias políticas devuelven
allow(message), todos los mensajes se unen con saltos de línea y se entregan juntos
Campos de PolicyContext
Campos de SessionMetadata
Tipos de eventos
Orden de evaluación
Las políticas se evalúan en este orden:- Políticas integradas (en orden de definición)
- Políticas personalizadas explícitas de
customPoliciesPath(en orden de.add()) - Políticas de convención del proyecto
.failproofai/policies/(archivos en orden alfabético, orden de.add()dentro de cada archivo) - Políticas de convención del usuario
~/.failproofai/policies/(archivos en orden alfabético, orden de.add()dentro de cada archivo)
El primer
deny interrumpe todas las políticas siguientes. Todos los mensajes instruct se acumulan y se entregan juntos.Importaciones transitivas
Los archivos de políticas personalizadas pueden importar módulos locales usando rutas relativas:from "failproofai" a la ruta real de dist y creando archivos .mjs temporales para garantizar la compatibilidad con ESM.
Filtrado por tipo de evento
Usamatch.events para limitar cuándo se activa una política:
match completamente para que se active en todos los tipos de eventos.
Manejo de errores y modos de fallo
Las políticas personalizadas son de fallo abierto: los errores nunca bloquean las políticas integradas ni hacen que el handler del hook falle.Ejemplo completo: múltiples políticas
Ejemplos
El directorioexamples/ contiene archivos de políticas listos para usar:

