Kill switch para agentes de IA: cómo detener acciones de emergencia sin release

Kill switch práctico en producción: stop global/por tenant, modo writes disabled, stop reasons, audit trail y runbook corto.
En esta página
  1. Idea en 30 segundos
  2. Problema
  3. Solución
  4. Kill switch ≠ sistema completo de governance
  5. Envolvente de control kill switch
  6. Cómo se ve en la arquitectura
  7. Ejemplo
  8. En código se ve así
  9. Cómo se ve durante la ejecución
  10. Escenario 1: global stop
  11. Escenario 2: tenant stop
  12. Escenario 3: writes disabled
  13. Errores típicos
  14. Autoevaluación
  15. FAQ
  16. Dónde encaja Kill Switch en el sistema
  17. Páginas relacionadas

Idea en 30 segundos

Kill switch es un control de emergencia en runtime que permite detener de inmediato nuevas acciones del agente durante un incidente, sin release y sin cambiar el prompt.

Cuándo se necesita:
cuando un agente puede ejecutar acciones de escritura, trabaja con APIs externas y un error ya está escalando a incidente de producción.

Problema

Cuando un agente empieza a hacer acciones dañinas, normalmente no hay tiempo para "ajustar prompt y sacar release". Mientras el equipo analiza el problema, el agente puede seguir haciendo las mismas acciones. Y cada minuto de retraso son nuevos efectos secundarios (cambios de estado) en producción.

Patrón típico:

  • correos o mensajes duplicados
  • operaciones masivas de create/update
  • llamadas excesivas a APIs externas

Analogía: es como un botón de parada de emergencia en una línea de producción. Durante una falla, primero hay que detener el movimiento, y después investigar la causa.

Si kill switch funciona solo en UI, no es control de emergencia. La parada real debe ocurrir en runtime loop y en tool gateway.

Solución

La solución es agregar una capa policy de kill switch centralizada, que se verifica después de formar la siguiente acción, pero antes de ejecutarla. La policy devuelve allow o stop con razón explícita: killed_global, killed_tenant, writes_disabled, tool_disabled.

Modelo base:

  • global kill — detiene de emergencia a todos
  • tenant kill — detiene a un cliente concreto
  • writes disabled — permite read, bloquea write
  • tool disabled — bloquea de forma puntual una herramienta concreta

Es una capa de control de emergencia separada, no parte del prompt ni de la lógica de UI.

Kill switch ≠ sistema completo de governance

Kill switch y governance resuelven tareas distintas:

  • Kill switch detiene el incidente "aquí y ahora"
  • Governance controla el comportamiento del agente de forma continua (RBAC, límites, budgets, approval)

Uno sin el otro no funciona bien:

  • sin kill switch, es difícil detener un incidente al instante
  • sin governance, los incidentes ocurren con demasiada frecuencia

Envolvente de control kill switch

Estas verificaciones trabajan juntas como una envolvente de emergencia en runtime.

ComponenteQué controlaMecánicas clavePara qué
Global stopParada de todos los runsglobal_kill=true
stop before next action
Detiene rápido un incidente masivo
Tenant stopParada dentro de un tenanttenant_kill=true
tenant-scoped flag
Localiza el problema sin outage global
Writes disabled modeBloqueo de acciones de escriturawrite tool policy
read-only fallback
Permite degradación segura en lugar de parada total
Tool disable listBloqueo puntual de una herramientatool_disabled[]
incident mode rules
Desactiva una herramienta problemática sin detener todos los runs
Operator observabilityTransparencia de acciones del operador y bloqueosaudit logs
actor + reason + scope
Permite explicar quién activó el stop y por qué

Cómo se ve en la arquitectura

La capa policy de kill switch está en runtime loop entre planificación y ejecución de la siguiente acción. Cada decisión (allow o stop) se registra en audit log.

Cada paso pasa por este flow antes de ejecutar: runtime no ejecuta acciones de forma directa, primero entrega la decisión a policy layer.

Resumen del flow:

  • Runtime forma la siguiente acción
  • Policy lee global/tenant flags + writes/tool rules
  • allow -> se ejecuta la siguiente acción del agente
  • stop -> el run se detiene con reason explícita (killed_global, killed_tenant, writes_disabled, tool_disabled)
  • la decisión se escribe en audit log

Ejemplo

Un agente de soporte empezó a enviar email.send en masa por un escenario defectuoso. Un operador activa writes_disabled para un tenant específico.

Resultado:

  • nuevas acciones write se bloquean de inmediato
  • las acciones read pueden seguir disponibles
  • en logs queda who/when/why para cada bloqueo

Kill switch detiene el incidente directamente en runtime loop y no espera un release nuevo.

En código se ve así

El esquema simplificado de arriba muestra el flujo principal. En práctica, el estado kill se lee de forma centralizada y se cachea por segundos. Crítico: kill-check debe ser O(1) y con caché corto (1-2 segundos), si no, la parada de emergencia reacciona tarde. En producción, el mismo kill-check suele duplicarse en tool gateway para que ninguna llamada pueda saltarse el control de runtime.

Ejemplo de configuración kill switch:

YAML
kill_switch:
  global_flag: agent_kill_global
  tenant_flag_prefix: "agent_kill_tenant:"
  writes_disabled_default: false
  disabled_tools_key: agent_disabled_tools
  cache_ttl_seconds: 2
