DeepSeek Harness · 超越原始碼

終章:五種工程觀,我們該抄什麼

五家 harness 設計哲學總表,附最小可抄清單和體量陷阱清單。

課程目標這是本專題的最後一課。讀完你能回答三個問題:五家 harness 在真源、擴充、安全三個維度上各站在哪裡;DSH 的機制裡哪五件不需要它的框架也能抄走;哪些設計看著眼饞、但沒有專職團隊千萬別碰。
互動演示 · 設計決策自助餐

先玩再講。下面是全專題講過的主要機制,做成了可勾選的卡片,每張標著它解決的問題和依賴的前置機制。像點菜一樣勾出你專案需要的,右邊即時生成你的架構清單:缺了依賴會標紅警告,勾了體量陷阱會提醒你養不養得起。點「播放」看一遍典型的踩坑加糾正過程。

你的架構清單
還沒勾選任何機制。
自由勾選,或點「播放」看一遍典型流程。
五家工程觀 · 一張總表

全專題拆的是 DSH,但每一課都在跟別家對照。收官先把五家擺在一張桌上。三個維度:真源(對話狀態的權威副本放哪)、擴充模型(第三方怎麼加能力)、安全依靠(防出事靠什麼)。

真源
擴充模型
安全依靠
一句話立場
DSH
append-only 事件日誌(zstd 壓縮 JSONL),恢復、分叉、檢索、回放共用一份
一切皆外掛:219 個包、49 個分組,樹外 bundle 安裝
機制層:執行時斷言、型別邊界、溯源鑑權、單調證明
執行時優先,可證明性壓倒交付速度
Claude Code
JSONL 會話檔案(事後記錄型),支撐恢復與查看
hooks + MCP + 子代理與外掛
權限確認框 + 生產監控回饋(斷路器閾值來自真實帳單資料)
產品單體,資料驅動止損
Grok Build
記憶體對話為主,非同步落盤為從,落盤失敗不打斷對話
70 多個 crate 靜態組合(本地快照統計),編譯期定形
Rust 型別系統 + 確認流程,模板編譯期固定
效能與靜態確定性優先
Codex CLI
JSONL 會話 rollout 檔案
MCP 為主的外接能力
審批模式分級 + OS 級沙箱(Seatbelt / Landlock)
沙箱優先,預設不信任執行環境
OpenCode
本地檔案儲存的會話資料
Provider 抽象 + 外掛,多模型接入
權限確認為主
開源 TUI 優先,模型可換是第一需求
DSH、Claude Code(還原原始碼與官方材料)、Grok Build 三列基於本地倉庫逐行核對;Codex CLI 與 OpenCode 兩列基於已公開資料整理,未逐行核對,取捨時請自行驗證。這張表裡的 Codex 一列成文較早;它的 Rust 原始碼後來另開了一章逐行拆解,結論以那一章為準,見 解剖 OpenAI Codex。Grok 收官三課的證據化對照見 Grok Build 與 Claude Code 證據化對照。

表看完先記住一件事:五家沒有對錯,只有立場。Claude Code 的斷路器數字來自真實帳單,Grok 的靜態組合換來編譯期確定性,Codex 把不信任寫進作業系統層,OpenCode 把可換模型放在第一位。DSH 的特殊在於它把可證明排在了好用前面,這是執行時的立場,也是它文件和測試體量的根源。

最小可抄清單 · 不要 Cordis 也能用得上的五件

全專題講了三十來個機制,大多數和 DSH 的外掛框架綁定。但有五件是純思路,抄走就能用:

  1. 事件日誌真源。對話狀態只存一份 append-only 的事件序列,訊息陣列永遠從它派生。一個 JSONL 檔案加一個 fold 函式就是最小實現,恢復和回放白送(機制詳解見 Model-visible ⟺ logged 那一課)。
  2. 三種輸入語義。使用者在 agent 幹活時發來的訊息,明確分成排隊、插話、打斷三種命運,寫成顯式的介面語義。沒有這一層,輸入時機就是薛定諤的狀態。
  3. 雙路徑壓縮。主動測壓和被動溢位恢復分開掛,事件不同、條件不同、失敗語義不同(見 Compaction 雙路徑那一課)。
  4. 溯源鑑權。每段進入上下文的內容都帶來源標籤,高權限操作只認可信來源。工具結果裡藏的指令冒充不了使用者。
  5. 單調 Guard。重試、恢復這類危險放行,一律要求出示單調遞增的證據(世代號、計數器),不認外掛的口供。

這五件的共同點:都是介面語義層面的決定,跟你用什麼語言、什麼框架無關。一個週末能搭出毛坯,剩下的是打磨。

體量陷阱清單 · 看著眼饞,千萬別抄的三件

反過來,有三件事是 DSH 用專職團隊的人力堆出來的,個人和小團隊照抄必翻車:

  1. 219 個包的外掛樹。一切皆外掛意味著每個能力都要切出 Service Definition、Provider、Consumer 三個角色,配齊 README、測試和文件配對。DSH 有 49 個包分組、268 份 README。你專案裡的同款需求,一個 plugins 資料夾加約定就夠了。
  2. 雙語三檔案文件配對。每份文件是英文、中文加一份記錄兩側 blob hash 的 .i18n.yaml,改一側不重新確認配對就 CI 紅。紀律漂亮,成本是每次文件改動雙倍起步。
  3. per-file 100% 覆蓋率門禁。每個原始檔都要 100% 行覆蓋。DSH 自己都寫了篇 proposed 筆記(2026-06-11-mutation-testing)承認覆蓋率只證明程式碼被執行過。沒有 AI 大規模寫測試的產能,這個門禁只會逼人寫「執行但不斷言」的假測試。
