以下の内容はhttps://blog.generative-agents.co.jp/entry/2026/02/04/170106より取得しました。


「AIエージェントキャッチアップ #66 - Agent Client Protocol」を開催しました

ジェネラティブエージェンツの大嶋です。

「AIエージェントキャッチアップ #66 - Agent Client Protocol」という勉強会を開催しました。

generative-agents.connpass.com

アーカイブ動画はこちらです。

www.youtube.com

Agent Client Protocol

今回は、エディターとコーディングエージェントの通信を標準化する「Agent Client Protocol(ACP)」をキャッチアップしました。

Agent Client ProtocolのGitHubリポジトリはこちらです。

github.com

公式ドキュメントはこちらです。

agentclientprotocol.org

今回のポイント

Agent Client Protocol(ACP)とは

Agent Client Protocol(ACP)は、エディターとコーディングエージェント間の通信を標準化するプロトコルです。

Language Server Protocol(LSP)が言語サーバーの統合を標準化したのと同様に、ACPはエージェントとエディター間の通信を標準化します。

ACPを実装したエージェントは互換性のあるあらゆるエディターで動作し、ACPをサポートするエディターはACPに対応したエージェントすべてを使用できるようになります。

ACP登場の背景

ACPは、AIネイティブなコードエディターであるZedが、外部のコーディングエージェントを統合するために定義したプロトコルです。

初期のリファレンス実装として、ZedとGemini CLIの統合がブログで紹介されています。

zed.dev

ACPの基本仕様

ACPはローカルとリモートの両方のエージェントに対応しています。

  • ローカルエージェント:エディターのサブプロセスとして実行され、標準入出力を介してJSON-RPCで通信
  • リモートエージェント:クラウドまたは別のインフラストラクチャで動作し、HTTPまたはWebSocketを介して通信(現在開発中)

プロトコルはJSON-RPC 2.0 Specificationを使用しており、できるだけMCPのデータ型を再利用しています。

エディターとエージェントのやりとりの流れ

エディター(クライアント)とエージェント間の基本的な通信フローは以下のとおりです。

  1. initialize:クライアントがエージェントを初期化し、プロトコルバージョンや機能をネゴシエート
  2. session/new:新しいセッション(チャットスレッド)を作成
  3. session/prompt:クライアントからエージェントにユーザーのメッセージを送信
  4. session/update:エージェントからクライアントにレスポンスを返す

エージェントがツールを使用する場合は、権限のリクエスト(session/request_permission)やファイルの読み書き(fs/read_text_file、fs/write_text_file)などのメソッドも使用されます。

対応状況

ACPに対応しているエージェントやエディター(クライアント)の一部を紹介します。

エージェント(ネイティブ対応)

  • Claude Code (Zedアダプター経由)
  • Cline
  • Codex (Zedアダプター経由)
  • Gemini CLI(--experimental-acpオプション)
  • OpenCode
  • OpenHands

agentclientprotocol.com

クライアント(エディター)

  • JetBrains
  • Neovim
  • Obsidian
  • Zed

なお、VS Code拡張は現時点では提供されていないようです。

agentclientprotocol.com

実際に動かしてみた

ACPのPython SDKを使って、サンプルのエージェントとクライアントを動かしてみました。

Python SDKのリポジトリはこちらです。

github.com

以下のページが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などあれば教えてください!




以上の内容はhttps://blog.generative-agents.co.jp/entry/2026/02/04/170106より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14