把一個語言模型接上聊天介面,它可以回答問題。讓它呼叫工具,它開始能讀檔、執行程式、查資料,甚至修改一個專案。

接下來才是比較麻煩的問題:

它怎麼知道該讀哪些資料、能動哪些資源、失敗後要不要重試、何時必須停下,以及拿什麼證明任務真的完成?

模型只能回答其中一部分。

假設你要求一個 Coding Agent 修正結帳頁面的錯誤。模型可能看得懂錯誤訊息,也可能推得出修法,但一個能交付的系統還要處理更多事情:找到正確的 Repository、建立隔離的 Workspace、讀取專案規範、限制可用憑證、執行測試、判斷測試結果、保存進度、產生 Diff、等待必要批准,最後留下可追蹤的完成證據。

模型負責推理與選擇。圍繞模型、協調這些執行條件與控制機制的系統,就是這個系列要談的 Harness。

Model、Harness 與 Agent Product 的責任邊界

Figure 1-1|模型提供推理與選擇能力;Harness 提供執行環境、限制、回饋與驗證。

本文採用的 Harness 工作定義

本文把 Harness 定義為:圍繞 LLM 或 Agent Runtime 的執行與治理系統。

它不是單純放在模型前面的一層代理。它把模型的推理與選擇接進一個可執行的工作環境,並協調上下文(Context)、工具、狀態、政策、驗證與觀測。

一套 Harness 通常要處理以下責任:

  • 組裝這一輪模型需要看到的 Context
  • 提供工具,同時限制可用工具與參數範圍
  • 控制多步驟執行、重試、停止與人工批准
  • 保存任務狀態、檢查點(Checkpoint)與可恢復進度
  • 管理身份、權限、時間、成本與資料邊界
  • 驗證產出與實際副作用
  • 記錄可以除錯、重播與評估的執行軌跡(Trace)

這個定義故意保留一定寬度。不同產品會把 Harness 的邊界切在不同位置。

某些宿主已經提供聊天介面、Agent Loop、工具執行與 Session;開發者只需要在外部 API、Repository 規則或 CI 補上工作負載需要的控制。另一種情況是自建後端,模型 API 只是其中一個元件,Context、Tool、State、Verifier 與 Trace 都由自己的 Runtime 管理。

OpenAI 對 Codex 的不同工程文章也呈現出這種邊界差異:有時 Harness 指核心 Agent Loop 與執行邏輯,有時討論的是讓 Agent 能理解、使用並遵守的工具與環境結構。12

因此,討論 Harness 前要先問清楚:這裡包住的是裸模型、Agent Runtime,還是一個已經能自行呼叫工具的 Coding Agent?

邊界可以不同,責任不能憑空消失。

Model、Harness 與 Agent Product 各自負責什麼?

可以先用一個心智模型定位:

Agent Product Outcome = Model × Harness × Task

這不是用來計算分數的數學公式。它只是在提醒我們,產品結果同時受三件事影響:模型本身、模型所處的 Harness,以及任務是否適合這種執行方式。

Model 提供推理與選擇能力

模型通常可以:

  • 理解自然語言與程式碼
  • 根據 Context 推理與生成
  • 拆解問題並提出下一步
  • 在候選工具中做選擇
  • 根據新觀察重新規劃

模型可以提出「接下來該做什麼」,但它不天然擁有資料庫權限,也不會自動取得正確檔案、保存持久狀態(Durable State),或讓一次刪除操作變得可逆。

Harness 提供工作條件

Harness 負責把模型放進一個可以工作、也可以被限制的環境:

  • 哪些資訊可被看見
  • 哪些工具可以呼叫
  • 哪些參數與資源被允許
  • 哪些狀態由系統保存
  • 哪些失敗可以重試
  • 哪些動作需要批准
  • 哪個驗證器(Verifier)有權判定通過
  • 哪些事件必須被記錄