PYTHON
while True:
    action = planner.next(state)
    action_key = make_action_key(action.name, action.args)  # clave estable para dedupe/audit

    kill_state = kill_store.read(tenant_id=state.tenant_id)
    decision = kill_policy.check(kill_state, action)

    if decision.outcome == "stop":
        audit.log(
            run_id,
            decision=decision.outcome,
            reason=decision.reason,
            scope=decision.scope,
            action=action.name,
            action_key=action_key,
            actor=kill_state.last_updated_by,
        )
        return stop(decision.reason)

    result = tool.execute(action.args)

    audit.log(
        run_id,
        decision=decision.outcome,
        reason=decision.reason,
        scope=decision.scope,
        action=action.name,
        action_key=action_key,
        result=result.status,
    )

    if result.final:
        return result

Kill switch detiene acciones nuevas. Para acciones in-flight suele hacer falta un mecanismo best-effort cancel separado.

Cómo se ve durante la ejecución

Escenario 1: global stop

  1. Operador activa global_kill=true.
  2. Runtime forma la siguiente acción y lee kill state.
  3. Policy devuelve stop (reason=killed_global).
  4. No se ejecutan nuevas acciones.
  5. En logs aparece scope=global y actor.

Escenario 2: tenant stop

  1. Se activa tenant_kill=true para tenant t_42.
  2. Los runs de ese tenant reciben stop (reason=killed_tenant).
  3. Los demás tenants continúan.
  4. Incidente localizado sin parada global.

Escenario 3: writes disabled

  1. Se activa writes_disabled=true.
  2. Una acción read pasa con allow.
  3. Una acción write recibe stop (reason=writes_disabled).
  4. El sistema entra en read-only degrade mode.

Errores típicos

  • kill switch solo en UI, pero no en runtime/tool gateway
  • un solo stop global sin modo per-tenant
  • falta de modo writes-disabled
  • cache TTL largo (minutos en lugar de segundos)
  • falta de audit trail para acciones de operador
  • falta de runbook de incidente probado

Resultado: el equipo tiene un "botón", pero no tiene control real de emergencia.

Autoevaluación

Chequeo rápido de kill switch antes de lanzar a producción:

Progreso: 0/8

⚠ Faltan controles base de governance

Antes de production necesitas como mínimo control de acceso, límites, audit logs y parada de emergencia.

FAQ

P: ¿Qué conviene activar primero: global stop o writes disabled?
R: Empieza con writes_disabled si el incidente está en acciones write. Usa global_kill cuando el riesgo de falla es amplio y necesitas una parada total inmediata.

P: ¿Dónde se debe verificar kill switch exactamente?
R: Como mínimo en dos lugares: en runtime loop antes de la siguiente acción y en tool gateway antes de ejecutar herramienta.

P: ¿Se puede cachear kill state?
R: Sí, pero por poco tiempo (segundos). En incidente, caché de minutos hace casi inútil al kill switch.

P: ¿Cómo implementar kill flags técnicamente?
R: Normalmente como flags globales y tenant-scoped en Redis/config store, que policy layer lee antes de cada acción.

P: ¿Kill switch cancela acciones ya iniciadas?
R: No siempre. Bloquea con fiabilidad acciones nuevas. Para tareas in-flight se necesita un mecanismo best-effort cancel separado.

P: ¿Kill switch puede reemplazar RBAC y budgets?
R: No. Kill switch es mecanismo de parada de emergencia. RBAC, límites y budgets son necesarios para control continuo.

Dónde encaja Kill Switch en el sistema

Kill switch es la capa de emergencia de Agent Governance. Junto con RBAC, budgets, approval y audit, forma un sistema completo de control en producción.

Páginas relacionadas

Siguiente sobre este tema:

⏱️ 7 min de lecturaActualizado 27 de marzo de 2026Dificultad: ★★★
Implementar en OnceOnly
Budgets + permissions you can enforce at the boundary.
Usar en OnceOnly
# onceonly guardrails (concept)
version: 1
budgets:
  max_steps: 25
  max_tool_calls: 12
  max_seconds: 60
  max_usd: 1.00
policy:
  tool_allowlist:
    - search.read
    - http.get
writes:
  require_approval: true
  idempotency: true
controls:
  kill_switch: { enabled: true }
Integrado: control en producciónOnceOnly
Guardrails para agentes con tool-calling
Lleva este patrón a producción con gobernanza:
  • Presupuestos (pasos / topes de gasto)
  • Permisos de herramientas (allowlist / blocklist)
  • Kill switch y parada por incidente
  • Idempotencia y dedupe
  • Audit logs y trazabilidad
Mención integrada: OnceOnly es una capa de control para sistemas de agentes en producción.

Autor

Nick — ingeniero que construye infraestructura para agentes de IA en producción.

Enfoque: patrones de agentes, modos de fallo, control del runtime y fiabilidad del sistema.

🔗 GitHub: https://github.com/mykolademyanov


Nota editorial

Esta documentación está asistida por IA, con responsabilidad editorial humana sobre la exactitud, la claridad y la relevancia en producción.

El contenido se basa en fallos reales, post-mortems e incidentes operativos en sistemas de agentes de IA desplegados.