Saltar al contenido principal
Las políticas personalizadas te permiten escribir reglas para cualquier comportamiento del agente: aplicar convenciones del proyecto, prevenir desviaciones, controlar operaciones destructivas, detectar agentes bloqueados o integrarte con Slack, flujos de aprobación y mucho más. Utilizan el mismo sistema de eventos de hooks y las mismas decisiones allow, deny, instruct que las políticas integradas.

Ejemplo rápido

Instálala:

Dos formas de cargar políticas personalizadas

Opción 1: Basada en convención (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: suelta un archivo y listo.
Cómo funciona:
  • Se escanean 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 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 (fail-open por archivo)
  • Funciona junto con --custom explícito y las políticas integradas
Las políticas de 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 cada miembro del equipo obtendrá las mismas reglas automáticamente, sin configuración individual. A medida que el equipo descubra nuevos modos de fallo, agrega una política y haz push. Con el tiempo, estas se convierten 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 de 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/, orden alfabético)
  3. Archivos de convención del usuario (~/.failproofai/policies/, orden alfabético)

API

Importación

customPolicies.add(hook)

Registra una política. Llama a este método tantas veces como necesites para 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 único deny interrumpe toda evaluación posterior. instruct(message) — el mensaje se agrega al contexto de Claude para la llamada de herramienta actual. Todos los mensajes instruct se acumulan y se entregan juntos.
Puedes añadir orientación adicional a cualquier mensaje deny o instruct agregando un 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 significado diferente: es una actualización de estado, no una advertencia. Casos de uso:
  • Confirmaciones de estado: allow("All CI checks passed.") — le indica a Claude que todo está bien
  • Explicaciones de fail-open: allow("GitHub CLI not installed, skipping CI check.") — le indica a Claude por qué se omitió una verificación para que tenga 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 en .failproofai/policies/ (archivos en orden alfabético, orden de .add() dentro de cada uno)
  4. Políticas de convención del usuario en ~/.failproofai/policies/ (archivos en orden alfabético, orden de .add() dentro de cada uno)
El primer deny interrumpe todas las políticas posteriores. 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 dispara una política:
Omite match por completo para disparar en cada tipo de evento.

Manejo de errores y modos de fallo

Las políticas personalizadas son fail-open: los errores nunca bloquean las políticas integradas ni hacen fallar el handler del hook.
Para depurar errores de políticas personalizadas, observa el archivo de log:

Ejemplo completo: múltiples políticas


Ejemplos

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

Usar los ejemplos con archivo explícito

Usar los ejemplos basados en convención

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