其中一部分是行動前的前饋控制(Feedforward Control),也就是提供規則、結構與能力;另一部分是行動後的回饋控制(Feedback Control),例如測試、Lint、Log、Browser Check、Review Agent 或其他感測器(Sensor)。

只有規則而沒有回饋,系統無法確認規則是否真的被滿足。只有回饋而沒有前置結構,Agent 會一直付學費,重犯同一類錯誤。3

Harness 不能替模型製造不存在的能力

Harness 能改善 Context、工具、回饋與限制,卻不能替模型補出原本不存在的領域推理能力。

如果模型無法理解任務,增加更多 if/else、流程節點或 Prompt,往往只會把錯誤包得更複雜。Harness 改善的是能力被使用的條件,不是憑空製造能力。

同樣地,模型說「我已確認結果正確」,也不能自動變成外部證據。自我評價可以作為一個訊號,通過與否仍要交給測試、Policy、Verifier 或明確的人類批准。

Agent Product 承擔完整結果

使用者接觸的通常是一個由模型、Harness、資料與產品介面共同構成的 Agent Product。

同一個模型換到不同 Harness,可能拿到不同的 Context、工具、權限與驗證流程;同一套 Harness 換了模型,也可能因規劃能力、工具使用習慣或錯誤恢復能力不同而改變結果。

模型排行榜只能描述特定條件下的模型表現。它無法替產品回答 Context 是否正確、工具是否可靠、權限是否安全,以及完成結果能否被驗證。

Harness 位於系統的哪裡?

Harness 通常存在於應用程式後端、Agent Runtime,或宿主產品與業務系統之間。

最常見的自建形式可以先簡化成:

User

Web / App / CLI

Backend Harness
  ├── Context / RAG
  ├── Tools / MCP / APIs
  ├── State / Checkpoint
  ├── Policy / Approval
  ├── Verifier
  └── Trace / Eval

LLM API or Local Model

這是一張概念位置圖,不是唯一或標準的部署架構。

若使用 ChatGPT、Claude Code、Codex 或其他宿主,宿主本身已經提供部分 Harness。你的外部 API、Repository 規則、CI、權限系統與驗證工具,則形成針對自身工作負載的另一層 Harness。

談產品架構前,至少要先界定三件事:

  1. 這裡包住的是裸模型、Agent Runtime,還是已經具有工具迴圈的 Agent?
  2. 哪些責任由宿主承擔,哪些由產品團隊承擔?
  3. 誰持有唯一可信狀態(Canonical State),誰有最終批准與通過權(Pass Authority)?

沒有先界定範圍,很容易把內建 Harness、外層 User Harness 和完整產品平台混成一團。

Prompt、Modelfile、Framework 都只覆蓋一部分

Prompt、Modelfile、Framework 與 Harness 的範圍比較

Figure 1-2|幾個常被混用的名詞,回答的是不同層級的問題。

System Prompt

System Prompt 主要提供角色、規則、格式與行為指引。它可以提高模型選對行動的機率,卻不應被當成硬性限制的唯一執行機制。

例如「最多重試三次」若只寫在 Prompt,模型可能誤讀、在長 Context 中被其他資訊稀釋,或根本無法對外部副作用形成強制約束。

可靠的做法是由 Runtime 計數,第三次失敗後停止、切換恢復路徑,或升級給人處理。

Modelfile 或 Model Config

Modelfile 回答模型怎麼被設定與封裝,例如 Base Model、System Prompt、Temperature、Context Window 或 Adapter。

它可以成為 Harness 的設定來源,但通常不負責實際工具執行、持久狀態、權限、Checkpoint、Verifier 與 Trace。把引擎參數調好,不等於車上已經有方向盤、煞車、導航與儀表。

Tool Calling

Tool Calling 讓模型提出結構化的工具請求。

完整系統還要決定:

  • 工具是否對這個任務可見
  • 參數是否合法
  • 目前身份是否有權執行
  • 失敗後要重試、降級還是停止
  • 工具造成的副作用要如何驗證

Tool Calling 是能力入口,治理與執行仍由 Harness 承擔。

Agent Framework

