Agent Client Protocol · stabiles Protokoll v1

Bringen Sie Codierungsmittel in Ihr Produkt ein – oder bringen Sie es mit Ihren Agenten in den Editor.

ACP bietet einer Codierungsschnittstelle und einem Codierungsagenten eine gemeinsame Möglichkeit, ein Projekt zu öffnen, Eingabeaufforderungen auszutauschen, den Fortschritt zu streamen, um Genehmigung zu bitten, Arbeit abzubrechen und dieselbe Sitzung fortzusetzen. ADK-Rust implementiert beide Seiten dieser Beziehung.

Nachrichtenformat des offiziellen SDKKunden- und AgentenrollenDauerhafte SitzungenLive getippte UpdatesAsynchrone menschliche GenehmigungStornierungLebenszykluspersistenz

ADK-Rust ACP-Architektur

Ein Protokoll, zwei nützliche Anweisungen.

Das Programm mit der Schnittstelle ist der ACP-Client. Das Programm, das die Codierungsarbeit durchführt, ist der ACP-Agent. ADK-Rust kann auf beiden Seiten dieser Beziehung stehen.

01 · ADK-Rust ist der ACP-Client/Host

ADK-Rust verwendet einen externen Codierungsagenten

Wählen Sie diese Richtung

ADK-Koordinator

Entscheidet, dass eine Repository-Aufgabe einen Codierungsspezialisten benötigt.

Werkzeugaufruf

AcpAgentTool · AcpSession

Startet den Prozess, wählt den Arbeitsbereich aus, behält den Kontext bei und wendet die Berechtigungsrichtlinie an.

ACP v1 · stdio

Externer ACP-Agent

Prüft Code, schlägt Änderungen vor, ruft Tools auf und streamt seinen Fortschritt.

The shared ACP v1 contract

Both directions use the same message vocabulary.

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

02 · ADK-Rust ist der ACP-Agent/Server

Ein Redakteur verwendet einen ADK-Rust-Agenten

Wählen Sie diese Richtung

Editor oder ACP-Client

Besitzt die Konversations-Benutzeroberfläche und startet die ADK-Rust-Binärdatei.

ACP v1 · stdio

Offizieller SDK + Sitzungshandler

Verhandelt Funktionen, validiert Sitzungen, streamt Aktualisierungen und kümmert sich um Stornierungen.

getippter Aufruf

Runner + ADK-Agent

Verwendet Modelle, Rust-Tools, Arbeitsabläufe, Sitzungen, Speicher und Artefakte, um die Runde abzuschließen.

Sitzungsdienst

Eine ACP-Sitzung wird einer dauerhaften ADK-Rust-Sitzung zugeordnet.

Berechtigungsgrenze

Der Kunde wählt eine Option aus, die der Agent tatsächlich angeboten hat.

Getippte Updates

Text, Gedanken, Werkzeugstarts und Werkzeugabschluss-Stream als session/update.

Prozessgrenze

Stabiles ACP v1 verwendet einen lokalen Unterprozess und JSON-RPC über stdio.

ACP führt den Editor und den Codierungsagenten nicht in einer Anwendung zusammen. Es gibt ihnen einen gemeinsamen Sitzungsvertrag, während jede Seite ihre eigene Schnittstelle, Laufzeit, Tools und Sicherheitsverantwortung behält.

Beginnen Sie mit der Beziehung

Welches Problem löst ACP?

Ein Coding-Agent kann über ein Repository nachdenken und Tools verwenden, aber die Leute benötigen immer noch eine Schnittstelle, über die sie den Job beschreiben, sehen können, was der Agent tut, Fragen beantworten, sensible Aktionen genehmigen und eine Runde stoppen können. Ohne einen Standard benötigt jeder Redakteur und jeder Programmieragent eine individuelle Integration für diese Grundlagen.

