Agent Control Protocol (ACP)

Control de admisión para acciones de agentes.

ACP es la capa de gobernanza entre la intención del agente y la mutación del estado del sistema — el estándar abierto que responde quién autorizó al agente, qué política permitió la acción y cómo verificarlo independientemente.

Qué es ACP

Agent Control Protocol (ACP) proporciona gobernanza verificable para agentes autónomos. Define quién autorizó a un agente, qué ejecutó y quién es responsable del resultado a través de sistemas e instituciones.

ACP permite:

Por qué existe ACP

Los agentes autónomos interactúan cada vez más con sistemas reales como APIs, infraestructura empresarial, sistemas financieros y otros agentes. Cuando los agentes operan entre organizaciones, surgen varias preguntas críticas de gobernanza:

Autorización

¿Quién autorizó al agente para actuar en su nombre?

Capacidades

¿Qué capacidades posee realmente el agente?

Política

¿Qué política permitió definitivamente la acción específica?

Verificación

¿Puede la ejecución ser verificada independientemente más tarde por terceros?

La mayoría de los sistemas actuales no pueden responder a estas preguntas de manera confiable. ACP introduce la infraestructura para responderlas definitivamente.

Cómo funciona ACP

ACP trata las interacciones de los agentes como operaciones gobernables. Cada interacción debe pasar con éxito a través de una secuencia estricta para garantizar que sea rastreable, auditable y atribuible.

El Invariante Constitucional

Execute(request) ⇒ ValidIdentity ∧ ValidCapability ∧ ValidDelegationChain ∧ AcceptableRisk

Ninguna acción se ejecuta a menos que se cumplan todas las condiciones.

Para aprender más sobre cómo ACP estructura estas interacciones, explora la Arquitectura de ACP o lee sobre nuestro Modelo de Gobernanza.

Ejemplo de Solicitud ACP

Toda acción gobernable comienza con una solicitud codificada que lleva todas las pruebas criptográficas necesarias.

{
  "agent_id": "did:acp:agent-123",
  "capability": "payments.transfer",
  "delegation_chain": [
    "org-root",
    "finance-department"
  ],
  "risk_score": 0.18,
  "timestamp": "2026-03-12T14:32:10Z",
  "signature": "0xabc123..."
}

En esta solicitud de ejecución, el agente presenta un agent_id globalmente único y solicita ejecutar la capacidad payments.transfer. Trae una cadena de delegación delegation_chain que se remonta a una raíz institucional autorizada, un puntaje de riesgo evaluado risk_score, y una firma criptográfica signature que vincula la solicitud a su raíz.

Implementación de Referencia

ACP incluye una implementación de referencia en Go de calidad de producción — no pseudocódigo. 23 paquetes, 5 niveles de conformidad, 138 vectores de prueba y el runner de conformidad ACR-1.0: validá cualquier implementación contra el contrato de ejecución completo de ACP-RISK-3.0, con criptografía real y cadenas de hash reales.

23
Paquetes Go
L1 → L4
138
Vectores de prueba
individuales
5
Escenarios de secuencia
runner ACR-1.0
38
Documentos de
especificación

Performance

ACP es compute-cheap but state-sensitive: la evaluación de decisiones incurre en overhead mínimo, mientras que el throughput está acotado por el state backend — no por la lógica del protocolo.

~820 ns
por decisión de admisión
Intel i7-8665U · Go 1.22
~88 ns
ruta cooldown
9.5× más rápido vía short-circuit Step 2
~920k
req/s a concurrencia base
acotado por state backend
<1 μs
todas las rutas de decisión
sub-microsegundo por diseño

La abstracción LedgerQuerier formaliza este límite — reemplazá el state backend (memoria → Redis → Postgres) sin tocar la semántica del protocolo.

Flujo de Verificación

ACP aplica el invariante de gobernanza a través de la ejecución verificable en tiempo de ejecución. El siguiente código demuestra las comprobaciones del invariante antes de conceder cualquier acceso a herramientas.

def handle_acp_request(request):
    # Enforce the Constitutional Invariant
    if not compute_signature(request) == request.signature:
        raise AuthenticationError("InvalidIdentity")
        
    if not capability_registry.has_permission(request.agent_id, request.capability):
        raise AuthorizationError("InvalidCapability")
        
    if not verify_chain(request.delegation_chain, "org-root"):
        raise DelegationError("InvalidDelegationChain")
        
    if request.risk_score > policy.max_acceptable_risk("payments.transfer"):
        raise PolicyViolationError("UnacceptableRisk")
        
    # All governance checks passed. Deterministic execution proceeds.
    return execute_capability(request)