Agent Framework 可以提供 Agent Loop、Graph、Memory、Tool Registry、State Store、Checkpoint、Human-in-the-loop 與 Trace 等元件,甚至直接實作部分 Runtime。

產品仍要根據工作負載定義租戶隔離、成本上限、資料政策、完成標準與事故恢復。這些責任不會因為選了一套 Framework 就自動完成。

Anthropic 在討論 Agent 架構時,將 Workflow 與 Agent 分開:Workflow 依預先定義的程式路徑協調模型與工具;Agent 讓模型動態決定流程與工具使用。兩者都可能存在於 Harness 之內,差別在於哪些決策交給程式,哪些交給模型。4

RAG、Workflow 與 Orchestrator

RAG 解決檢索與 Context 供應;Workflow 定義較可預期的執行路徑;Orchestrator 負責下一步、路由、Handoff 與停止。

它們都可能是 Harness 的一部分,但沒有任何一項單獨涵蓋整個任務的權限、狀態、恢復、驗證與觀測。

概念主要回答的問題
System Prompt模型這一輪應遵循哪些指引?
Modelfile / Model Config模型如何被設定與封裝?
Tool Calling模型如何提出一項外部操作?
RAG要從哪些來源取回哪些內容?
Workflow / Orchestration下一步做什麼,失敗往哪走?
Agent Framework用哪些抽象與元件搭建系統?
Harness整個任務如何在限制內被執行、驗證與恢復?

判斷一套 Agent 系統時,可以先找誰持有 State、Permission 與 Pass Authority,再看它用了多少模型、工具與流程節點。功能很多,不代表 Harness 完整;責任沒有主人,系統仍然會在失敗時裂開。

模型越強,為什麼 Harness 沒有消失?

模型能力提升會擴大可處理的任務範圍,同時也會擴大行動空間(Action Space)。Agent 能讀更多資料、呼叫更多工具、執行更長流程後,系統要處理的問題反而更多。

以下不是業界統一的七項標準,而是本文用來整理 Agent 系統複雜度的七個觀察角度。

1. Context 預算壓力

完成一個局部任務,可能需要讀取多個模組、服務、設定、歷史決策與外部文件。Context 太少會漏掉限制,全部塞入又會淹沒當前任務。

2. 探索如何收斂

Agent 可以探索 Repository、文件與工具,但探索需要入口、回饋與停止條件。否則「自主」很容易退化成無界漫遊。

3. 隱性的 Runtime State

一次看似局部的修改,可能喚醒全域狀態、外部服務、租戶資料與隱性副作用。模型看得到程式碼,不代表它已掌握所有執行期狀態(Runtime State)。

4. 無法取得或無法說清楚的知識

正確做法可能只存在工程師腦中、Slack 討論、事故記憶或過期文件。對執行中的 Agent 而言,無法取得的知識幾乎等於不存在。

還有一類問題不是知識完全不存在,而是需求、例外與完成標準很難被穩定說清楚。這可以視為系統的可提示性(Promptability):團隊知道怎麼做,不代表已經能把判斷轉成 Agent 可執行的規格。

OpenAI 將 Repository Knowledge 做成可索引、可版本化、可檢查的 System of Record,背後就是這個問題。2

5. 驗證成本

產生一個答案或 Patch 很快,證明它正確往往更貴。

需要跑哪些測試、觀察哪些 Log、重播哪些 User Journey,不能每次都臨時交給模型自己決定全部標準。

6. 目標漂移

多輪工作會累積新線索、錯誤與中間決策。若沒有 Task Contract、Progress State 與停止條件,Agent 可能忙了很久,卻離原始目標愈來愈遠。

7. 副作用風險

讀取錯誤答案和執行錯誤操作不是同一個風險等級。

當 Agent 可以寄信、改資料、部署或付款,身份、批准、冪等性、回滾與稽核都必須由系統承擔。

這些問題無法只靠更長的 Prompt 解決。Prompt 影響模型如何選擇;程式、Policy 與執行環境才有能力強制邊界。

