DeepSeek Harness(dsh)2026 年 8 月 13 日在 GitHub 上開源,走的路徑跟 Node.js 生態圈過去一年出現的 agent framework 完全反著來。多數框架的做法是把 Claude Code 或 Codex 的功能重新包一次,把提示詞、工具呼叫、對話持久化這幾件事套進固定的 loop 架構;DeepSeek Harness 直接把 agent loop 本身也拆成插件,只留下一個由 Cordis meta-framework 承載的組合層。這個決定在釋出後五天累積十五萬個 GitHub 星星、七千多個 dsh-plugin 主題倉庫,反映出社群對「可拔換的 harness」這件事的實際需求遠超過現有產品能滿足的。
Cordis 才是這個框架真正的底層
Cordis 不是 DeepSeek 為 Harness 寫的東西,而是一個已經迭代兩年、原本在聊天機器人生態圈被拿來當外掛核心的 Node.js meta-framework。它的核心概念寫在同組作者發表的論文《A Programming Paradigm for Spatiotemporal Composability》裡——每個 plugin 對一個共享 context 貢獻 services、typed events 跟 reversible effects,其他 plugin 依賴的服務就從這個 context 拿。所有註冊都是可逆的,dispose 掉一個 plugin 就把它留下的 hook 跟 service 完全撤走,不會有 dangling reference。
這個設計對 agent 框架特別合用的地方是「沒有特權核心」——連 agent loop、model adapter、CLI 命令解析都是 plugin,替換它們的方式跟替換一個 tool 完全一樣。相較之下 Claude Code、Codex 這類產品把 loop 寫死在主程式裡,能延伸的只有 slash command、hook、skill 這幾條事先開好的路。DeepSeek Harness 把這條路徑本身也交給使用者接管。
Plugin 撐到底是什麼意思
出廠帶的 plugin 大致分成幾組:model adapter(DeepSeek、Anthropic、OpenAI、Bedrock、Vertex、Azure,以及任何 OpenAI-compatible endpoint)、tool registry、四個 preset(Standard、Code、Minimal、Creator)、storage 層、UI 層,再加上一個放在最外圈的 orchestration loop。每個都能透過 settings.yaml 換掉或多層疊加。Minimal preset 只有 persistent bash 加一個文字編輯器,這就是 DeepSeek 官方跑 V4-Pro benchmark 時的 harness 組態,方便論文對照重現。
Session 的表示法值得單獨拆出來講。所有對話狀態存在一份 append-only 事件流上,模型看到的 context 從這條流投影出來。這個抽象把「fork 一段對話換另一個模型繼續」、「replay 到某個中間點看當時的工具輸出」、「兩個平行分支跑同一批工具比較差異」變成純資料操作,不需要中介的 conversation object。缺點是這一版還沒做 schema versioning——升級 Harness 之後舊 session 直接讀不回來,商用還是實驗場景現階段都得認賠 rebuild。
Subagent 直接掛 Claude Code 跟 Codex 上去
Harness 有七個 subagent provider,其中 subagent-claude-code 直接呼叫 Anthropic 的 Agent SDK,subagent-codex 走 stdio JSON-RPC 接 Codex CLI,另有通用的 Agent Client Protocol 承接第三方實作。這代表把 DeepSeek Harness 當外殼跑,需要程式碼審閱的 subtask 分派給 Claude Code、需要跑試算的丟給 Codex、主 loop 由 DeepSeek V4-Pro 控——過去要自己黏合這件事得寫幾百行 shell script 加 tmux,現在剩下一段 YAML。
Subagent 預設 inheritsParentContext: false,只拿到任務描述跟工作目錄,沒有父對話歷史。這個選擇避免了 context blow-up,也讓 subagent 執行時看不到 parent 累積的機密資訊,是相當合理的預設。要主動傳遞資訊的話有專門的 handoff plugin,強制走顯性宣告。
自架到 VPS 上還有兩個坑要注意
主程式本體是 Node.js 22.19+ 或 24+ 加 pnpm,npx @deepseek-ai/dsh web 一行拉起 Web UI 綁 127.0.0.1:3080,資源需求對一臺 2 vCPU、4 GB RAM 的 VPS 綽綽有餘。裝完之後真正要處理的是兩個非顯而易見的問題。
第一個是 sandbox 完全不管網路。三個 preset 只在檔案系統層做隔離——read-only、workspace-write(預設)、danger-full-access——subagent 或 tool 想 curl 外部服務、想 clone 一個 repo、想連上任意 API,harness 一概不擋。要防的話得靠外部手段:iptables egress 規則、network namespace、或直接把 Harness 跑在一個 rootless container 裡再限制對外連線。這件事在多人共用的 dev VPS 上特別要處理,否則等於白開一個可以任意連外的執行環境給對話裡的模型使用。
第二個是 cordis preset 本身給予活的 JavaScript 執行權限對整個 runtime,等於誰能寫入設定檔誰就能覆寫任何插件。把 Harness 部署到有多個使用者的機器上,$DSH_HOME(credentials 也放在裡面)的權限一定要收緊到 0700,並確認 sudo 規則不會誤把它掛出去。這個問題在單人開發機上不痛不癢,但只要有第二個帳號存在就是提權入口。
選它還是等它
DeepSeek Harness 選擇把「可組合性」擺在完整產品體驗前面的做法,讓它現階段不適合被當成 Claude Code 或 Codex 的直接替代——文件廣度、tooling 打磨、UI 細緻度都還有明顯距離,session 也還沒 schema versioning。真正的價值是把 agent runtime 這一層變成可控且可移植的資產:模型、工具、loop、subagent 都能按組織需求換過一遍,不必被單一廠商的產品節奏綁住。這也是 DeepSeek 在打的策略——「模型後面可以換,但控制 agent 怎麼推理、怎麼呼叫工具、怎麼跨 session 保留狀態的 harness 很難換」——把難換的那一層先放出來成開源,模型的競爭空間就留給了自己。適合現在導入的場景是內部 agent 工具鏈的研究性專案、或需要把多個廠商模型接進同一份工作流做評測的團隊;正式產品線建議至少等到 session schema 版本化定案,也就是釋出說明裡明確標示 breaking change window 結束後。
想在臺灣把這類 agent 工作流穩定跑起來,底層硬體與網路品質是先決條件。NCSE Network 的 VPS 主機採 Intel Gold CPU 與 NVMe SSD、部署於是方電訊機房,適合長期執行 agent runtime、subagent 沙盒與私有 LLM gateway;若有跨區串接、對外 IP transit 或機房代管需求,也可直接與 NCSE Network 團隊聯繫。