Skip to main content
Las políticas personalizadas te permiten definir reglas para cualquier comportamiento del agente: aplicar convenciones del proyecto, prevenir desviaciones, bloquear operaciones destructivas, detectar agentes atascados o integrarte con Slack, flujos de aprobación y más. Utilizan el mismo sistema de eventos de hook y las mismas decisiones allow, deny, instruct que las políticas integradas.

Ejemplo rápido

Instálalo:

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á.
Cómo funciona:
  • 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 --custom explícito y las políticas integradas
Las políticas por convención son la forma más sencilla de establecer un estándar de calidad para tu organización. Incluye .failproofai/policies/ en git y todos los miembros del equipo recibirán las mismas reglas automáticamente, sin configuración individual. A medida que el equipo detecte nuevos modos de fallo, añade una política y haz push. Con el tiempo, esto se convierte en un estándar de calidad vivo que mejora con cada contribución.

Opción 2: Ruta de archivo explícita

La ruta absoluta resuelta se almacena en 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:
  1. Archivo customPoliciesPath explícito (si está configurado)
  2. Archivos de convención del proyecto ({cwd}/.failproofai/policies/, alfabético)
  3. 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.
Puedes añadir orientación adicional a cualquier mensaje deny o instruct mediante el campo hint en policyParams, sin necesidad de modificar el código. Esto funciona también para políticas personalizadas (custom/), de convención de proyecto (.failproofai-project/) y de convención de usuario (.failproofai-user/). Consulta Configuración → hint para más detalles.

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:
  1. Políticas integradas (en orden de definición)
  2. Políticas personalizadas explícitas de customPoliciesPath (en orden de .add())
  3. Políticas de convención del proyecto .failproofai/policies/ (archivos en orden alfabético, orden de .add() dentro de cada archivo)
  4. 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:
Se resuelven todas las importaciones relativas alcanzables desde el archivo de entrada. Esto se implementa reescribiendo las importaciones from "failproofai" a la ruta real de dist y creando archivos .mjs temporales para garantizar la compatibilidad con ESM.

Filtrado por tipo de evento

Usa match.events para limitar cuándo se activa una política:
Omite 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.
Para depurar errores en políticas personalizadas, monitorea el archivo de log:

Ejemplo completo: múltiples políticas


Ejemplos

El directorio examples/ contiene archivos de políticas listos para usar:

Usar los ejemplos con archivo explícito

Usar los ejemplos basados en convenciones

No se necesita ningún comando de instalación; los archivos se detectan automáticamente en el siguiente evento de hook.