AIエージェントキャッチアップ #66 - Agent Client Protocolを開催
エディターとコーディングエージェント間の通信を標準化する「Agent Client Protocol(ACP)」についての勉強会が開催されました。
キーポイント
Agent Client Protocol(ACP)は、エディターとコーディングエージェント間の通信を標準化するプロトコルである
Language Server Protocol(LSP)のAIエージェント版として位置付けられ、互換性向上を目指す
Zedエディターが主導し、ローカル/リモート両方のエージェントに対応するJSON-RPCベースの仕様
初期実装としてClaude Code、Codex、Gemini CLIなどが対応し、Python SDKも提供されている
VS Code拡張は現時点で未提供だが、エコシステム拡大の可能性がある
影響分析・編集コメントを表示
影響分析
ACPはAIコーディング支援ツールの相互運用性を高め、開発者体験の向上とエージェントエコシステムの標準化を促進する可能性がある。既存のLSPモデルを拡張する形で、AIネイティブな開発環境の基盤整備として注目される。
編集コメント
AIコーディングツールの「プラグイン地獄」を解消する標準化動向として要注目。成功すれば開発者体験が大幅に向上する可能性がある。
ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #66 - Agent Client Protocol」という勉強会を開催しました。
generative-agents.connpass.com
www.youtube.com
Agent Client Protocol
今回は、エディターとコーディングエージェントの通信を標準化する「Agent Client Protocol(ACP)」をキャッチアップしました。
Agent Client ProtocolのGitHubリポジトリはこちらです。
公式ドキュメントはこちらです。
agentclientprotocol.org
Agent Client Protocol(ACP)とは
Agent Client Protocol(ACP)は、エディターとコーディングエージェント間の通信を標準化するプロトコルです。
Language Server Protocol(LSP)が言語サーバーの統合を標準化したのと同様に、ACPはエージェントとエディター間の通信を標準化します。
ACPを実装したエージェントは互換性のあるあらゆるエディターで動作し、ACPをサポートするエディターはACPに対応したエージェントすべてを使用できるようになります。
ACPは、AIネイティブなコードエディターであるZedが、外部のコーディングエージェントを統合するために定義したプロトコルです。
初期のリファレンス実装として、ZedとGemini CLIの統合がブログで紹介されています。
ACPはローカルとリモートの両方のエージェントに対応しています。
ローカルエージェント:エディターのサブプロセスとして実行され、標準入出力を介してJSON-RPCで通信
リモートエージェント:クラウドまたは別のインフラストラクチャで動作し、HTTPまたはWebSocketを介して通信(現在開発中)
プロトコルはJSON-RPC 2.0 Specificationを使用しており、できるだけMCPのデータ型を再利用しています。
エディターとエージェントのやりとりの流れ
エディター(クライアント)とエージェント間の基本的な通信フローは以下のとおりです。
initialize:クライアントがエージェントを初期化し、プロトコルバージョンや機能をネゴシエート
session/new:新しいセッション(チャットスレッド)を作成
session/prompt:クライアントからエージェントにユーザーのメッセージを送信
session/update:エージェントからクライアントにレスポンスを返す
エージェントがツールを使用する場合は、権限のリクエスト(session/request_permission)やファイルの読み書き(fs/read_text_file、fs/write_text_file)などのメソッドも使用されます。
ACPに対応しているエージェントやエディター(クライアント)の一部を紹介します。
エージェント(ネイティブ対応)
Claude Code (Zedアダプター経由)
Codex (Zedアダプター経由)
Gemini CLI(--experimental-acp
agentclientprotocol.com
なお、VS Code拡張は現時点では提供されていないようです。
agentclientprotocol.com
ACPのPython SDKを使って、サンプルのエージェントとクライアントを動かしてみました。
Python SDKのリポジトリはこちらです。
以下のページがQuick Startです。
agentclientprotocol.github.io
エージェント側は、ACPのPython SDKからAgentクラスをimportして継承して、on_connect・initialize・new_session・promptなどのメソッドを実装します。
: from acp import ( Agent, : class EchoAgent(Agent): _conn: Client def on_connect(self, conn: Client) -> None: : async def initialize( self, protocol_version: int, client_capabilities: ClientCapabilities | None = None, client_info: Implementation | None = None, kwargs: Any, ) -> InitializeResponse: : async def new_session( self, cwd: str, mcp_servers: list[HttpMcpServer | SseMcpServer | McpServerStdio], kwargs: Any ) -> NewSessionResponse: : async def prompt( self, prompt: list[ TextContentBlock | ImageContentBlock | AudioContentBlock | ResourceContentBlock | EmbeddedResourceContentBlock ], session_id: str, **kwargs: Any, ) -> PromptResponse: :
コード引用元:https://github.com/agentclientprotocol/python-sdk/blob/main/examples/echo_agent.py
クライアント(エディター)側は、ACPのPython SDKからClientクラスをimportして継承して、request_permission・session_updateなどのメソッドを実装します。 これらはエージェントから呼び出されたときのハンドラーのようなメソッドです。
: from acp.interfaces import Client class SimpleClient(Client): async def request_permission( self, options, session_id, tool_call, kwargs: Any ): return {"outcome": {"outcome": "cancelled"}} async def session_update(self, session_id, update, kwargs): print("update:", session_id, update)
また、クライアント側は、ユーザーの操作に応じてエージェントの起動・initialize・new_session・promptを呼び出します。
async def main() -> None: script = Path("examples/echo_agent.py") async with spawn_agent_process(SimpleClient(), sys.executable, str(script)) as (conn, _proc): await conn.initialize(protocol_version=1) session = await conn.new_session(cwd=str(script.parent), mcp_servers=[]) await conn.prompt( session_id=session.session_id, prompt=[text_block("Hello from spawn!")], )
コード引用元:https://agentclientprotocol.github.io/python-sdk/quickstart/
実際に動かしてみると、クライアントとエージェントがしっかり疎通する様子を確認できました。

以上、今回は「Agent Client Protocol」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #67 - Harbor」ということで、サンドボックス環境でエージェントを評価するためのフレームワーク「Harbor」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!
原文を表示
ジェネラティブエージェンツの大嶋です。
「AIエージェントキャッチアップ #66 - Agent Client Protocol」という勉強会を開催しました。
generative-agents.connpass.com
www.youtube.com
Agent Client Protocol
今回は、エディターとコーディングエージェントの通信を標準化する「Agent Client Protocol(ACP)」をキャッチアップしました。
Agent Client ProtocolのGitHubリポジトリはこちらです。
公式ドキュメントはこちらです。
agentclientprotocol.org
Agent Client Protocol(ACP)とは
Agent Client Protocol(ACP)は、エディターとコーディングエージェント間の通信を標準化するプロトコルです。
Language Server Protocol(LSP)が言語サーバーの統合を標準化したのと同様に、ACPはエージェントとエディター間の通信を標準化します。
ACPを実装したエージェントは互換性のあるあらゆるエディターで動作し、ACPをサポートするエディターはACPに対応したエージェントすべてを使用できるようになります。
ACPは、AIネイティブなコードエディターであるZedが、外部のコーディングエージェントを統合するために定義したプロトコルです。
初期のリファレンス実装として、ZedとGemini CLIの統合がブログで紹介されています。
ACPはローカルとリモートの両方のエージェントに対応しています。
ローカルエージェント:エディターのサブプロセスとして実行され、標準入出力を介してJSON-RPCで通信
リモートエージェント:クラウドまたは別のインフラストラクチャで動作し、HTTPまたはWebSocketを介して通信(現在開発中)
プロトコルはJSON-RPC 2.0 Specificationを使用しており、できるだけMCPのデータ型を再利用しています。
エディターとエージェントのやりとりの流れ
エディター(クライアント)とエージェント間の基本的な通信フローは以下のとおりです。
initialize:クライアントがエージェントを初期化し、プロトコルバージョンや機能をネゴシエート
session/new:新しいセッション(チャットスレッド)を作成
session/prompt:クライアントからエージェントにユーザーのメッセージを送信
session/update:エージェントからクライアントにレスポンスを返す
エージェントがツールを使用する場合は、権限のリクエスト(session/request_permission)やファイルの読み書き(fs/read_text_file、fs/write_text_file)などのメソッドも使用されます。
ACPに対応しているエージェントやエディター(クライアント)の一部を紹介します。
エージェント(ネイティブ対応)
Claude Code (Zedアダプター経由)
Codex (Zedアダプター経由)
Gemini CLI(--experimental-acp
agentclientprotocol.com
なお、VS Code拡張は現時点では提供されていないようです。
agentclientprotocol.com
ACPのPython SDKを使って、サンプルのエージェントとクライアントを動かしてみました。
Python SDKのリポジトリはこちらです。
以下のページがQuick Startです。
agentclientprotocol.github.io
エージェント側は、ACPのPython SDKからAgentクラスをimportして継承して、on_connect・initialize・new_session・promptなどのメソッドを実装します。
: from acp import ( Agent, : class EchoAgent(Agent): _conn: Client def on_connect(self, conn: Client) -> None: : async def initialize( self, protocol_version: int, client_capabilities: ClientCapabilities | None = None, client_info: Implementation | None = None, kwargs: Any, ) -> InitializeResponse: : async def new_session( self, cwd: str, mcp_servers: list[HttpMcpServer | SseMcpServer | McpServerStdio], kwargs: Any ) -> NewSessionResponse: : async def prompt( self, prompt: list[ TextContentBlock | ImageContentBlock | AudioContentBlock | ResourceContentBlock | EmbeddedResourceContentBlock ], session_id: str, **kwargs: Any, ) -> PromptResponse: :
コード引用元:https://github.com/agentclientprotocol/python-sdk/blob/main/examples/echo_agent.py
クライアント(エディター)側は、ACPのPython SDKからClientクラスをimportして継承して、request_permission・session_updateなどのメソッドを実装します。 これらはエージェントから呼び出されたときのハンドラーのようなメソッドです。
: from acp.interfaces import Client class SimpleClient(Client): async def request_permission( self, options, session_id, tool_call, kwargs: Any ): return {"outcome": {"outcome": "cancelled"}} async def session_update(self, session_id, update, kwargs): print("update:", session_id, update)
また、クライアント側は、ユーザーの操作に応じてエージェントの起動・initialize・new_session・promptを呼び出します。
async def main() -> None: script = Path("examples/echo_agent.py") async with spawn_agent_process(SimpleClient(), sys.executable, str(script)) as (conn, _proc): await conn.initialize(protocol_version=1) session = await conn.new_session(cwd=str(script.parent), mcp_servers=[]) await conn.prompt( session_id=session.session_id, prompt=[text_block("Hello from spawn!")], )
コード引用元:https://agentclientprotocol.github.io/python-sdk/quickstart/
実際に動かしてみると、クライアントとエージェントがしっかり疎通する様子を確認できました。

以上、今回は「Agent Client Protocol」をキャッチアップしました。
次回は「AIエージェントキャッチアップ #67 - Harbor」ということで、サンドボックス環境でエージェントを評価するためのフレームワーク「Harbor」がテーマです!
generative-agents.connpass.com
ご興味・お時間ある方はぜひご参加ください!
また、その次の回以降のテーマも募集しているので、気になるエージェントのOSSなどあれば教えてください!
関連記事
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み