













——AI 编码时代的新“统一接口”问题
近两年,AI 编码助手爆发式增长:GitHub Copilot、Claude Code、Gemini CLI、OpenHands、Qwen Code、Kimi CLI、OpenCode……但开发体验却愈发割裂:
这和 LSP 出现之前的“语言服务碎片化” 极其相似:
在 LSP 之前,各 IDE 需要分别为每种语言写语法高亮、补全、跳转的实现。LSP 把“语言服务”抽象出来统一标准,极大降低了集成成本。
在 AI 编码时代,我们遇到的是类似但更复杂的问题:
如何让“任意编辑器”可以连接“任意 AI 编码代理”,而不是被某一家厂商的“编辑器+AI”捆绑?
Agent Client Protocol(ACP)正是为此而生。
Agent Client Protocol(ACP) 是一个基于 JSON-RPC 2.0 的开放协议,用来标准化:
之间的通信方式与语义。
一句话概括它的目标:
让 任何编辑器 都可以无缝连接 任何 AI 编码代理,就像 LSP 统一语言服务那样,统一 AI 编码体验。[1][2]
当前“ACP”有两条主线,需要明确区分:
| 名称 | 全称 | 核心对象 | 典型场景 |
|---|---|---|---|
| Agent Client Protocol | Agent Client Protocol(Zed) | 编辑器 / IDE ↔ AI 编码代理 | Zed、JetBrains、Neovim、桌面应用连接 Gemini CLI、Claude Code、OpenHands 等 |
| Agent Communication Protocol | Agent Communication Protocol(IBM 等) | Agent ↔ Agent、应用 ↔ Agent | 多智能体之间通信、跨系统编排 |
本文中如不特别说明,“ACP”均指 Zed 社区主导的 Agent Client Protocol。
在 ACP 中:
典型架构如下:
+---------------------------+ JSON-RPC (stdio/pipe/TCP) +------------------------+
| Editor / IDE / GUI | <-------------------------------> | Coding Agent (ACP) |
| (Zed / JetBrains / | | (Gemini CLI / |
| AionUi / Open Cowork) | | Claude Code / etc.) |
+---------------------------+ +------------------------+
↑ ↑
| 提供:文件系统、终端、权限 UI | 执行:分析、规划、生成代码
| |
人机交互 & 环境层 智能决策 & 执行层
这种划分有两个关键好处:
ACP 严格遵守 JSON-RPC 2.0 标准,[3] 把所有交互规范化为两类消息:
请求示例:initialize
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"clientInfo": {
"name": "Zed",
"version": "0.202.0",
"capabilities": {
"fs": {
"readTextFile": true,
"writeTextFile": true
},
"terminal": true
}
}
}
}
响应示例:initializeResult
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"agentInfo": {
"name": "Gemini CLI",
"version": "1.3.0"
},
"capabilities": {
"loadSession": true,
"modes": ["chat", "edit"]
}
}
}
通知示例:session/update(流式输出)
{
"jsonrpc": "2.0",
"method": "session/update",
"params": {
"sessionId": "abc-123",
"updates": [
{ "type": "messageChunk", "role": "assistant", "content": "正在分析你的项目结构…" }
]
}
}
从编辑器视角看,一次使用 AI 的完整流程可以拆解为 4 步:
initialize:能力协商(双方是谁、都能干什么)session/new:新建会话session/load:加载旧会话(取决于代理是否声明支持)session/prompt:发送用户请求(附上下文)session/update 持续推送计划、生成内容、进度session/cancel 终止session/request_permission 请求授权fs/*、terminal/* 调用具体能力这个生命周期在多个实际产品中被一再验证,例如 Gemini CLI、Claude Code、OpenHands 与 JetBrains / Zed / AionUi 的集成。
为了避免重蹈“一上新功能就得改协议核心”的覆辙,ACP 提供了类似 LSP 的扩展能力:
_ 前缀区分实验 / 私有扩展,例如 _symmacp/pipeline_meta 中,避免污染主结构initialize 里通过 capabilities 广而告之这保证了:
为了降低接入门槛,ACP 提供了多语言 SDK,封装了:
目前主流语言支持包括[2][4]:
| 语言 | SDK 包名 |
|---|---|
| Python | agent-client-protocol |
| Rust | agent-client-protocol |
| Kotlin | acp-kotlin |
| TypeScript | @agentclientprotocol/sdk |
下面是一个抽象化的示例(简化版,帮助你快速建立直觉):
from acp import Agent, schema
import asyncio
class SimpleAgent(Agent):
async def initialize(self, params: schema.InitializeParams) -> schema.InitializeResult:
"""处理初始化请求"""
return schema.InitializeResult(
agentInfo={"name": "simple-agent", "version": "0.1"},
capabilities={"loadSession": False}
)
async def session_new(self, params: schema.SessionNewParams) -> schema.SessionNewResult:
"""创建新会话"""
return schema.SessionNewResult(sessionId="session-1")
async def session_prompt(self, params: schema.SessionPromptParams) -> schema.SessionPromptResult:
"""处理用户请求"""
await self.send_session_update(
schema.SessionUpdateParams(
sessionId=params.sessionId,
updates=[schema.MessageChunk(type="messageChunk", content="思考中…")]
)
)
return schema.SessionPromptResult(
stopReason="completed",
response=f"Echo: {params.prompt}"
)
if __name__ == "__main__":
agent = SimpleAgent()
asyncio.run(agent.serve_stdio()) # 通过 stdio 与 ACP 客户端通讯
然后你只需在 Zed / JetBrains / AionUi 的配置里,写上类似:
{
"agent_servers": {
"My Simple Agent": {
"command": "python",
"args": ["-m", "my_simple_agent_module"]
}
}
}
即可把你的 Agent 挂到对应 IDE 里使用。
你需要实现一个 ACP Client 层,其职责包括:
command + argsinitialize、session/new、session/prompt 等session/update 映射到 UI:流式输出、Patch 展示、权限弹窗fs/* 方法terminal/* 方法JetBrains 在 2025 年底发布的 ACP 支持,就是经典示例:整个 IDE 家族(IntelliJ、GoLand、PyCharm 等)只需实现一次 ACP Client,就可以同时接入 Gemini CLI、Claude Code、OpenHands 等多种 Agent。[5]
这一部分我们按照“使用者角度”来拆解,从桌面应用、IDE 编辑器、CLI Agent 三个维度看 ACP 的实战落地。
AionUi 是什么?
和 ACP 的关系
claude)qwen --acp)opencode acp)goose acp)auggie --acp)kimi --acp)用户体验上,你能获得什么?
对于想要“本地版本 Claude Cowork / Copilot Workspace”体验,但又不想被单一厂商锁死的人来说,AionUi + ACP 是一个非常现实可行的路径。
社区中有多个“Open Claude Cowork / Open Cowork”项目,其中有一支路线明确是 以 ACP 为底层协议,用 Electron + React 做桌面端多 Agent 协作工具。[7]
其核心设计可以概括为四个类:
AcpDetector:扫描本地可用 CLI(如 claude, qwen, opencode acp 等)AcpAgentManager:管理多个 Agent 实例、连接复用AcpAgent:封装会话级逻辑(initialize → newSession → prompt),支持 @file 语法引用文件AcpConnection:与具体 Agent 的 JSON-RPC 底层连接,基于 NDJSON 流关键能力:
可以把它理解为:
用 ACP 把一堆不同厂家的“Claude Code 类工具”挂载到一个本地桌面端,统一操作、统一审计、统一安全策略。
Zed 作为 ACP 的发起方,[1][2] 是最早一批内置 ACP Client 的编辑器:
settings.json 中配置 agents 和命令,即可连接任意本地 ACP AgentJetBrains 则在 2025 年底正式宣布与 Zed 联合推动 ACP,并在其全家桶 IDE 中上线支持[5]:
opencode acpkimi --acpqwen --acpNeovim / Emacs / Obsidian / Marimo 等 通过各自的插件,也实现了 ACP Client 能力:
codecompanion.nvim,通过 <leader>a 触发 ACP 会话agent-shell,以子进程方式挂载 ACP Agent这些集成的共同点是:
目前已经宣布支持 ACP 的 Agent / CLI 工具有:
claude-code-acp(TS 实现)或社区的 Rust 版本[8]openhands acp,可将复杂的多步骤开发任务抽象为一个 ACP Agent典型用法往往类似:
# 启动一个 ACP server
qwen --acp
opencode acp
kimi --acp
goose acp
clawdbot acp
然后在任何 ACP 客户端(Zed / JetBrains / AionUi / Open Cowork / Toad)中把对应命令填进去即可。
假设你所在团队有两个诉求:
我们可以按照“编辑器团队”和“Agent 团队”两侧来规划。
短期目标(1–2 个月):做一个最小可用的 ACP Client 集成
initialize / session/new / session/promptsession/update → 将文本流显示到一个简单的 Chat 面板gemini acp、opencode acp)验证全链路中期目标(3–6 个月):扩展到“生产可用”
fs/read_text_file / fs/write_text_file 映射到项目文件树terminal/* 映射到 IDE 内置终端长期目标:内部 AI 平台对接
第一步:把现有 Agent 封装成 ACP Server
initialize,声明你的能力(是否支持 loadSession、支持哪些模式)session/new / session/prompt,将用户意图映射到你的内部工作流fs/*、terminal/* 间接访问,而不是直接用 os / subprocess第二步:写好文档和示例配置
第三步:企业内推广
如果我们把当前 Agent 相关协议做一个“分层”梳理,大致如下:
+---------------------------------+
| 应用层(IDE、桌面端、业务系统 UI) |
+---------------------------------+
| Agent Client Protocol (ACP) | ← 本文主角:UI ↔ 编码 Agent
+---------------------------------+
| MCP / 其它 Tool 协议 | ← Agent ↔ 工具 / 数据源
+---------------------------------+
| A2A / IBM ACP / 自定义协议 | ← Agent ↔ Agent
+---------------------------------+
| HTTP / TCP / stdio / NDJSON |
+---------------------------------+
在“AI 原生开发体验”这条路径上,ACP 与 LSP 一样,很可能会成为一种 长期存在的基础设施标准:

此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。