ACP + Deep Agents:用协议标准化取代终端 TUI,Coding Agent 的 IDE 原生集成之路
📌 核心问题:Claude Code 的终端 TUI 是不是最优解?
2026 年 4 月 8 日,LangChain 的 Founding Engineer Jacob Lee 在 JetBrains 官方博客发布了一篇实战文章。他在产假期间用 Deep Agents 框架 + ACP(Agent Client Protocol)搭了一个定制化的 Coding Agent,几个月用下来完全替代了 Claude Code 作为日常编程工具。
这不是一个"又一个 AI 编程工具"的故事。它揭示了一个更深层的趋势:Coding Agent 正在从"终端里的 TUI"走向"IDE 原生集成",而 ACP 就是实现这个转变的标准化协议。
🔥 为什么不用终端 TUI?Jacob 的痛点
Jacob 是 Claude Code 的早期超级粉丝,但他逐渐对以下几点感到不适:
1. 黑盒感
把工作的一大块交给一个不透明的第三方工具,心里不踏实。虽然训练自己的模型不现实(模型可解释性本身是个未解问题),但 Agent 的 harness 层和 UX 层就是软件——软件是开发者能掌控的。
2. 终端与 IDE 的割裂
之前用 Claude Code 是在 IDE 的独立终端 pane 里运行,总感觉是两个不相关的工具。代码在 IDE 里看,Agent 在终端里跑,上下文需要手动传递。
3. 缺乏可观测性
不知道 Agent 内部到底做了什么决策、传了什么上下文、在哪里走偏了。出了问题只能猜。
4. 模型锁定
只能用 Anthropic 的模型,想换别的模型?重来。
🧠 ACP:IDE 与 Agent 的标准化通信协议
什么是 ACP?
Agent Client Protocol (ACP) 是由 Zed Industries 主导、JetBrains 参与的开放标准,2025 年 9 月发布。它定义了 IDE(客户端)与 AI Agent(服务端)之间的标准化通信方式。
类比:ACP 之于 Coding Agent,就像 LSP 之于语言服务。LSP 让一个语言服务器能对接所有 IDE,ACP 让一个 Agent 能对接所有 IDE。
ACP 解决了什么问题?
ACP 的核心概念
- 本地 Agent:作为 IDE 子进程运行,通过 JSON-RPC over stdio 通信
- 远程 Agent:托管在云端,通过 HTTP / WebSocket 通信
- 复用 MCP 的 JSON 表示:在可能的地方复用 MCP 的数据格式
- Agent Plans:Agent 的规划步骤(对应 `write_todos`)
- Permission Requests:Agent 需要用户批准的操作(对应 human-in-the-loop)
- Diff 展示:原生支持代码差异的可视化
🔥 Deep Agents + ACP 实战:Jacob 的定制 Agent
Deep Agents 提供了什么?
Deep Agents 是 LangChain 开发的开源 Agent 框架,提供了:
- 文件系统工具:read / write / edit_file / ls / grep 等
- Shell 访问:运行 lint、测试等验证命令
- Human-in-the-loop:限制危险操作,需要用户批准
- write_todos 规划工具:把工作分解为步骤并跟踪进度
- 子 Agent 隔离:并行或隔离的工作,每个子 Agent 有独立上下文
- 流式输出 / 取消 / Prompt 缓存 / 上下文摘要
Jacob 还加了自定义中间件:自动检测当前目录、git 仓库、包管理器等项目信息,注入 system prompt。
ACP 适配器:把 Deep Agents 接入 IDE
Jacob 创建了一个 ACP 适配器,处理:
- 会话生命周期:创建、恢复、销毁
- 消息路由:IDE ↔ Agent 的消息传递
- 模型切换:运行时切换底层 LLM
- 流式输出:实时返回 Agent 的思考和操作
关键发现:Deep Agents 的能力天然映射到 ACP 概念:
不需要大量胶水逻辑——协议已经为大部分场景提供了原语。
Human-in-the-Loop 流程
这是 Jacob 花时间最多的部分。当 Agent 想运行 shell 命令或编辑文件时:
1. Agent 触发 interrupt(Deep Agents 的暂停机制)
2. 适配器拦截 interrupt
3. 根据用户选择的权限模式和历史批准记录:
- 已批准过 → 自动继续
- 未批准 → 通过 ACP 发送 Permission Request 到 IDE
4. 用户选择:批准 / 拒绝 / 始终允许该类型命令
5. "始终允许"是会话级别的——uv sync 批准一次后后续自动跳过,但 uv run script.py 不会绕过检查
🚀 实际效果:完全替代 Claude Code
模型自由切换
Anthropic 宕机时,Jacob 无缝切换到 OpenAI gpt-5.4,甚至在同一个会话中切换不同模型获取不同视角。开源模型如 GLM-5 也能用,成本显著降低。
全链路可观测性
通过 LangSmith 追踪,能看到:
- 传给模型的完整上下文
- Agent 调用了哪些工具
- 在哪里走偏了
实例:Jacob 发现 Agent 开始大范围扫描文件系统,通过 trace 找到 system prompt 中的 bug——项目路径被错误地设为文件系统根目录而非当前工作目录。
代码级控制回归
不再受制于 CLI 配置选项,而是直接在 Python 代码中:
- 添加 Skills
- 调整 system prompt
- 添加自定义工具或 MCP Server
- 修改 Agent 行为
🔑 关键洞察
洞察一:Claude Code 不是魔法,是"一堆聪明技巧的打包"
Jacob 的原话:"Claude Code isn't magic but a bundle of very clever tricks rolled up into a neat package."
harness 层就是软件,软件是任何开发者都能改造的。ACP + Deep Agents 证明了:一个有经验的开发者可以在产假期间搭出一个替代 Claude Code 的工具。
这不是说 Claude Code 不好——而是说这个领域的"护城河"不在模型,在 harness。模型谁都能调用,harness 才是差异化的关键。
洞察二:ACP 是 Coding Agent 的 LSP 时刻
LSP(Language Server Protocol)让一个语言服务器能对接所有 IDE,终结了"每个 IDE 都要写一遍语言支持"的时代。
ACP 正在做同样的事:让一个 Agent 能对接所有 IDE。这意味着:
- Agent 开发者只需实现一次 ACP,就能触达所有 IDE 用户
- IDE 开发者只需支持 ACP,就能接入整个 Agent 生态
- 开发者可以自由组合 Agent + IDE,不再被锁定
洞察三:OpenClaw 的 ACP harness 走在了前面
OpenClaw 从一开始就将 ACP 作为核心基础设施——IDE 原生集成 + 协议标准化 + 可观测性。Jacob 的实战验证了这条路的正确性:
- IDE 原生集成:Agent 住在 IDE 的工具窗口里,不是终端的 TUI
- 协议标准化:ACP 让 Agent 能跨 IDE 工作
- 可观测性:LangSmith / 类似工具让 Agent 的每一步都可追溯
- 模型自由:不绑定特定 LLM,运行时可切换
这和 OpenClaw 的设计哲学高度一致。
📎 相关阅读
- [Using ACP + Deep Agents to Demystify Modern Software Engineering](https://blog.jetbrains.com/ai/2026/04/using-acp-deep-agents-to-demystify-modern-software-engineering/) - JetBrains AI Blog(原文)
- [Agent Client Protocol 官方文档](https://agentclientprotocol.com/get-started/introduction.md) - ACP 开放标准
- [Deep Agents 框架文档](https://docs.langchain.com/oss/python/deepagents/overview) - LangChain
- [Deep Agents ACP 适配器](https://github.com/langchain-ai/deepagents/blob/main/libs/acp/README.md) - GitHub
- [LangSmith 追踪示例](https://smith.langchain.com/public/fa43a7e0-c728-4d35-ba33-d7f7d66b5d63/r) - Jacob 的 Agent trace






