前言¶
DeepSeek Harness(dsh)是 DeepSeek AI 開源的智能體運行時,架構口號是「一切皆插件」:模型適配、工具、會話、審批策略,乃至界面,都做成可替換的插件層。它目前仍是開發者預覽,官方倉庫寫明會有破壞兼容性的變更。
另一邊,Multica 用本機守護進程去調度已經安裝好的 AI 編程工具:Claude Code、Codex、Cursor Agent 都可以被它發現並執行任務。DeepSeek Harness 也在它的檢測列表裏,命令名就是 dsh。問題在於:dsh 默認的 Web UI 或交互式會話,並不能直接被 Multica 當一條運行時調用。兩邊需要一層約定好的協議,而不是去改 DeepSeek Harness 本體。
dsh-multica-runtime 就是這層外部橋接。它疊在 @deepseek-ai/dsh-base 之上,用帶版本號的 JSONL 協議走 stdio,讓 Multica 守護進程把 dsh 當成一條可探測、可取消、可恢復會話的運行時。本文按插件目錄頁、GitHub 倉庫 README / 源碼,以及 Multica 官方文檔覈對後整理。
社區插件目錄 deepseek-harness-plugin.com 是獨立站點,與 DeepSeek / 幻方沒有官方從屬關係,不要把它當成官方應用商店。
這是什麼¶
dsh-multica-runtime 是一款「開發與運行時」類 DSH 插件。目錄頁標註維護者爲 forrestchang,收錄日期 2026-08-15。GitHub 倉庫地址寫的是 forrestchang/dsh-multica-runtime,當前實際歸屬組織 multica-ai,訪問前者會跳轉到 multica-ai/dsh-multica-runtime。倉庫主題帶 dsh 和 dsh-plugin,截至本文覈對(2026-08-18)GitHub 顯示 46 星。
它解決的問題可以收成一句話:在不修改、不內嵌 DeepSeek Harness 源碼的前提下,給 Multica 提供一條可調用的 dsh 運行時。README 把它稱爲 out-of-tree runtime bridge,倉庫只包含 Multica 集成層,依賴的 @deepseek-ai/dsh-* 包來自公開 npm。當前 checkout 驗證過的版本是 @deepseek-ai/dsh@0.1.0-rc.6 及同系列包。
npm 包名是 @multica-ai/dsh-runtime,版本 0.1.0-private.1,package.json 裏 private 爲 true,license 字段是 UNLICENSED。GitHub 也沒有掛 SPDX 許可證。目錄頁寫「可以查看源碼並免費安裝使用」,和這份許可證聲明並不等同,安裝前應自己讀源碼和許可條款。
核心功能¶
不改 DSH 本體的組合方式¶
DeepSeek Harness 的運行實例由 profile 組成:先疊 @deepseek-ai/dsh-base,再疊外部 bundle。這個插件在 package.json 裏聲明瞭 dsh.bundle.patch,指向 cordis.patch.yml。補丁做了幾件和 Web UI 不同的事:
- 關掉
hmr,避免一次任務結束後熱更新和進程退出打架。 - 關掉
telemetry-otel,README 寫明 DSH 遙測由這份 bundle patch 禁用。 - 會話落盤目錄優先讀環境變量
MULTICA_DSH_SESSION_ROOT。 - 插入
headless-runner,掛載包名@multica-ai/dsh-runtime,不暴露 HTTP 監聽。 - 系統提示寫明這是無界面運行時,不要調用
ask_user_question;真正需要用戶拍板時,把選項寫進最終回覆。
源碼裏審批請求被處理成一次性放行(allowed-once),沒有交互式問答界面。這和 Multica「守護進程拉起 CLI、拿結果」的模型一致。
帶版本號的 JSONL 協議¶
協議版本寫死爲 1,一問一行 JSON,走 stdin / stdout。診斷信息只寫 stderr,stdout 只承載協議幀。Multica 只有在 dsh --profile multica --probe 返回協議版本 1 之後,纔會把這條運行時登記上去。
探測成功時,stdout 會寫出類似下面的一幀(字段來自源碼常量,plugin_version 當前是 0.1.0-private.1):
{"v":1,"type":"probe","runtime":"dsh","plugin_version":"0.1.0-private.1","protocol_version":1}
stdio 模式下,進程先發 ready 幀,再等待唯一一條 execute 命令。ready 裏聲明的能力包括:會話恢復、協作取消、模型發現、思考強度、token 用量、工具事件,以及 MCP 的 stdio 與 streamable-http 兩種傳輸。
一次進程只接受一條 execute。後續同 request_id 的 cancel 會把正在跑的 agent 取消掉。命令體超過 8 MiB、或版本號不是 1,會以 protocol_error 拒絕。
execute 可帶的字段包括工作目錄 cwd(必須是絕對路徑)、提示詞、可選的 resume_session_id、模型與思考強度,以及一組 MCP 服務器配置。恢復會話時,若原會話的工作目錄和本次 cwd 不是同一目錄,會以 DSH_RESUME_REJECTED 失敗,而不是默默換目錄繼續。
運行過程中,橋接層把 DSH 會話事件翻譯成協議幀:text、thinking、tool_call、tool_result、usage,最後一條 result(completed / failed / aborted / cancelled)。工具輸出超過 256 KiB 會被截斷並標記 truncated。
模型、MCP 與任務令牌¶
模型列表不是寫死在插件裏的,而是問 DSH 自己的 LLM 服務。Multica 文檔要求用 dsh --profile multica --list-models 拿到目錄,模型 id 形如 deepseek-official/deepseek-chat,選擇時要用完整 id。環境變量 MULTICA_DSH_MODEL 也可以指定默認模型,取值同樣是這種 provider/model 形式。
MCP 方面,Multica 在智能體配置裏填寫的 server,會經協議傳給這次執行。橋接層再轉成 DSH 的 @deepseek-ai/dsh-mcp-client:本地進程用 stdio,遠程用 streamable-HTTP。Multica 的工具對照表裏,DeepSeek Harness 這一行「Multica 管理 MCP」和「會話恢復」都是勾選的;Skill 注入目錄是 .dsh/skills/。
DSH 默認會從子進程環境裏清掉看起來像密鑰的變量。這個插件開了一個很窄的口子:只放行 Multica 下發、且以 mat_ 開頭的 MULTICA_TOKEN,好讓任務裏的 multica 命令還能帶上任務歸屬。模型服務商的 API Key 不會走這條路徑。DEEPSEEK_API_KEY 由 DSH 自己的憑據機制在進程運行時讀取,README 明確要求不要寫進這個倉庫。
安裝與啓用¶
目錄頁給出的安裝命令如下,在 DeepSeek Harness 終端裏執行:
dsh plugin add github:forrestchang/dsh-multica-runtime
需要可復現安裝時,目錄頁建議固定 commit 哈希:
dsh plugin add github:forrestchang/dsh-multica-runtime#commit
把 #commit 換成實際提交哈希。當前 dsh CLI 管理插件時必須帶 --profile。Multica 文檔和本倉庫 README 都把插件裝進名爲 multica 的 profile,守護進程也是用這條 profile 做探測。實際使用請寫成:
dsh plugin --profile multica add github:forrestchang/dsh-multica-runtime
從本地 checkout 安裝時,先構建再按絕對路徑添加。README 中的步驟是:
pnpm install
pnpm check
pnpm build
dsh plugin --profile multica add /absolute/path/to/multica-dsh-runtime
pnpm check 會依次做類型檢查、測試和構建。路徑必須換成你本機倉庫的絕對路徑。
Multica 側還要求本機已經裝好 dsh 本身。官方安裝說明是:先裝 Node.js,再執行 npm install -g @deepseek-ai/dsh。有兩處版本表述需要分開看:Multica 文檔寫的是 Node.js 20+;本倉庫 package.json 的 engines 是 ^22.19.0 || >=24.0.0。若按本倉庫源碼構建,應按後者準備 Node。
啓動守護進程前設置 DEEPSEEK_API_KEY,或在 dsh 自己的設置裏保存。dsh 安裝路徑不在 PATH 上時,把啓動器絕對路徑交給守護進程:
export MULTICA_DSH_PATH=/absolute/path/to/dsh
插件目錄頁提醒:插件以當前 dsh 進程的權限運行,安裝時可能執行代碼。裝之前檢查源碼倉庫和許可證。
典型用法¶
裝進 multica profile 之後,先確認協議探測通過。守護進程只有在這條命令成功後纔會註冊 DeepSeek Harness:
dsh --profile multica --probe
查看運行時自己報上來的模型目錄:
dsh --profile multica --list-models
stdio 模式是 Multica 真正拉起任務時用的入口,一般不用手敲;需要排障時可以單獨運行:
dsh --profile multica --stdio
本機終端裏確認 dsh 能找到、並且已經配置好模型憑據後,再讓 Multica 重新檢測:
multica daemon start
守護進程已在運行則重啓:
multica daemon restart
然後打開 Multica 的運行時頁面,目標電腦下面應出現 DeepSeek Harness,狀態爲在線。之後創建或編輯智能體時就可以選這條運行時。模型請從 list-models 的完整 id 裏選;不選則走 dsh 的默認模型。
適用場景與注意事項¶
適合已經在用 Multica 調度本機編碼智能體、同時希望任務跑在 DeepSeek Harness 上的人。它不是給 dsh Web UI 換皮膚,也不是通用 MCP 網關。倉庫定位很窄:只做 Multica 和 dsh 之間的橋。
使用前值得記住這幾條:
- 權限與許可證。 插件以當前 dsh 進程權限運行。
package.json許可證爲UNLICENSED,GitHub 未聲明 SPDX 許可證,不要默認按 MIT 來理解再分發。 - 預覽版兼容性。 DeepSeek Harness 處於開發者預覽,官方說明會有破壞性變更。本倉庫當前驗證的是
@deepseek-ai/dsh@0.1.0-rc.6。dsh 升級後應重新跑pnpm check和--probe。 - 無交互審批。 運行時是 headless:不會彈出詢問,審批按一次性放行處理。不適合必須在每一步人工確認的工作流。
- 一次進程一條任務。 重複的
execute會被協議拒絕。會話恢復還要求工作目錄一致。 - 密鑰不要進倉庫。 API Key、MCP 密鑰、會話日誌、生成的 profile 都不要提交。stdout 是協議通道,排障看 stderr。
- Node 與 PATH。 終端裏能跑
dsh,不等於 Desktop 或後臺守護進程也能找到它。必要時用MULTICA_DSH_PATH指定絕對路徑。
小結¶
dsh-multica-runtime 把 DeepSeek Harness 接到 Multica 的方式很剋制:不改上游、不內嵌源碼,只用 profile 上的一層 bundle,經 stdio 暴露版本爲 1 的 JSONL 協議。探測通過、模型列表能拉到、API Key 就緒之後,Multica 就可以把 dsh 當成和其他編碼 CLI 並列的一條本機運行時。
目錄頁:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-multica-runtime-forrestchang/
GitHub:https://github.com/forrestchang/dsh-multica-runtime (當前跳轉到 https://github.com/multica-ai/dsh-multica-runtime)