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