标准化代码编辑器(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)仍在开发中
相关概念
- a2a-protocol — Google 主导的 Agent 间委托协议
- openclaw-acp-protocol — OpenClaw 内部的 ACP 机制(不同协议,同名)
- agent-protocols — 三大 Agent 协议对比(A2A / ACP-BeeAI / ACP-AgentClient)