抄機制不抄框架

五件可抄的都是介面語義,三件陷阱都是基礎設施。判斷標準:這個設計刪掉框架還成立嗎?成立就能抄。

體量是成本,也是團隊的自證

1.8 萬行文件、684 篇活躍與歸檔筆記、逐檔案覆蓋門禁,養這些的前提是有 AI 產能加專人管門禁。它證明的與其說是必要性,不如說是投入。

沒做完的部分同樣誠實

DSH 把自己的未完成寫在明面上:預發布階段、格式無相容承諾、MCP 只橋了一種能力、沒有互動式 TUI。看一個專案的成熟度,先看它敢不敢列這張表。

DSH 自己沒做完的事 · 白紙黑字

收官課不吹主角。DSH 是開發者預覽版,根 AGENTS.md 開頭第二節就寫著預發布立場:

Remove this section at the first tagged release. With no external consumers, prefer the correct foundation over compatibility shims: rename or repackage freely and update every reference together. Backends reject old on-disk formats. SQLite uses monotonic SCHEMA_VERSION; dsh-session keeps SESSION_FORMAT_VERSION at 0 with no compatibility promise.
(大意:第一個正式版本發布時刪掉本節。當前沒有外部使用者,寧要正確的地基也不做相容墊片;後端直接拒絕舊的磁碟格式,會話格式版本停在 0,不做任何相容承諾。) 出處:deepseek-harness-master 倉庫根 AGENTS.md 第 5 至 7 行,核對日期 2026-08-13

MCP 這邊,只橋接了工具一種能力,Resources 和 Prompts 明確延後,packages/mcp/mcp-client/README.md 第 111 行原文:「Tools are the only bridged MCP capability — Resources and Prompts have no harness consumer and are deferred.」產品入口也只有 Web UI 和 headless 執行(apps/ 下只有 cli 與 web 兩個應用),沒有 Claude Code、Grok Build 那樣的互動式 TUI。這三條不算黑點,算取捨:地基沒幹透之前不澆二樓。

極簡模式 · harness 作為模型的測量儀

最後說一個容易被略過、但最能解釋 DSH 動機的東西。它的四種產品模式就是四份 preset 配置檔案,其中極簡模式的核心配置一共就這幾行:

apps/cli/config/agent-presets/minimal/agent.cordis.yml第 1 至 13 行
# The `minimal` agent preset: a fixed-prompt, two-tool coding-agent composition.
#
# The persona is the complete system prompt, so global identity, Web orientation,
# tool guidance, and later assembly listeners cannot add prompt text. Runtime
# context snapshots are suppressed for this preset, and the model composes only
# persistent `bash` and `str_replace_editor`. Context compaction is absent.

- id: persona
  name: '@deepseek-ai/dsh-persona'
  config:
    text: You are a helpful software engineer assistant.
    complete: true
    includeRuntimeContext: false
原始碼快照說明:依據本地倉庫 deepseek-harness-master,核對檔案 apps/cli/config/agent-presets/minimal/agent.cordis.yml,核對日期 2026-08-13。程式碼塊保留原始碼原文。

讀一下這份配置在做什麼:系統提示詞就一句話,且宣告為 complete,任何外掛都加不了字;執行時上下文被抑制;工具只有 bash 和 str_replace_editor;沒有壓縮。所有 harness 側的變數都被擰到最小。根目錄的 BENCHMARK.md 推薦用 Python SDK 跑這個 minimal 變體做基準測試,每個任務獨立 workspace 和會話。

這解釋了 DeepSeek 做 harness 的動機之一:模型廠商需要一臺標準化、可復現、無壓縮干擾的測量儀來評自家模型,順手把它做成了通用執行時。Anthropic 做 Claude Code 是為了讓模型服務產品,DeepSeek 做 DSH 有一半是為了測量模型本身。立場不同,工程觀自然不同。往後看,agentic RL 訓練和模型評測對這種可回放、可證明的 harness 只會更飢渴,這可能是 DSH 這套重機制路線最先兌現價值的地方。

對照組的收官可以互相印證:Grok 專題的 工程回顧與證據邊界 和 Coding Agent 設計工作臺 從 Rust 單體的角度回答了同一批問題,兩邊對著讀,五種工程觀就齊了。

課堂練習
01

用自助餐給自己的專案做一次架構評審

回到頁首的演示,按你手頭真實專案的現狀勾選:已經有的機制勾上,沒有的留空。看右邊清單裡的紅色警告,找出至少一條缺依賴的組合(比如有重試邏輯但沒有任何單調證據)。然後回答:補上缺的那塊,最小要寫多少程式碼?如果答案超過一週,說明你該先抄的是更底下那層。

Takeaway:五家 harness 沒有對錯,只有立場:產品單體、靜態組合、沙箱優先、多模型開放、可證明執行時。抄的時候認機制不認框架:事件日誌真源、三種輸入語義、雙路徑壓縮、溯源鑑權、單調 Guard 五件隨便搬;219 包外掛樹、雙語文件配對、逐檔案全覆蓋三件沒有專職團隊別碰。判斷標準一句話:刪掉框架還成立的設計才值得抄。