标准化代码编辑器(Client)与 AI 编程 Agent 之间通信的开放协议。由 Zed Industries 主导,JetBrains 参与,类比 LSP(Language Server Protocol)之于语言服务器的关系。

官网:https://agentclientprotocol.com

核心定位

AI 编程 Agent 和编辑器目前是紧耦合的——每个编辑器需要为每个 Agent 单独集成,每个 Agent 也需要为每个编辑器单独适配。ACP 通过标准化协议解耦两者:

  • 实现 ACP 的 Agent 可以在任何兼容编辑器中运行
  • 支持 ACP 的编辑器 可以接入整个 ACP Agent 生态

技术基础

  • 传输层:JSON-RPC 2.0
  • 本地模式:Agent 作为编辑器子进程,通过 stdin/stdout 通信
  • 远程模式:HTTP / WebSocket(开发中)
  • 消息类型:Methods(请求-响应)和 Notifications(单向,无响应)
  • 内容格式:Markdown,复用 MCP 的数据类型

三阶段标准流程

初始化(Initialization)→ 会话设置(Session Setup)→ 提示轮次(Prompt Turn)

阶段一:初始化

Client 和 Agent 协商协议版本与能力,完成认证。

// Client → Agent
{
  "method": "initialize",
  "params": {
    "protocolVersion": 1,
    "clientCapabilities": {
      "fs": { "readTextFile": true, "writeTextFile": true },
      "terminal": true
    },
    "clientInfo": { "name": "zed", "version": "0.1.0" }
  }
}
 
// Agent 响应
{
  "result": {
    "protocolVersion": 1,
    "agentCapabilities": {
      "loadSession": true,
      "promptCapabilities": { "image": true, "embeddedContext": true },
      "mcpCapabilities": { "http": true }
    }
  }
}

能力协商原则:双方只能调用对方在 initialize 中声明支持的方法。未声明的能力视为不支持。

阶段二:会话设置

方法说明是否必须
session/new创建新会话,返回 sessionId✅
session/load恢复已有会话(需声明 loadSession)可选
session/list列出所有会话(需声明 listSessions)可选
session/close关闭会话,释放资源(通知,无响应)可选

阶段三:提示轮次

一次完整的用户请求 → Agent 响应循环。

Client → Agent: session/prompt(用户消息 + 资源)

loop 直到完成:
    Agent → Client: session/update(plan / chunk / tool_call)
    opt 需要工具权限:
        Agent → Client: session/request_permission
        Client → Agent: 授权结果
    Agent → Client: 工具状态更新(in_progress → completed)
    opt 用户取消:
        Client → Agent: session/cancel(通知)

Agent → Client: session/prompt 响应(stopReason)

停止原因(StopReason):end_turn / max_tokens / max_turn_requests / refusal / cancelled

注意:session/cancel 是通知,无直接响应。取消确认通过最终的 session/prompt 响应(stopReason: cancelled)返回。

核心方法速查

Agent 实现(接收 Client 调用)

方法必须说明
initialize✅协商版本和能力
authenticate可选认证
session/new✅创建会话
session/prompt✅处理用户消息
session/load可选恢复会话
session/set_mode可选切换操作模式

Client 实现(接收 Agent 调用)

方法/通知必须说明
session/update✅接收流式更新(通知)
session/request_permission可选接收工具授权请求
fs/read_text_file可选提供文件读取
fs/write_text_file可选提供文件写入
terminal/*可选提供终端操作

Client 发给 Agent 的通知

通知说明
session/cancel取消当前轮次

session/update 内容类型

Agent 通过 session/update 推送所有中间状态:

  • agent_message_chunk — 流式文本输出
  • plan — Agent 执行计划(任务列表,含优先级和状态)
  • tool_call — 工具调用声明(pending)
  • tool_call_update — 工具执行进度(in_progress → completed)
  • 模式切换通知、可用命令更新等

与 MCP 的关系

ACP 和 MCP 互补,不竞争:

  • 编辑器通常已配置 MCP 服务器
  • 用户发送 prompt 时,编辑器把 MCP 配置一并传给 Agent
  • Agent 直接连接 MCP 服务器获取工具能力
  • ACP 负责编辑器 ↔ Agent,MCP 负责 Agent ↔ 工具

可扩展性

  • 通过 _meta 字段添加自定义数据
  • 自定义方法以下划线前缀命名(如 _myMethod)
  • 初始化时声明自定义能力

现状

  • 由 Zed Industries 主导,JetBrains 参与
  • 已有 TypeScript、Python、Java、Kotlin、Rust SDK
  • ACP Registry 已稳定,可发现和安装兼容 Agent
  • 远程 Agent 支持(HTTP/WebSocket)仍在开发中

相关概念