用 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. 1

    先想清楚你要 ACP 做什麼

    如果驅動 dsh 的是程式——CI 任務、測試跑批、另一個 harness——官方伺服器就是對的工具:標準 ACP v1、工作階段能跨重啟保存、一條連線可以跑多個工作階段、還沒有驗證步驟。如果是人想從 Zed 的 Agent 面板用 dsh,那要的是社群的互動式伺服器——官方那台刻意不做計畫、標題、待辦和終端機檢視。

  2. 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. 3

    路線 B:裝互動式伺服器

    dsh-acp-interactive(社群專案,MIT 授權,與 DeepSeek 和 Zed 無隸屬關係)把已發佈的 `@deepseek-ai/dsh-*` 套件組合進一份面向編輯器的 profile,於是 Zed 看得到訊息、思考、工具卡片、權限請求、計畫、工作階段標題和用量。全域安裝後跑一次 `--setup`:它會把 `DEEPSEEK_API_KEY` 寫進 harness 的憑證儲存,全程不回顯。跳過 `--setup` 也行——沒存金鑰的新對話串會給出一個 Configure DeepSeek API key 動作,走的是同一套流程。

    $npm install --global deepseekharness-acp-interactive
    $dsh-acp-interactive --setup

第二部 — 接上 Zed

  1. 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": []
        }
      }
    }
  2. 5

    從 Agent 面板開一條對話串

    用 Ctrl+? / Cmd+? 打開 Zed 的 Agent 面板,在下拉式選單選 dsh-acp-interactive,送出第一條提示詞。工具呼叫跑在 dsh 沙箱裡:read-only 預設下的寫入會以 ACP 權限請求的形式回來,給你 Allow once / Reject 兩個選項,核准後的編輯會渲染成工具卡片。`/` 面板列出組合外掛註冊的人類指令,composer 裡還有權限預設和推理力度選擇器——它們都是 ACP 的工作階段設定項。

  3. 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★36Martty 團隊出品的樸素 dsh ACP 伺服器實作(dsh-acp)
Pheobe-Southwood/dsh-acp-paseo★11Paseo 整合包——自動發現的模型目錄、plan/execute 模式、原生 dsh 斜線指令
bobleer/dsh-acp-for-bitfun★10BitFun ⇄ dsh 轉接器,接 BitFun 編輯器那一側
grunmin/dsh-acp-enhanced★7Zed 橋接外掛,帶區塊級串流、用量遙測、模型與推理力度切換和權限預設——以外掛方式安裝

以上均為社群維護專案,與 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 支援在做。差別在每個用戶端的投射能力——串流、計畫、權限這些介面各自渲染到什麼程度——所以請以轉接器的相容性矩陣為準。

相關教學

這套設定周邊的協定與預設集。

DSH Plugins 是獨立的 DeepSeek Harness 外掛市集,與 DeepSeek 官方無關,也不代表官方背書。第三方外掛未經安全稽核,安裝前請審查原始碼。

每週取得最新的 DeepSeek Harness 外掛,絕不濫發。