用 ACP 把 DeepSeek Harness 接进 Zed
Agent Client Protocol 三步走:选对路线、接上服务器,然后在 Zed 的 Agent 面板里开工。
最近更新: 2026-09-29
ACP(Agent Client Protocol)是编辑器和编码代理之间的对话协议:一端拉起代理进程、发送提示词,另一端把消息、思考、工具卡片和权限请求用 JSON-RPC 流式推回来。Zed 的 Agent 面板原生就说这门语言,而协议是开放的,所以 dsh 代理完全可以坐在那块面板的另一头。
老实的路线有两条。官方的 `@deepseek-ai/dsh-acp` 包定位就是 automation-only——给脚本、测试跑批和进程外子代理用;而编辑器里的完整交互体验,要靠社区的 editor-facing 服务器投射进 Zed。这篇教程两条都走一遍,然后把交互路线真正接进 Zed。
太长不看
- ▸ACP 连的是「编辑器 ⇄ 代理」,MCP 连的是「代理 ⇄ 工具」,两个大概率都要——先看下面的 ACP vs MCP 一节。
- ▸官方 dsh ACP 服务器(`dsh --profile acp`)只做自动化:没有计划卡片、没有会话标题、没有终端视图——这是有意为之。
- ▸想在 Zed 里用,装社区的 `deepseekharness-acp-interactive` npm 包——本教程接的就是它。
- ▸总共三步:全局安装、跑一次 `dsh-acp-interactive --setup`、在 Zed 的 settings.json 里注册到 `agent_servers`。
两条路线,各三步
第一部分 — 选路线
- 1
先想清楚你要 ACP 干什么
如果驱动 dsh 的是程序——CI 任务、测试跑批、另一个 harness——官方服务器就是对的工具:标准 ACP v1、会话能跨重启持久化、一条连接可以跑多个会话、还没有鉴权步骤。如果是人想从 Zed 的 Agent 面板里用 dsh,那要的是社区的交互式服务器——官方那台故意不做计划、标题、待办和终端视图。
- 2
路线 A:官方 automation-only 服务器
仓库检出里,ACP 服务器在 `packages/acp`,对应插件 `@deepseek-ai/dsh-acp`。通过组合配置给每个会话指定 provider 和模型,再用 acp profile 启动——stdout 只跑 JSON-RPC 协议帧。客户端可以创建、列出、恢复和关闭会话,挂载 stdio 或 HTTP 的 MCP 服务器,切换模型与推理力度,并应答权限请求。要从另一个 harness 里以进程外子代理的方式拉起同一台服务器,官方客户端是 `@deepseek-ai/dsh-subagent-acp`。
$pnpm dsh --profile acp- name: '@deepseek-ai/dsh-acp' config: provider: deepseek-official model: deepseek-v4-pro - 3
路线 B:装交互式服务器
dsh-acp-interactive(社区项目,MIT 协议,与 DeepSeek 和 Zed 无隶属关系)把已发布的 `@deepseek-ai/dsh-*` 包组合进一份面向编辑器的 profile,于是 Zed 能看到消息、思考、工具卡片、权限请求、计划、会话标题和用量。全局安装后跑一次 `--setup`:它会把 `DEEPSEEK_API_KEY` 写进 harness 的凭据存储,全程不回显。跳过 `--setup` 也行——没存 key 的新会话会给出一个 Configure DeepSeek API key 操作,走的是同一条流程。
$npm install --global deepseekharness-acp-interactive$dsh-acp-interactive --setup
第二部分 — 接进 Zed
- 4
在 Zed 的 settings.json 里注册
打开命令面板(Ctrl+Shift+P / Cmd+Shift+P),执行 `zed: open settings`,把服务器加到 `agent_servers` 下。Windows 上 `command` 要填 `where.exe dsh-acp-interactive` 输出的绝对路径(用正斜杠或双反斜杠);macOS 和 Linux 用 `which dsh-acp-interactive` 的输出。保存文件。
{ "agent_servers": { "dsh-acp-interactive": { "type": "custom", "command": "dsh-acp-interactive", "args": [] } } } - 5
从 Agent 面板开一条会话
用 Ctrl+? / Cmd+? 打开 Zed 的 Agent 面板,在下拉框里选 dsh-acp-interactive,发第一条提示词。工具调用跑在 dsh 沙箱里:read-only 预设下的写操作会以 ACP 权限请求的形式回来,给你 Allow once / Reject 两个选项,批准后的编辑会渲染成工具卡片。`/` 面板列出组合插件注册的人类命令,composer 里还有权限预设和推理力度选择器——它们都是 ACP 的会话配置项。
- 6
不止 Zed:其他客户端与适配器
任何说 ACP v1 的客户端都能接这些服务器。下面的目录里收录了 Paseo 和 BitFun 的适配器、一份朴素的 ACP 服务器实现,还有 Martty——一个本身就是 ACP 客户端的 TUI。dsh-acp-interactive 的会话以 JSONL 落在你 `.dsh` 主目录的 `acp-sessions` 下、按工作目录分片,编辑器外的会话照样可审计。流式粒度因客户端而异——两个已知的糙点看 FAQ。
ACP vs MCP:两个协议各管什么
这两个缩写分立在代理的两侧,而 dsh 两边都说。
ACP — 编辑器 ⇄ 代理
Agent Client Protocol(agentclientprotocol.com)标准化的是「客户端如何托管一个编码代理」:创建和恢复会话、发送提示词、流式接收消息、思考、工具调用和计划,协商权限,并暴露模型与推理力度选择器。Zed 的 Agent 面板是最有代表性的客户端。
MCP — 代理 ⇄ 工具
Model Context Protocol 标准化的是「代理如何够到工具」:一台 MCP 服务器对外暴露工具、资源和提示词——地图、搜索、数据库——供模型调用。dsh 按会话挂载 MCP 服务器;字段对照和 mcpServers 配置块在我们的 MCP 配置教程里。
它们是叠加关系不是竞争关系——一个 ACP 会话可以挂 MCP 服务器,所以把 Zed 接进 ACP 并不会取代你的 MCP 配置。 在 dsh 里配置 MCP 服务器
dsh ACP 适配器目录
以下服务器都在 2026-09-29 逐一核实过真实存在;星数为当日快照。第一行就是本教程装进 Zed 的那个。
| 项目 | 星数 | 适合 |
|---|---|---|
| ClickPM/dsh-acp-interactive | ★99 | 上文接进 Zed 的编辑器侧服务器——消息、思考、工具卡片、计划、标题、用量;以 ACP v1 为基线 |
| openma-ai/Martty | ★78 | 本身就是 ACP 客户端的统一 harness TUI——不开编辑器也能在终端里开会话 |
| openma-ai/deepseek-harness-acp | ★36 | Martty 团队出品的朴素 dsh ACP 服务器实现(dsh-acp) |
| Pheobe-Southwood/dsh-acp-paseo | ★11 | Paseo 集成包——自动发现的模型目录、plan/execute 模式、原生 dsh 斜杠命令 |
| bobleer/dsh-acp-for-bitfun | ★10 | BitFun ⇄ dsh 适配器,接 BitFun 编辑器一侧 |
| grunmin/dsh-acp-enhanced | ★7 | Zed 桥接插件,带块级流式、用量遥测、模型与推理力度切换和权限预设——插件方式安装 |
以上均为社区维护项目,与 DeepSeek 无隶属或背书关系;官方 npm 包保持 automation-only。执行前请到各仓库 README 核对安装命令。
ACP 接入常见问题
服务器跑起来之后,最常被问到的几个。
dsh 里的 ACP 和 MCP 有什么区别?
方向不同。ACP(Agent Client Protocol)把客户端——Zed 的 Agent 面板、TUI、脚本——连到 dsh 代理:会话、提示词、流式回复、权限请求都在这条线上。MCP(Model Context Protocol)则把 dsh 代理向外连到地图、搜索、数据库这类工具。一个 ACP 会话可以挂 MCP 服务器,两个协议是叠起来的,不是二选一。
有官方的 dsh ACP 服务器吗?
有——就是仓库 `packages/acp` 里的 `@deepseek-ai/dsh-acp`,用 `dsh --profile acp` 启动;它在 npm 上的描述写得很直白:基于 JSON-RPC stdio 的 automation-only ACP 服务器。会话、模型选择、MCP 挂载、提示词、权限请求它都管,但有意不做 dsh 的展示层——计划、标题、待办、终端视图和表单交互都被排除在外。
用官方服务器时,Zed 里为什么看不到计划或待办卡片?
这是设计决定不是缺陷:官方设计笔记明确把 ACP 定位成 automation-only 协议,协议层会直接省略或拒绝不支持的接口。要完整的编辑器体验——计划卡片、会话标题、用量——请用社区交互式服务器,比如 dsh-acp-interactive,它把这些 dsh 更新投射成了 ACP 的内容。
为什么回复一整块蹦出来,没有打字机效果?
这是已知的粒度问题,0.1.7-rc.2 时代的 #8244 讨论帖报告过:agent_message_chunk 更新可能一次性携带整条消息,轮次结束前 Zed 的打字机效果无事可做。交互式服务器通过投射更细粒度的会话事件来缓解;别默认你的客户端一定在流式输出,先看适配器的兼容性说明。
为什么模型的思考过程出现在了回复正文里?
这就是 #8235:dsh-acp 给同一条助手回复的思考块和消息块发了同一个 messageId,按 messageId 分组收包的客户端就会把两段拼在一起。Paseo 对接 @deepseek-ai/dsh-acp 0.2.0-rc.1 和 0.1.7-rc.2 时都能复现。上游修复前,用把两条流分开投射的交互式服务器可以绕开。
Zed 之外的编辑器能用吗?
只要客户端说 ACP v1 就行:协议本身不挑客户端,Paseo 和 BitFun 各有适配器,终端有 Martty,社区网关也对着 VS Code 的 ACP 支持在做。差别在每个客户端的投射能力——流式、计划、权限这些表面各自渲染到什么程度——所以请以适配器的兼容性矩阵为准。
相关教程
这套配置周边的协议与预设。
