Protocolo de cliente agente · protocolo estable v1

Incorpore agentes codificadores a su producto o incorpore su agente en el editor.

ACP ofrece a una interfaz de codificación y a un agente de codificación una forma compartida de abrir un proyecto, intercambiar indicaciones, transmitir el progreso, solicitar aprobación, cancelar trabajo y continuar la misma sesión. ADK-Rust implementa ambos lados de esa relación.

Formato de mensajes del SDK oficialRoles de cliente + agenteSesiones persistentesActualizaciones escritas en vivoAprobación humana asíncronaCancelaciónPersistencia del ciclo de vida

Arquitectura ADK-Rust ACP

Un protocolo, dos direcciones útiles.

El programa con la interfaz es el cliente ACP. El programa que realiza el trabajo de codificación es el agente ACP. ADK-Rust puede sentarse en cualquier lado de esa relación.

01 · ADK-Rust es el cliente/host ACP

ADK-Rust utiliza un agente de codificación externo

elige esta dirección

coordinador ADK

Decide que una tarea de repositorio necesita un especialista en codificación.

llamada de herramienta

AcpAgentTool · AcpSession

Inicia el proceso, elige el espacio de trabajo, mantiene el contexto y aplica la política de permisos.

ACP v1 · stdio

Agente externo ACP

Inspecciona el código, propone ediciones, invoca herramientas y transmite su progreso.

The shared ACP v1 contract

Both directions use the same message vocabulary.

initializesession/newsession/promptsession/updaterequest_permissioncancelclose · list · resume · delete

02 · ADK-Rust es el agente/servidor ACP

Un editor utiliza un agente ADK-Rust

elige esta dirección

Editor o cliente ACP

Posee la interfaz de usuario de la conversación e inicia el binario ADK-Rust.

ACP v1 · stdio

Controlador de sesión oficial SDK +

Negocia capacidades, valida sesiones, transmite actualizaciones y maneja cancelaciones.

invocación escrita

Runner + agente ADK

Utiliza modelos, herramientas Rust, flujos de trabajo, sesiones, memoria y artefactos para completar el turno.

Servicio de sesión

Una sesión ACP se asigna a una sesión ADK-Rust persistente.

Límite de permiso

El cliente selecciona una opción que el agente realmente ofreció.

Actualizaciones escritas

Flujo de texto, pensamientos, inicios de herramientas y finalización de herramientas como session/update.

Límite del proceso

El ACP v1 estable utiliza un subproceso local y JSON-RPC sobre stdio.

ACP no fusiona el editor y el agente de codificación en una sola aplicación. Les otorga un contrato de sesión compartida mientras cada parte mantiene su propia interfaz, tiempo de ejecución, herramientas y responsabilidades de seguridad.

Empezar con la relación

¿Qué problema resuelve ACP?

Un agente de codificación puede razonar sobre un repositorio y utilizar herramientas, pero las personas aún necesitan una interfaz donde puedan describir el trabajo, ver lo que está haciendo el agente, responder preguntas, aprobar acciones sensibles y detener un turno. Sin un estándar, cada editor y cada agente de codificación necesita una integración personalizada para esos conceptos básicos.

ACP define esa conversación perdida. El cliente es dueño de la interfaz y del entorno de trabajo que elige proporcionar. El agente posee la inteligencia de codificación. Acuerdan sesiones, indicaciones, contenido, actualizaciones en vivo, llamadas de herramientas, opciones de permisos, cancelación y finalización sin necesidad de compartir el código de implementación.

ADK-Rust apoya ambas direcciones prácticas. Un agente ADK puede delegar el trabajo a un agente de codificación ACP externo como herramienta. Con la función de servidor, un editor puede iniciar un binario ADK-Rust y usar su Runner, modelos, herramientas, sesiones, memoria y flujos de trabajo a través del mismo contrato ACP v1.

Cliente/anfitrión

La aplicación con la que interactúan las personas.

Generalmente un editor, una aplicación de escritorio, un coordinador CLI o ADK-Rust. Inicia el agente de codificación, abre una sesión de proyecto, muestra el progreso y decide cómo llegan las preguntas de permiso al usuario.

Agente ACP

El proceso que realiza el trabajo de codificación.

