Skip to main content
Las políticas personalizadas convierten un patrón de fallos detectado en tus trazas o auditorías en una decisión que se ejecuta mientras el agente trabaja. Una política puede permitir una acción, dar 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 operativas. Consulta primero el catálogo de políticas integradas 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 quieres prevenir.
  2. Añade el código fuente de la política y prueba coincidencias esperadas y acciones seguras sin coincidencia 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 → aplicación, despliega la versión en una máquina de prueba en modo observar y verifica sus decisiones en Observar → política antes de aplicarla. El editor de políticas utilizado para crear y publicar una política personalizada.

Empieza con una regla estrecha

Esta política bloquea comandos destructivos de Kubernetes solo cuando el comando apunta a producción. Todo lo que quede fuera de ese modo de fallo exacto devuelve allow().
Las buenas políticas son lo suficientemente específicas como para explicarse en una sola frase. Haz coincidir 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é debería 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 la política

Cada política recibe un PolicyContext. Trata cada valor opcional como genuinamente opcional. Las versiones del agente y los tipos de evento no proveen los mismos campos en todos los casos.

Entradas comunes de herramientas

Failproof AI normaliza las herramientas comunes entre los harnesses compatibles, por lo que una política generalmente puede usar 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 agente 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.

Crea patrones comunes de políticas

Bloquear escrituras en rutas protegidas

Dar 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 algo que el agente pueda satisfacer en el entorno actual, y limita el tiempo de cada subproceso o llamada de red.

Cargar archivos de políticas

Archivos de convención

Los archivos de convención se cargan automáticamente:
  • Se cargan tanto los directorios de políticas del proyecto como los del usuario.
  • Los archivos se cargan en orden alfabético dentro de cada directorio.
  • El 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 commitearse para que las mismas reglas acompañen al repositorio.

Archivos explícitos

Usa rutas explícitas cuando la validación o la configuración deba nombrar el archivo de entrada directamente:
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 vías 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 de nivel superior y timeouts de carga de módulos. No garantiza que tu lógica de coincidencia sea correcta. Prueba al menos estos casos:
  • Una acción que debe coincidir y producir el motivo de política esperado.
  • Una acción cercana pero segura que debe devolver allow().
  • Campos de herramienta faltantes o malformados.
  • 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 Observar → política. Una prueba bloqueada no es suficiente si una política integrada diferente tomó la decisión.

Comportamiento en tiempo de ejecución

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

Exportaciones de la API

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

Desplegar políticas personalizadas

Publica una versión, despliégala en modo observar, verifica las decisiones y pasa a la aplicación.