ACP definiert diese fehlende Konversation. Der Kunde ist Eigentümer der Schnittstelle und der Arbeitsumgebung, die er bereitstellt. Der Agent besitzt die Codierungsintelligenz. Sie vereinbaren Sitzungen, Eingabeaufforderungen, Inhalte, Live-Updates, Tool-Aufrufe, Berechtigungsoptionen, Stornierung und Abschluss, ohne dass Implementierungscode geteilt werden muss.

ADK-Rust unterstützt beide praktischen Richtungen. Ein ADK-Agent kann Arbeit als Tool an einen externen ACP-Codierungsagenten delegieren. Mit der Serverfunktion kann ein Editor eine ADK-Rust-Binärdatei starten und deren Runner, Modelle, Tools, Sitzungen, Speicher und Workflows über denselben ACP v1-Vertrag verwenden.

Kunde / Gastgeber

Die Anwendung, mit der Menschen interagieren

Normalerweise ein Redakteur, eine Desktop-App, ein CLI- oder ADK-Rust-Koordinator. Es startet den Codierungsagenten, öffnet eine Projektsitzung, zeigt den Fortschritt an und entscheidet, wie Berechtigungsfragen den Benutzer erreichen.

ACP-Agent

Der Prozess, der Codierungsarbeiten durchführt

Es empfängt Eingabeaufforderungen und Gründe für das Repository, meldet Werkzeugaktivitäten, fragt vor sensiblen Aktionen und gibt einen Stoppgrund zurück, wenn die Runde endet.

Sitzung

Das gemeinsame Arbeitsgespräch

Eine Sitzung verfügt über eine ID, ein absolutes Arbeitsverzeichnis, optionale Arbeitsbereichsstämme, mehrere Eingabeaufforderungen, gestreamte Aktualisierungen und einen klaren Lebenszyklus zum Schließen oder Fortsetzen.

Erlaubnis

Eine Entscheidung am Tatort

Der Agent beschreibt den genauen Werkzeugaufruf und bietet Auswahlmöglichkeiten an. Der Client gibt eine dieser Auswahlmöglichkeiten zurück, sodass die Anwendung – und nicht der Agent – ​​steuert, ob die Aktion fortgesetzt wird.

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.

Richtung eins · ADK-Rust ist der Client

Lassen Sie einen ADK-Agenten die Repository-Arbeit an einen Codierungsagenten delegieren.

Der externe ACP-Prozess erscheint in ADK-Rust als benanntes Tool. Ihr Koordinator kann entscheiden, wann er es verwenden möchte, das Projektverzeichnis auswählen, den Kontext beibehalten, wenn sich die Arbeit über mehrere Runden erstreckt, den Fortschritt in Ihre Benutzeroberfläche streamen und Genehmigungsrichtlinien außerhalb des Codierungsagenten beibehalten.

AcpAgentTool

Eine Aufgabe, neuer Prozess

Am besten, wenn ein ADK-Agent gelegentlich eine eigenständige Repository-Aufgabe delegiert. Jeder Aufruf startet einen ACP-Prozess und gibt seinen Text als normale Tool-Ausgabe zurück.

AcpToolset

Mehrere Codierungsspezialisten

Benennen Sie einen Koordinator mit dem Namen Überprüfungs-, Test-, Migrations- oder Dokumentationsagent. Ihre Werkzeugbeschreibungen helfen dem Modell, jede Aufgabe dem richtigen Prozess zuzuordnen.

AcpSession

Ein fortlaufendes Gespräch

Halten Sie den Prozess und die ACP-Sitzung über Eingabeaufforderungen hinweg am Leben. Der Agent merkt sich, was er bereits überprüft hat, und ein Abbruch-Handle kann einen Abflug während des Flugs stoppen.

stream_prompt

Live-Produkt-Benutzeroberfläche

Erhalten Sie Text-, Gedanken-, Toolaufruf-, Berechtigungs-, Abschluss- und Fehlerblöcke, sobald sie auftreten, anstatt auf eine kombinierte Zeichenfolge zu warten.