Recibe indicaciones, razones sobre el repositorio, informa la actividad de la herramienta, pregunta antes de acciones sensibles y devuelve un motivo de detención cuando finaliza el turno.

Sesión

La conversación de trabajo compartida

Una sesión tiene un ID, un directorio de trabajo absoluto, raíces de espacio de trabajo opcionales, varias indicaciones, actualizaciones transmitidas y un ciclo de vida claro de cierre o reanudación.

Permiso

Una decisión en el punto de acción.

El agente describe la llamada de herramienta exacta y ofrece opciones. El cliente devuelve una de esas opciones, por lo que la aplicación (no el agente) controla si la acción continúa.

One ACP turn

The interface stays responsive while the agent works.

Read from top to bottom. Initialization establishes the contract once. A session then carries several prompts, live updates, approval questions, cancellation, and a final stop reason.

Client / host

Editor or ADK-Rust

ACP agent

Coding process or ADK-Rust

initialize

protocolVersion: 1

capabilities

What this agent really supports

session/new

Absolute cwd + workspace roots

session/prompt

Typed content blocks

session/update

Text · thought · tool call

session/request_permission

Choose from offered options

permission response

Allow once · always · reject

PromptResponse

end_turn · cancelled

Cancellation is part of the conversation. ADK-Rust forwards session/cancel into the Runner cancellation token and returns a typed cancelled stop reason.

Dirección uno · ADK-Rust es el cliente

Deje que un agente de ADK delegue el trabajo del repositorio a un agente de codificación.

El proceso externo ACP aparece dentro de ADK-Rust como una herramienta con nombre. Su coordinador puede decidir cuándo usarlo, elegir el directorio del proyecto, preservar el contexto cuando el trabajo abarca varios turnos, transmitir el progreso a su interfaz y mantener la política de aprobación fuera del agente de codificación.

AcpAgentTool

Una tarea, nuevo proceso

Es mejor cuando un agente de ADK delega ocasionalmente una tarea de repositorio independiente. Cada llamada inicia un proceso ACP y devuelve su texto como salida de herramienta normal.

AcpToolset

Varios especialistas en codificación.

Asigne un coordinador nombrado agentes de revisión, prueba, migración o documentación. Las descripciones de sus herramientas ayudan al modelo a encaminar cada tarea hacia el proceso correcto.

AcpSession

Una conversación continua

Mantenga activo el proceso y la sesión ACP en todas las indicaciones. El agente recuerda lo que ya inspeccionó y una palanca de cancelación puede detener un giro en vuelo.

stream_prompt

UI del producto en vivo

Reciba fragmentos de texto, pensamientos, llamadas de herramientas, permisos, finalización y errores a medida que ocurren en lugar de esperar una cadena combinada.

orchestrator.rsDELEGACIÓN ÚNICA
use adk_acp::{AcpAgentTool, PermissionPolicy};

  let coder = AcpAgentTool::new("my-coding-agent --acp")
      .name("repository_coder")
      .description("Inspect and improve this Rust project")
      .working_dir("/absolute/path/to/project")
      .permission_policy(PermissionPolicy::DenyAll);

  let coordinator = LlmAgentBuilder::new("coordinator")
      .model(model)
      .tool(Arc::new(coder))
      .build()?;
session.rsPERSISTENTE + CANCELABLE
let mut session = AcpSession::start(
      AcpAgentConfig::new("my-coding-agent --acp")
          .working_dir("/absolute/path/to/project"),
      Arc::new(permission_policy),
  ).await?;

  let cancel = session.cancellation_handle()?;
  tokio::spawn(async move {
      shutdown.cancelled().await;
      cancel.cancel().await
  });

  let result = session
      .prompt("Trace the failing test and propose a fix")
      .await?;

El cliente puede proporcionar el ambiente de trabajo.

Elija lo que el agente codificador puede alcanzar.

ACP no asume que un agente de codificación pueda leer su disco o ejecutar comandos directamente. El cliente declara los servicios que está dispuesto a prestar, gestiona cada solicitud y mantiene las normas de seguridad cerca del producto y del usuario.

ADK-Rust ahora expone el archivo escrito y las interfaces del host del terminal y pasa los servidores MCP proporcionados por el cliente a la creación de sesiones. No hay nada habilitado de forma predeterminada. Una herramienta de documentación de solo lectura, un editor de escritorio con buffers no guardados y un trabajador de compilación aislado pueden publicar un conjunto de capacidades diferente y preciso.

