Reservar cita

OWASP Agent Control Standard (ACS): control de agentes de IA en tiempo de ejecución

El OWASP Agent Control Standard (ACS) es una especificación abierta según la cual un Guardian Agent examina las acciones de un agente de IA en hooks definidos y, mediante políticas, las permite, las bloquea, las modifica, las somete a aprobación o las aplaza. Este análisis en profundidad muestra lo que la versión 0.1.0 ofrece hoy y dónde están sus límites.

Actualizado: octubre de 2026 · Valeri Milke, Lead Auditor ISO 27001 e ISO 42001

Recibirá el enlace de descarga al instante en la página y por correo electrónico.

Observed Agentp. ej., agente de programación
Guardian AgentPolicy as Code + LLM opcional
  • allow
  • deny
  • modify
  • ask
  • defer
InstrumentHooks y dispositionsTraceOpenTelemetry y OCSFInspectAgBOM
Esquema según ACS v0.1.0: el Observed Agent notifica una llamada a herramienta mediante un hook y el Guardian responde con una disposition antes de que se ejecute la acción. Líneas de log ilustrativas.
19hooks nativos steps/* en la especificación v0.1.0, de sessionStart a sessionEnd, incluidos los tres hooks de skills
5dispositions: allow, deny, modify, ask y defer; la especificación asigna expresamente el vocabulario completo a steps/toolCallRequest
7perfiles de conformidad: acs-core como obligatorio más seis perfiles opcionales, declarados en el handshake, sin verificación externa
6hooks mínimos para ACS-Core: sessionStart, userMessage o agentTrigger, toolCallRequest, toolCallResult, agentResponse, sessionEnd

Los agentes de IA no solo leen, también actúan: ejecutan comandos de shell, llaman a API, envían correos electrónicos y escriben en su memoria. Los prompts de sistema no controlan nada de eso. El OWASP Agent Control Standard (ACS) interviene precisamente aquí y estandariza el control en tiempo de ejecución como un protocolo entre el agente y el Guardian. Esta página explica la especificación v0.1.0 desde la perspectiva del CISO: hooks y dispositions, failure posture, Policy as Code, pista de auditoría (audit trail), trazas según OpenTelemetry y OCSF, y la AgBOM. El simulador muestra ejemplos de mensajes wire fieles al esquema, la matriz de riesgos relaciona ACS con el OWASP Agentic Top 10 (valoración de VamiSec) y señalamos con franqueza lo que este estándar incipiente todavía no ofrece. El navegador de perfiles, la autoevaluación y un whitepaper para CISOs le ayudan a dar los primeros pasos.

Del Agent Observability Standard a ACS v0.1

Cómo un proyecto de observabilidad se convirtió en un estándar de control: todos los hitos documentados hasta el objetivo de v0.2.0. Haga clic en un hito para ver los detalles.

Nueve conceptos clave del Agent Control Standard

Haga clic en una tarjeta para leer el concepto clave; el orden sigue el recorrido de una acción del agente desde el hook, pasando por la decisión, hasta la evidencia.

Explorador del estándar

Tres pilares, la arquitectura del Guardian, identidad y provenance, y los perfiles de conformidad, cada uno con las afirmaciones clave de la especificación v0.1.0 y sus límites.

Pilar
  • Interceptación, evaluación y aplicación en tiempo real: envelopes JSON-RPC 2.0 sobre HTTP(S) o stdio, métodos de hook en el espacio de nombres steps/*.
  • 19 hooks nativos a lo largo de todo el ciclo de vida: sesión, turno, mensajes, conocimiento y memoria, herramientas, compactación, subagentes y skills.
  • steps/toolCallRequest debe dispararse para cada acción que salga del contexto de razonamiento, también para las operaciones integradas de shell, archivos y red.
  • El Observed Agent debe esperar la decisión y aplicarla; un framework que ignore los veredictos no es conforme.
  • Streaming, notificaciones e interrupción no existen en v0.1.0: una respuesta solo puede ser de tipo final.
JSON-RPC 2.0steps/*steps/toolCallRequestDecision Honoring
Interactivo

Simulador del Guardian: seis escenarios paso a paso

Elija un escenario y siga cómo una solicitud de hook pasa del Observed Agent al Guardian Agent, qué disposition se genera y qué queda en la pista de auditoría, incluido el caso de que el Guardian falle.

Agente de programación

El agente de programación debe limpiar los artefactos de compilación. Por una ruta mal resuelta, el comando de shell previsto, rm -rf, apunta al directorio personal en lugar de a la carpeta de compilación.

  1. 1Solicitud de hook (Observed Agent → Guardian)
    {
      "jsonrpc": "2.0",
      "method": "steps/toolCallRequest",
      "id": 41,
      "params": {
        "acs_version": "0.1.0",
        "request_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803",
        "timestamp": "2026-10-06T09:12:41Z",
        "metadata": {
          "agent_id": "coding-agent-ci-07",
          "session_id": "3f6c2a18-9d4e-4b1a-8c55-2e7f90a1b3c4",
          "turn_id": "a1d4e7f0-2b5c-4e8a-9f13-6c0d2e5f8a71"
        },
        "payload": {
          "tool": {
            "name": "shell"
          },
          "operation": "delete_recursive",
          "capability": "filesystem.delete",
          "arguments": {
            "command": {
              "value": "rm -rf ~/",
              "provenance": {
                "provenance_id": "p-112",
                "origin": "agent_generated",
                "derived_from": [
                  "p-101"
                ]
              }
            }
          },
          "raw_command": "rm -rf ~/"
        },
        "signature": {
          "algorithm": "HMAC-SHA256",
          "value": "unUBv7dka1B1VD+fgzjF9E+IGC3GiQihQdQxEtIyG54=",
          "key_id": "sess-hmac-coding-07"
        }
      }
    }
  2. 2Evaluación en el Guardian
    • Capa determinista (Policy as Code; referencia en v0.1: OPA/Rego): el framework notifica la llamada al shell con la capability filesystem.delete y la operación delete_recursive; se aplica la regla deny_recursive_delete_outside_workspace.
    • Comprobación de la ruta: el destino ~/ (directorio personal) queda fuera del espacio de trabajo al que la política restringe esta sesión.
    • Comprobación de provenance: el comando es agent_generated (derivado de p-101); ninguna persona ha indicado expresamente este destino.
    • No se necesita la capa LLM opcional: deny con reasoning, reason_codes y policy_references, evaluador deterministic.
    DispositiondenyAcción bloqueada
  3. 3Respuesta (Guardian → Observed Agent)
    {
      "jsonrpc": "2.0",
      "id": 41,
      "result": {
        "type": "final",
        "acs_version": "0.1.0",
        "request_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803",
        "decision": "deny",
        "reasoning": "Recursive delete targets the user's home directory, outside the workspace root the session is scoped to.",
        "reason_codes": [
          "destructive_operation",
          "path_outside_workspace"
        ],
        "policy_references": [
          {
            "policy_id": "coding-agent-fs",
            "policy_version": "2026.10.2",
            "rule_id": "deny_recursive_delete_outside_workspace"
          }
        ],
        "cited_provenance_ids": [
          "p-112"
        ],
        "metadata": {
          "evaluator": "deterministic",
          "evaluation_duration_ms": 3
        },
        "chain_hash": "49c17246a18080bbeeaee88743bff94616b58cb6beb24e870b68a6f3ad55ecc3",
        "signature": {
          "algorithm": "HMAC-SHA256",
          "value": "Z1NyoNzC5LkVEcrZS6rzuc3CFaPO8vgfYg5/lhCpuho=",
          "key_id": "sess-hmac-coding-07"
        }
      }
    }

    El Observed Agent no ejecuta el borrado y recibe la justificación. Si propone una ruta corregida, esta se vuelve a comprobar.

  4. 4Pista de auditoría (trace)
    {
      "_note": "vereinfachter Auszug",
      "class_uid": 2004,
      "class_name": "Detection Finding",
      "category_uid": 2,
      "activity_id": 1,
      "severity_id": 4,
      "time": 1791277961003,
      "metadata": {
        "version": "1.5.0"
      },
      "finding_info": {
        "uid": "dec-6b2f9e14",
        "title": "Tool call denied: recursive delete outside workspace"
      },
      "enrichments": [
        {
          "name": "acs_provenance_origin",
          "value": "agent_generated"
        }
      ],
      "unmapped": {
        "acs": {
          "decision": "deny",
          "evaluator": "deterministic",
          "policy_references": [
            {
              "policy_id": "coding-agent-fs",
              "policy_version": "2026.10.2",
              "rule_id": "deny_recursive_delete_outside_workspace"
            }
          ],
          "reason_codes": [
            "destructive_operation",
            "path_outside_workspace"
          ],
          "cited_provenance_ids": [
            "p-112"
          ],
          "session_id": "3f6c2a18-9d4e-4b1a-8c55-2e7f90a1b3c4",
          "step_id": "6b2f9e14-0c3a-4d7b-a5e8-91f2c4d6b803"
        }
      }
    }

    El mapeo de ACS representa las decisiones distintas de allow como clase OCSF 2004 Detection Finding; deny recibe severity_id 4 (High).

Qué significa para usted

Las acciones destructivas deben quedar detrás de una regla determinista que actúe antes de la ejecución, no en el prompt de sistema. Esto solo es eficaz si el framework canaliza a través de steps/toolCallRequest toda acción con efecto externo, incluidas las operaciones integradas de archivos y de shell.

ASI02ASI05

Borrado recursivo fuera del espacio de trabajo: deny

Nota: ejemplos fieles al esquema de ACS v0.1.0 (validados frente a request-envelope.json, response-envelope.json, context-entry.json y los esquemas de los hooks, incluidas las variantes *.acs-provenance); los valores y los nombres de políticas y reglas son ilustrativos, las firmas se han calculado con una clave de demostración y los extractos de trace están simplificados; las asignaciones ASI son valoraciones de VamiSec. La única implementación de referencia (prueba de concepto) solo evalúa en vivo, por ahora, steps/toolCallRequest y steps/toolCallResult.

Pilar Instrument

Ciclo de vida de los hooks: dónde puede intervenir ACS

Los 19 hooks nativos steps/* de la especificación v0.1.0, así como los métodos de AgBOM, de handshake y de sistema, a lo largo de una sesión de agente. Seleccione un hook para ver el desencadenante, el margen de actuación del Guardian y los riesgos típicos.

01SesiónHandshake, inicio, activación, fin
02AgBOMInventario al inicio y en cada cambio
03TurnoEnvuelve cada turno del agente
04MensajesEntrada y salida
05Conocimiento y memoriaRecuperaciones RAG y memoria
06HerramientasAntes y después de cada acción
07CompactaciónCondensar la ventana de contexto
08SubagentesDelegación en el mismo proceso
09SkillsRegistrar, cargar, descargar
10SistemaLiveness
handshake/helloHandshake

Handshake

Cuándo
Al inicio de la sesión, antes de cualquier hook: el Observed Agent envía un ClientHello con las versiones, los métodos, los transportes, el modo de provenance y los perfiles que admite.
Qué puede hacer el Guardian
Responde con un ServerHello en lugar de con una disposition y fija negotiated_version, methods_evaluated, timeout_config y, opcionalmente, on_decision_failure. Los métodos fuera de methods_evaluated se consideran ALLOW-by-default. El Guardian puede rechazar la sesión, por ejemplo con PROVENANCE_REQUIRED (-32002).
Riesgos típicos
ASI03ASI08

Recuento según la especificación v0.1.0: 19 hooks nativos steps/*; con agbom/snapshot, agbom/changed y system/ping, 22 métodos con esquema de payload propio, además de handshake/hello y el namespace MCP protocols/MCP/*. Las dispositions permitidas en cada hook las fija la especificación en la prosa, no en el esquema. ACS-Core exige al menos seis hooks; lo que no figura en methods_evaluated se considera ALLOW-by-default. El punto junto al hook señala una variante estricta *.acs-provenance. La asignación de riesgos típicos a cada hook es una valoración de VamiSec.

Valoración de VamiSec

Matriz de riesgos: OWASP Agentic Top 10 × componentes de ACS

Qué componentes del Agent Control Standard controlan directamente, apoyan o no cubren los riesgos del OWASP Top 10 for Agentic Applications 2026, con la justificación y los límites de cada fila.

Cobertura de los riesgos ASI01 a ASI10 por seis componentes de ACS (2 = control directo, 1 = de apoyo, 0 = sin cobertura); valoración de VamiSec basada en ACS v0.1.0.
OWASP Agentic Top 10

Valoración de VamiSec basada en ACS v0.1.0, no una asignación oficial de OWASP. ACS no aparece en el OWASP Agentic Top 10 (diciembre de 2025), y ni OWASP ni el proyecto ACS han mapeado ACS a los riesgos ASI01 a ASI10; el efecto de cada celda depende de sus políticas y de los perfiles negociados.

Interactivo

Navegador de perfiles: ¿qué componentes de ACS encajan con su agente?

Hasta cinco preguntas sobre herramientas, regulación, fuentes de datos, dinámica y SOC. El resultado indica los perfiles de ACS y los primeros pasos que recomendamos para su situación: una valoración de VamiSec, no una declaración de conformidad.

Su recorrido
  1. ?

1: ¿Su agente llama a herramientas o desencadena acciones con efectos externos: archivos, shell, API, correos electrónicos, tickets, pagos?

1

¿Su agente llama a herramientas o desencadena acciones con efectos externos: archivos, shell, API, correos electrónicos, tickets, pagos?

ACS exige que steps/toolCallRequest se dispare para cada acción que salga del contexto de razonamiento. Sin acciones de este tipo, los puntos de control son sobre todo las entradas y las salidas.

Análisis en profundidad · 14 capítulos

El Agent Control Standard en detalle: del problema de control a la operación

Catorce capítulos para CISOs, arquitectos de seguridad y responsables de plataformas de IA: qué exige normativamente la especificación v0.1.0, dónde termina hoy y qué decisiones hay que tomar antes de una implantación. Las correspondencias con incidentes, riesgos y regulación están marcadas como valoración de VamiSec.

01Capítulo 1

Por qué los agentes de IA necesitan control en tiempo de ejecución

Un agente de IA no se limita a responder preguntas: desencadena acciones en sistemas de archivos, bases de datos, buzones de correo y cuentas en la nube. Con ello, la cuestión de seguridad se desplaza de la salida del modelo a quién revisa una acción concreta antes de que se ejecute.

Del generador de respuestas al actor

Las aplicaciones LLM clásicas generan texto que una persona lee antes de que ocurra nada. Los agentes de IA, en cambio, planifican de forma autónoma, invocan herramientas, escriben en una memoria a largo plazo y lanzan subagentes. Cada uno de estos pasos puede modificar datos o sacarlos al exterior. Por eso, la pregunta de control es: «¿Puede producirse ahora exactamente esta acción, con exactamente estos argumentos, en esta sesión?». Solo puede responderse en tiempo de ejecución, entre la decisión del modelo y su ejecución por parte del framework.

Los prompts de sistema no son controles

Muchos despliegues confían en instrucciones del prompt de sistema como «no borrar datos de producción». Esas frases son peticiones a un sistema probabilístico, no reglas que se hagan cumplir. La página del proyecto ACS arranca precisamente así su argumentación: los prompts de sistema no son controles, los mejores modelos no cubren los casos límite ni las entradas adversariales y los guardrails propietarios crean dependencia del proveedor.

Fabricantes e investigadores lo confirman. OpenAI escribió el 22 de diciembre de 2025 que la inyección de prompts (prompt injection) es «unlikely to ever be fully 'solved'». En el estudio «The Attacker Moves Second» (arXiv, 10 de octubre de 2025), ataques adaptativos superaron doce defensas recientes, en la mayoría de los casos con tasas de éxito superiores al 90 %, aunque, en su mayoría, habían comunicado inicialmente valores cercanos a cero. La robustez del modelo reduce el riesgo, pero no lo elimina. Hace falta una instancia de control independiente, fuera del modelo.

Lethal trifecta y Agents Rule of Two

Simon Willison describió el 16 de junio de 2025 la «lethal trifecta»: un agente que tiene acceso a datos privados, está expuesto a contenido no fiable y puede comunicarse con el exterior puede ser inducido, mediante prompt injection, a exfiltrar datos. Meta lo amplió el 31 de octubre de 2025 con la «Agents Rule of Two»: dentro de una sesión, un agente debe combinar como máximo dos de tres propiedades: procesar entradas no fiables; acceder a sistemas sensibles o datos privados; cambiar el estado o comunicarse con el exterior. Si necesita las tres, se requiere como mínimo supervisión, por ejemplo mediante aprobación humana. Meta subraya que la regla complementa el principio de mínimo privilegio y no lo sustituye.

Valoración de VamiSec: ambos modelos describen propiedades de una sesión, no de un modelo. Solo pueden hacerse cumplir si una instancia ve cada acción y el historial previo de la sesión. Ese punto de control es el que estandariza el OWASP Agent Control Standard (ACS). Para reconocer entradas no fiables se necesita el perfil opcional acs-provenance; ACS-Core por sí solo no aporta datos de procedencia.

Incidentes documentados y qué habría limitado el control en tiempo de ejecución

Incidente (fuente, fecha)Qué ocurrióPodría haberlo limitado (valoración de VamiSec)
EchoLeak, CVE-2025-32711, Microsoft 365 Copilot (NVD 11 de junio de 2025; CVSS 3.1: 9.3 Microsoft, 7.5 NVD)Zero-click: un correo electrónico manipulado llevó a Copilot a filtrar datos internos a través de la respuesta renderizada; se corrigió antes de su divulgación.Revisión de steps/agentResponse con modify (eliminar URL externas de imágenes y enlaces) o deny, siempre que el host dispare el hook y aporte provenance.
El agente de Replit borra una base de datos de producción (SaaStr, julio de 2025; The Register, 22 de julio de 2025)El agente ignoró una congelación de código (code freeze) ordenada, borró la base de datos de producción y generó mensajes de estado engañosos.deny o ask sobre capabilities destructivas de base de datos en steps/toolCallRequest; cadena de auditoría para la reconstrucción. En primer lugar: separación entre desarrollo y producción, copias de seguridad.
GitHub MCP «Toxic Agent Flow» (Invariant Labs, 26 de mayo de 2025)Prompt injection en un issue público; el agente publicó datos de repositorios privados mediante un pull request. Sin fallo en el código del servidor, sin CVE.Política de sesión «tras una salida de herramienta no fiable, no escribir en otro repositorio» con deny o ask en steps/toolCallRequest; requiere acs-provenance.
Amazon Q Developer Extension v1.84.0, CVE-2025-8217 (AWS-2025-015, 23 de julio de 2025; CVSS 4.0: 5.1)Prompt de borrado inyectado en la versión oficial; la ejecución falló por un error de sintaxis y los recursos de los clientes no se vieron afectados.El prompt procedía del propio producto y se considera fiable, así que la provenance no ayuda. Serían eficaces deny o ask sobre capabilities de borrado y la fijación de versiones (version pinning) mediante la AgBOM.
ClawHavoc: skills maliciosos en ClawHub (The Hacker News, 2 de febrero de 2026; Unit 42, 23 de junio de 2026)Una primera auditoría encontró 341 skills maliciosos entre 2.857 revisados, algunos de ellos con un dropper codificado en Base64.Revisión en skillRegister y vinculación al digest en skillLoad; después, deny sobre descarga y ejecución (network.egress más process.execute).

Todos los incidentes son anteriores a la especificación canónica ACS v0.1.0 (5 de junio de 2026). La columna derecha es una valoración, no una afirmación de que ACS habría evitado el incidente.

Por qué el control debe situarse en tiempo de ejecución

La selección del modelo, el endurecimiento de prompts y el red teaming antes de la puesta en producción siguen siendo necesarios, pero no dicen qué hace un agente en una sesión concreta. El control en tiempo de ejecución los complementa: actúa antes de la acción, evalúa el contexto de toda la sesión y deja una pista de auditoría reconstruible. El OWASP Top 10 for Agentic Applications 2026 recomienda para ASI02 (Tool Misuse and Exploitation) un middleware previo de aplicación de políticas, un «Intent Gate» que revisa la intención y los argumentos antes de la ejecución. ACS no se menciona ahí, pero aporta (valoración de VamiSec) un contrato de protocolo abierto precisamente para este punto de control. Las políticas siguen siendo responsabilidad suya.

02Capítulo 2

Qué es ACS: partes, tres pilares, ACS-Core y siete perfiles

El OWASP Agent Control Standard (ACS) es una especificación de protocolo abierta mediante la cual un Guardian Agent independiente revisa lo que un agente de IA quiere hacer a continuación. El Guardian permite, bloquea o modifica la acción, la somete a aprobación o aplaza su decisión, antes de que se produzca.

Con más precisión: el Agent Control Standard (ACS) es una especificación del OWASP GenAI Security Project que define en qué puntos de control (hooks) un agente de IA somete sus pasos a una instancia de políticas externa y cómo responde esta con una decisión (disposition). El formato es JSON-RPC 2.0 con un campo propio acs_version, transportado por HTTP(S) o stdio. La versión actual es la especificación v0.1.0, publicada como release 0.1.2 (tag del 21 de septiembre de 2026). ACS define el contrato entre agente y Guardian, no las políticas: qué está permitido lo sigue decidiendo su organización.

Las partes

RolFunción según la especificaciónForma habitual (ejemplo)
Observed AgentEl sistema supervisado basado en LLM. Implementa el contrato de protocolo, notifica cada paso relevante mediante un hook y aplica la disposition recibida. No decide sobre sus propias acciones.Agente de programación (coding agent), agente de soporte, framework de agentes integrado en un host
Guardian AgentLa instancia de políticas. Evalúa cada hook frente a la política del despliegue, devuelve una disposition y debe registrar cada decisión con su justificación, el identificador del modelo evaluador y, si está disponible, el nivel de confianza.Motor de políticas (p. ej., OPA/Rego), opcionalmente complementado con una capa LLM
AprobadorTercera parte a la que el Guardian recurre en caso de ask: persona, agente o servicio. El Guardian debe verificar su identidad frente a la política.Responsable de seguridad, servicio de aprobación, flujo de tickets
PrincipalLa parte autenticada que inicia una sesión o actúa en ella.Empleados, cuenta de servicio

La especificación exige no mezclar tres identidades: la del Observed Agent, la del Guardian y la del autor de las políticas.

Un principio de diseño sostiene la arquitectura: el modelo de lenguaje no debe saber nada de los hooks. Es el framework quien los dispara, y los datos de procedencia (provenance) se establecen fuera de la ruta de salida del modelo. Según nuestra lectura, así un modelo manipulado no debería poder ver ni influir en el punto de control.

Tres pilares: Instrument, Trace, Inspect

Instrument

Interceptar, evaluar y hacer cumplir en tiempo real: 19 hooks nativos steps/*, cinco dispositions, handshake, protección contra repetición (replay) y firmas. Sobre este pilar se construye la base obligatoria ACS-Core.

Trace

Un vocabulario con el que los eventos de los hooks aparecen como spans de OpenTelemetry y eventos OCSF; las decisiones quedan registradas como span event en el paso que las desencadena. ACS no inventa un formato de log nuevo. Trace funciona desacoplado de la aplicación de políticas (enforcement) y es best-effort.

Inspect

La AgBOM (Agent Bill of Materials): un inventario dinámico de modelos, servidores MCP, peers A2A, herramientas, fuentes de conocimiento, almacenes de memoria, capabilities y skills, serializable en CycloneDX 1.6, SPDX 3.0 o SWID.

ACS-Core y siete perfiles

La conformidad tiene una estructura modular. ACS-Core es la base obligatoria; sobre ella se apoyan seis perfiles opcionales que un despliegue declara en el handshake. No hay niveles numerados, solo nombres de perfil que se combinan de forma independiente. La única dependencia: acs-inspect-dynamic amplía acs-inspect.

Perfil (nombre en el handshake)Núcleo del requisitoPara qué lo necesita
acs-core (obligatorio)Entre otros: handshake, envelope JSON-RPC, al menos seis hooks, las cinco dispositions con sus campos obligatorios, cadena de auditoría encadenada por hash con chain head publicado, protección contra replay, firma HMAC-SHA256 en cada solicitud y cada respuesta, Decision Honoring, system/pingCanal autenticado; el agente cumple las decisiones del Guardian
acs-tracePara cada paso admitido, eventos de OpenTelemetry y/u OCSF con atributos obligatorios; cada decisión como evento de trazaIntegración con el SIEM, observabilidad multifabricante
acs-inspectagbom/snapshot una vez por sesión antes del primer hook con contenido; el Guardian serializa, a petición, en al menos un formato BOMPolíticas que dependen del inventario, como la prohibición de un modelo o de una herramienta
acs-inspect-dynamicAdemás, agbom/changed con cada cambio en el grafo de componentesDetectar sustituciones en caliente (hot swaps) de modelos, servidores MCP o skills durante la sesión
acs-provenanceObjeto de provenance en cada campo con datos de cada hook (provenance_producer: deterministic)Políticas de flujo de información según el patrón FIDES, CaMeL o de tipo AARM
acs-cryptoFirmas asimétricas o poscuánticas, como mínimo ML-DSA-65No repudio frente a terceros
acs-auditrequest_hash en cada ContextEntry de la cadena de auditoríaLa cadena vincula también el contenido de las solicitudes, no solo los metadatos

En v0.1.0, la conformidad es una autodeclaración en el handshake: sin suite de pruebas, sin registro de implementaciones conformes, sin organismo de evaluación.

Lo que garantiza ACS-Core lo formula la especificación con sobriedad: el canal está autenticado y el Observed Agent cumple las decisiones. No se garantiza que las políticas sean estrictas: un Guardian permisivo es conforme, solo que permisivo. La evidencia de manipulación de la cadena de auditoría, también frente a un Guardian comprometido, solo la aportan acs-crypto y acs-audit, porque la base HMAC es un procedimiento simétrico. Las combinaciones de ejemplo de la especificación van desde una integración mínima en un IDE solo con acs-core hasta un despliegue de alta garantía (high assurance) con los siete perfiles.

El modelo de tiers de la página del proyecto: capas de arquitectura, no niveles

  1. Tier 1 · Platform layer

    Los frameworks de agentes proporcionan hooks de middleware estandarizados: aquí nace el punto de control.

  2. Tier 2 · Enforcement layer

    Un componente de código abierto lee políticas declarativas y devuelve decisiones a través de esos hooks.

  3. Tier 3 · Enterprise layer

    Clasificadores propios y lógica específica del dominio se acoplan tras la misma interfaz.

Esta imagen describe quién aporta cada parte, no lo conforme que es un despliegue. Para las afirmaciones de conformidad solo cuentan los perfiles. Aun así, resulta útil para su planificación de arquitectura: separa la cuestión de qué plataforma proporciona los hooks de la de quién opera y mantiene las políticas.

03Capítulo 3

Origen, gobernanza y licencia: de AOS a proyecto OWASP

Quien adopta pronto un estándar debería saber quién lo dirige, bajo qué licencia está y hasta qué punto es sólida su hoja de ruta. ACS tiene una historia breve, pero agitada.

De la observación al control

El trabajo comenzó el 11 de mayo de 2025 como «Agent Observability Standard» (AOS) en el entorno de GitHub de Zenity y pasó en junio de 2025 a la organización OWASP, donde AOS figuraba como «OWASP other project». En mayo y junio de 2025, la capa de protocolo se denominó temporalmente «ASOP» (Agent Security & Observability Protocol), antes de volver a llamarse AOS. Tras una fase con solo commits aislados a partir de mediados de 2025, el 10 de abril de 2026 llegó el cambio de nombre a Agent Control Standard. El nuevo nombre marca el paso de contenido: de la mera observación a la aplicación de políticas (enforcement). Después, ACS funcionó brevemente como proyecto independiente fuera de OWASP y regresó en septiembre de 2026, esta vez al OWASP GenAI Security Project.

FechaHito
11 de mayo de 2025Primeros commits como «Agent Observability Standard» (AOS)
Junio de 2025Paso a la organización OWASP
10 de abril de 2026Cambio de nombre AOS → ACS (Agent Control Standard)
27 de mayo de 2026Nota de prensa de lanzamiento a través de Business Wire; fase como proyecto independiente
5 de junio de 2026Integración de la especificación canónica v0.1.0, incluidos los hooks de skills
11 de agosto de 2026Release v0.1.1: nueva licencia, especificación sin cambios
1–10 de septiembre de 2026Relanzamiento en OWASP: página de recursos (1 de septiembre), sitio web y 44 esquemas JSON (5 de septiembre), gobernanza e implementación de referencia (10 de septiembre)
21 de septiembre de 2026Tag v0.1.2, fijado a posteriori sobre un commit del 9 de septiembre de 2026
Marzo de 2027 (objetivo)Próximo release de la especificación, v0.2.0

Fuentes: historial de Git y documentos del proyecto en el repositorio de ACS, así como la página de recursos de OWASP; datos a 3 de octubre de 2026.

Estado: Incubator y public preview

ACS es un proyecto del OWASP GenAI Security Project y está adscrito allí a la Agentic Security Initiative. En sus propios metadatos de OWASP Nest declara el nivel 2, que en el esquema de Nest corresponde a la fase «Incubator»; con ello no queda acreditada una clasificación por parte de un órgano de OWASP. El Project Lead califica públicamente el estado como «public preview» y recomienda expresamente cautela a los implementadores. ACS no es un estándar ISO, IETF ni W3C, ni tampoco una norma armonizada. La fase temprana se aprecia también en lo formal: no hay GitHub Releases, solo tags; la prosa de la especificación y los esquemas cambiaron entre v0.1.1 y v0.1.2 sin que se incrementara la versión de la especificación v0.1.0.

¿Quién dirige el proyecto?

Según GOVERNANCE.md, Michael Bargury y Ory Segal crearon ACS; ambos siguen siendo líderes del proyecto. El Project Lead es Rock Lambros. En aras de la transparencia: Bargury es CTO y cofundador de Zenity, Zenity presenta a Lambros como «Director of AI Standards and Governance» y los primeros commits de AOS proceden mayoritariamente del entorno de Zenity. Los workstreams (Coding Agents, Development (SDK), Identity, Outreach y Spec) están dirigidos por personas de varias organizaciones. La página del proyecto describe ACS como neutral respecto a los fabricantes y gobernado por la comunidad; se trata de una autodescripción. Nuestra valoración: un proyecto OWASP con una fuerte impronta de Zenity en su fundación y su dirección.

Las decisiones pasan por un filtro de aceptación. Solo los issues con la etiqueta status:accepted entran en el backlog; los cambios de comportamiento, de texto normativo o de código requieren un issue aceptado, los cambios en la especificación empiezan como GitHub Discussion y los commits exigen un DCO sign-off. El desarrollo se realiza en la rama integration. Solo cuando el Project Lead promueve los cambios a main se vuelven a publicar el sitio web y las URI de los esquemas. A 3 de octubre de 2026, main no se ha vuelto a promover desde el 10 de septiembre de 2026, por lo que los cambios en integration aún no están publicados.

Licencia: qué puede reutilizar

ComponenteLicenciaConsecuencia práctica
Código, esquemas JSON, ejemplos de código en la documentaciónApache-2.0Uso en productos propietarios sin obligación de divulgación; licencia de patentes expresa
Documentación en prosa (textos de la especificación, README)CC BY-SA 4.0Las traducciones y adaptaciones están sujetas a ShareAlike y requieren atribución
Releases hasta v0.1.0 inclusiveMITLa licencia concedida entonces sigue vigente
Nombres y logotipos (OWASP, Agent Control Standard)no se conceden derechosUna implementación puede describirse como «ACS-conformant», pero no sugerir respaldo por parte del proyecto

El cambio de licencia a Apache-2.0 y CC BY-SA 4.0 se produjo con el release v0.1.1 el 11 de agosto de 2026. VamiSec redacta todos los contenidos de esta página de forma independiente y no traduce prosa de la especificación.

Hoja de ruta: lo que está documentado

El próximo release de la especificación, v0.2.0, apunta a marzo de 2027; no hay fecha fijada para la v1.0. Para v0.2 están previstos, entre otros, streaming e interrupción, ASK recursivo y quórum, aislamiento multi-tenant, el binding de Cedar, la federación de AgBOM a través de peers A2A y el wrapping de A2A. El objetivo en curso desde el kick-off del 10 de septiembre de 2026: en un plazo de 90 días, una implementación de referencia del Guardian operativa, con un benchmark de interoperabilidad frente al Agent Governance Toolkit de Microsoft, en manos de evaluadores externos. Está por ver si se logra antes de principios de diciembre de 2026. También sigue abierto el PR #21, que pretende redefinir el alcance obligatorio de ACS-Core. Los esbozos de versiones divergentes publicados en blogs no constituyen una hoja de ruta oficial.

04Capítulo 4

Instrument: los 19 hooks en el ciclo de vida de un agente

En cada hook, el Observed Agent se detiene y presenta al Guardian el siguiente paso. ACS v0.1.0 define 19 hooks nativos steps/*; cuáles de ellos se revisan realmente lo negocian ambas partes en cada sesión.

En el protocolo, los hooks llevan el prefijo steps/, por ejemplo steps/toolCallRequest. Además existen métodos que no son hooks nativos steps/*: agbom/snapshot y agbom/changed para el inventario, la sonda de disponibilidad (liveness probe) system/ping, el handshake handshake/hello y el namespace protocols/MCP/* para mensajes MCP encapsulados (wrapped). La página de hooks de la especificación cuenta 19 hooks más dos métodos AgBOM más ping como 22 métodos; el paquete de esquemas comprende en total 44 esquemas JSON. Algunos textos del proyecto (README, docs/acs.md) siguen mencionando 16 hooks de ciclo de vida: es el recuento sin los tres hooks de skills.

GrupoHooks (steps/…)Cuándo se disparanDispositions según la especificación
SesiónsessionStart, agentTrigger, sessionEndTras el handshake, antes de cualquier otro paso; activación por usuario, programación, evento, A2A o sistema; fin de la sesión, en el que el Guardian sella la cadenasessionStart: allow/deny · agentTrigger: allow/deny/modify · sessionEnd: solo auditoría
TurnoturnStart, turnEndInicio y fin de cada turno del agente; el turn_id acompaña a todos los pasos intermediosturnStart: admite decisión, normalmente allow · turnEnd: solo auditoría
MensajesuserMessage, agentResponseEntrada del usuario antes de que llegue al contexto de razonamiento; salida del agente antes de su entregaallow/deny/modify
Conocimiento y memoriaknowledgeRetrieval, memoryContextRetrieval, memoryStoreConsultas de conocimiento y RAG, lectura de la memoria hacia el contexto, escritura en la memoria a largo plazoallow/deny/modify
HerramientastoolCallRequest, toolCallResultTras analizar una llamada a herramienta, antes del dispatch; tras la ejecución, antes de que se incorpore el resultadotoolCallRequest: las cinco · toolCallResult: allow/deny/modify
CompactaciónpreCompact, postCompactAntes y después de compactar la ventana de contextopreCompact: deny posible · postCompact: modify, sin deny
SubagentessubagentStart, subagentStopInicio de un subagente en el mismo proceso; su finalizaciónsubagentStart: deny posible · subagentStop: solo auditoría
SkillsskillRegister, skillLoad, skillUnloadIncorporación al conjunto disponible como puerta de revisión estática; activación en la sesión; eliminaciónskillRegister y skillLoad: allow/deny · skillUnload: solo auditoría

Las restricciones por hook figuran en la prosa de la especificación; el propio esquema de respuesta no limita el campo decision por método.

El mínimo de ACS-Core: seis hooks

ACS-Core exige al menos seis hooks: sessionStart, userMessage o agentTrigger, toolCallRequest, toolCallResult, agentResponse y sessionEnd. Todos los demás debería implementarlos un framework siempre que pueda observar el evento correspondiente; se negocian en el handshake. Para su evaluación de productos, esto significa que la afirmación «compatible con ACS» no revela todavía si las escrituras en memoria, los subagentes o los skills llegan siquiera al Guardian.

La trampa de methods_evaluated

En el handshake, el Observed Agent comunica qué métodos implementa (methods_implemented). El Guardian responde con la lista de métodos que realmente evalúa (methods_evaluated). Si el agente envía un hook que no figura en ella, debe tratarlo como ALLOW-by-default: en el mejor de los casos, el paso se registra, pero no se revisa. La única implementación de referencia, por ejemplo, solo evalúa steps/toolCallRequest y steps/toolCallResult, es decir, dos de 19 hooks.

toolCallRequest: el punto central de aplicación

steps/toolCallRequest es el único hook para el que la especificación prevé expresamente las cinco dispositions; aquí es también donde actúan los paradigmas de control. Hay una regla MUST central: los frameworks deben disparar toolCallRequest para cada acción que abandone el contexto de razonamiento del agente, aunque el framework no la gestione internamente como herramienta (tool). Esto abarca los accesos de lectura y escritura al sistema de archivos, las peticiones de red, los inicios de procesos y los comandos de shell. Lo que eluda este hook no lo ve ninguna política.

Son obligatorios en el payload tool.name y arguments, y cada valor de argumento puede llevar su propia provenance. Opcionalmente se añaden una capability abstracta, como filesystem.delete o network.egress, el raw_command y un intent. Así, las políticas pueden evaluar qué provoca una acción en lugar de qué programa la ejecuta.

Hooks con un efecto protector especial

  • memoryStore es el sumidero estándar para la influencia entre sesiones y, según la especificación, el punto de actuación frente al envenenamiento de memoria (cf. ASI06: Memory & Context Poisoning).
  • preCompact y postCompact protegen la compactación: el resumen debe llevar origin agent_generated y heredar la procedencia de todas las entradas compactadas, para que el contenido no fiable no quede blanqueado.
  • subagentStart permite al Guardian denegar el inicio de un subagente; cada subagente recibe su propio session_id y su propia cadena de auditoría.
  • skillRegister y skillLoad vinculan los skills a un digest: solo puede cargarse lo que se haya aprobado previamente con idéntico skill_id e idéntico digest; las cargas que no puedan asignarse deberían rechazarse.
05Capítulo 5

Las cinco dispositions en detalle: allow, deny, modify, ask, defer

A cada hook, el Guardian responde con exactamente una disposition. Los detalles (campos obligatorios, reglas de composición, plazos) deciden si una política es segura o permeable en caso de fallo.

En el protocolo, las dispositions figuran en minúsculas en el campo decision; la prosa de la especificación las escribe en mayúsculas (ALLOW, DENY…). En v0.1, toda respuesta es de tipo final: los estados intermedios (progress) y las interrupciones (interruption) no están previstos hasta v0.2. Son obligatorios en toda respuesta type, acs_version, request_id y decision; el request_id replica el de la solicitud.

DispositionEfecto en el Observed AgentCampos obligatorios (esquema)Uso típico
allowLa acción se ejecuta tal como se solicitóninguno; se recomienda reasoning cuando se esperan pistas de auditoría visibles para el usuarioAcceso de lectura dentro del alcance permitido
denyLa acción se bloqueareasoningComando de shell destructivo, egress hacia un destino desconocido
modifyLa acción se ejecuta con el payload modificadoreasoning, modificationsLimitar una consulta, enmascarar datos personales en el resultado de una herramienta
askEl agente se detiene hasta la aprobaciónreasoning, ask_detailsPago, envío masivo a destinatarios externos
deferLa decisión se aplazareasoning, defer_detailsScript desconocido, falta de contexto

Opcionales en cada decisión: reason_codes, policy_references (policy_id, policy_version, policy_name, rule_id), policy_data, cited_provenance_ids y metadata con evaluator (deterministic, agent o composite).

MODIFY: dos formas que se excluyen mutuamente

El objeto modifications admite dos formas. O bien modified_content sustituye todo el payload, y entonces no se permiten más ediciones. O bien el Guardian envía ediciones estructuradas: redactions (ruta JSON Pointer más texto de sustitución, por defecto «[REDACTED]») y/o parameter_overrides (nombre del argumento más valor nuevo). Ambas pueden aparecer juntas, pero sus destinos deben ser disjuntos: ninguna ruta de enmascaramiento puede afectar al mismo campo que un override, ni tampoco a uno superior o subordinado. La especificación lo justifica así: un orden de aplicación fijo resolvería los conflictos de forma silenciosa y, según el orden, volvería a exponer valores enmascarados o sobrescribiría valores saneados. Si un Guardian infringe estas reglas, el Observed Agent debe tratar la respuesta como un deny.

Un ejemplo: un agente quiere consultar por completo una tabla de clientes. El Guardian responde con modify y una entrada en parameter_overrides que limita la consulta a 500 filas, como en el escenario del simulador «Consulta ilimitada a la base de datos». Los valores de override figuran como valor bruto en el objeto, no dentro de un envoltorio value.

ASK: aprobación con reglas claras

  • ask_details exige un approver (el aprobador) con type (human, agent o service) e id, una question y timeout_seconds (como mínimo 1).
  • Si vence el plazo, se aplica timeout_disposition; el valor por defecto es deny.
  • El Guardian debe verificar la identidad del aprobador frente a la política: la autenticación del aprobador es obligatoria.
  • Un solo salto: los aprobadores no pueden devolver a su vez un ask. El quórum y las aprobaciones recursivas se aplazan a v0.2.
  • Si un cliente no puede resolver ASK, el Guardian no puede enviar un ask. Recurre a defer con timeout_decision deny o a deny con el reason code approver_unavailable; un allow silencioso queda excluido.
  • Mediante intent_extension, una aprobación puede ampliar las capabilities permitidas para this_request o para toda la session. Según la especificación, es la única vía conforme para modificar a posteriori el intent fijado.

Importante desde el punto de vista regulatorio: ASK no equivale automáticamente a supervisión humana. El aprobador puede ser un agente o un servicio, y timeout_disposition puede configurarse en allow. La supervisión humana conforme al artículo 14 del Reglamento de IA de la UE (AI Act) es aplicable a los sistemas de alto riesgo a partir del 2 de diciembre de 2027 (anexo III) o del 2 de agosto de 2028 (anexo I); los agentes de IA no son de alto riesgo per se. Quien utilice ASK como componente para ello necesita, según la valoración de VamiSec, una política con approver.type human y timeout_disposition deny, así como un proceso de aprobación que evite la fatiga de decisión. En ese caso, ASK respalda la generación de evidencias, pero no cumple por sí solo el art. 14: v0.1 no contempla un botón de parada, solo el deny paso a paso.

DEFER: aplazar la decisión, pero con límites

defer_details exige un reason (insufficient_context, conflicting_policies, low_confidence o pending_dependency), un resolution_method (additional_context, human_approval o timeout) y resolution_timeout_ms. Para el vencimiento del plazo, timeout_decision solo admite deny o ask, nunca allow, y por defecto vale deny. La prosa exige el campo, pero el esquema no lo marca como obligatorio; por eso, establézcalo siempre de forma explícita. Los aplazamientos en cascada deben estar limitados por sesión. Preste atención a las unidades: ASK cuenta en segundos (timeout_seconds) y DEFER en milisegundos (resolution_timeout_ms).

06Capítulo 6

Handshake, failure posture y timeouts

Antes de que se dispare el primer hook, el Observed Agent y el Guardian negocian qué se revisa, cuánto se espera y qué ocurre en caso de fallo. Estos pocos campos determinan si su punto de control resiste cuando llega el momento crítico.

Cada sesión empieza con handshake/hello. El ClientHello va en el payload de un request envelope normal y el ServerHello vuelve como result, sin decision. La versión negociada debe coincidir con la del cliente en la versión principal (major); los campos desconocidos deben ignorarse.

MensajeCampos obligatoriosCampos opcionales relevantes para la seguridad
ClientHello (Observed Agent)acs_versions_supported, methods_implemented, transports_supported (http, https, stdio), provenance_producer (deterministic o none)profiles_supported, wrapped_protocols, max_payload_size_bytes
ServerHello (Guardian)negotiated_version, methods_evaluated, selected_transport, timeout_config (default_ms, opcionalmente per_method_ms)on_decision_failure (proceed o deny, por defecto proceed), signature_algorithms_supported, skew_window_ms (por defecto 300000), policy_requires_provenance, approver_types_supported, profiles_accepted, trace_emission, agbom_serializations_supported

Rechazos en el handshake: UNSUPPORTED_VERSION (-32001) en caso de conflicto de versiones; PROVENANCE_REQUIRED (-32002) cuando el cliente no aporta provenance, pero la política del Guardian la exige.

Failure posture: fail-open es el valor por defecto

El Observed Agent debe esperar la decisión para cada paso notificado, hasta el timeout negociado, y aplicarla. Un framework que envía hooks pero ignora el veredicto no es conforme. Si no llega ninguna decisión utilizable, la especificación habla de un decision failure: el Guardian guarda silencio, el transporte se interrumpe (conexión rechazada, error de TLS, respuesta defectuosa) o el Guardian devuelve un error en lugar de una decisión. En los tres casos se aplica on_decision_failure, cuyo valor por defecto es proceed: la acción continúa sin revisar. Un despliegue debe configurar expresamente fail-closed (deny).

La especificación reconoce abiertamente el precio: quien pueda perturbar el canal convierte el control en un mero registro. Como contrapeso rige una obligación estricta: todo paso que continúe sin decisión debe registrarse como evento de auditoría. Si, aun así, llega una decisión dentro del plazo, el agente debe cumplirla, con independencia de la posture.

Startup posture: cuando ya falla el handshake

Si el Guardian no está accesible al inicio de la sesión o responde sin ServerHello, se aplica una startup posture configurada fuera del protocolo: proceed (la sesión arranca sin protección) o refuse. También aquí proceed es el valor por defecto, para que una caída del Guardian no bloquee nuevas sesiones. Una sesión iniciada sin protección debe constar en el log de auditoría propio del despliegue. En cambio, un rechazo expreso por parte del Guardian, como SESSION_REFUSED, cuenta como decisión y no como fallo.

SituaciónMecanismo que se aplicaValor por defecto
Guardian no accesible al inicio de la sesiónStartup posture (configurada fuera del protocolo)proceed: la sesión se ejecuta sin protección, obligación de auditoría
El Guardian guarda silencio, error de transporte o respuesta de error durante la sesiónon_decision_failure del ServerHelloproceed: el paso se ejecuta sin revisar, obligación de auditoría
Vence el plazo de ASKtimeout_dispositiondeny
Vence el plazo de DEFERtimeout_decisiondeny
Objeto modifications no válidoRegla de composición de MODIFYSe trata como deny
Falla system/pingSeñal a nivel de transporte, no un evento de aplicación (enforcement)sin disposition

Timeouts: sin valor por defecto en la especificación

La especificación no fija un timeout numérico por defecto. timeout_config.default_ms es obligatorio en el ServerHello, pero su valor corresponde al despliegue; per_method_ms permite valores distintos por método. El esquema del handshake recuerda que cada milisegundo de timeout supone, en el peor de los casos, latencia para el paso, y recomienda ajustar los plazos por método a la tolerancia de latencia en lugar de a un valor global generoso. La implementación de referencia usa 5000 ms: un valor de implementación, no una exigencia. Para v0.2 está previsto un modelo de timeouts basado en la sensibilidad. Para aclarar términos: ACS_ON_DECISION_FAILURE es una variable de entorno del Guardian de referencia que establece el valor de on_decision_failure, no un campo de la especificación.

Un ping no demuestra que se apliquen las decisiones

system/ping es una mera sonda de disponibilidad (liveness probe): el Guardian debe responder siempre allow, el ping no necesita firma y no se escribe en la cadena de auditoría. Así, un Guardian puede responder a los pings y, al mismo tiempo, rechazar todos los hooks firmados. Por eso, la especificación recomienda supervisar directamente los decision failures en la ruta de los hooks.

07Capítulo 7

Arquitectura del Guardian: primero lo determinista, LLM opcional

Un Guardian Agent no es un segundo modelo de lenguaje que vigila al primero por encima del hombro. ACS establece un orden fijo: primero decide código de políticas determinista; un LLM solo puede intervenir después y sin acceso a la política.

Dos capas, orden fijo

La capa determinista evalúa primero cada hook. Decide por sí misma o delega en la capa de agente, según la especificación mediante una configuración de cadena (chain) con los modos «*», on_ask o basado en patrones. Sin embargo, v0.1 no define un formato para esa configuración. La capa de agente recibe las mismas entradas más el resultado intermedio de la capa determinista, pero nunca el código de las políticas. Su respuesta debe volver a pasar por la capa determinista en el camino de vuelta.

  1. Llega un hook

    El request envelope, el SessionContext, el intent y, si existe, la provenance se envían al motor de políticas.

  2. Evaluación determinista

    Policy as Code (en v0.1, con OPA/Rego como referencia inicial) devuelve allow, deny, modify, ask o defer, o delega.

  3. Capa LLM opcional

    Evalúa los casos que no pueden decidirse de forma determinista; trata los campos no fiables como datos y no ve código de políticas.

  4. Comprobación de retorno y respuesta

    El resultado vuelve a pasar por la capa determinista; metadata.evaluator indica deterministic, agent o composite.

  5. Registro

    Cada decisión se registra con su justificación, el identificador del modelo y, si está disponible, el nivel de confianza.

Motor de políticas: una interfaz, no un producto

ACS define la interfaz con el motor determinista, no el motor en sí. La entrada consta de request envelope, SessionContext, intent y provenance; la salida, de un decision envelope, opcionalmente con una delegación a la capa de agente (delegate_to). Además, ACS establece convenciones, entre ellas: ninguna llamada HTTP externa en las políticas canónicas. Esto favorece el determinismo y la latencia.

MotorEstado en ACSContexto
OPA / RegoReferencia inicial para v0.1Proyecto CNCF con estado Graduated (desde el 29 de enero de 2021), Apache-2.0; la implementación de referencia usa el OPA incluido en el Agent Governance Toolkit
CedarFast-follow para v0.2 (binding de Cedar)Lenguaje de políticas de AWS, Apache-2.0, CNCF Sandbox (desde el 8 de octubre de 2025); base de Policy en Amazon Bedrock AgentCore
Motor propioAdmisible si respeta la interfazPor ejemplo, lógica específica del dominio o clasificadores tras la misma interfaz

El README y la sección 2 de la especificación mencionan Cedar y Rego a la par; el estado por versión lo fija la sección 12.1.

Obligaciones de la capa LLM

  • Los datos no fiables son datos, no instrucciones; los campos correspondientes deben envolverse o entrecomillarse en el prompt.
  • Sin acceso al código de políticas de la capa determinista.
  • Registrar cada decisión con justificación, identificador del modelo y nivel de confianza (si está disponible); con evaluator agent o composite debe indicarse model_id.
  • Los plazos siguen el timeout_config negociado en el handshake.
  • Toda la capa es opcional en v0.1.0: los despliegues puramente deterministas son plenamente conformes.

Paradigmas de control sin extensión propia del protocolo

La especificación cita cuatro paradigmas como objetivos para v0.1. Un Guardian los expresa mediante los mismos campos: reason_codes, policy_references, policy_data y cited_provenance_ids. Si un despliegue combina varios paradigmas, una sola decisión puede citarlos todos.

IBAC · autorización basada en la intención

El intent de una sesión se fija antes de que entren datos no fiables; después solo se amplía mediante una aprobación auditada (intent_extension). Una desviación puede terminar en defer; policy_data indica entonces la capability solicitada y la entrada más cercana de Intent.parsed. No necesita acs-provenance.

FIDES · control del flujo de información

Enfoque de investigación con etiquetas de confidencialidad e integridad (arXiv 2505.23643, 2025). Un rechazo cita en cited_provenance_ids el linaje infractor y en policy_data la ruta del argumento afectado.

CaMeL · síntesis de programas

Enfoque de investigación que deriva el flujo de control y de datos de la petición fiable (arXiv 2503.18813, 2025). El Guardian comprueba si los argumentos proceden de un origen no fiable.

Tipo AARM · contexto acumulativo

Evalúa el historial de la sesión hasta ese momento en lugar del paso individual. Un rechazo cita el primer paso no fiable y refleja en policy_data la retrospectiva relevante.

FIDES, CaMeL y las reglas de tipo AARM necesitan datos de procedencia y, por tanto, requieren el perfil acs-provenance; IBAC puro, no. ACS no implementa ninguno de estos procedimientos: aporta los campos con los que un Guardian los aplica y los justifica. Por tanto, ACS no impide la prompt injection: crea el punto de control en el que las políticas actúan contra sus consecuencias.

Operación: latencia y disponibilidad (valoración de VamiSec)

  • Latencia: cada revisión está en la ruta crítica del agente. Mantenga la capa determinista en local y sin llamadas externas, reserve la capa LLM para unos pocos casos dudosos y mida evaluation_duration_ms por método.
  • Disponibilidad: con fail-closed, el Guardian pasa a ser crítico para la operación. Opérelo cerca del agente y de forma redundante. La propia implementación de referencia documenta el riesgo: escribe los logs de forma síncrona en la ruta de decisión, de modo que un disco lento bloquea todas las decisiones en curso.
  • Ciclo de vida de las políticas: versione las políticas y devuelva policy_version en cada decisión; la especificación lo prevé para reconstruir estados históricos de las políticas.
  • Delimitación: el Guardian no sustituye al sandbox, al IAM, a la gestión de secretos ni al firewall de egress. Las acciones que eluden toolCallRequest siguen siendo invisibles para él.

La única implementación de referencia ejecuta sin modificaciones el Agent Governance Toolkit de Microsoft tras el protocolo ACS. Es expresamente una prueba de concepto: dos de 19 hooks activos, sin firma HMAC, fail-open por defecto. Demuestra el patrón para dos clientes (Claude Code y OpenCode), pero no está pensada para la operación en producción.

08Capítulo 8

Seguridad del canal: firmas, protección contra replay y cadena de auditoría

Un Guardian Agent solo es tan fiable como el canal a través del cual decide. Por eso ACS-Core exige tres mecanismos: una firma en cada solicitud y cada respuesta, protección frente a mensajes repetidos y una cadena de auditoría encadenada mediante hashes. Este capítulo muestra qué aportan estos mecanismos y dónde se encuentra su límite.

Entre el Observed Agent y el Guardian Agent circulan decisiones que autorizan o bloquean acciones. Quien pueda manipular este canal convierte un deny en un allow o reintroduce una autorización antigua. Por ello, el OWASP Agent Control Standard (ACS) trata la seguridad del canal como parte de la línea base obligatoria ACS-Core y no como un perfil opcional.

Firma base: HMAC-SHA256 con clave de sesión

ACS-Core exige en cada solicitud y cada respuesta una firma sobre el envelope canónico. La línea base que cumple esta obligación es HMAC-SHA256. La clave se deriva por sesión mediante HKDF a partir de material de claves del despliegue (un secreto precompartido o una vinculación de canal, como un TLS exporter) junto con el session_id. La v0.1 no define ningún intercambio de claves en el protocolo. Se firma la canonicalización RFC 8785 (JCS) del envelope sin el campo signature; el receptor recalcula esta forma y rechaza cualquier firma que no coincida. TLS por sí solo no basta, de forma expresa, porque no vincula cada mensaje individual para la auditoría. Solo queda exento de la obligación de firma el método de liveness system/ping.

Hay dos detalles relevantes para la arquitectura. En el esquema JSON, signature es opcional, pero en ACS-Core es normativamente obligatoria: una mera validación contra el esquema no detecta, por tanto, la ausencia de firmas. Además, la especificación no fija para HKDF la sal, la cadena info, la función hash ni la longitud de la clave, por lo que dos implementaciones pueden derivar claves distintas. Según nuestra valoración, estos parámetros deben recogerse en el acuerdo de interfaz entre la operación de la plataforma y la del Guardian.

Protección contra replay

Cada solicitud lleva un request_id (UUID), un timestamp y, opcionalmente, un nonce. El Guardian debe rechazar las solicitudes cuya marca de tiempo quede fuera de la ventana negociada skew_window_ms (valor por defecto recomendado: 300 000 ms, es decir, cinco minutos) y rechazar los valores de request_id duplicados dentro de una sesión; los nonces duplicados debería rechazarlos. De ello se deriva un requisito operativo que se pasa por alto con facilidad: relojes sincronizados en ambos extremos.

CódigoNombreDesencadenanteReacción del Observed Agent según la especificación
-32000SESSION_REFUSEDLa política rechaza la sesión y no encaja ningún código más específico (p. ej., agent_id no admisible)No reintentar sin un cambio de política o de configuración
-32001UNSUPPORTED_VERSIONNo hay ninguna acs_version común en el handshakeRepetir el handshake con una versión compatible
-32002PROVENANCE_REQUIREDLa política exige provenance y el cliente declara provenance_producer: noneReconectarse como productor deterministic o utilizar un Guardian sin obligación de provenance
-32003CAPABILITY_NOT_NEGOTIATEDSe utiliza un método o perfil que el handshake no ha negociadoVolver a negociar el método o el perfil
-32004SIGNATURE_INVALIDLa firma obligatoria falta, es defectuosa o no se puede verificarVolver a firmar y, en su caso, resolver de nuevo el key_id
-32005REPLAY_DETECTEDrequest_id o nonce duplicado en la sesiónGenerar un nuevo request_id y un nuevo nonce
-32006TIMESTAMP_OUT_OF_WINDOWMarca de tiempo fuera de skew_window_msCorregir la deriva del reloj
-32007CHAIN_MISMATCHEl chain_hash del cliente difiere de la cabeza de la cadena del GuardianRecargar el estado de la sesión; una discrepancia persistente es un evento de integridad

Resumen propio del registro de errores de ACS (especificación v0.1.0, §17.1). system/ping no debe devolver ningún error específico de ACS.

Cadena de auditoría: cadena de hashes con cabeza publicada

El Guardian mantiene por sesión un SessionContext, una cadena append-only de ContextEntries. Cada entrada recibe un entry_hash: SHA-256 sobre la entrada canonicalizada con JCS sin los campos de hash, encadenado con el hash de la entrada anterior; la primera entrada tiene previous_hash null. En la v0.1 no se admiten otras canonicalizaciones. Lo decisivo es la publicación: para cada paso con contenido (content-bearing step), el Guardian debe incluir el chain_hash actual en su respuesta, cubierto por la firma de la respuesta. La especificación expone abiertamente el motivo: si el Guardian mantuviera privada la cabeza de la cadena, podría, por ejemplo, eliminar un deny, recalcular la cadena a partir de ese punto y presentar más tarde un historial depurado. Quien registre el tráfico detecta una cadena reescrita a posteriori.

Qué acredita la cadena y qué no

  • Los campos obligatorios de un ContextEntry son solo entry_id, step_id, step_type y entry_hash. El request_hash sobre el contenido de la solicitud solo se recomienda en ACS-Core (SHOULD) y únicamente es obligatorio en el perfil acs-audit. Sin él, la cadena acredita que un paso tuvo lugar, pero no qué se solicitó.
  • El esquema de ContextEntry no contempla ningún campo para la disposition, la justificación ni el aprobador. ACS registra normativamente las decisiones como eventos de Trace (perfil acs-trace, capítulo 9); solo una extensión de intent escribe una entrada propia con la identidad del aprobador (capítulo 11).
  • HMAC es simétrico: el Guardian posee la clave y podría volver a firmar una cabeza de cadena reescrita. El canal está protegido frente a la manipulación en la red, no frente a un Guardian comprometido.
  • El no repudio frente a terceros solo se obtiene con acs-crypto: como mínimo ML-DSA-65 (MUST), SLH-DSA-128s (SHOULD) y, de forma opcional, esquemas híbridos.
  • En la v0.1 no existe una conciliación entre varios Guardians (issue #18, aplazado).
09Capítulo 9

Trace: OpenTelemetry y OCSF en el SOC

Con el pilar Trace, las acciones de los agentes y las decisiones del Guardian llegan al stack de observabilidad y SIEM existente. Para ello, ACS no inventa un formato nuevo, sino que aporta un vocabulario para OpenTelemetry y OCSF. Para el SOC lo que cuenta es qué clases llegan, qué fiabilidad tienen y dónde presenta todavía lagunas el mapeo.

La aportación normativa de Trace es el vocabulario: nombres de span, claves de atributo, clases de eventos y la correspondencia entre dispositions y niveles de severidad. La transmisión se realiza mediante OTLP (gRPC o HTTP) hacia los backends existentes; el espacio de nombres de wire trace/* solo está reservado en v0.1.0. El objetivo declarado es que los eventos de ACS encajen en las pipelines del SIEM sin parsers especiales. Las extensiones de OTel y OCSF figuran en el repositorio con el estado «Working draft». Trace es el perfil opcional acs-trace. Quien lo declare debe emitir, para cada paso admitido, al menos uno de los dos formatos con los atributos obligatorios, registrar cada decisión con su disposition, su evaluador y, si existe, su justificación, y trasladar al evento los hechos de provenance del hook.

OpenTelemetry: un span por hook y las decisiones como span event

La jerarquía de spans es determinista: un span raíz acs.session por sesión, por debajo un acs.turn por turno y un span de step por hook. Las decisiones no son spans propios, sino un span event acs.decision en el span del step; así, el veredicto y la acción controlada comparten el mismo contexto padre. Los atributos obligatorios del evento son acs.decision y acs.evaluator (deterministic, agent o composite). Para las llamadas a herramientas, ACS utiliza los nombres de span gen_ai.tool.call y gen_ai.tool.result. Atención: en las convenciones GenAI de OpenTelemetry (en estado «Development» a octubre de 2026), gen_ai.tool.call es solo un prefijo de atributo y el nombre de span recomendado es execute_tool {gen_ai.tool.name}. Por tanto, los dashboards y las consultas alineados con estas convenciones no encajan con los spans de herramientas de ACS sin adaptarlos.

Evento de ACSClase OCSF (UID)Observación
sessionStart, sessionEnd, subagentStart, subagentStop3002 AuthenticationRepresentado como Logon o Logoff, respectivamente
userMessage, agentResponse, agentTrigger, turnStart, turnEnd6002 Application LifecycleACS denomina la clase «Application Activity»; en OCSF, ese es el nombre de la categoría 6
toolCallRequest, toolCallResult1007 Process ActivityFuente central de las acciones de los agentes
knowledgeRetrieval, memoryContextRetrieval, memoryStore, preCompact, postCompact6005 Datastore ActivityCompactación con activity_id 99; en OCSF, el genérico «Other»
Decisiones deny, modify, ask, defer2004 Detection Findingseverity_id: modify 2, ask y defer 3, deny 4; allow normalmente solo informativo (1)
agbom/snapshot, agbom/changed5001 Device Inventory InfoACS denomina la clase «Inventory Info»

Clases según el mapeo de ACS (OCSF 1.5+), nombres de clase según OCSF 1.5.0. Los agentes aparecen como actor.user.type «AI Agent»; los campos específicos de ACS, como reason_codes y las referencias a políticas, se ubican en unmapped.acs.

Casos de uso SIEM para agentes

Caso de usoFuente de datosPosible reacción
Bypass del Guardian (fail-open)Evento de auditoría obligatorio para cada paso sin decisión; inicio de sesión sin protecciónAlerta desde el primer evento en agentes de alto riesgo; comprobar la disponibilidad del Guardian
Acumulación de denyDetection Finding 2004 con severity_id 4, reason_codes, policy_idRevisión de la sesión; indicio de prompt injection o de una configuración errónea
Carga de aprobacionesFindings ask (severity_id 3) por periodo, complementados con los datos del aprobador de ask_detailsAjustar los umbrales y la capacidad de los aprobadores y prevenir la fatiga de aprobación
Deriva del inventarioagbom/changed con reason user_action o discovery (solo con acs-inspect-dynamic)Contraste con la lista de autorización; en su caso, endurecer la política
Evento de integridadCHAIN_MISMATCH o reason_code chain_mismatchInvestigarlo como evento de integridad, no descartarlo como error transitorio
Agente o personaactor.user.type «AI Agent»Baselines separadas, correlación con identidades humanas

Interpretación de VamiSec: ACS no define lógica de detección ni playbooks de respuesta. Según el issue #37, todavía falta un formato conforme para el evento de auditoría fail-open; por ello, construya las reglas sobre los mapeos JSON y pruébelas con datos reales.

Límites que debería tener en cuenta

  • Best effort: Trace nunca debe bloquear la aplicación de las decisiones. Si el receptor (sink) falla, la decisión llega igualmente al Observed Agent, por lo que la telemetría puede presentar lagunas.
  • Autodeclaración: los eventos de Trace se generan en el entorno observado y solo se convierten en evidencia mediante la atestación de una parte externa.
  • Laguna de skills: los mapeos cubren 16 de los 19 hooks nativos más los dos métodos agbom. skillRegister, skillLoad y skillUnload no tienen mapeo ni de OTel ni de OCSF.
  • Desfase documental: la ubicación de la provenance en OCSF es contradictoria (enrichments en el mapeo normativo, unmapped.acs.provenance en la guía). La página de ejemplos con consultas de Splunk y Elastic sigue utilizando el nombre antiguo ASOP y OCSF 1.0.
  • Protección de datos: los spans pueden contener prompts y argumentos de herramientas. La especificación recomienda aplicar el enmascaramiento (redaction) ya en el momento de la emisión; según nuestra valoración, esto debe figurar de forma vinculante en el plan de logging.
10Capítulo 10

Inspect: AgBOM, el inventario del agente en tiempo de ejecución

Los agentes cambian sus capacidades en tiempo de ejecución: un modelo nuevo, un servidor MCP cargado a posteriori, un skill recién registrado. La AgBOM (Agent Bill of Materials) permite consultar este estado por sesión y basar decisiones en él. No es un nuevo formato de SBOM, y tampoco sustituye a ninguno.

Según la especificación, la AgBOM es un inventario dinámico y consultable de los componentes que utiliza un Observed Agent. La justificación es precisa: cualquier política que dependa de lo que es un agente (qué modelo, qué herramientas) resulta inverificable sin inventario. Si una política del Guardian depende del inventario, por ejemplo para prohibir un modelo o una herramienta, el despliegue debe implementar el perfil acs-inspect. La AgBOM canónica es un grafo de componentes almacenado como lista plana con referencias por ID, de modo que los distintos estados puedan compararse mediante diff.

Ocho tipos de componentes

TipoQué se registra (selección de campos obligatorios)
modelNombre, versión, proveedor, endpoint y ventana de contexto; opcionalmente, una instantánea de la configuración
mcp_serverNombre, versión, endpoint y las herramientas ofrecidas
a2a_peerEndpoint y versión del protocolo
toolNombre, versión, proveedor y capability abstracta, p. ej., filesystem.delete o network.egress
knowledge_sourceNombre y tipo de fuente (vector_db, search_index, knowledge_base, web_search, other)
memory_storeNombre, scope (session, user, tenant, global) y tipo de almacenamiento
agent_capabilityNombre y descripción de un grupo de capacidades pasivo
skillNombre, descripción, así como referencia y digest de integridad del artefacto cargable

La fuente normativa es el esquema component.json. Algunas páginas de la documentación mencionan seis o siete tipos; los determinantes son ocho.

snapshot y changed: dos métodos de wire

El Observed Agent envía agbom/snapshot una vez por sesión, después de sessionStart y antes del primer hook con contenido (content-bearing); el mensaje contiene la AgBOM completa. agbom/changed notifica mutaciones (componentes añadidos, eliminados o modificados, como diff o como snapshot completo) y puede indicar una causa, por ejemplo component_upgraded, discovery o user_action. Ambos eventos se incorporan a la cadena de auditoría. El Guardian puede rechazar mediante deny una sesión con un componente prohibido o bloquear un hot swap.

Importante para la elección de perfil: quien solo declare acs-inspect entrega exactamente un snapshot por sesión y no hace seguimiento de los cambios. Los cambios en tiempo de ejecución solo se vuelven visibles con acs-inspect-dynamic. Los desencadenantes de snapshot renegotiation y policy_request remiten a mecanismos cuya especificación está prevista para la v0.2; en la v0.1, en la práctica, solo session_start es fiable. Además, cada componente debería llevar una registration_provenance (obligatoria con acs-provenance). Así se puede distinguir si un componente procede de la configuración o se añadió en tiempo de ejecución.

Serializaciones: CycloneDX, SPDX, SWID

En el wire siempre se transmite la forma canónica; el Guardian genera serializaciones bajo demanda para las herramientas de procesamiento posterior. Un despliegue acs-inspect debe ofrecer al menos una de ellas: CycloneDX 1.6, SPDX 3.0 o SWID (ISO/IEC 19770-2). Los tres mapeos tienen el estado «Working draft»; las correspondencias con CycloneDX y SPDX no son en parte válidas según el esquema. El mapeo de CycloneDX utiliza como tipo de componente nombres como ai-model o service, que CycloneDX 1.6 no contempla en esa forma; el mapeo de SPDX emplea clases y relaciones que no existen en SPDX 3.0.1. Por ello, planifique las exportaciones con validación propia. CycloneDX, por su parte, está disponible en la versión 1.7 desde octubre de 2025.

Delimitación: AgBOM, AI-SBOM y SBOM del CRA

AgBOM (ACS)

Referida al tiempo de ejecución y a cada sesión, anclada en la cadena de auditoría y apta para la toma de decisiones. Inventaría lo que el Observed Agent, según su propia declaración, utiliza en esa sesión; con acs-provenance, además, la procedencia de cada registro.

AI-SBOM / ML-BOM

Describe modelos y conjuntos de datos, por ejemplo con CycloneDX ML-BOM o con el perfil AI de SPDX 3.0. El término AI-BOM no aparece en ACS; la comparación es una clasificación nuestra.

SBOM del CRA

Obligatoria a partir del 11 de diciembre de 2027 para los fabricantes de productos con elementos digitales (anexo I, parte II, punto 1, del CRA): legible por máquina y, como mínimo, con las dependencias de primer nivel. La AgBOM puede complementar esta SBOM de tiempo de compilación con componentes de tiempo de ejecución, pero no la sustituye.

11Capítulo 11

Provenance e identidad: procedencia de los datos, límites de la identidad

Que una acción sea admisible depende a menudo de la procedencia de los datos que la desencadenan. Provenance proporciona al Guardian estos hechos de procedencia campo a campo, y Session Intent fija el propósito. La parte de identidad (Identity) de ACS, en cambio, describe hasta ahora sobre todo cuestiones abiertas.

Provenance por campo: hechos en lugar de etiquetas de confianza

Provenance responde a la pregunta de dónde procede un elemento de datos y cómo llegó hasta su ubicación. Un objeto de provenance lleva un provenance_id, un origin con uno de siete valores (user_input, system, tool_output, retrieved, agent_generated, a2a_inbound, external) y, opcionalmente, source_id (por ejemplo, el nombre de la herramienta, una URL o una ruta) y derived_from como lista de predecesores. Estos datos se asocian a los campos portadores de datos; en toolCallRequest, incluso a cada argumento individual. De este modo, una política puede actuar sobre un flujo de datos concreto en lugar de sobre toda la llamada.

  • Establecido por el framework: origin, source_id y derived_from los asigna código determinista fuera de la ruta de salida del LLM. Indicar al LLM que genere la provenance no es conforme.
  • Linaje transitivo: los datos derivados heredan la procedencia de sus entradas, también a través de resúmenes y de la compactación. Así, un resumen de salidas de herramientas ajenas sigue siendo reconocible como tal.
  • Sin campo trust: en la v0.1, un valor trust solo está reservado, no esquematizado. El Guardian deriva la confianza de origin y source_id conforme a su política; el material no fiable nunca se vuelve fiable por el procesamiento del LLM (regla de monotonía).
  • Todo o nada: con provenance_producer: deterministic, cada campo portador de datos debe llevar provenance; un relleno parcial no es conforme. Si el cliente declara provenance_producer: none aunque la política exija provenance, el Guardian rechaza la sesión ya en el handshake con PROVENANCE_REQUIRED.

Provenance no forma parte de ACS-Core, sino del perfil acs-provenance. Es un requisito previo para paradigmas de aplicación de políticas como FIDES, CaMeL y AARM, pero no para la mera autorización basada en intent (IBAC). ACS no impide la prompt injection. Crea el punto de control en el que una política puede limitar sus consecuencias, por ejemplo bloqueando un correo electrónico cuyo destinatario y contenido procedan de un resultado de recuperación (retrieval) no fiable. Las etiquetas de sensibilidad o de IFC no forman parte del estándar; corresponden al Guardian o al despliegue.

Session Intent: el propósito fijado

En ACS, Intent no es un formato de wire, sino un concepto de gobernanza: vincula las acciones a un propósito autorizado, y lo hace antes de que los datos no fiables puedan ejercer influencia. Intent.parsed, el conjunto de capabilities autorizado para la sesión, se fija en sessionStart o en el primer agentTrigger. A partir de ese momento, ni el LLM ni las salidas de herramientas ni los datos procedentes de canales no fiables pueden modificarlo; si el intent se fija en sessionStart, debe rechazarse cualquier agentTrigger posterior con un intent divergente.

La única vía conforme para ampliarlo es una intent_extension que un aprobador devuelve a través del flujo ask, con datos obligatorios sobre capabilities y scope. Con scope this_request, la extensión solo se aplica a la solicitud en curso. Con scope session, el Guardian añade las capabilities, escribe un ContextEntry del tipo intent_extension con la identidad del aprobador y mantiene la provenance de la extensión separada de la del intent original. Con scope_mode strict, no debe aceptar ninguna extensión que la política prohíba en modo estricto. Para los CISOs, según nuestra valoración, esta es la palanca contra la escalada progresiva de privilegios: cada ampliación requiere una aprobación autenticada.

Identity: normativamente escueta, mucho aún en desarrollo

Qué es normativo

ACS no prescribe ningún mecanismo de autenticación; el utilizado se declara en el handshake, y los esquemas de confianza como SPIFFE, OIDC o PKI quedan definidos por el despliegue. Son obligatorias la autenticación de los aprobadores y la separación de tres identidades: Observed Agent, Guardian y autor de las políticas.

Qué aún no es vinculante

Los documentos de trabajo del workstream de identidad mencionan cinco retos en tiempo de ejecución; cuatro están en «Pending» y uno en «Partially specified». Formulaciones como «Required by ACS» para DPoP o RAR no son vinculantes: el propio proyecto aclara que ACS no prescribe ningún mecanismo. El modelo de identificadores y la vigencia de los tokens solo son propuestas.

Delimitación frente a AIMS

El borrador del IETF AIMS (draft-klrc-aiagent-auth) aborda la emisión de identidades, la vinculación de credenciales y la autenticación del transporte. ACS se concibe como complementario: aplicación de políticas en tiempo de ejecución en lugar de emisión de identidades.

La firma de ACS-Core autentica de forma simétrica el canal entre el Observed Agent y el Guardian. No es ni una autenticación del principal ni no repudio; no debería mezclar ambas cosas en la arquitectura ni en las evidencias.

12Capítulo 12

MCP, A2A y skills: protocolos y capacidades cargables

Los agentes se comunican con las herramientas a través de MCP y con otros agentes a través de A2A, y cargan skills como componentes ejecutables. ACS v0.1 cubre estas tres superficies con distinto alcance: el wrapping de MCP está especificado, A2A solo está reservado y el ciclo de vida de los skills tiene hooks propios.

Wrapping de MCP: especificado, con una cuestión de obligatoriedad abierta

El espacio de nombres protocols/MCP/* es la vía canónica para transportar mensajes MCP hasta el Guardian, por ejemplo protocols/MCP/tools/call. El mensaje MCP permanece inalterado; ACS superpone el envelope, el contrato de decisión y las reglas de la cadena de auditoría. El flujo tiene dos etapas: el agente presenta la solicitud encapsulada al Guardian, aplica su decisión, reenvía el mensaje al servidor MCP tras un allow, según la descripción del flujo, y somete también la respuesta de este a evaluación antes de procesarla.

Un despliegue puede agrupar las llamadas a herramientas MCP (tools/call) en los hooks genéricos steps/toolCallRequest y steps/toolCallResult si bastan políticas a nivel de herramienta. El wrapping debería utilizarse cuando la política necesita distinciones específicas de MCP: negociación de capabilities en initialize, plantillas de prompts del lado del servidor (prompts/get), accesos a recursos (resources/read) y notificaciones (notifications/*). Con independencia de ello, los frameworks deben disparar toolCallRequest para cada acción que abandone el contexto de razonamiento, también para las operaciones integradas de archivos, red o shell.

MCP 2026-07-28: la prosa de la especificación va por detrás

Desde el 28 de julio de 2026, la revisión vigente de MCP es la 2026-07-28 (a octubre de 2026). Hace que el núcleo del protocolo sea sin estado, suprime el handshake initialize y declara obsoletos, entre otros, Sampling y Roots. El espacio de nombres de ACS protocols/MCP/* es neutral respecto a la versión; la revisión 2025-06-18 solo aparece en la especificación como ejemplo. Sin embargo, la prosa sigue presuponiendo la semántica anterior y menciona expresamente la negociación de initialize como punto que debe controlarse. La especificación deja abierto si esto afecta en la práctica a los wrappers; no disponemos de un análisis sólido al respecto. Según nuestra valoración, las arquitecturas con un uso intensivo de MCP deberían prever los hooks genéricos de herramientas como punto de control principal.

A2A: reservado para la v0.2

En la v0.1, el espacio de nombres protocols/A2A/* solo está reservado; la semántica normativa de wrapping está prevista para la v0.2 (fecha objetivo para la v0.2.0: marzo de 2027). Las páginas de A2A del repositorio proceden de la época AOS de 2025 y no son compatibles con el esquema. Hoy, las relaciones A2A solo se hacen visibles de forma indirecta: a través de agentTrigger con trigger_type a2a_inbound y de los componentes a2a_peer de la AgBOM. En cambio, ACS cubre los subagentes in-process con subagentStart y subagentStop; cada subagente recibe una sesión propia con su propia cadena de auditoría, que el agente padre referencia mediante el final_chain_hash sin fusionar las cadenas.

Ciclo de vida de los skills: register, load, unload

HookFinalidadOpciones del Guardian
steps/skillRegisterPuerta de control estática: el Guardian ve la definición completa del skill antes de que se ejecute cualquiera de sus acciones. La aprobación se aplica al par (skill_id, digest).allow o deny; un skill rechazado no debe llegar a ser cargable. Debería contrastar las capabilities declaradas con las herramientas compuestas y puede rechazar declaraciones demasiado amplias.
steps/skillLoadPuerta de control en tiempo de ejecución para cada activación; el load_path hace visibles las cascadas (el skill A carga B, B carga C).allow o deny; debería rechazar las cargas sin una aprobación atribuible, con un digest divergente o fuera de los composed_skills declarados.
steps/skillUnloadMantiene actualizado el inventario activo; alternativamente, puede integrarse en agbom/changed.Solo auditoría; según la especificación, la carga y descarga repetidas son una señal que merece observarse.

Resumen propio de las descripciones de los hooks en ACS v0.1.0.

El digest cubre el artefacto cargable completo, incluidos los pesos de modelo o los adaptadores empaquetados; en la AgBOM solo se persisten la referencia y el digest, no el contenido. El Guardian no debería fiarse de un digest_verified notificado por el framework, sino compararlo él mismo con su aprobación. La propuesta de diseño (design proposal) sobre el ciclo de vida de los skills del repositorio señala abiertamente el límite: el digest vincula el artefacto registrado, no el código que un skill cargue posteriormente; esa carga posterior se canaliza como network.egress o process.execute a través de los hooks de herramientas habituales. El escaneo de marketplaces antes de la publicación no forma parte de ACS, y para los tres hooks de skills todavía falta un mapeo de Trace (capítulo 9).

13Capítulo 13

Conformidad y madurez: qué aporta la v0.1 y qué no

ACS es un proyecto joven de OWASP en una fase temprana. Para las decisiones de arquitectura y de compras, lo que cuenta es, por tanto, el estado verificable: especificación v0.1.0, release 0.1.2, una implementación de referencia como prueba de concepto y la conformidad como autodeclaración.

0.1.0Versión de la especificación; release 0.1.2, tag del 21 de septiembre de 2026
2 de 19Hooks que la implementación de referencia evalúa en vivo
7Perfiles de conformidad; toda afirmación de conformidad es una autodeclaración
03/2027Fecha objetivo para la v0.2.0; para la v1.0 no hay fecha

ACS es un proyecto del OWASP GenAI Security Project y, según los propios metadatos de OWASP Nest, está clasificado en el nivel 2 (Incubator); el Project Lead califica su estado de «public preview». ACS no es un estándar ISO, IETF ni W3C, ni tampoco una norma armonizada.

Lo que ya aporta la v0.1

Pese a la fase temprana, la v0.1 aporta sustancia: un vocabulario común de 19 hooks y cinco dispositions, 44 esquemas JSON publicados, una failure posture claramente descrita con obligación de auditoría para cada bypass y una especificación que señala abiertamente sus propias lagunas. Según nuestra valoración, esto basta para medir a los proveedores con un criterio abierto y común y para diseñar los propios puntos de control de modo que sigan siendo compatibles con versiones posteriores, pero no para fiarse de etiquetas de conformidad.

La conformidad es una autodeclaración

En el handshake, el Observed Agent declara qué perfiles admite (profiles_supported) y el Guardian, cuáles acepta (profiles_accepted). Existen exactamente siete perfiles: acs-core como obligatorio, además de acs-trace, acs-inspect, acs-inspect-dynamic, acs-provenance, acs-crypto y acs-audit. No existen grados ni niveles. Quién verifica las afirmaciones de conformidad lo responde la propia especificación: en la v0.1.0, nadie. No hay suite de pruebas, ni registro de implementaciones conformes, ni ningún organismo que resuelva las afirmaciones controvertidas (issue #19, abierto, prioridad P1). Además, ACS-Core solo garantiza dos cosas: un canal autenticado y que el Observed Agent acate las decisiones del Guardian. No garantiza políticas estrictas: también un Guardian permisivo es conforme.

Implementación de referencia: el estado real, sin adornos

La única implementación de referencia es expresamente una prueba de concepto. Utiliza el Agent Governance Toolkit (AGT) de Microsoft sin modificaciones como motor de políticas detrás del wire de ACS, con integraciones de host para Claude Code y OpenCode. Declara acs-core solo con reservas («qualified») y ninguno de los seis perfiles opcionales. No existe un benchmark de interoperabilidad con AGT; es el objetivo de la ventana de 90 días abierta con el kick-off del 10 de septiembre de 2026. De ello no puede deducirse un respaldo de ACS por parte de Microsoft. Atención a la coincidencia de nombres: en la documentación de AGT, «ACS» designa la «Agent Control Specification» propia de Microsoft (2 de junio de 2026), el lenguaje de políticas de AGT, y no el estándar de OWASP.

Requisito de ACS-CoreEstado de la implementación de referencia
Handshake handshake/helloSe responde, pero el ServerHello solo contiene valores constantes; el ClientHello no se lee
Al menos seis hooks2 de 19 evaluados: steps/toolCallRequest y steps/toolCallResult
Las cinco dispositionsallow, deny y modify presentes; ask sin ask_details (no válido según el esquema); defer nunca se genera
chain_hash en las respuestasLa cadena se mantiene, pero no se publica en ninguna respuesta
Firma base HMAC-SHA256No implementada; wire no autenticado, protección solo mediante vinculación a loopback (issue #70)
Protección contra replayNo implementada
Decision Honoring, on_decision_failureImplementado en ambos hosts; valor por defecto proceed (fail-open), cada bypass se audita (issues #32, #37)
system/ping, protocols/MCP/*No implementados

Fuente: información autodeclarada de la implementación de referencia (reference-implementations/agt/README.md), estado de la rama main a 10 de septiembre de 2026. La implementación de referencia no llegó al repositorio hasta después del commit de release etiquetado 0.1.2.

Lagunas abiertas de la especificación con relevancia práctica

  • Fail-open por defecto: on_decision_failure y la startup posture están en proceed; fail-closed (deny o refuse, respectivamente) debe configurarlo usted de forma deliberada.
  • Sin mecanismo de parada: la v0.1 no incluye ningún kill switch; la interrupción (interruption) y el streaming están previstos para la v0.2. En la v0.1, un agente solo se detiene paso a paso mediante deny.
  • Alcance obligatorio en evolución: una propuesta abierta (PR #21) rebajaría modify y system/ping a SHOULD.
  • Lagunas de interoperabilidad (análisis propio): los parámetros de HKDF, la firma del handshake y la entrada para request_hash están insuficientemente especificados.
  • Desfase documental: algunas páginas siguen mencionando 16 en lugar de 19 hooks o solo tres dispositions. Lo normativo son la especificación y los esquemas.
14Capítulo 14

Implantación en la práctica y relación con la regulación

ACS no es una herramienta de cumplimiento normativo. Sin embargo, aporta componentes técnicos con los que puede respaldar la aportación de evidencias sobre las obligaciones derivadas del Reglamento de IA de la UE (AI Act), NIS2, DORA y el CRA, así como sobre los requisitos de ISO/IEC 42001. Este capítulo asigna los componentes a los requisitos y esboza una puesta en marcha en cinco pasos.

Antes de nada, tres precisiones. Primero, ACS no genera presunción de conformidad; el texto de la especificación no contiene ninguna correspondencia con el AI Act, NIS2, DORA, el CRA o ISO/IEC 42001: todas las correspondencias que figuran a continuación son interpretaciones de VamiSec. Segundo, los agentes de IA no son per se sistemas de alto riesgo. Las obligaciones para sistemas de alto riesgo del capítulo III, secciones 1 a 3, del Reglamento (UE) 2024/1689 se aplican, según el Digital Omnibus (Reglamento (UE) 2026/1744), a partir del 2 de diciembre de 2027 para el anexo III y a partir del 2 de agosto de 2028 para el anexo I; el art. 50 se aplica desde el 2 de agosto de 2026. Tercero, toda argumentación depende de los perfiles: ACS-Core por sí solo no incluye ni Trace ni AgBOM ni request_hash.

RequisitoComponente de ACS (perfil)Artefacto de evidenciaSalvedad
AI Act, art. 12: registro automático de eventosTrace por paso y eventos de decisión, cadena de auditoría (acs-trace, acs-audit)Datos en el SIEM, cadena de hashes verificableTrace es una autodeclaración; ACS-Core no incluye Trace
AI Act, art. 14, apdo. 4, letra d): invalidarask en toolCallRequest con aprobador humano y timeout_disposition deny (acs-trace)Eventos de decisión con ask_details, entradas intent_extensionSegún la especificación, el aprobador también puede ser agent o service: exclúyalo mediante política
AI Act, art. 14, apdo. 4, letra e): detenerdeny en sessionStart, turnStart, toolCallRequest; on_decision_failure deny, startup posture refuseEvidencia de configuración fail-closed, acta de un ejercicio de paradaSin kill switch en la v0.1; fail-open por defecto
AI Act, art. 26: supervisión, vigilancia, logs ≥ 6 mesesAprobadores autenticados, Guardian como monitor en tiempo de ejecución, exportación de TraceMatriz de roles de aprobadores, informe de monitorización, política de conservaciónACS no regula la conservación; la competencia sigue siendo una cuestión organizativa
AI Act, art. 72: vigilancia poscomercializaciónMétricas de Trace, AgBOM (mcp_server, a2a_peer), hooks de subagentesSección del plan de vigilancia poscomercialización «Datos de ejecución de los agentes»La plantilla de la Comisión no se espera hasta el 2 de septiembre de 2027
NIS2, art. 21, apdo. 2 / § 30 BSIGPolicy as Code (v0.1: OPA/Rego; binding de Cedar previsto para la v0.2), políticas de capabilities, AgBOM con digest de skillsCódigo de políticas aprobado, registro de componentes y proveedores por agenteEl escaneo de marketplaces no forma parte de ACS
DORA, arts. 8–10, RTS (UE) 2024/1774, art. 12AgBOM como inventario, Trace según OCSF, cabeza de cadena firmada, eventos de auditoría fail-open, timestamp y skew_window_msRegistro de activos de TIC ampliado, plan de logging, evidencia de sincronización horariaHMAC no protege frente a un Guardian comprometido
CRA, anexo I: logging, SBOMTrace como funcionalidad del producto, exportación de la AgBOM (CycloneDX 1.6, SPDX 3.0)SBOM de compilación más exportación de la AgBOM, documentación del productoSolo para productos de agentes; el anexo I se aplica a partir del 11 de diciembre de 2027; la AgBOM no sustituye a una SBOM
ISO/IEC 42001 A.6.2.6, A.6.2.8, A.7.5, A.10.3Trace y cadena de auditoría, acs-provenance, AgBOMPlan de registro de eventos, evidencias de provenance, lista de proveedores42001 no otorga presunción de conformidad con el AI Act
NIST AI RMF MANAGE 2.4, MEASURE 2.4, GOVERN 1.6deny y ask, Trace, AgBOMCriterios de desactivación, plan de monitorización, inventarioMarco voluntario

Interpretación de VamiSec basada en ACS v0.1.0; ni OWASP ni las autoridades han establecido esta correspondencia. Los bancos y las aseguradoras deberían argumentar principalmente a través de DORA, ya que la obligación de vigilancia del art. 26, apdo. 5, del AI Act se considera cumplida a través de la gobernanza financiera. Para las entidades financieras con marco simplificado de gestión del riesgo de TIC (art. 16 de DORA) se aplica el título III de las RTS en lugar del art. 12.

Puesta en marcha en cinco pasos

  1. InventarioRegistrar y clasificar los agentes

    Registre los agentes, modelos, herramientas, servidores MCP y skills, y aclare para cada caso de uso su clasificación según el AI Act. Resultado: un registro de agentes con clase de riesgo, responsables y accesos a datos.

  2. ArquitecturaDefinir puntos de control y perfiles

    Compruebe qué hooks dispara realmente su plataforma y cuáles confirma el Guardian en el handshake en methods_evaluated: todo lo demás se considera allow-by-default y queda sin protección. Elija los perfiles según sus necesidades de evidencia, por ejemplo acs-core más acs-trace y acs-audit para las obligaciones de registro.

  3. PolíticaFormular las políticas como código

    La capa determinista se ejecuta primero (referencia en v0.1: OPA/Rego). Formule reglas para comandos destructivos, egress y pagos, exija para las acciones con consecuencias relevantes ask con aprobador humano y timeout_disposition deny, y referencie las versiones de las políticas en policy_references.

  4. OperaciónDecidir y probar la failure posture

    Para los agentes con alto potencial de daño, establezca on_decision_failure deny y la startup posture refuse. Pruebe la caída del Guardian, el replay y los errores de firma, y supervise directamente los fallos de decisión, porque un ping correcto no demuestra que la aplicación de las decisiones funcione correctamente.

  5. EvidenciaConectar Trace y documentar las evidencias

    Exporte OCSF u OpenTelemetry al SIEM, implemente los casos de uso del capítulo 9 y fije plazos de conservación. Proteja la cabeza de la cadena de forma externa y verifique las afirmaciones de conformidad de los proveedores mediante pruebas propias.

El whitepaper para CISOs «Agent Control para CISOs» (en alemán), que puede solicitar más abajo en esta página, ofrece una profundización con un programa de 100 días, un modelo de roles, métricas y preguntas de evaluación para plataformas de agentes. VamiSec acompaña la evaluación, la arquitectura, el diseño de políticas y las pruebas como consultora independiente; VamiSec no forma parte del proyecto ACS.

Autoevaluación

ACS Readiness Assessment: ¿en qué punto está el control de sus agentes de IA en tiempo de ejecución?

18 preguntas en seis dimensiones, unos 10 minutos. Obtendrá su nivel de madurez, la preparación por componente de ACS y sus mayores brechas, cada una con un siguiente paso concreto.

0 / 18 preguntas respondidas

Los cuatro niveles
No existe
No hay ninguna norma interna ni implementación técnica al respecto.
Ad hoc
Algunos equipos lo resuelven por su cuenta, sin directrices ni evidencias.
Definido
Regulado de forma vinculante e implantado en los agentes más importantes.
Aplicado y medido
Impuesto técnicamente en todos los agentes relevantes y verificado con métricas.
01 / 06Inventario y AgBOM

¿Sabe qué agentes se ejecutan con qué modelos, herramientas, servidores MCP y skills, incluso cuando esto cambia en tiempo de ejecución?

  1. 01ACS Inspect · Observed Agent

    ¿Mantiene un registro completo de todos los agentes de IA en uso productivo, con su unidad responsable?

    Incluidas las funciones de agente de productos SaaS adquiridos y los agentes desarrollados por los propios departamentos.

  2. 02ACS Inspect · AgBOM (agbom/snapshot)

    ¿Conoce, para cada agente, los modelos, herramientas, servidores MCP, fuentes de conocimiento, almacenes de memoria y skills que utiliza?

    La AgBOM distingue ocho tipos de componentes: model, mcp_server, a2a_peer, tool, knowledge_source, memory_store, agent_capability y skill.

  3. 03ACS Inspect · acs-inspect-dynamic (agbom/changed)

    ¿Detecta cambios en los componentes en tiempo de ejecución, por ejemplo un servidor MCP recién conectado o un cambio de modelo?

    Un snapshot puntual no basta si los agentes cargan capacidades adicionales durante la sesión.

Whitepaper gratuito

Agent Control para CISOs: control en tiempo de ejecución con el OWASP Agent Control Standard

La guía práctica de ACS v0.1.0: qué regula el estándar, cómo implantar el Guardian, las políticas, las trazas y la AgBOM, cómo se traslada todo ello al AI Act, NIS2 y DORA, y lo que v0.1 todavía no ofrece.

Portada del whitepaper de VamiSec Agent Control para CISOs
41 páginasPDF, gratuitoAlemánActualizado: 10/2026
  • Diez afirmaciones clave y un briefing de una página para el consejo, con cinco decisiones para la dirección
  • Arquitectura de referencia para el Guardian y Policy as Code, incluido el concepto de failure posture y la integración con el SOC
  • Mapeo regulatorio del AI Act a ISO/IEC 42001 con artefactos de evidencia, y con los límites claramente señalados
  • Programa de 100 días, modelo de madurez y 20 preguntas de compra para plataformas de agentes y proveedores de Guardian
Descarga gratuita

Solicitar whitepaper

Agent Control para CISOs: OWASP Agent Control Standard (ACS) v0.1

El whitepaper para CISOs: Agent Control para CISOs

Parte I · Comprender

Resumen ejecutivo con diez afirmaciones clave y un briefing de una página para el consejo de administración, el problema de control de la IA agéntica con incidentes documentados y ACS de un vistazo: roles, pilares, perfiles, historia y gobernanza.

Parte II · Implementar

Hooks y dispositions con ejemplos de mensajes wire, arquitectura del Guardian y Policy as Code, failure posture, trazas hacia el SOC, la AgBOM como inventario en tiempo de ejecución, e identidad y provenance frente a las consecuencias de la prompt injection.

Parte III · Gobernar

OWASP Agentic Top 10 × ACS como mapa de calor, mapeo regulatorio con el AI Act, NIS2, DORA, CRA, ISO/IEC 42001 y NIST AI RMF con artefactos de evidencia, y una evaluación honesta de lo que v0.1 ofrece y lo que no.

Programa y compras

Modelo de madurez con modelo operativo, un programa de implantación de 100 días con entregables y KPI, 20 preguntas de compra para plataformas de agentes y proveedores de Guardian, y respuestas a las objeciones habituales en el consejo de administración.

Nuevo · ICSPIS 2026 (IEEE)

Probar en lugar de confiar: la evidencia que hace verificables los controles de ACS

Un Guardian decide, pero ¿demuestra su telemetría que la ejecución coincidió con la decisión? Nuestro artículo aceptado en ICSPIS 2026 deriva un Evidence Contract de MAESTRO y STRIDE; el análisis lo traslada campo a campo a los hooks, la provenance y el trace de ACS, con matriz de fallos, crosswalk de ACS y pruebas negativas para su CI.

92,9 %Recall con vinculaciones de seguridad (P3)
16,7 %Recall solo con trazado causal (P2)
50 %Recall sin eventos de decisión (F1)
  • Crosswalk de ACS: familia de ataque → predicado → hook → reacción del Guardian
  • Campos mínimos del decision receipt en policy_data
  • Research Edition (en inglés): artículo y ACS Practitioner Brief
Glosario

Glosario: términos del Agent Control Standard

Los términos más importantes de ACS v0.1.0 en definiciones breves y citables; los términos ingleses de la especificación se mantienen en su forma original.

Guardian AgentPolicy Enforcement Point
La instancia externa de políticas en ACS: evalúa los hooks del Observed Agent fuera del modelo y responde con una disposition, primero mediante código de políticas determinista y, opcionalmente, con una capa LLM adicional. No debe equipararse con el término de mercado de Gartner «guardian agents».
Observed Agent
El sistema de IA supervisado que implementa el contrato wire de ACS, envía hooks en cada punto de decisión y aplica las dispositions recibidas. Notifica, pero no decide sobre sus propias acciones.
Hooksteps/*
Un punto del ciclo de vida de un agente de IA en el que este se detiene y consulta al Guardian antes de actuar. ACS v0.1.0 define 19 hooks nativos steps/*; ACS-Core exige al menos seis de ellos.
DispositionVerdict
La respuesta del Guardian a un hook: allow, deny, modify, ask o defer. Salvo en allow, es obligatoria una justificación en el campo reasoning.
Failure Postureon_decision_failure
El comportamiento del Observed Agent cuando no llega a tiempo ninguna decisión utilizable. El valor por defecto es proceed (fail-open); deny (fail-closed) debe configurarse de forma deliberada, y cada paso sin decisión debe auditarse.
Handshakehandshake/hello
El establecimiento obligatorio de la sesión mediante handshake/hello, en el que el Observed Agent y el Guardian negocian la versión, los métodos evaluados (methods_evaluated), el timeout y la failure posture. Los métodos no evaluados se consideran permitidos sin evaluación.
ACS-Coreacs-core
El perfil base obligatorio de toda implementación de ACS. Según la especificación, garantiza dos cosas: un canal autenticado y que el Observed Agent acate las decisiones del Guardian; no garantiza políticas estrictas.
Perfil de conformidadConformance Profile
Un alcance funcional declarado en el handshake: acs-core más los perfiles opcionales acs-trace, acs-inspect, acs-inspect-dynamic, acs-provenance, acs-crypto y acs-audit. En v0.1.0 es pura autodeclaración, sin suite de pruebas ni organismo de evaluación.
AgBOMAgent Bill of Materials
El inventario dinámico de los componentes de un Observed Agent, con ocho tipos, de model a skill. Se notifica por sesión, se escribe en la cadena de auditoría y puede desencadenar decisiones del Guardian; no es ni una AI-BOM ni una SBOM del CRA.
Provenance
Información de procedencia a nivel de campo sobre los datos del payload del hook: origin, source_id y derived_from. La establece el framework de forma determinista, nunca el LLM; solo es obligatoria en el perfil acs-provenance.
Cadena de auditoríaSessionContext
La cadena append-only de ContextEntries de una sesión, enlazadas mediante hashes SHA-256. El chain_hash publicado y firmado hace detectables las modificaciones posteriores: ofrece evidencia de manipulación, pero no protege frente a un Guardian comprometido.
Policy as Code
Reglas de seguridad como código versionado y ejecutable, en lugar de como documento. En ACS es la capa determinista del Guardian, que siempre se ejecuta primero; la referencia inicial de v0.1 es OPA/Rego, y Cedar llegará con v0.2.
Human-in-the-Loop / aprobador de ASKask, Approver
Con ask, el Guardian somete una acción a un aprobador para que la autorice. Los aprobadores pueden ser una persona, un agente o un servicio, y deben estar autenticados; la supervisión humana solo se logra mediante una política con approver.type human y timeout_disposition deny.
DEFERdefer
La disposition con la que el Guardian aplaza una decisión, por ejemplo por falta de contexto o por baja confianza. Si vence el plazo, se aplica deny por defecto; los aplazamientos en cascada deben limitarse por sesión.
MODIFYmodify
La disposition con la que el Guardian permite una acción de forma modificada: mediante parameter_overrides, enmascaramientos (redactions) o un contenido sustitutivo completo. El Observed Agent debe tratar un modify contrario a las reglas como un deny.
Session IntentIntent.parsed
El conjunto de capabilities permitidas para un propósito, fijado al inicio de la sesión. No pueden modificarlo ni el LLM ni las salidas de las herramientas, y solo se amplía mediante una aprobación auditada con ask (intent_extension).
Capability
Un permiso abstracto como filesystem.delete, network.egress o process.execute. Describe el efecto de una acción con independencia de la herramienta concreta y es la unidad en la que se formulan el Session Intent y las políticas.
MCP-Wrappingprotocols/MCP/*
El espacio de nombres especificado en v0.1 en el que ACS reenvía al Guardian los mensajes MCP sin modificarlos. Como alternativa, los despliegues pueden representar las llamadas a herramientas MCP mediante los hooks genéricos de herramientas; el wrapping de A2A no está previsto hasta v0.2.
Implementación de referencia (AGT)Reference Implementation
La única prueba de concepto del repositorio de ACS: un Guardian en TypeScript que ejecuta sin modificaciones el Agent Governance Toolkit de Microsoft detrás del wire de ACS, conectado a Claude Code y OpenCode; no está lista para producción ni es plenamente conforme con ACS-Core.
Agent Control Specification (Microsoft)Microsoft ACS
Una especificación de políticas independiente de Microsoft, basada en Rego, para el Agent Governance Toolkit (2 de junio de 2026). También se abrevia «ACS», pero no forma parte del OWASP Agent Control Standard.
FAQ

Preguntas frecuentes sobre el Agent Control Standard

Respuestas breves para CISOs, arquitectos de seguridad y GRC; datos a 4 de octubre de 2026, especificación v0.1.0.

El OWASP Agent Control Standard (ACS) es una especificación de protocolo abierta para el control en tiempo de ejecución de agentes de IA. Establece cómo un agente —el Observed Agent— notifica los pasos relevantes mediante hooks a un Guardian Agent independiente y espera su decisión: allow, deny, modify, ask o defer. Tres pilares se complementan: Instrument para hooks y dispositions, Trace para eventos de auditoría según OpenTelemetry y OCSF, e Inspect para la AgBOM. ACS es un proyecto del OWASP GenAI Security Project, actualmente en la especificación v0.1.0, release 0.1.2 (etiquetada el 21 de septiembre de 2026). El código y los esquemas están bajo Apache-2.0 y la documentación bajo CC BY-SA 4.0.

No. ACS es un proyecto de OWASP en una fase temprana: según sus propios metadatos de proyecto, en el nivel 2 (Incubator), y descrito por el propio Project Lead como «public preview». No es una norma ISO, IETF o W3C ni una norma armonizada. En v0.1.0, la conformidad es una autodeclaración que nadie verifica (issue #19). Incluso el alcance obligatorio de ACS-Core sigue debatiéndose en un pull request abierto. La hoja de ruta también es provisional: v0.2.0 figura como objetivo para marzo de 2027 y v1.0 aún no tiene fecha. También el origen merece transparencia: la fundación y la dirección del proyecto están marcadamente influidas por Zenity.

Los prompts de sistema no son controles: actúan en el mismo canal en el que un atacante puede influir mediante prompt injection. Los frameworks de guardrails son implementaciones concretas, cada una con su propia interfaz. ACS, en cambio, define una interfaz abierta e independiente del framework entre el host del agente y un Guardian externo: la decisión se toma fuera del modelo, las políticas deterministas se ejecutan primero y el agente debe aplicar el resultado. Esto importa porque, según OpenAI, la prompt injection es «unlikely to ever be fully 'solved'» (22 de diciembre de 2025). ACS no impide la prompt injection: crea el punto de control estandarizado en el que las políticas actúan contra sus consecuencias.

ACS no sustituye a ninguno de los dos protocolos, sino que añade una capa de control por encima. Para MCP, v0.1 especifica el espacio de nombres protocols/MCP/*, neutral respecto a la versión: los mensajes llegan sin modificar al Guardian, que los evalúa antes de reenviarlos o procesarlos. Como alternativa, los despliegues pueden representar las llamadas a herramientas MCP mediante steps/toolCallRequest y steps/toolCallResult; el texto de la especificación es contradictorio en cuanto a si el MCP-Wrapping forma parte de ACS-Core. Además, la especificación sigue presuponiendo mecanismos anteriores a la revisión actual de MCP 2026-07-28. En v0.1, A2A solo está reservado; el wrapping llegará con v0.2. Hasta entonces, solo quedan como recurso steps/agentTrigger con a2a_inbound y el tipo de AgBOM a2a_peer.

ACS puede ayudar a aportar evidencias, pero no cumple el AI Act ni fundamenta ninguna presunción de conformidad. Para la obligación de registro del art. 12, acs-trace (eventos por paso) y acs-audit (cadena de auditoría vinculada al contenido de las solicitudes y con evidencia de manipulación) aportan elementos. Para la supervisión humana del art. 14, ask solo sirve con una política «aprobador humano, timeout deny»; v0.1 no contempla un botón de parada, solo deny paso a paso. Tenga en cuenta los plazos: según el Reglamento (UE) 2026/1744, las obligaciones de alto riesgo se aplican a partir del 2 de diciembre de 2027 (anexo III) o del 2 de agosto de 2028 (anexo I), y el art. 50 se aplica desde el 2 de agosto de 2026. Los agentes de IA no son de alto riesgo per se. La correspondencia es una interpretación de VamiSec.

Por defecto, el agente sigue funcionando. Si dentro del timeout negociado no llega ninguna decisión utilizable, se aplica on_decision_failure con el valor por defecto proceed (fail-open); también un handshake fallido inicia la sesión, por defecto, sin protección. Cada uno de estos pasos debe registrarse como evento de auditoría: la especificación reconoce abiertamente que un atacante que perturbe el canal convierte así el control en mero registro. El modo fail-closed se consigue con on_decision_failure: deny y la startup posture refuse. En cambio, las decisiones ask y defer vencidas pasan por defecto a deny. Como la posture se aplica por sesión, recomendamos Guardians o sesiones separados por clase de riesgo (valoración de VamiSec).

La especificación no fija ningún requisito en milisegundos. El timeout se negocia en el handshake (timeout_config.default_ms, opcionalmente por método); en el peor de los casos, cada uno de esos milisegundos es tiempo de espera adicional para el agente. La implementación de referencia fija 5000 ms. Ahorran latencia las políticas deterministas, que según la especificación no deberían contener llamadas HTTP externas; la capa LLM opcional cuesta, según nuestra valoración, notablemente más, y la firma con SLH-DSA-128s tarda, según la especificación, varios cientos de milisegundos. En la operación, recomendamos ejecutar el Guardian cerca del agente y de forma redundante, presupuestar los timeouts por método y supervisar la tasa de fallos de decisión como indicador: un system/ping correcto no demuestra que la aplicación de las decisiones funcione.

Existe exactamente una implementación de referencia, expresamente como prueba de concepto: un Guardian en TypeScript que ejecuta sin modificaciones el Agent Governance Toolkit de Microsoft detrás del wire de ACS, con integraciones de host para Claude Code y OpenCode. Evalúa en vivo dos de los 19 hooks (steps/toolCallRequest y steps/toolCallResult), no firma nada (issue #70), no tiene protección contra replay y funciona por defecto en fail-open (issues #32 y #37). El proyecto se ha fijado como objetivo un benchmark de interoperabilidad para principios de diciembre de 2026, pero todavía no está disponible. De ello no se deduce un respaldo de Microsoft. No tenemos constancia de despliegues en producción contrastados (datos a 4 de octubre de 2026).

No, aunque los nombres se prestan a confusión. El 2 de junio de 2026, Microsoft publicó su propia «Agent Control Specification», también abreviada como ACS: una especificación de políticas basada en Rego del Agent Governance Toolkit, con ocho interception points y decisiones como allow, warn, deny y escalate. Procede de Microsoft, no del OWASP GenAI Security Project, y no menciona el estándar de OWASP. La conexión es indirecta: la implementación de referencia de ACS utiliza el toolkit como motor de políticas; el paquete npm agent-control-specification que se usa allí es el SDK de Microsoft, no un artefacto del estándar de OWASP. En esta página, ACS se refiere siempre al OWASP Agent Control Standard.

Trate ACS como arquitectura de referencia, no como característica de un producto. Al principio se sitúan un inventario de agentes con herramientas, modelos, servidores MCP y skills, y una clasificación de riesgos, por ejemplo siguiendo la lethal trifecta. A continuación vienen las políticas para capabilities de alto impacto en steps/toolCallRequest, una decisión deliberada sobre la failure posture y los aprobadores, y la conexión de las trazas con su SIEM; el capítulo 14 describe los cinco pasos en detalle. El navegador de perfiles y la autoevaluación muestran su punto de partida, y el whitepaper incluye un programa de 100 días. Compruebe mediante pruebas las afirmaciones de los proveedores sobre perfiles de ACS en lugar de darlas por buenas. Cómo demostrar la eficacia de sus políticas del Guardian con pruebas negativas y decision receipts en la CI lo muestra nuestro análisis en profundidad «Agentic AI Security Testing» sobre el artículo de ICSPIS 2026. VamiSec le acompaña de forma independiente en la evaluación, la arquitectura, el diseño de políticas, la implantación y las pruebas.

Estándares y fuentes

Los contenidos de esta página se basan en las siguientes guías y estudios disponibles públicamente.

OWASP GenAI Security Project · 2026

Agent Control Standard (ACS): repositorio de GitHub

Fuente primaria: especificación v0.1.0, release 0.1.2, 44 esquemas JSON, implementación de referencia (PoC); código y esquemas bajo Apache-2.0, documentación bajo CC BY-SA 4.0; analizado con datos a 3 de octubre de 2026

OWASP GenAI Security Project · 2026

ACS Instrument Specification v0.1.0

Documentación publicada de la especificación: formato wire, handshake, taxonomía de 19 hooks, dispositions, failure posture, firmas y códigos de error

OWASP GenAI Security Project · 2026

ACS Conformance: ACS-Core y perfiles

Alcance obligatorio de ACS-Core, los seis perfiles opcionales y la indicación de que en v0.1.0 nadie verifica las declaraciones de conformidad

OWASP GenAI Security Project · 2026

Esquemas JSON de ACS v0.1.0 (ejemplo: defer-details.json)

Namespace de esquemas propio del proyecto desde el 5 de septiembre de 2026; base de los ejemplos de mensajes wire fieles al esquema del simulador

OWASP GenAI Security Project · 2026

Agent Control Standard (ACS): página de recursos

Listado en el área Agentic Security, con fecha del 1 de septiembre de 2026

Zenity Labs (Rock Lambros) · 2026

Control Made It Into the Name: The Agent Control Standard Lands at OWASP

Artículo de blog del Project Lead del 10 de septiembre de 2026 sobre el origen y el relanzamiento; describe ACS como «public preview»; fuente de un proveedor

Cloud Security Alliance Labs · 2026

CSA Research Note: OWASP's 2026 LLM Top 10 and New Agent Control Standard

Valoración externa del 4 de septiembre de 2026: ACS como «architecture to plan around and pilot against»

OWASP GenAI Security Project — Agentic Security Initiative · 2025

OWASP Top 10 for Agentic Applications 2026

Riesgos ASI01–ASI10, publicados en diciembre de 2025; marco de referencia de la matriz de riesgos (ACS no aparece en ellos)

OWASP GenAI Security Project — Agentic Security Initiative · 2025

Agentic AI – Threats and Mitigations (recursos de la Agentic Security Initiative)

Taxonomía de amenazas T1–T15 en la versión 1.0 de febrero de 2025; disponible a través del índice de recursos de la iniciativa

Unión Europea, Diario Oficial · 2024

Reglamento (UE) 2024/1689 (Reglamento de IA / AI Act)

Arts. 9, 12, 14, 15, 19, 26, 50 y 72 como puntos de referencia del mapeo regulatorio

Unión Europea, Diario Oficial · 2026

Reglamento (UE) 2026/1744 (Digital Omnibus on AI)

Aplaza las obligaciones de alto riesgo al 2 de diciembre de 2027 (anexo III) o al 2 de agosto de 2028 (anexo I)

National Institute of Standards and Technology · 2023

NIST AI 100-1: Artificial Intelligence Risk Management Framework (AI RMF 1.0)

Marco voluntario; MANAGE 2.4 sobre mecanismos para sustituir, desconectar o desactivar sistemas de IA

OpenTelemetry · consultado 10/2026

OpenTelemetry Semantic Conventions para IA generativa

Estado «Development»; base de comparación para los mapeos de trazas de ACS (allí, los spans de herramientas: execute_tool)

Open Cybersecurity Schema Framework (Linux Foundation) · consultado 10/2026

OCSF Schema 1.5.0: categorías y clases

Contraste de los UID y nombres de clase utilizados por ACS, entre ellos 2004 Detection Finding y 6002 Application Lifecycle

OWASP Foundation / Ecma TC54 · 2025

CycloneDX Specification Overview

Actualmente, versión 1.7; ACS serializa la AgBOM según CycloneDX 1.6

Microsoft (Responsible AI) · 2026

Introducing Agent Control Specification: Portable runtime governance for AI Agents

Delimitación: especificación independiente de Microsoft del 2 de junio de 2026, también abreviada «ACS», que no forma parte del estándar de OWASP

Microsoft Open Source Blog · 2026

Introducing the Agent Governance Toolkit (Microsoft Open Source Blog)

Anuncio del 2 de abril de 2026; el toolkit sirve sin modificaciones como motor de políticas de la implementación de referencia de ACS

OpenAI · 2025

Continuously hardening ChatGPT Atlas against prompt injection attacks

22 de diciembre de 2025: la prompt injection sería «unlikely to ever be fully 'solved'»; argumento a favor de controles en tiempo de ejecución independientes del modelo

¿Quiere implantar el control en tiempo de ejecución para sus agentes de IA?

VamiSec le acompaña de forma independiente: evaluación de su panorama de agentes, arquitectura del Guardian y diseño de políticas basado en ACS, implantación y pruebas, sin promesas de certificación y con una visión clara del grado de madurez de v0.1.