Harness Handbook:讓 AI Agent 的「執行框架」變得可讀、可導覽、可修改
Harness Handbook: Making Evolving Agent Harnesses Readable,Navigable, and Editable
背景
當我們談論一個 AI agent 有多強,往往只想到它背後的基礎模型(foundation model)夠不夠聰明。但實際上,agent 的能力有一大部分來自它的「harness」——也就是負責組裝 prompt、管理狀態、呼叫工具、協調多輪執行流程的那層程式碼骨架。無論是終端機操作型 agent(如 Terminus-2),還是多介面的程式碼助手(如 Codex,涵蓋 CLI、TUI、app-server、沙盒環境),這層 harness 都會隨著模型更新、API 變動、環境需求改變而必須不斷修改。
問題是,這類 production harness 通常規模龐大、模組間高度耦合,而且「行為」(behavior)往往分散在多個檔案、多個執行階段,甚至跨越狀態暫存器(state register)才能完整實現。舉例來說,Codex 這個專案本身就有 2,267 個檔案、34,363 個內部函式、140 個執行階段。當開發者或 coding agent 收到一個修改需求(例如「讓某個完成判斷更穩定」),第一步永遠是「這個行為到底寫在哪裡」——這件事被稱為 behavior localization(行為定位)。
現有的程式碼搜尋、repository 索引、長文本處理技術雖然能協助檢閱程式碼,但它們解決的是「怎麼讀」,而不是「行為對應到哪些程式碼」這個核心的映射問題。因為修改需求描述的是「系統應該做什麼」,而 repository 卻是照檔案與模組組織的,兩者存在根本性的落差。這個落差沒被解決之前,即使給 agent 再大的 context window,它仍然得靠自己一點一滴地在程式碼海中摸索,這正是本論文要解決的瓶頸。
方法
論文提出兩個核心設計:Harness Handbook(行為手冊)與 Behavior-Guided Progressive Disclosure,簡稱 BGPD(行為導向的漸進式揭露)。
Harness Handbook 是一個以「行為」為中心、自動從 harness codebase 合成出來的表示法,靠靜態分析加上 LLM 輔助結構化產生,把每個行為明確連結回它對應的原始程式碼位置。它分成三層加一個補充視角:
- L1(系統總覽):描述整體架構與執行模型;
- L2(元件總覽):說明各個執行階段(stage)的職責與資料流動;
- L3(實作條目):具體對應到程式碼的條目,附帶可驗證的原始碼定位資訊(source locator);
- 另外還有一個 state-register 視圖,專門追蹤那些跨階段共享的狀態暫存器讀寫點,這正是最容易被關鍵字搜尋遺漏的地方。
建構流程是三個確定性(非隨機、可重現)階段:
- 靜態事實抽取:用語言專用的 adapter 直接解析 repository,抽出函式、邊界、簽名與呼叫圖,這步完全不靠 LLM;
- 行為組織化:分兩種模式,一種是「以函式為葉節點」(function-as-leaf,適用於 Terminus-2 這類從可信種子骨架出發的系統),另一種是「以檔案為葉節點」(file-as-leaf,適用於 Codex 這類需要從 repository 推斷階段結構的系統);
- 階層式合成:把階段骨架轉換成 L1–L3 的文件樹,每個節點都附上經過驗證、對應到目前程式碼的原始碼定位。
有了 Handbook 之後,BGPD 讓 agent 依照「由粗到細」的方式導覽:先看系統層級的行為索引,逐步下探到具體元件與實作細節,最後把候選的程式碼位置拿去跟目前的原始碼做驗證,確認沒有過時或錯位,才進入編輯規劃階段。這種方式本質上是把「行為定位」拆解成可驗證的檢索步驟,而不是一次性丟給模型去大海撈針。
實驗結果
研究團隊在兩個真實的開源 harness 上做評測:Terminus-2(Python,6 個原始檔、103 個函式、20 個執行階段、106 個 L3 條目,是一個透過 tmux session 執行「觀察—決策—行動」迴圈的終端機 agent)與 Codex(Rust,2,267 個檔案、34,363 個內部函式、140 個執行階段、2,267 個 L3 條目,是涵蓋多種介面的程式碼 agent)。
在整體修改計畫品質(plan quality)上:
- Codex 的整體勝率(win rate)從 28.3% 提升到 38.3%,增加 10.0 個百分點;
- Terminus-2 的勝率從 26.7% 提升到 45.6%,增加 18.9 個百分點;
- 其中「定位」(localization)這個維度增幅最大:Terminus-2 +12.2 點,Codex +2.2 點。
更值得注意的是,這些提升並非靠燒更多 token 換來的——反而更省:
- Codex 的規劃 token 用量從每次請求 0.102M 降到 0.089M,減少 12.7%;
- Terminus-2 從 0.058M 降到 0.053M,減少 8.6%。
對照獨立、由更強模型產生的參考計畫(reference plan)做比對時:
- Codex 的 symbol 層級 F1 提升 18.8 點;
- Terminus-2 的檔案層級 F1 提升 10.6 點;
- 「完全答錯」(wrong,即零重疊)的比例最多下降 25.9 點。
按修改需求類型細分也一致向好:查詢式修改(不指名具體目標)Codex 提升 26.7 點、Terminus-2 提升 23.3 點;跨檔案端到端能力新增(cross-file)Codex +16.3 點、Terminus-2 +20.0 點;最難的「對搜尋不友善」案例(search-hostile,也就是實作藏在鏡像或 fallback 路徑中)Codex +20.0 點、Terminus-2 +33.3 點——這正是傳統關鍵字搜尋最無力的場景。按難度細分,六組比較的增幅介於 3.7 到 33.3 個百分點之間,顯示 Handbook 輔助對簡單和複雜任務都有幫助。
論文附錄還舉了一個具體案例:在 Terminus-2 的一次「三次連續確認才判定完成」需求中,規劃 agent 透過 Handbook 索引先定位到 Completion Gate 階段與對應的暫存器,接著發現該暫存器的寫入點牽涉初始化與每輪重置邏輯,最終在 terminus_2.py 中精確找出三處需要修改的位置,把原本的布林旗標邏輯改成整數計數器。這類分散在多處、彼此透過狀態耦合的行為,正是關鍵字搜尋最容易漏掉的類型。
意義
這篇論文把焦點從「agent 能不能生成正確的程式碼修改」往前移了一步,指出真正的瓶頸其實是「知道該改哪裡」。過去大家傾向於用更強的模型、更長的 context window、更好的程式碼搜尋工具去解決這個問題,但論文證明:把「行為」明確地組織成可導覽、可驗證的表示法(Harness Handbook),再搭配漸進式揭露的檢索策略(BGPD),能讓相對較弱的規劃模型在定位精準度上逼近更強模型的水準,而且用更少 token 完成。
對於正在打造或維護 agent harness 的團隊來說,這意味著與其把心力全押注在換更貴的模型上,不如投資在把系統的「行為—程式碼」映射關係顯性化。尤其當 harness 規模擴大到數千個檔案、數萬個函式時(就像 Codex 這種真實案例),這種結構化的行為手冊可能會成為維護大型 agentic 系統不可或缺的基礎設施,就像過去的 API 文件或架構圖之於傳統軟體工程一樣。這也呼應了一個更大的趨勢:agent 系統的可演進性(evolvability),不只取決於模型能生成什麼,更取決於整個系統是否「可讀、可導覽、可修改」。