AcpFileSystem

Files from the real workspace

Your editor or application decides how reads and writes work. It can return an unsaved buffer, enforce approved roots, reject a symlink escape, or make the session read-only.

AcpTerminal

Managed command execution

The coding agent can start a command, collect output, wait, stop it, and release it through the client. Terminal support stays disabled until the host implements the complete lifecycle.

MCP over stdio

Tools supplied for this session

Attach an MCP server when the ACP session opens. ADK-Rust starts it inside the selected project, exposes its tools only to that session, and cancels it when the session closes.

Por qué aparece MCP en la configuración de sesión de ACP

El cliente puede prestar un servidor de herramientas para una sesión de codificación.

Por ejemplo, un editor puede adjuntar su rastreador de problemas o su servidor MCP de búsqueda de repositorio cuando abre la sesión. El agente codificador recibe esas herramientas sin poseer sus credenciales o configuración. ADK-Rust admite el transporte stdio requerido por ACP v1 estable, inicia cada servidor con un protocolo de enlace limitado y lo elimina con la sesión. El cliente acepta los transportes opcionales HTTP y SSE solo cuando el agente externo los anuncia.

La aprobación pertenece al anfitrión.

Tome la decisión sobre dónde viven el usuario y la política.

Es posible que un agente de codificación necesite editar un archivo, ejecutar un comando, instalar una dependencia o eliminar la salida generada. ACP envía esa operación propuesta al cliente con un menú de opciones válidas. ADK-Rust conserva los detalles relevantes para la seguridad y rechaza las solicitudes de forma predeterminada.

Para un flujo de trabajo local confiable, una regla puede aprobar operaciones conocidas. Para un producto interactivo, PermissionPolicy::async_custom puede esperar a que aparezca un cuadro de diálogo en el escritorio, una pantalla de aprobación web o un servicio de políticas de la organización. ADK-Rust devuelve el ID de opción opaca exacto proporcionado por el agente; nunca inventa un valor de aprobación.

01

El agente describe la operación.

La solicitud incluye el ID de sesión, el ID de llamada de herramienta, el título, el tipo de herramienta, la entrada sin procesar y todas las opciones de respuesta que admite el agente.

02

Su aplicación aplica la política

Deniegue de forma predeterminada, utilice una regla sincrónica o espere un diálogo humano o un servicio de políticas remoto a través de async_custom.

03

ADK-Rust selecciona una opción real

Las opciones de permitir y rechazar coinciden con el significado de ACP, luego se devuelve el ID de la opción opaca original. Una identificación fabricada se convierte en una cancelación.

04

El agente continúa o se detiene.

El agente codificador recibe la decisión en la misma sesión y puede continuar la llamada a la herramienta, elegir otro camino o finalizar el turno.

permissions.rsAPROBACIÓN HUMANA ASÍNCRICA
let policy = PermissionPolicy::async_custom(|request| async move {
      let choice = approval_ui.ask(ApprovalPrompt {
          title: request.title,
          kind: request.kind,
          input: request.raw_input,
          options: request.options,
      }).await;

      match choice {
          Approval::Once => PermissionDecision::AllowOnce,
          Approval::Always => PermissionDecision::AllowAlways,
          Approval::Reject => PermissionDecision::Deny,
      }
  });

El directorio del proyecto es contexto, no un entorno limitado.

ACP les dice a ambas partes qué proyecto y raíces adicionales pertenecen a la sesión. No crea un límite de seguridad del sistema operativo. Si el proceso de codificación debe aislarse del resto de la máquina, ejecútelo adk-sandbox, un contenedor u otra política de proceso.

Keep credentials in the process environment or the client's secret store. Protocol stdout must contain only ACP JSON-RPC messages.

Dirección dos · ADK-Rust es el agente ACP

Exponga un tiempo de ejecución completo de ADK-Rust a un editor.

El editor inicia su binario Rust como un subproceso ACP. El SDK oficial posee el marco JSON-RPC, ID de solicitud, decodificación escrita y stdio. El controlador de sesión asigna una sesión ACP a una sesión ADK-Rust, luego Runner transmite eventos de modelo y herramienta como notificaciones session/update en vivo.

