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 un agente trabaja. Una política puede permitir una acción, proporcionar orientación al agente o denegar la acción antes de que provoque otro incidente. Usa una política personalizada cuando el comportamiento depende de tus herramientas, rutas, comandos, entornos o reglas operativas. Consulta primero el catálogo de políticas integradas para no recrear un control existente.

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, 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 → cumplimiento, despliega la versión en una máquina de prueba en modo observación y verifica sus decisiones en Observar → política antes de aplicarla. El editor de políticas usado 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 explicarse en una sola frase. Evalúa la acción observable —no la intención que esperas que haya tenido el agente— y devuelve allow() en cuanto la regla no sea aplicable.

Elige una decisión

Escribe la razón 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 ser prevenida.

Objeto de política

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

Contexto de la política

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

Entradas comunes de herramientas

Failproof AI normaliza las herramientas más comunes entre los harnesses compatibles, de modo que una política generalmente puede usar una sola 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 sesión

Un evento Stop denegado puede hacer que el agente reintente. Solo impone condiciones que el agente pueda satisfacer en el entorno actual, y limita el tiempo de todo 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 el directorio de políticas del proyecto como el del usuario.
  • Los archivos se cargan alfabéticamente dentro de cada directorio.
  • El nombre del 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 sigan al código.

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 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 sin resolver, excepciones en el nivel superior y tiempos de espera de 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 esperado.
  • Una acción cercana pero segura que deba devolver allow().
  • Campos de herramienta faltantes o malformados.
  • Sintaxis de comandos 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 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 políticas posteriores.
  • 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 tiempo de espera agotado se registra y se trata como allow().
  • Un archivo de convención que falla al cargar 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 plazo de 10 segundos.
  • El modo de observación 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íticas deterministas y rápidos. Evita llamadas de red en el nivel superior o el inicio de servidores. 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.

Implementar políticas personalizadas

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