數週前,突然大家都開始在推特上發「Harness Engineering」,一開始我以為他們是在把 hooks 或 skills 之類的東西稱作 harness;但某天我看到一則推文,把 Claude Code 當成 harness 來談,於是我整個變成「Harness Engineering 是什麼?」。
實在是越看越不懂,所以我決定去查一下 Harness Engineering 到底是什麼,順便整理一下自己的想法。
(看起來也有人跟我有一樣的疑問,最近也寫了類似文章,所以這篇算是老生常談,不過我還是想當作整理自己思路來寫)
日常對話裡其實不太會出現「harness」這個字。
a piece of equipment with straps and belts, used to control or hold in place a person, animal, or object:
- a safety harness
- a baby harness
- a parachute harness
https://dictionary.cambridge.org/dictionary/english/harness 引用
它指的是「用帶子或皮帶來控制、固定人、動物或物體的裝備」。1
也就是說,harness 是「把某個對象(A)」「透過某種裝備(B)來」加以控制的東西;但大家卻沒有明說這個(A)到底是什麼,卻紛紛喊著「那個也是 harness!」「這個也是 harness!」,於是就變成一種讓人很難理解的狀況。
由於沒有統一的定義,所以各處提到的「harness」,都需要意識到它們各自是在(A)與(B)中想像了什麼。
在整理這類概念時,通常會從 Anthropic 的解讀作為起點來展開討論;不過我在查了一圈之後,覺得對 harness 的理解最簡單的起點是 LangChain 的文章,所以先從這個角度整理。
摘要:Agent = 模型 + Harness
Harness Engineering 是為了把模型變成「工作引擎」而建構系統。
模型擁有智慧,而 harness 讓它變得有用。
https://www.langchain.com/blog/the-anatomy-of-an-agent-harness 引用
※關於工作引擎2
如果不是模型本身,那就是 harness。
Harness 指的是程式碼、設定、執行邏輯等,也就是模型本身以外的全部。
模型本身不是 agent;但如果 harness 能提供狀態、工具執行、回饋迴圈,以及可強制執行的限制,它就會成為 agent。具體來說,harness 包括:
- 系統提示詞
- tools、skills、MCP 以及它們的描述
- 綁定的基礎設施(檔案系統、沙盒、瀏覽器)
- 編排邏輯(呼叫子 agent、交接到另一個程序、模型路由)
- 為了決定性執行而設計的 hooks 或 middleware(compaction、continuation、lint 檢查)
https://www.langchain.com/blog/the-anatomy-of-an-agent-harness 引用
「除了模型以外,全部都是 harness」,我覺得這真的是很俐落的定義。
套用前面說的想法,LangChain 所說的 harness 就是:
讓模型變得有用的東西。
……但這其實就有點像 「嗯嗯,這也算是偶像活動呢」,資訊量看似增加了,實際上卻沒有增加太多。
我覺得這正好反映了「harness」之所以變成流行語的原因。
例如 Mastra 雖然不像 LangChain 那樣有寫部落格文章,但有趣的是,它在 @mastra/core 裡的 alpha 版本中定義了 Harness 這個類別。
這個 Harness 類別會統籌多種 agent 模式、共享狀態、記憶體與儲存。此外,它還提供一個控制層,讓 TUI 或其他 UI 可以管理執行緒、切換模型與模式、送出訊息、處理工具核准,以及追蹤事件。
https://mastra.ai/reference/harness/harness-class 引用
我覺得 Mastra 對 harness 的理解和 LangChain 很接近。
也就是說,比起對 harness 下某個狹義定義,更像是把「控制模型的整個層」都稱為 harness。3
「Agent = 模型 + Harness」,而且模型單獨存在時不能算 agent,這點確實沒錯。
但另一方面,依照這個定義,我們其實早就一直在使用 harness 了:像是 Cline 開始被大家大量使用的時候就是如此,tools、skills、MCP 也一直都在用;甚至用 hooks 回饋 lint 錯誤這件事,我們也早就在做了。
那麼,「時代進入 Harness Engineering」這種說法,多少就跟現實有點落差;更準確地說,應該是 「我們其實早就理所當然地在做 Harness Engineering 了」。
這幾個月和更早之前的差異,可能只在於我們要不要把它稱作「harness」而已。
我在研究時覺得很有意思的一點,是關於 harness 的文章裡,Anthropic 和 OpenAI 的部落格論述其實有些微妙的立場差異。
OpenAI 在〈Harness Engineering:在 agent-first 世界中運用 Codex〉這篇文章裡,談的是利用 Codex 進行完全不需要人類寫程式的開發。文中例如提到來自其他 coding agent 的 review 回饋、支援並行開發的開發環境,以及 AGENTS.md 的設計技巧;但正如標題所示,它談的是:在 Codex 之上還能加什麼?
也就是說,依 LangChain 的定義,Codex 本身就是 harness;但 OpenAI 似乎是把「在 Codex 已存在的前提下,如何更有效地利用它」視為 harness。
OpenAI 的想法並沒有偏離 LangChain 所提出的觀點。4
從這裡可以看出,在 coding agent 的脈絡中,可以有這樣一種兩層式的 harness 解讀:
模型
+ coding agent 工具(例如 Claude Code / Codex)
+ 用來強化與補足工具的環境與機制
這也連回到一開始提到的 「對某個對象(A)」「用某種裝備(B)」去控制它 這件事。
也就是說,你要控制的對象究竟是模型本身,還是 Claude Code / Codex,看的世界就會有些微不同。
多數軟體工程師本來就是使用 coding agent 工具的一方,所以基於上面那種層次觀點,去說「Claude Code / Codex 是 harness」其實意義不大。56
但如果把這件事延伸到非寫程式的脈絡呢?
在非 coding agent 的場景中,各自應該都會提供某種把 AI agent 功能嵌入其中的應用程式或服務,用來完成某項功能。
(不是「用 AI agent 來開發」,而是「開發 AI agent」)
AI agent 的開發,因為我自己是軟體工程師,難免有偏袒的成分,但就算扣掉這點,coding 領域的進展還是明顯領先太多。
因此,在非寫程式的脈絡裡,從以下觀點來看「Harness Engineering」也許是有意義的:
與 agent 的開發、提供相關的知識
換句話說,就是「在你的商業領域裡,做出一個像 Claude Code 一樣的存在」。
而在這樣的開發裡,Anthropic 與 OpenAI 在 Claude Code 與 Codex 的開發過程中所累積的各種做法,或許就是有幫助的 Harness Engineering 知識。
開發完成後,在 agent 使用階段中,終端使用者所做的調整與巧思
coding agent 的兩層 harness 告訴我們:廣義來看,AI agent 的終端使用者所能做的最佳化與客製化空間,本身也可以被視為 Harness Engineering。
這個啟示放到非寫程式脈絡中也一樣成立:要提供一種讓終端使用者能自行調整與控制的 AI agent 機制(相當於 coding 裡的 skills、hooks 等),可能是提高 AI agent 價值的其中一條路。
我自己的立場比較像是「使用 AI agent 來開發」而不是「開發 AI agent」,所以站在這個角度,我只能說它 不過就是個爛流行語。
不過如果硬要說這次跟流行語正面交鋒後得到的成果,那大概就是我做了 「回顧 Skills 的最佳實踐調查 Skills」。
我在研究 Harness Engineering 時找到了上面那篇文章。
文中提到:原本為了讓 Sonnet 4.5 穩定運作而導入的工具,在 Opus 4.5 上反而被移除了,因為隨著模型演進,這些東西已經不需要了,甚至變成了負擔。
我原本就做了一個叫做「回顧」的 Skills。這個 Skills 的做法是:在對話中,讓 Claude Code 自己回顧我對它爆氣的內容,檢討並導入防止再發生的措施。
這個 Skills 的確大幅抑制了我因相同原因再次爆氣的情況,對我精神穩定幫助非常大;但缺點是 CLAUDE.md 和 Skills 會越長越肥大。
於是我又新做了一個 Skills:去調查 Anthropic 的部落格與最近關於最佳實踐的文章,看看有沒有偏離現況、或者過去需要但現在不需要的規則與 skill,然後把結果反映進去。
我打算定期執行這個流程,讓系統能持續吸收最新的最佳實踐。
……不過說到底,這其實也只是一種就算不用 AI 也應該做的改善循環,所以對我來說,Harness Engineering 果然還只是個流行語而已。
a baby harness 這個例子,我才想起自己最後一次聽到「harness」這個詞,是幾年前網路上因為要不要替小孩使用那種防走失「harness」而引發話題的時候。↩