Harnessability:系統是否容易被 Agent 駕馭

討論 Agent 表現時,我們很容易把失敗歸因於模型。另一個問題同樣重要:這套系統是否提供足夠清楚的結構與回饋,讓 Agent 能理解、局部修改、快速驗證,失敗後還能可靠恢復?

這裡要看的不是模型分數,而是系統的 Harnessability

高 Harnessability 的系統通常具備:

  • 清楚而穩定的模組邊界與 Ownership
  • 可重現的 Setup、Build、Test 與 Runtime
  • 明確的 Input、Output、Side Effect 與完成條件
  • 可導航的 Repository Map 與可取得的 System of Record
  • 可局部執行的測試、快速 Sensor 與可診斷的錯誤訊息
  • 可隔離、回滾、重播與恢復的變更路徑

Harnessability 也取決於任務能否被封裝。若一項工作無法限制 Context、權限與副作用,也沒有明確 Input、Output 和完成證據,它就很難成為可靠的 Agent 工作單元。這種可封裝性可以稱為 Capsuleability

型別系統、Schema、Lint、標準專案結構與統一 Migration,都可能成為環境裡的隱性助力(Ambient Affordances)。它們不是專門為 AI 新增的華麗功能,卻能縮小搜尋空間,讓錯誤更早暴露。MartinFowler.com 的 Harness Engineering 文章也把這些環境特性視為 Harnessability 的來源。3

兩個很直接的壓力測試是:

  1. Agent 能否在不改變外部行為的情況下完成局部重構?
  2. Agent 能否只靠現有規格重建核心行為,並用外部測試證明一致?

兩項都做不到時,問題往往不只是模型能力,而是行為邊界、隱性知識或驗證基礎還不夠清楚。

Harnessability 不適合被硬壓成一個漂亮總分。更實用的結果是列出高風險維度、支持證據、受影響的任務類型,以及需要補上的 Sensor、文件、邊界或恢復機制。

有些專案此刻不適合高自主 Agent。先補 Repository Map、測試、模組邊界與可恢復執行,可能比換一個更大的模型有效。

人類的工作上移到 Steering Control Plane

從逐步操作到 Human Steering Control Plane

Figure 1-3|人類從每一步同步操作,轉向定義意圖、邊界、Sensor、任務組合與演化方向。

Agent 承擔更多執行工作,不代表人類退出系統。人類工作的重心會從逐步操作,上移到控制平面(Steering Control Plane)。

控制面責任人類要決定什麼
意圖(Intent)哪個問題值得做、優先級、Trade-off,以及可驗收結果
邊界(Boundaries)哪些資源可存取、哪些動作需批准、哪些狀態轉移必須由程式控制
感測與驗證(Sensors)要測量什麼、哪些測試可信,以及目前看不到哪些 Failure Mode
任務組合(Task Portfolio)哪些工作交給人、Agent 或混合流程,以及如何控制並行量
系統演化(Evolution)哪些重複錯誤要升級成文件、工具、測試、Policy 或架構約束

控制平面的重點不只是「人還在不在」,而是誰持有最終 Authority。

人類不必親自檢查每一步,但必須決定哪些測試具有 Pass Authority、哪些判斷需要抽驗,以及系統在什麼條件下必須停止或升級處理。

高風險、不可逆操作仍然需要批准閘門(Approval Gate)。一般進度則應記錄成持久事件(Durable Event),留到自然 Checkpoint 批次處理。

Mitchell Hashimoto 描述自己的 Agent 工作方式時,特別強調由人決定何時查看背景 Agent,而不是讓通知反過來切碎人的注意力。5 Anthropic 對實際 Agent 使用的研究也觀察到,較有經驗的使用者一方面更常允許 Agent 自主執行,另一方面也更常在必要時主動中斷。6

監督仍然存在,只是從逐步批准移到邊界、證據與例外處理。

先用五個原則檢查 Harness 設計

