這一課會完成什麼
- 建立可串聯的事件以重建控制流程,避免保存敏感內容或模型隱藏推理
- 在執行前檢查回合、時間、呼叫、輸出、修改、重試及費用上限
- 用狀態與已標準化的觀察紀錄偵測沒有進展和操作結果未知
- 在程序崩潰、工具服務中斷與核准等待後重新授權並安全恢復
開始前先準備
- • 模組 04 到 07 的狀態機、工具聯集型別、由程式強制執行的規則與評測集
- • 能在派送執行、操作效果、觀察紀錄與檢查點前後注入程序崩潰的測試資料執行器
先把定義說清楚
觀測、預算與復原
營運中的 Harness 要讓每次執行能被重建、有明確上限,並可安全復原。控制器為狀態轉移、工具執行、觀察、檢查、操作效果、預算與停止原因寫入可串聯的事件,工作前先保留所需額度,達停止條件便保存正式檢查點。恢復時重新核對身分、規則、環境、Git、狀態、核准與操作紀錄。先前對話曾取得權限,不能保證現在仍有權繼續,也不能證明未知結果的操作可以重試。
程式撰寫工作階段可能一直重跑同一失敗測試、搜尋相同路由、產生新說法,卻沒有增加證據或改變狀態。若進度由模型自行宣告,系統會在很久以後才讓人知道卡住,時間、token 與審查者注意力都已經消耗。
復原同樣是控制邊界。程序崩潰可能發生在寫入完成但觀察紀錄尚未存、分支已改變、或核准已過期。從聊天摘要恢復可能重複操作效果或套用過期權限來源。檢查點、預算台帳與結果核對把中斷變成可測狀態轉移。
現場情境
跑了六小時,證據卻沒有前進
事件數量、預算、程序崩潰邊界與復原結果都是合成測試資料。
- 負責人
- 你是準備將 Release Desk 任務放到背景執行的操作人員。
- 要做的決策
- 控制器如何偵測沒有進展,又如何在中斷的寫入後避免第二筆操作效果?
- 目前狀態
- 工作階段在同一個瀏覽器失敗與路由檢查間來回。每輪說明文字不同,文字差異啟發式判準仍報進度。另一個執行在稽核寫入後、工具觀察紀錄寫入前程序崩潰。
- 預期成果
- 第一個執行以 non_progress 結束;全新已授權工作階段查到既有稽核操作效果,從最後安全檢查點接回。
限制條件
- • 最多 14 回合、24 工具呼叫、150 秒、三次未變循環、一筆寫入只可在核對實際結果後重試、USD 2.50 教學測試預算
- • 預算在模型外執行並記 reserved、used、released、剩餘
- • 緊急停止控制要擋派送執行、取消已指定責任的租約、禁止恢復並保存證據
實作範例
已標準化的證據看出說明文字掩蓋的迴圈
證據類型: 具名模擬情境連續三輪解釋不同,已驗證操作、檔案雜湊、瀏覽器錯誤碼、缺少證據與狀態版本卻完全相同。另一個受控執行在稽核寫入成功後崩潰。
控制器比較已標準化的操作、觀察紀錄程式碼、證據涵蓋程度、差異雜湊與狀態。第三次無變化就以 non_progress 停止。程序崩潰恢復以冪等鍵查操作台帳,找到既有稽核,補存觀察紀錄並釋放預留額度,不再派送執行寫入。
憑證顯示一筆邏輯操作、一次實際寫入、零重複重試,並附檢查點。緊急停止演練只取消 Release Desk 租約,另一個測試環境仍在執行;恢復要有具名操作人員的事件紀錄,也要重新確認權限和預算,未核對的寫入不能再次派送。
主張限制
預算與門檻依任務結構、工具延遲和價值而變。教材數字只示範控制位置,不能直接搬到正式環境。
做法
照著做,每一步都有檢查點
現場情境
控制器如何偵測沒有進展,又如何在中斷的寫入後避免第二筆操作效果?
- 01定義事件與預算契約
- 02偵測有意義的進度
- 03在持久保存邊界注入失敗
驗收條件
背景執行在證據與狀態不再前進時停止;每個中斷都有確定性的復原,預算可對帳,操作人員不看對話紀錄也能介入。
- 01
定義事件與預算契約
建立狀態、工具、檢查、操作效果、預算、檢查點、核准與終止事件。回合、呼叫、時間、位元組、已變更的檔案、重試與支出都在執行前預留,結果後核對實際結果。
檢查點 · 審查者能依事件重建測試過程;模型與預設操作人員檢視中,都找不到預埋的洩漏偵測字串。
- 02
偵測有意義的進度
標準化已驗證的操作、觀察紀錄程式碼、證據涵蓋程度、差異雜湊、失敗的檢查與狀態版本。只有這些訊號往契約前進才重設計數器,說明文字改寫不算。
檢查點 · 重複迴圈在指定次數停止;修復確實改變證據或狀態時,執行可以繼續。
- 03
在持久保存邊界注入失敗
依序在五個位置程序崩潰,以全新工作階段重驗身分、規則、環境、分支、契約、狀態、預算、租約與操作效果,選重試、核對實際結果、恢復或停止。
檢查點 · 五個測試資料都到預期終止,一個邏輯操作效果,預留額度正確,沒有碰無人負責的環境。
- 04
演練緊急停止、恢復與交接
進行中的執行中觸發測試資料緊急停止,驗需求接收、派送執行、租約、恢復與尚在執行的證據,再由具名操作人員恢復。將資料包交給沒看過執行的審查者。
檢查點 · 審查者能指出停止原因和安全下一步;停止只作用於指定環境,無關環境維持正常。
實務脈絡
展示版之後
只記能回答操作問題的事件
操作人員要能回答:哪個契約與提交版本、狀態如何變、工具做了什麼、證據是什麼、預算花在哪、為何停止、哪些操作效果可能存在、下一步是否安全。事件依需要帶執行、工作階段、任務、環境、契約、提交版本、功能、span 與上層 IDs。
只保存已驗證參數中的安全欄位或雜湊。憑證、原始 Cookie、完整來源、敏感測試資料及模型隱藏推理都不進事件。遮蔽後的詳細紀錄和截圖以證據 ID 連結,另外設存取規則與保存期限。
在不同中斷位置測試復原
依序在派送前、派送後未收到回執、操作效果保存後、觀察紀錄保存後及檢查點寫入後中斷程序。先寫每案預期的狀態版本、邏輯效果、租約、預留預算、下一步與停止原因。寫入結果未知時先核對;安全讀取才依預定上限重試。
恢復跟新工作階段一樣,重新驗呼叫端權限來源、環境責任歸屬、分支/提交版本、契約、檢查點、租約、核准、預算與操作台帳。不一致進具名 blocked 或核對實際結果,不用提示詞猜測。
交付補強
預算先預留,再核對實際用量。控制器呼叫工具或模型前,按可接受上界預留額度;不足就回 budget_exhausted。結果回來後對帳並釋放差額。程序崩潰時,尚未完成的預留留在檢查點;恢復先查供應商或工具回執,避免漏計支出,也避免把已保留額度誤當可用餘額。
查詢文字不同,不代表有新進度。若命中相同檔案、沒有新證據,狀態和差異也沒變,仍可能在迴圈。相同測試指令在修正後揭露新失敗位置,則有進展。偵測器比較標準化的操作、結果代號、證據涵蓋、檔案雜湊與狀態;人工覆寫須附理由及期限。
操作人員資料包依停止原因給不同內容。沒有進展列重複訊號與缺口;預算已用盡列 reserved、used、剩餘與未完成範圍;denied 列規則程式碼與授權負責人;操作結果未知列冪等鍵、派送執行與結果核對狀態;killed 列目標責任歸屬與尚在執行的證據。資料包由事件組合,不再請模型自由摘要,值班人員才能直接選結束、核對實際結果、補權限或從檢查點恢復。
敏感資訊遮蔽要在事件資料匯入前執行,並有 canary 測試。若先寫原始執行軌跡再由儀表板遮蔽,儲存位置、備份與 debug 匯出已經暴露。對路徑、類似電子郵件的測試資料、token、Cookie、查詢參數與截圖中繼資料設欄位層級規則;需要授權調查時,走另外的受保護的來源,不在一般執行軌跡反向還原。敏感資訊遮蔽失敗本身是關鍵事件,應停止該執行的正常遙測匯出。
緊急停止控制需要涵蓋需求接收、排程器、工作單元租約、工具執行、恢復與核准佇列。只把 UI 關掉,背景執行仍可能繼續。演練中先拒新的工作,取消帶目標環境負責人的租約,撤銷工具權限,保留 unknown 操作效果供核對實際結果;恢復由具名操作人員重新驗規則與健康狀態。另一個專案、worktree 或共用系統服務不在目標清單,就不應受到任何停止操作。
檢查點保存目前契約、功能狀態、提交版本或未提交差異的雜湊、環境、工具清單、預算、租約、上一個完成的檢查、未核對的操作、核准參考及下一步。用有版本的原子替換或交易寫入,讀取時驗 schema、雜湊和版本。損壞時回 blocked 並保留調查證據,不退回舊狀態後繼續寫入。
復原測試還要涵蓋權限來源變動。舊工作階段的審查者角色被移除、核准超過期限、工具範圍縮小、契約升版或分支已合併時,即使檢查點完整也不能直接恢復。執行器重新取得當前身份與規則,計算哪些已規劃的操作效果失效,將任務移到 denied、blocked 或 needs_review。這能防止恢復 token 變成長期通行證,也讓權限收回真正作用到背景工作。
營運報表按停止原因與任務類型看趨勢。沒有進展增加時檢查知識與工具;預算已用盡增加時拆重試、測試與脈絡;denied 增加時分攻擊、需求擴張或規則偏移;操作結果未知增加時查外部服務與冪等性。被防護成功阻止的危險行為要和功能失敗分開呈現,否則團隊可能為了提高完成率而關掉有效控制。每個異常趨勢連一位負責人與下一次審查。
警示不應直接對每個事件發通知。先依執行、任務、停止原因與關鍵程度聚合,避免同一失敗產生數十個訊息淹沒值班人員。關鍵機密、越權、unknown 會影響決策的操作效果與緊急停止失敗立即升級;一般沒有進展或預算已用盡進可排序佇列,附操作人員資料包與期限。警示 acknowledgement、指派、處置與關閉也寫事件,並檢查關閉是否真的對帳操作效果或恢復健康狀態。沒有負責人或逾期的關鍵項目會自動提升,不能因儀表板被標已讀就消失。這讓可觀測性從觀看圖表變成可追責的處理流程。
復原後除了功能測試,也驗預留額度已對帳、舊租約失效、過期工作階段不能派送、操作次數正確、新檢查點一致、遮蔽軌跡完整,以及清理範圍仍正確。只看畫面恢復,可能漏掉重複工作單元、凍結預算或舊 token。事故案例納入保留測試集,標記修復版本與退役條件。
成本對帳要區分估計與供應端回報。執行器在呼叫前用保守估值預留,完成後保存實際 token、工具費、執行時間與資料量;兩者差距持續放大時,先修估算器,不把超支歸咎於單一工作階段。審查者時間也要按任務類型記錄,因為低模型費用但高人工排錯的 harness 並不便宜。報表呈現中位數、尾端與超標案例,不用平均值掩蓋少數長迴圈。每項預算都有 soft 警告、hard 停止、負責人與變更紀錄,臨時放寬只能套在明確執行且會到期。
遙測自身故障時,系統要採保守路徑。若關鍵事件無法持久化或操作回執無法讀取,停止新的會影響決策的派送執行,將目前執行標為 observability_degraded,保存本機安全檢查點並通知負責人。唯讀探索是否可繼續,由任務規則事先決定,不能由 agent 自行推測。恢復後先補送可驗雜湊的事件、對帳操作效果與預算,再決定恢復;缺口無法補齊就維持 hold。這避免監控失效時系統反而進入最難稽核的自治狀態。
動手實作
替 Release Desk 加入事件、預算與中斷演練
加入事件 schema、預算台帳、沒有進展偵測器、檢查點驗證器、操作效果結果核對與緊急停止控制,執行五個程序崩潰邊界和一個迴圈。
準備項目
- • 在輸入、工具輸出、環境與截圖中繼資料放測試資料 canary 測敏感資訊遮蔽
- • 提交可恢復的檢查點,記錄預期狀態、分支、環境、操作效果與預算
本課產出
有版本紀錄的事件契約、執行軌跡測試資料、多維度預算台帳、進度偵測器、五份程序崩潰驗收憑證、敏感資訊遮蔽報告、緊急停止/恢復演練與復原操作手冊。
起始模板: Harness event envelope
JSON Schema{"type":"object","required":["eventId","runId","taskId","type","occurredAt","payloadVersion"],"properties":{"type":{"enum":["state.changed","tool.dispatched","tool.observed","check.completed","effect.reconciled","budget.changed","run.terminated"]},"evidenceIds":{"type":"array","items":{"type":"string"}}}}可下載的實作檔
Harness event schema
harness-event.schema.json · JSON Schema
An editable course fixture for the main lab. Save it inside the Release Desk repository before running the acceptance command.
Run receipt template
he-08-receipt.json · JSON
A compact evidence record for the check, environment, result, and limits that another reviewer must be able to inspect.
驗收指令
npm run harness:recovery -- --faults fixtures/crash-boundaries.jsonl --kill-drill預期 receipt
PASS he-08 observability-recovery
crashBoundaries=5 logicalEffects=1 duplicateWrites=0
canaryHits=0 killScopeViolations=0 budgetsReconciled=true預期結果
背景執行在證據與狀態不再前進時停止;每個中斷都有確定性的復原,預算可對帳,操作人員不看對話紀錄也能介入。
留給下一課
用事件與預算分布決定平行是否值得。復原操作手冊、緊急停止演練與終止分類規則會進總整專案。
驗收條件
- 01事件能重建契約、提交版本、環境、狀態、工具、檢查、操作效果、預算與終止
- 02未變循環達指定次數就停止,改寫說明文字不算新進度
- 03五個中斷位置都維持一筆邏輯操作,依已確認結果選擇重試或核對
- 04緊急停止/恢復僅作用已指定責任的資源,拒過期權限來源並保存具名操作人員事件
常見故障
故障診間
F1執行軌跡很大,仍說不出執行為何停止。
- 先檢查
- 查關聯、狀態版本、終止事件、預算、操作效果與證據連結。
- 可能原因
- 只記原始文字,沒有控制決策與正式可信的狀態轉移。
- 修復方式
- 補有型別的事件與證據 ID,刪除不能回答操作問題的欄位。
- 下次怎麼避免
- 將執行軌跡重建設為驗收案例。
F2恢復重複一筆程序崩潰前已完成的寫入。
- 先檢查
- 比派送執行預留額度、冪等性、操作台帳、檢查點與觀察紀錄。
- 可能原因
- 把缺漏觀察紀錄當作操作效果未發生。
- 修復方式
- 從正式可信的台帳核對實際結果,補觀察紀錄,禁止再次派送執行。
- 下次怎麼避免
- 在每個操作生效及保存邊界前後中斷,確認邏輯操作和實際寫入次數。
F3緊急停止開關關掉另一個本機專案。
- 先檢查
- 檢查環境 ID、租約責任歸屬、PID、連接埠、路徑與目標清單。
- 可能原因
- 用廣泛連接埠或程序匹配,沒有任務責任歸屬。
- 修復方式
- 復原不相關程序,改成精確環境解析器,加衝突測試資料。
- 下次怎麼避免
- 操作前列出並驗證精確目標,拒絕範圍過大的路徑、空環境變數,以及僅按連接埠推測的程序歸屬。
展示版之後
正式上線前的邊界
- 01事件 schema 有穩定關聯、版本、敏感資訊遮蔽、保存期限與 access 規則
- 02回合、呼叫、時間、位元組、變更、重試、支出在派送執行前預留並對帳
- 03進度依操作、觀察紀錄、證據、差異與狀態,不依文字新鮮度
- 04每個停止原因有操作人員資料包、安全下一個操作、負責人與恢復規則
- 05復原重驗身分、權限、環境、Git、契約、狀態、租約、預算、核准與操作效果
- 06緊急停止、恢復、程序崩潰、服務中斷、操作結果未知、過期權限來源與無關衝突定期演練
證據類型
資料來源與主張限制
資料來源只支撐本課標示的主張,不代表換一個系統也會得到相同結果。
- [1]長時間執行 agent 的有效 harnessinitializer 模式 · feature ledger · session 交接 · 端到端驗證
Anthropic · 已發表研究 · 2026-08-26
- [2]長時間應用程式開發的 harness 設計planner、generator、evaluator · 可測合約 · 簡化 harness · 成本取捨
Anthropic · 已發表研究 · 2026-08-26
- [3]Harness engineering:在 agent-first 開發環境中運用 Codex知識留在 repository · 讓系統對 agent 可讀 · 機械式規則 · 處理 repository entropy
OpenAI · 公開案例 · 2026-08-26
- [4]Harness Engineering Guide執行環境邊界 · 工具系統 · sandbox · 復原模式
Nexu · 公開案例 · 2026-08-26
- [5]打造有效的 agent採用能通過需求的最簡架構 · workflow 模式 · 環境回饋 · 停止條件
Anthropic · 官方文件 · 2026-08-26
延伸的 Tenten 資源