orchestrator.rsEINMALIGE DELEGATION
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.rsDAUERHAFT + KÜNDIGBAR
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?;

Der Kunde kann die Arbeitsumgebung bereitstellen

Wählen Sie aus, was der Codierungsagent erreichen kann.

ACP geht nicht davon aus, dass ein Codierungsagent Ihre Festplatte lesen oder Befehle direkt ausführen kann. Der Kunde erklärt die Dienste, die er bereit ist zu erbringen, bearbeitet jede Anfrage und hält die Sicherheitsregeln in der Nähe des Produkts und des Benutzers ein.

ADK-Rust macht jetzt typisierte Datei- und Terminal-Hostschnittstellen verfügbar und übergibt vom Client bereitgestellte MCP-Server an die Sitzungserstellung. Standardmäßig ist nichts aktiviert. Ein schreibgeschütztes Dokumentationstool, ein Desktop-Editor mit nicht gespeicherten Puffern und ein isolierter Build-Worker können jeweils einen anderen, genauen Funktionssatz veröffentlichen.

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.

Warum MCP im ACP-Sitzungssetup angezeigt wird

Der Kunde kann einen Toolserver für eine Codierungssitzung leihen.

Beispielsweise kann ein Redakteur beim Öffnen der Sitzung seinen Issue-Tracker oder Repository-Suchserver MCP anhängen. Der Codierungsagent erhält diese Tools, ohne deren Anmeldeinformationen oder Konfiguration zu besitzen. ADK-Rust unterstützt den für Stable ACP v1 erforderlichen stdio-Transport, startet jeden Server mit einem begrenzten Handshake und entfernt ihn mit der Sitzung. Optionale HTTP- und SSE-Transporte werden vom Client nur akzeptiert, wenn der externe Agent sie ankündigt.

Die Genehmigung liegt beim Gastgeber

Treffen Sie die Entscheidung, wo der Benutzer und die Richtlinie leben.

Ein Codierungsagent muss möglicherweise eine Datei bearbeiten, einen Befehl ausführen, eine Abhängigkeit installieren oder generierte Ausgaben löschen. ACP sendet den vorgeschlagenen Vorgang mit einem Menü gültiger Auswahlmöglichkeiten an den Client zurück. ADK-Rust behält die sicherheitsrelevanten Details bei und lehnt Anfragen standardmäßig ab.

Für einen vertrauenswürdigen lokalen Workflow kann eine Regel bekannte Vorgänge genehmigen. Bei einem interaktiven Produkt kann PermissionPolicy::async_custom auf einen Desktop-Dialog, einen Web-Genehmigungsbildschirm oder einen Organisationsrichtliniendienst warten. ADK-Rust gibt die genaue undurchsichtige Options-ID zurück, die vom Agenten bereitgestellt wurde; es erfindet niemals einen Zustimmungswert.

01

Der Agent beschreibt den Vorgang

Die Anfrage enthält die Sitzungs-ID, die Tool-Aufruf-ID, den Titel, die Art des Tools, die Roheingabe und alle vom Agenten unterstützten Antwortoptionen.

02

Für Ihre Anwendung gelten die Richtlinien

Standardmäßig ablehnen, eine synchrone Regel verwenden oder über async_custom auf einen menschlichen Dialog oder einen Remote-Richtliniendienst warten.

03

ADK-Rust wählt eine echte Option

Zulassen- und Ablehnungsoptionen werden durch ACP abgeglichen, was bedeutet, dass dann die ursprüngliche undurchsichtige Options-ID zurückgegeben wird. Ein gefälschter Ausweis wird zum Widerruf.

04

Der Agent fährt fort oder stoppt

Der Kodierungsagent erhält die Entscheidung in derselben Sitzung und kann den Werkzeugaufruf fortsetzen, einen anderen Pfad wählen oder die Runde beenden.

permissions.rsASYNC MENSCHLICHE GENEHMIGUNG
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,
      }
  });

