Harness engineering 在 2026 年 3 月 Claude Code 原始碼外洩事件後,從 Anthropic 內部術語一夜變成 AI 工程師的必修課。 這個事件揭露了一件業界長期忽略的事實:讓 AI agent 真正可靠運作的關鍵,從來不是模型本身,而是包在模型外面那層 harness——agent loop、工具調度、權限控管、context 管理的整合架構。Anthropic 的 Claude Code 在 2025 年 5 月公開上線後,不到九個月就達到 USD 2,500,000,000(約 NTD 80,000,000,000)的年化營收,這個速度在 B2B 軟體史上沒有先例。而推動這個成績的核心,不是更好的 prompt,是更好的 harness。

外洩事件:一個 .npmignore 的疏忽

2026 年 3 月 31 日,Anthropic 發布 @anthropic-ai/claude-code npm 套件的 2.1.88 版本時,一個 59.8 MB 的 source map 檔案(cli.js.map)被意外打包進去。這個檔案把壓縮過的 JavaScript 直接對應回完整的 TypeScript 原始碼,大約 1,906 個檔案、512,000 行程式碼,全部可讀。

安全研究員 Chaofan Shou 在凌晨 4:23(ET)率先在 X 上公開發現。幾個小時內,整份程式碼被鏡像到 GitHub,開始被全球開發者分析。根因是 Bun runtime 的一個已知 bug(#28001,3 月 11 日提出),在 production build 中預設產生 source map,而團隊漏了在 .npmignore 中排除 *.map 檔案。

Claude Code 負責人 Boris Cherny 確認這是「單純的開發者疏失」。Anthropic 聲明未涉及客戶資料或憑證,但這已經是 13 個月內的第二次類似事件——2025 年 2 月也發生過一次 source map 外洩。更尷尬的是,同一週還有 Mythos 模型規格因 CMS 設定錯誤而曝光,五天內出了兩個外洩事件。

這次外洩的 GitHub repo 在 24 小時內拿到超過 100,000 顆星,是 GitHub 歷史上最快的紀錄。一位韓國開發者當天就用 Python 從頭重寫了核心架構。


Harness Engineering 到底是什麼?

Birgitta Böckeler 在 Thoughtworks 提出的公式說得最清楚:Agent = Model + Harness

模型負責推理,harness 負責讓推理落地。當 agent 要讀檔案,是 harness 決定這次讀取有沒有權限、結果怎麼處理、有多少東西可以塞進下一次的 prompt。模型永遠不直接碰檔案系統。

用 Anthropic 工程團隊的說法:harness 是「把語言模型變成有能力的 coding agent」的那一層。沒有這層,模型只是一個很厲害的文字接龍;有了這層,模型能夠在真實環境中連續工作數小時。

Claude Code 外洩後,業界看到的 harness 架構主要包含五個核心子系統:

子系統 功能 Claude Code 實作細節
Agent Loop 驅動感知→推理→工具執行的循環 單線程主迴圈,每輪循環結束後把工具結果注入 context
Tool Dispatch 把模型的工具呼叫路由到對應的 handler 約 40 個工具,每個都有獨立的 input schema 和權限閘門
Permission System 控制工具存取權限 規則式 pipeline:allow / ask / deny,deny 永遠優先。Auto mode 用獨立模型實例做背景分類,刻意不看 agent 的文字輸出以防 prompt injection
Context Management 管理 context window 的使用效率 三層記憶系統:即時 context、compaction 摘要、持久化記憶目錄
Session Persistence 跨 session 的狀態保存 檔案式記憶目錄,儲存使用者偏好、專案 context、跨 session 學習

外洩也揭露了 44 個未公開的 feature flag,包括一個叫 KAIROS 的背景 agent、一個叫 ULTRAPLAN 的遠端規劃模式(30 分鐘 thinking 預算),以及一個讓 Anthropic 員工在開源專案中隱藏貢獻的「Undercover Mode」。


Anthropic 的 Harness 演進:從 Sonnet 4.5 到 Managed Agents

Anthropic 工程團隊在過去一年發表了多篇技術文章,記錄 harness 設計的演進。最關鍵的轉折是他們發現的兩個問題:

第一是 context anxiety。Sonnet 4.5 在感覺 context window 快用完時會提前結束任務,即使工作還沒做完。團隊的解法是 context reset——清空整個 context window,用結構化的交接文件把狀態傳給新的 agent 實例。這跟 compaction(在原地摘要早期對話)不同:compaction 保留了連續性,但沒辦法給 agent 一個乾淨的起點,context anxiety 可能持續。

有趣的是,Opus 4.5 基本上自己消除了 context anxiety 行為,所以 Labs 團隊成員 Prithvi Rajasekaran 在 2026 年 3 月的長時間 coding harness 實驗中,直接拿掉了 context reset,改用 Claude Agent SDK 的自動 compaction 處理 context 成長。

第二是 self-evaluation 的問題。當 agent 被要求評估自己的工作品質時,傾向於過度正面的評價,即使在人類觀察者看來品質很普通。Rajasekaran 的解法借鑑了 GAN(生成對抗網路)的概念,把「做事」和「評估」拆成獨立的 agent。這在前端設計領域特別有效——他開發了四個評分標準(設計品質、原創性、工藝、功能性),讓 evaluator 用 Playwright MCP 實際操作頁面後才打分。

這套 generator-evaluator 架構後來擴展成三 agent 系統:

Agent 角色 職責 設計考量
Planner 把 1-4 句 prompt 展開成完整的產品規格 刻意不做細部技術設計,避免錯誤規格向下游傳遞
Generator 逐 sprint 實作功能 每個 sprint 結束後先自評,再交給 QA
Evaluator 用 Playwright 實際測試 UI、API、DB 每個評分標準有硬門檻,低於門檻整個 sprint 退回重做

Sprint 開始前,generator 和 evaluator 先談 sprint contract——達成「什麼算做完」的共識。溝通透過檔案進行:一個 agent 寫檔案,另一個讀了之後在同一個檔案或新檔案裡回應。


Managed Agents:從 harness 到 meta-harness

2026 年 4 月 8 日,Anthropic 正式推出 Claude Managed Agents 公開測試版,把 harness 的概念再往上拉一個抽象層。

Claude Managed Agents :Anthropic 如何用一套 API 把 AI Agent 部署時間從數月縮到數天
Anthropic 推出 Claude Managed Agents,一套 API 直接把 AI 代理的開發時間從幾個月壓縮到幾天。這項黑科技將徹底顛覆軟體開發!

核心設計借用了作業系統的虛擬化思路。幾十年前,OS 把硬體虛擬化成 process、file 這些抽象層,讓還沒被寫出來的程式也能用。Managed Agents 做了同樣的事,把 agent 的三個組成部分虛擬化:

組件 定義 介面
Session 所有事件的 append-only log getEvents() 查詢任意事件切片;rewind 回溯到任意時間點
Harness 呼叫 Claude 並路由工具呼叫的迴圈 任何 harness 實例可以接手任何 session 繼續執行
Sandbox Claude 可以執行程式碼和編輯檔案的環境 execute(name, input) → string,不管底層是 container、手機還是 Pokémon 模擬器

這三個組件各自獨立,可以分別失敗和替換。Anthropic 工程團隊用「brain」(大腦:Claude + harness)和「hands」(手:sandbox + 工具)的比喻來描述這個架構。brain 不需要知道 hand 是什麼——只要實作 execute(name, input) → string 的介面就行。

最關鍵的設計決策是把 session 從 context window 中抽離出來。傳統的 context 管理(compaction、trimming、summarization)做的是不可逆的決定——丟掉的 token 就真的丟了。Managed Agents 的 session log 延遲這個決定:所有事件都永久保存,harness 在執行時根據當前需要,從 event stream 中撈取需要的片段注入 context。五次 context reset 前的某個工具結果,在 session log 裡還是查得到。

安全面的結構性設計也值得注意:credential 永遠不進入 sandbox。Git access token 在 sandbox 初始化時注入但保持在 agent 不可觸及的位置;MCP 的 OAuth token 放在安全保管庫裡,透過 proxy 存取。這是結構性隔離,不是靠模型的能力邊界來防護——Anthropic 認為模型能力不斷提升,今天模型做不到的事情明天可能就做得到,所以從架構上讓 credential 根本不可達。

Managed Agents 的定價是消費制:標準 Claude API token 費率加上每 session-hour USD 0.08 的 runtime 費用。

Harness Engineering 的產業生態:不只 Anthropic 在做

外洩事件後,harness engineering 成為一個被明確命名的工程學科。NxCode 的指南指出,這個領域結合了傳統軟體工程和 AI 特定知識。幾個主要的 agentic coding 平台都有自己的 harness 設計:

平台 Harness 特色 配置方式
Claude Code 權限模型 + hooks 系統 + 多 session 支援 CLAUDE.md 檔案、hooks、skills
OpenAI Codex 3 人團隊平均每天 3.5 個 merged PR AGENTS.md 檔案
Cursor IDE 整合 + 循環偵測 + 模型特定 prompt 調適 .cursor/rules 檔案
LangChain / LangGraph 換 harness 不換模型就能從中等跳到頂尖 Python 程式碼定義

HumanLayer 的實戰報告提供了幾個具體的 harness 工程經驗:

關於工具輸出管理:他們發現讓 agent 看到完整的測試輸出會導致「上下文中毒」——agent 開始對剛讀過的測試檔案產生幻覺。現在他們的做法是只讓錯誤訊息浮出來,成功的輸出靜默處理。build 結果也一樣,成功不說話,失敗才給詳細日誌。

關於 MCP 工具管理:如果一個 MCP server 複製了 CLI 已經有的功能(像 GitHub、Docker、大部分資料庫),直接用 CLI 效果更好。模型在訓練資料中已經看過這些工具夠多次了,知道怎麼用,而且可以跟 grep、jq 組合使用。

關於 skills 的 progressive disclosure:把所有指令和工具塞進 system prompt 會讓 agent 越來越差。Skills 的解法是漸進揭露——agent 在決定需要的時候才載入特定的指令、知識或工具。不過 HumanLayer 也警告:skill 登錄處已經被發現散佈數百個惡意 skill,對待 skill 要像對待 npm install random-package 一樣謹慎。


外洩的安全後果

這次外洩本身不涉及客戶資料或模型權重,但產生了連鎖的安全問題。

外洩當天(3 月 31 日 00:21-03:29 UTC),一個獨立的惡意 Axios npm 供應鏈攻擊恰好同時發生。在這段時間內透過 npm 安裝或更新 Claude Code 的使用者,可能拉到了含有遠端存取木馬(RAT)的 Axios 1.14.1 或 0.30.4 版本。Zscaler ThreatLabz 的分析指出,已知漏洞(CVE-2025-59536、CVE-2026-21852)現在更容易被武器化——攻擊者只要製作精心設計的惡意 repo 或專案檔案,就能在使用者 clone 或開啟 repo 時觸發任意程式碼執行或 credential 竊取。

攻擊者也在利用外洩做社交工程誘餌。Huntress 在 3 月偵測到的一個行動,是把搜尋引擎上搜「OpenClaw Windows」的使用者導向 GitHub 上的假安裝程式。外洩後的幾個小時內,冒充「官方外洩 Claude Code 原始碼」的 repo 開始散佈 Vidar Stealer 和加密貨幣挖礦程式。

Anthropic 現在建議使用 Native Installer(curl -fsSL https://claude.ai/install.sh | bash)取代 npm 安裝,因為 standalone binary 不依賴 npm 的依賴鏈。


這對你的 AI 開發策略意味著什麼

外洩後,Claude Code 的架構不再是黑箱。記憶層、工具沙箱模式、context 管理策略,所有競爭對手——Cursor、Windsurf、Cline、OpenCode——現在都有了架構藍圖。

但這不代表 Claude Code 的護城河消失了。Productboard 工程團隊的分析區分了兩種 harness engineering:通用 harness engineering 和領域特定 harness engineering。通用的架構模式可以被複製;領域專家知識不能。Claude Code 之所以從結構上拉開距離,是因為 Anthropic 對 context engineering、工具沙箱、session persistence 的工程投入是在數千個真實使用場景中迭代出來的,不是看了架構圖就能複製的。

真正的護城河在迭代速度。Anthropic 從 Claude Code 到 Managed Agents 的產品演進,展現的是一個基礎設施正在被虛擬化的趨勢——就像 OS 虛擬化硬體讓軟體創新加速,agent 基礎設施虛擬化會讓 agent 應用開發加速。目前 Managed Agents 的定價(每 session-hour USD 0.08,約 NTD 2.6)低到足以壓過大部分自建基礎設施的成本,但把整個 agent runtime 交給單一供應商,對處理敏感資料的組織來說仍然是個未解的問題。

Harness engineering 跟傳統的 prompt engineering 有什麼不同?

Prompt engineering 處理的是模型收到什麼輸入、怎麼回應。Harness engineering 處理的是模型周圍的整個執行環境:工具調度、權限控管、context 管理、session 持久化、錯誤恢復。Anthropic 的工程文件反覆強調一個觀點:harness 編碼了「模型自己做不到的事情」的假設,而這些假設會隨著模型能力提升而過時——Sonnet 4.5 需要 context reset 來解決 context anxiety,到了 Opus 4.5 這個問題就自動消失了。

Claude Code 原始碼外洩對使用者有什麼實際影響?

外洩不涉及客戶資料或模型權重。主要風險是在 3 月 31 日 00:21-03:29 UTC 期間透過 npm 安裝的使用者可能中了供應鏈攻擊,需要檢查 lockfile 中是否有 Axios 1.14.1 或 0.30.4 版本。長期影響是安全研究者可以更精確地針對已知漏洞設計攻擊——hook 和權限邏輯公開後,製作惡意 repo 的門檻降低了。

Claude Managed Agents 跟自建 agent 框架相比,什麼時候該選哪個?

Managed Agents 適合需要快速從原型到上線的場景:內建沙箱、長時間 session、自動 compaction。NxCode 的評估指出,從零到第一個 agent 大約 30 分鐘,自建方案通常要 1-2 週。但 Managed Agents 有供應商鎖定的代價,而且客製化受限於 API surface。處理高度敏感資料或需要完全控制 runtime 的組織,自建(用 LangGraph、Pydantic AI 或自訂工具鏈)仍然是合理選擇。

為什麼 Anthropic 說 harness 編碼的假設會「過時」?

每個 harness 設計決策都基於當時模型的能力限制。例如 context reset 機制是為了應對 Sonnet 4.5 的 context anxiety——模型接近 context window 上限時會提前收工。當 Opus 4.5 推出後,這個行為消失了,原本的 context reset 機制變成多餘的工程複雜度。Managed Agents 的 meta-harness 設計就是為了應對這種情況:介面保持穩定,底下的 harness 可以隨時替換。

Harness engineering 會成為獨立的工程職位嗎?

已經在發生了。NxCode 的指南指出,harness engineer 負責設計 agent 的運作環境、撰寫配置檔(AGENTS.md、CLAUDE.md)、建立和調整回饋迴路、分析 agent 日誌找出失敗模式、定義架構約束。這個技能組合介於傳統後端工程和 AI/ML 工程之間。隨著 agentic coding 在企業端的採用率上升,這個角色的需求預計會持續成長。

引用來源

Author Insight

我們團隊在過去半年多從 Cursor 遷移到 Claude Code 作為主要的 agentic coding 工作流。在協助客戶評估 AI 開發工具時,harness 配置品質對最終成果的影響,比模型選擇的影響大得多。一個配置良好的 CLAUDE.md 加上針對專案需求設計的 hooks,可以把同一個模型的有效完成率從不到 50% 拉到 80% 以上。Managed Agents 的推出對我們來說是一個明確的信號——agent 基礎設施正在被標準化,未來的差異化會在領域知識和工作流整合上,不在底層管線上。

Share this post
Erik (EKC)

With over 20 years of experience in technology, and the startup industry, I am passionate about AI and driving innovation. Keeping the engine running

Loading...