Skip to main content
Las políticas personalizadas convierten un patrón de fallos de tus trazas o auditorías en una decisión que se ejecuta mientras trabaja un agente. Una política puede permitir una acción, proporcionar orientación al agente o bloquear la acción antes de que cause otro incidente. Usa una política personalizada cuando el comportamiento dependa de tus herramientas, rutas, comandos, entornos o reglas de operación. Consulta primero el paquete de políticas de Failproof AI para no recrear un control que ya existe.

Crear una política personalizada

  1. Ve a Admin → editor de políticas, selecciona Nueva política y describe el fallo que deseas prevenir.
  2. Añade el código fuente de la política, luego prueba coincidencias esperadas y no coincidencias seguras en el editor. Resuelve todos los errores de validación.
  3. Guarda el borrador y selecciona Publicar versión para crear una versión inmutable.
  4. Ve a Admin → enforcement, despliega la versión en una máquina de prueba en modo observe y verifica sus decisiones en Observe → policy antes de aplicarla. El editor de políticas utilizado para crear y publicar una política personalizada.

Empieza con una regla específica

Esta política bloquea comandos destructivos de Kubernetes únicamente cuando el comando apunta a producción. Todo lo que quede fuera de ese patrón de fallo exacto devuelve allow().
Las buenas políticas son lo suficientemente específicas como para explicarlas en una sola frase. Evalúa la acción observable —no la intención que esperas que el agente tuviera— y devuelve allow() en cuanto la regla no aplique.

Elige una decisión

Escribe el motivo pensando en el agente que debe recuperarse. Explica qué se detectó y qué debe hacer en su lugar.
No uses instruct() como límite de seguridad. La entrega de orientación varía según el harness del agente. Usa deny() cuando la acción deba prevenirse.

Objeto de política

Filtra las herramientas dentro de fn. match.toolNames no forma parte del tipo público de política personalizada.

Contexto de política

Cada política recibe un PolicyContext. Trata cada valor opcional como genuinamente opcional. Las versiones de agentes y los tipos de eventos no proporcionan siempre los mismos campos.

Entradas comunes de herramientas

Failproof AI normaliza las herramientas comunes entre los harnesses compatibles para que una política pueda usar generalmente una única forma de entrada. Usa coerción defensiva porque los valores de entrada de las herramientas están tipados como unknown:

Elige el evento

La disponibilidad de eventos y el comportamiento de bloqueo dependen del harness del agente. Consulta Harnesses de agentes antes de depender de un evento en una flota mixta.
SessionStart, SessionEnd, UserPromptSubmit, PreToolUse, PermissionRequest, PermissionDenied, PostToolUse, PostToolUseFailure, Notification, SubagentStart, SubagentStop, TaskCreated, TaskCompleted, Stop, StopFailure, TeammateIdle, InstructionsLoaded, ConfigChange, CwdChanged, FileChanged, WorktreeCreate, WorktreeRemove, PreCompact, PostCompact, Elicitation, ElicitationResult, UserPromptExpansion, PostToolBatch y Setup.

Patrones comunes de políticas

Bloquear escrituras en rutas protegidas

Proporcionar orientación sin bloquear

Controlar la finalización de la sesión

Un evento Stop denegado puede hacer que el agente reintente. Solo condiciona la finalización a una condición que el agente pueda satisfacer en el entorno actual, y limita el tiempo de ejecución de cada subproceso o llamada de red.

Cargar archivos de política

Archivos por convención

Los archivos por convención se cargan automáticamente:
  • Los directorios de políticas del proyecto y del usuario se cargan ambos.
  • Los archivos se cargan en orden alfabético dentro de cada directorio.
  • Un archivo debe terminar en policies.js, policies.mjs o policies.ts.
  • Se admiten múltiples llamadas a customPolicies.add() en un mismo archivo.
  • Se admiten importaciones relativas desde módulos locales.
  • Las políticas del proyecto pueden incluirse en el repositorio para que las mismas reglas acompañen al código.

Archivos explícitos

Usa rutas explícitas cuando la validación o la configuración deba nombrar directamente el archivo de entrada:
Los archivos explícitos se cargan primero, seguidos de los archivos de convención del proyecto y luego los del usuario. Un archivo descubierto por ambas rutas se carga una sola vez.

Validar y probar

La validación ejecuta el módulo a través del cargador de producción y confirma que registra al menos una política.
La validación detecta archivos faltantes, errores de sintaxis, importaciones no resueltas, excepciones en el nivel superior y tiempos de espera en la carga del módulo. No verifica que tu lógica de coincidencia sea correcta. Prueba al menos estos casos:
  • Una acción que deba coincidir y producir el motivo de política previsto.
  • Una acción cercana pero segura que deba devolver allow().
  • Campos de herramienta faltantes o mal formados.
  • Sintaxis de comando alternativa, rutas, comillas, mayúsculas/minúsculas y espacios en blanco.
  • Un subproceso o dependencia de red no disponible.
Atribuye el resultado a tu política personalizada en Observe → policy. Un test bloqueado no es suficiente si fue una política integrada diferente la que tomó la decisión.

Comportamiento en tiempo de ejecución

  • Las políticas integradas se evalúan antes que las políticas personalizadas.
  • El primer deny detiene la evaluación de las políticas restantes.
  • Múltiples resultados instruct pueden combinarse cuando ninguna política deniega el evento.
  • Una función de política tiene un límite de ejecución de 10 segundos.
  • Una excepción lanzada o un tiempo de espera agotado se registran y se tratan como allow().
  • Un archivo de convención que no se carga correctamente se omite; los demás archivos personalizados y las políticas integradas continúan.
  • La carga del módulo en el nivel superior también tiene un límite de 10 segundos.
  • El modo observe en la nube ejecuta la política pero registra una decisión que no sea allow sin aplicarla.
Mantén los módulos de política deterministas y rápidos. Evita llamadas de red o inicios de servidor en el nivel superior. Limita el trabajo dentro de fn, captura los fallos de dependencias y decide deliberadamente si ese fallo debe permitir o bloquear la operación.

Exportaciones de la API

TypeScript exporta PolicyContext, PolicyResult, CustomHook, PolicyDecision y PolicyFunction.

Implementar políticas personalizadas

Publica una versión, impleméntala en modo observe, verifica las decisiones y pasa a la aplicación.