Das Projektverzeichnis ist ein Kontext, keine Sandbox.

ACP teilt beiden Seiten mit, welches Projekt und welche zusätzlichen Roots zur Sitzung gehören. Es wird keine Betriebssystem-Sicherheitsgrenze geschaffen. Wenn der Codierungsprozess vom Rest der Maschine isoliert werden muss, führen Sie ihn durch adk-sandbox, ein Container oder eine andere Prozessrichtlinie.

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

Richtung zwei · ADK-Rust ist der ACP-Agent

Stellen Sie eine vollständige ADK-Rust-Laufzeit einem Editor zur Verfügung.

Der Editor startet Ihre Rust-Binärdatei als ACP-Unterprozess. Der offizielle SDK verfügt über JSON-RPC-Framing, Anforderungs-IDs, typisierte Dekodierung und stdio. Der Sitzungshandler ordnet eine ACP-Sitzung einer ADK-Rust-Sitzung zu, dann streamt der Runner Modell- und Werkzeugereignisse als Live-session/update-Benachrichtigungen zurück.

Diese Richtung ist nützlich, wenn Ihr Agent über domänenspezifische Anweisungen, Rust-Tools, Workflow-Agenten, Speicher oder interne Dienste verfügt, die über eine Codierungsschnittstelle verfügbar sein sollen. Der Redakteur muss diese Interna nicht verstehen; Es sieht die Fähigkeiten und den Lebenszyklus, die die Binärdatei ehrlich veröffentlicht.

main.rsENTDECKEN SIE DEN AGENTEN
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.jsonEDITOR-PROZESS-KONFIG
{
    "name": "repository-guide",
    "command": "/absolute/path/to/repository-guide",
    "args": [],
    "env": {
      "MODEL_API_KEY": "from-the-editor-secret-store"
    }
  }
session-prompt.jsonANFRAGE
{
    "jsonrpc": "2.0",
    "id": 3,
    "method": "session/prompt",
    "params": {
      "sessionId": "session-7f2a",
      "prompt": [{
        "type": "text",
        "text": "Explain error handling in src/main.rs"
      }]
    }
  }
stdout.jsonlLIVE-UPDATE + ENDGÜLTIGE ANTWORT
{"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"
  }}

Verifizierter Umfang

Informieren Sie sich genau darüber, was bereit ist, bevor Sie die Integration entwerfen.

ADK-Rust verwendet nun für beide Rollen die offizielle agent-client-protocol-Kiste. Die Tabelle trennt die interoperable v1-Oberfläche von Funktionen, die noch implementiert werden müssen, sodass ein Editor oder Produkt nach Beginn der Integrationsarbeiten keine fehlende Funktion entdeckt.

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

Interoperabilitätstor

Getestet als Gespräch, nicht als getrennte Verbindung JSON.

Ein offizieller SDK-Client stellt über einen In-Memory-Transport eine Verbindung zum ADK-Rust SDK-Agenten her und führt Initialisieren → Neu → Eingabeaufforderung → Aktualisieren → Schließen → Liste → Fortsetzen → Schließen → Löschen aus. Abbruchtests decken sowohl die ACP-Sitzung/Abbruch als auch die JSON-RPC-Anforderungsstornierung ab und beweisen dann, dass die Sitzung nach der Bereinigung eine weitere Eingabeaufforderung akzeptieren kann. Berechtigungstests umfassen zunächst abgelehnte Menüs, undurchsichtige Ausweise, erfundene Auswahlmöglichkeiten und eine erwartete menschliche Entscheidung. Ein separates Live-Gate startet ein echtes stdio MCP-Kind und entdeckt seinen Werkzeugkatalog über dasselbe McpToolset, das von ACP-Sitzungen verwendet wird.

Erstellen Sie mit der Rolle, die Sie benötigen

Fügen Sie einen Codierungsspezialisten hinzu – oder stellen Sie Ihren ADK-Agenten dort zur Verfügung, wo Entwickler bereits arbeiten.

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.