後面的文章會逐一展開具體架構。Part 01 先保留五個會反覆使用的原則:

  • Constraint-first:先定義身份、資源、工具、資料流、時間、成本與批准條件,再決定開放多少自主性。
  • Verifiability:重要行動必須留下外部證據。模型可以回報完成,Pass Authority 應掌握在測試、Verifier、Policy 或明確的人類 Gate 手上。
  • Progressive trust:權限依任務風險與已有證據分級,不必在「完全自動」與「每一步都問人」之間二選一。
  • Design for failure:模型、工具、網路、資料與外部服務都可能失敗。Timeout、Retry、Checkpoint、Fallback、Compensation 與 Escalation 要在失敗前設計。
  • Agent ergonomics:Tool Schema、錯誤訊息、Context 與執行入口,也是給 Agent 使用的介面。資訊密度與可操作性會影響結果,但便利性不能取代安全與驗證。

用結帳頁案例走一次

回到開頭的結帳頁錯誤,可以把三層責任拆開:

Model

  • 閱讀錯誤訊息與相關程式碼
  • 推測優惠券狀態與付款狀態的更新順序可能有問題
  • 提出修改方案
  • 根據測試結果調整 Patch

Harness

  • 定位正確的 Repository 與 Branch
  • 建立隔離 Workspace
  • 載入專案規範與相關模組
  • 只提供必要的測試憑證
  • 限制不可存取 Production Database
  • 執行單元測試、整合測試與 Browser Journey
  • 保存 Checkpoint、Diff、Log 與測試證據
  • 在高風險操作前要求批准

Task Contract

  • 修正重複扣款問題
  • 不更換付款供應商
  • 不修改無關模組
  • 相關測試必須通過
  • 結帳主流程不得出現 Regression
  • 完成時要附上可重播的驗證證據

Prompt 可以提醒 Agent「不要存取 Production Database」。真正的硬限制,是 Runtime 根本不提供該憑證,Policy 在工具執行前拒絕不允許的操作,驗證流程再確認沒有產生越界副作用。

這就是 Harness 與單純提示工程的差別。

一個可用的判斷方式

看到一個新的 Agent 產品或 Framework 時,可以先問七個問題:

  1. 誰組裝模型每一輪看到的 Context?
  2. 誰決定可用工具、權限與資料範圍?
  3. 誰保存 Canonical State 與 Checkpoint?
  4. 誰控制 Retry、Timeout、停止與人工批准?
  5. 誰驗證產出和實際副作用?
  6. 誰記錄 Trace、成本與錯誤證據?
  7. 模型、工具或 Session 失敗後,誰負責恢復?

若答案散落在 Prompt、前端狀態、幾支腳本與人的記憶裡,系統不是沒有 Harness。它只是有一套隱形、分裂,而且很難稽核的 Harness。


理論轉實作:Part 01 檢查表

  • 團隊能用一句話說清楚目前討論的 Harness 邊界。
  • 硬性限制由 Runtime、Policy 或執行環境強制,不只存在於 Prompt。
  • Canonical State、Pass Authority 與恢復責任都有明確主人。
  • 重要任務具有可觀察、可重播的外部完成證據。
  • 重複失敗會被提升成 Guide、Sensor、Tool、Policy 或架構約束。

Part 02 會把這些責任攤成一張完整架構圖,進一步處理 Request Boundary、Policy、Canonical State、Controller、Context、Capabilities、Verifier、Persistence、Observability 與 Client Protocol 的位置。

Footnotes

  1. OpenAI, Unrolling the Codex agent loop, 23 January 2026.

  2. OpenAI, Harness engineering: leveraging Codex in an agent-first world, 11 February 2026. 2

  3. Birgitta Böckeler, MartinFowler.com, Harness engineering for coding agent users, 2 April 2026. 2

  4. Anthropic, Building effective agents, 19 December 2024.

  5. Mitchell Hashimoto, My AI Adoption Journey, 5 February 2026.

  6. Anthropic, Measuring AI agent autonomy in practice, 18 February 2026.