Esta dirección es útil cuando su agente tiene instrucciones específicas de dominio, herramientas Rust, agentes de flujo de trabajo, memoria o servicios internos que deberían estar disponibles desde una interfaz de codificación. El editor no necesita comprender esos aspectos internos; ve las capacidades y el ciclo de vida que el binario publica honestamente.

main.rsEXPONER AL AGENTE
use adk_acp::server::{
      AcpServer, AcpServerConfigBuilder
  };

  let config = AcpServerConfigBuilder::new()
      .agent(Arc::new(repository_agent))
      .session_service(Arc::new(session_service))
      .agent_name("repository-guide")
      .agent_description("Explains and improves this workspace")
      .max_sessions(16)
      .build()?;

  let server = AcpServer::run(config).await?;
  server.wait().await?;
acp-agent.jsonCONFIGURACIÓN DEL PROCESO DEL EDITOR
{
    "name": "repository-guide",
    "command": "/absolute/path/to/repository-guide",
    "args": [],
    "env": {
      "MODEL_API_KEY": "from-the-editor-secret-store"
    }
  }
session-prompt.jsonSOLICITUD
{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "session/prompt",
    "params": {
      "sessionId": "session-7f2a",
      "prompt": [{
        "type": "text",
        "text": "Explain error handling in src/main.rs"
      }]
    }
  }
stdout.jsonlACTUALIZACIÓN EN VIVO + RESPUESTA FINAL
{"jsonrpc":"2.0","method":"session/update","params":{
    "sessionId":"session-7f2a",
    "update":{"sessionUpdate":"agent_message_chunk","content":{
      "type":"text","text":"The entry point uses..."
    }}
  }}
  {"jsonrpc":"2.0","id":3,"result":{
    "stopReason":"end_turn"
  }}

Alcance verificado

Sepa exactamente qué está listo antes de diseñar la integración.

ADK-Rust ahora usa la caja oficial agent-client-protocol para ambos roles. La tabla separa la superficie interoperable v1 de las funciones que aún necesitan implementación, para que un editor o producto no descubra una capacidad faltante una vez iniciado el trabajo de integración.

Protocol and transport

ACP protocol v1 · official Rust SDK 1.2 · JSON-RPC over local stdio

Implemented

ADK-Rust as client

Initialize, new session, prompt, live updates, tool permissions, one-shot, persistent, streaming

Implemented

Client cancellation

Cloneable handle sends session/cancel while another task awaits the prompt

Implemented

ADK-Rust as agent

Initialize, new, prompt, update, cancel, close, list, resume, delete

Implemented

Prompt content

Text and resource links; unsupported media types are rejected and not advertised

Implemented scope

Client filesystem / terminal callbacks

Opt-in host traits advertise only the file and terminal operations the application implements

Implemented API

Client-supplied MCP servers

Typed session configuration, required stdio server support, per-session ADK toolsets, bounded startup and cleanup

Implemented · stdio

ADK tool approval → ACP

The runtime can await an exact-call decision; the server bridge is held back because the official SDK currently loses the outer prompt response in the nested-request test

SDK limitation

Remote transport

HTTP or WebSocket ACP between machines

Protocol work is evolving; stdio only

Puerta de interoperabilidad

Probado como una conversación, no como JSON desconectado.

Un cliente SDK oficial se conecta al agente ADK-Rust SDK a través de un transporte en memoria y completa inicializar → nuevo → mensaje → actualizar → cerrar → lista → reanudar → cerrar → eliminar. Las pruebas de cancelación cubren la cancelación/sesión de ACP y la cancelación de solicitud de JSON-RPC, luego demuestran que la sesión puede aceptar otro mensaje después de la limpieza. Las pruebas de permiso cubren menús de rechazo primero, identificaciones opacas, selecciones fabricadas y una decisión humana esperada. Una puerta en vivo separada inicia un niño stdio MCP real y descubre su catálogo de herramientas a través del mismo McpToolset utilizado por las sesiones de ACP.

Construye con el rol que necesitas

Agregue un especialista en codificación o haga que su agente ADK esté disponible donde los desarrolladores ya trabajan.

Start with stdio, one absolute workspace, and DenyAll. Add a custom approval experience, persistent sessions, and stronger process isolation as the product's trust boundary becomes clear.