Agent 產品很容易展示「會做什麼」:查資料、改程式、操作瀏覽器、呼叫 API,再把進度串流到一個漂亮介面。
架構審查真正需要回答的是另一組問題:
Request 進來後,誰確認身份與 tenant?誰決定這次能用哪些工具?哪一份狀態代表這次執行?模型說完成時,誰根據什麼證據接受它?Client 斷線後,任務由誰繼續持有?
功能清單回答不了這些問題。
一套系統可以同時具備 RAG、Memory、MCP、Workflow、Multi-agent 與 Trace UI,卻在第一個失敗情境中裂開:前端顯示完成,Worker 還在執行;Task Runner 與 Agent 各自 Retry,讓同一副作用發生兩次;模型聲稱測試通過,實際只跑了一個套件;Browser tab 關閉後,唯一的進度也跟著消失。
架構圖的價值不在框的數量,而在於它是否畫清楚 Authority、State Ownership、資料流、證據與失敗責任。
Part 01 界定了 Harness 的工作範圍。Part 02 把那些責任放進同一張系統地圖。這裡說的「完整」,指的是責任覆蓋完整,不代表每套系統都要採用相同部署拓撲,也不要求每個框都拆成 Microservice。

Figure 2-1|完整的責任地圖需要說清楚 Request 如何進入、誰持有執行真相、誰能授權行動,以及完成如何被證據接受。
先找 Authority,再看功能
評估 Agent 架構時,先數功能通常會把問題看反。
兩個產品都寫著「支援 Retry」,可能指完全不同的機制:
- SDK 在 HTTP Timeout 後重送模型 Request
- Agent Loop 在 Tool Failure 後重新規劃
- Task Runner 在 Worker Crash 後重啟整個 Work Unit
- Orchestrator 把工作重新指派到另一個 Workspace
四層都會重試,不會自動比一層更可靠。若 Retry Ownership 沒有被定義,它們可能重複部署、重複寄信或重複寫入資料。
State 也有相同問題。Frontend、Agent Memory、Workflow Engine、Issue Tracker 與 Database 都可能保存 status,但沒有規則說明衝突時以誰為準。Happy Path 看起來一致,斷線、取消或恢復後便開始分岔。
一張可用的 Harness 架構圖至少要回答:
- 哪個元件擁有哪一項決策權?
- 哪個記錄對哪一類事實具有 Canonical Authority?
- 一次操作如何跨越邊界,並留下可關聯的證據?
- 失敗、取消、斷線或重試後,責任回到哪裡?
沒有這些答案,圖上即使放滿技術名詞,也很難用來審查系統。
一張以責任為中心的參考架構
下面是一個通用的責任模型:
User / Client Request
↓
Request Boundary
identity · tenant · schema · admission
↓
Task Contract + Effective Policy
objective · acceptance · budget · tools · approval
↓
Canonical Run Authority ↔ Workflow / Agent Controller
├─ Context Builder
├─ Model Adapter
├─ Query Planner / RAG
├─ Capability Registry / Execution Runtime
├─ Hooks / Middleware
└─ Approval and Recovery Gates
↓
Verification + Completion Gate
evidence · criteria · authority
↙ ↘
Not accepted: repair / retry / fallback / stop Accepted
↖ ↓
└──────── Controller Commit state and evidence
↓
Response / Stream / Artifact
Cross-cutting:
- Durable State / Checkpoint / Artefact Store
- Trace / Metrics / Audit / Replay / Eval Data
這張圖不是單純的線性 Pipeline。
Canonical Run Authority 必須在整個執行期間被讀取與更新;Persistence 與 Observability 也不是最後才補上的 Dump。它們橫跨 Request Boundary、Controller、Capability Execution、Approval、Verification 與 Delivery。
同一個 Process 可以承擔多項責任。一項責任也可能由多個服務協作完成。重點是 Authority 清楚,而不是服務數量漂亮。
1. Request Boundary:先建立可信的入口
Request Boundary 把外部輸入轉成內部系統可以安全處理的 Request。
它通常處理:
- Authentication:Request 是誰送出的
- Tenant / Project Scope:該身份屬於哪個資料與資源範圍
- Initial Authorisation:是否可以啟動這類工作
- Input Schema:欄位、格式、大小與必要參數是否合法
- Rate Limit / Admission Control:系統現在是否接受工作
- Request ID / Correlation ID:後續事件如何被串起來
這一層不能只確認「有登入」。多租戶系統若只把一段自然語言丟進後端,RAG、Memory、Tool、Trace 與 Artifact 很可能在下游失去 tenant 邊界。
Request Boundary 也不應替模型猜完整意圖。它先固定可信的身份、範圍與輸入形狀,讓後面的元件不必各自重新解讀一次。
2. Task Contract 與 Effective Policy:把完成條件和執行權限分開
Task Contract 回答:
這次工作完成時,應產出什麼,而且拿什麼證明?
常見內容包括:
- Objective
- In-scope / Out-of-scope
- Required Outputs
- Acceptance Criteria
- Required Evidence
- Completion、Pause 與 Stop Conditions
Task Contract 不一定由模型即時生成。它可以來自 API Request、Issue、Workflow、人工規格或版本化模板。關鍵是這次 Run 使用哪一版 Contract,必須可以追溯。
Policy 回答另一個問題:
在目前身份、tenant、任務與風險條件下,系統允許怎麼執行?
它可能包含:
- 可用模型與 Fallback
- Token、時間、成本、容量與步數上限
- 可用工具、資料來源、Filesystem 與 Network 範圍
- Timeout、Retry、Escalation 與 Cancellation 規則
- 哪些 Operation 需要人工批准
- 哪些 Verification Gate 必須通過
實際 Policy 往往來自 Organization、Tenant、Project、Task、Tool 與單次 Operation。集中 Authority 不等於把所有規則塞進同一份檔案,而是要有一個地方解析優先順序,產生可稽核的 Effective Policy。
若 Timeout 藏在 SDK、Budget 寫在 Controller、Tool Deny 放在 Hook,另一份 Allow List 又塞在 Prompt 裡,出事時每個元件都可能聲稱自己照規則行事,系統卻說不出哪個規則優先。
Task Contract 與 Policy 可以被摘要進 Prompt,但硬限制仍應由 Runtime、Policy Decision 與執行環境強制。
3. Canonical Run Authority:單一權威不等於單一資料表
RunState 保存的是一次執行的系統事實,不只是聊天內容。
它可能包含:
- Run、Thread、Turn 與 Task Identity
- 目前 Phase、Status 與 State Version
- 已使用的 Budget
- Tool Request、Operation ID、Result 與 Unknown Outcome
- Pending Approval
- Checkpoint、Artifact 與 Evidence Reference
- Policy、Prompt、Model 與 Tool Schema Version
- Cancellation、Error、Recovery 與 Completion State
Transcript 可以是 RunState 的一部分或衍生視圖,不能和完整執行真相畫上等號。
例如 Tool 已經成功寫入外部 Database,但 Result Event 因網路中斷沒有回到 Agent。Transcript 可能看起來像「尚未執行」,外部系統卻已經發生副作用。這時外部 Database 對自身資料仍有 Authority;RunState 要保存 Operation ID、已知結果與 Reconciliation 狀態,而不是假裝自己能取代所有外部真相。
因此,「Canonical」不代表所有事實都塞進一筆 Record。它代表:
- 每一類關鍵事實都有明確 Authority
- 一次 Run 的生命週期與 State Transition 有唯一控制權
- 其他 Projection 可以被重建或 Reconcile
- Client 顯示、Dashboard 與 Issue Status 不能各自改寫 Run 的真相
Part 06 會完整處理 Thread、Checkpoint、Pause、Resume、Fork 與 Persistence。Part 02 先固定一條邊界:Client Memory 不能成為長任務唯一的 Source of Truth。
4. Controller 協調執行,但不應吞掉所有責任
Workflow / Agent Controller 根據 Task Contract、Effective Policy、Canonical Run State 與最新 Observation,決定下一個合法的 State Transition。
在固定 Workflow 中,主要路徑由程式預先定義;在較自主的 Agent 中,模型可以提出下一步與 Tool Request。Anthropic 把前者描述為由預定 Code Path 協調模型與工具的 Workflow,後者則讓模型動態主導流程與工具使用。兩者都能存在於同一套 Harness;差別是 Decision Authority 放在哪裡。1
OpenAI 對 Codex 的拆解也顯示相同層次:Agent Loop 負責協調使用者、模型與工具;完整 Agent Experience 還需要 Thread Lifecycle、Persistence、Config、Auth、Tool Execution 與 Client Protocol。23
Controller 周圍常見的能力可以這樣分:
| 能力 | 主要責任 | 不應偷偷承擔的責任 |
|---|---|---|
| Context Builder | 組裝 Instructions、Task State、History、Evidence 與可見 Tools | 不應成為 Durable Memory 的唯一 Authority |
| Model Adapter | 隔離 Provider Request、Streaming、Tool-call Format 與 Error | 不應混入 Product Policy |
| Query Planner / RAG | 判斷何時檢索、查哪些來源、如何組合 Evidence | 不等於整個 Orchestrator |
| Capability Registry | 描述 Schema、Risk、Cost、Timeout 與 Permission Requirements | 不等於已經授權這次 Operation |
| Execution Runtime | 驗證參數並執行 Tool、Command、API 或 Sandbox Action | 不應接受模型自我授權 |
| Hooks / Middleware | 在明確 Event Point 觀察、轉換或附加控制 | 不應成為第二個隱形 Controller |
| Approval / Recovery Gates | 暫停、取得人類決定、Repair、Fallback、Reconcile 或 Stop | Human Approval 不是一般 Tool Call |
這裡將 Registry 與 Runtime 分開,是因為「系統知道某個 Tool 存在」和「這次 Operation 已被授權並成功執行」是不同事實。
Approval 也不是一張和 Context Builder 平行的功能卡。它是一個受 Policy 與 State 約束的 Gate,必須綁定具體 Operation、Arguments、Risk、Expiry 與當前 State Version。
一小段 Pseudocode 能證明什麼?
Part 02 可以用短 Pseudocode 表達責任順序:
def handle_agent_request(request):
principal = request_boundary.admit(request)
contract = contracts.resolve(request, principal)
policy = policies.resolve_effective(contract, principal)
run = run_store.start(contract, policy)
while not run.is_terminal:
step = controller.next_step(run)
if step.kind == "model":
event = model_adapter.invoke(context_builder.build(run))
elif step.kind == "capability":
grant = policy.authorise(step.operation, run)
event = capability_runtime.execute(step.operation, grant)
elif step.kind == "approval":
event = approval_gateway.request(step.operation, run)
else:
event = step.as_event()
evidence = verification.check(event, run, contract, policy)
run = run_store.commit_transition(run, event, evidence)
return delivery.from_committed_run(run)
它可以說明:
- Identity 與 Scope 在 Agent Execution 前建立
- Contract 與 Effective Policy 是不同責任
- Controller 只從已提交的 Run State 推進
- Model Proposal 不會直接變成 Tool Execution
- Approval 是 State Transition,而非聊天中的一句「可以」
- Verification Evidence 與 State Transition 一起被提交
- Delivery 來自已提交的 Terminal State
它不能證明:
- Distributed Lock、Concurrency 與 Worker Crash 已正確處理
- Side Effect 具備 Idempotency、Unknown-outcome Reconciliation 與 Compensation
- Streaming、Approval Expiry、Cancel 與 Reconnect Semantics 正確
- Authentication、Tenant Isolation、Sandbox 或 Secret Boundary 已安全實作
- 這段示意程式可以直接進 Production
程式碼看起來像真的,不代表它證明了 Production Readiness。Proof Boundary 必須另外寫清楚。
5. Verification 與 Completion Authority:生成者不能自我驗收
模型可以產生候選答案、Patch 或行動計畫。它不應同時擁有最終 Pass Authority。
Verification 可以組合:
- Deterministic Tests
- Schema Validation
- Lint、Type 與 Architecture Checks
- Citation / Grounding Checks
- Permission 與 Side-effect Evidence
- Browser / API Journey
- 經校準的 Model-based Evaluator
- 特定風險類別的人類 Review
但「Verifier」不一定是一個中央服務,也不應被理解成無條件掌握所有權力。
更精確的做法是把它視為 Verification and Completion Gate:
- Verifier 產生與彙整 Evidence。
- Task Contract 定義必須滿足哪些 Criteria。
- Effective Policy 決定哪些 Gate、Threshold 或 Human Decision 適用。
- Completion Authority 只接受符合當前 Contract、Policy 與 State Version 的結果。
可修復的 Failure 也不應只回傳 false。它至少需要指出:
- Failed Criterion
- Supporting Evidence
- Repair Boundary
- 是否允許 Retry、Fallback 或 Escalation
OpenAI 的 Harness Engineering 文章把可執行 Architecture Constraints、Feedback Loops 與持續掃描用來維持 Agent-generated Codebase 的一致性。這類 Sensor 的價值,在於把品質判斷從模型自我宣告移到外部可檢查的 Control。4
Part 10 會展開 Verifier、Quality Gate 與 Evaluation。這一篇只先確立位置:候選產出必須通過獨立於生成者的 Acceptance Path,才會進入 Accepted Completion。
6. Persistence 與 Observability 是橫切責任
Persistence 不能只在最後把結果 Dump 進 Database。
Harness 可能需要持久化:
- Canonical Run State 與 Version
- Transition Event 與 Event Ordering
- Checkpoint
- Tool Request / Result Pairing
- Operation ID 與 Side-effect Reconciliation State
- Policy Decision 與 Approval Record
- Artifact、Diff 與 Evidence Reference
- Model、Prompt、Tool、Retriever 與 Config Version
Observability 則回答另一組問題:
- 哪一步變慢或變貴?
- 哪一版 Policy 允許了 Operation?
- Model 在 Retry 前看見了什麼?
- 哪個 Tool 改變了外部狀態?
- Verification 為何失敗?
- 能否重建或 Replay 這次 Trajectory?
兩者資料會重疊,但用途不同。Persistence 支援一致性與恢復;Observability 支援看見、診斷與營運。
「全部 Log 下來」也不是設計。敏感欄位需要 Redaction,Event Schema 需要版本,Trace 要能用 Run ID、Turn ID、Tool Call ID 與 Operation ID 關聯。否則系統只是把不可查的文字變得更貴。
最重要的順序是:
Execute
→ record outcome
→ verify
→ commit state and evidence
→ deliver response or event
回覆 Client 之前,系統不一定要同步完成所有冷資料寫入,但必須先完成足以恢復、去重與證明當前狀態的 Durable Commit。
一次 Request 的八個階段

Figure 2-2|一次 Request 是身份、政策、狀態、執行與證據的連續轉換,不只是 Model Call 後接一個 Response。
一個典型 Request 可以分成八階段:
- Client 建立 Request:提交 Input、Thread Reference 與 Client Capabilities。
- Boundary Admission:確認 Identity、Tenant、Authorisation、Schema 與 Capacity。
- 解析 Contract、Effective Policy 並啟動 Run:固定本次執行的目標、限制、版本與 Correlation IDs。
- 組裝 Context:載入 Instructions、History、Run State、Retrieved Evidence 與可見 Capabilities。
- 執行 Model Inference:模型產生候選輸出、Tool Request 或下一步 Proposal。
- 授權並執行 Capability:Harness 驗證 Operation,必要時進入 Approval Gate,再執行並記錄 Observation。
- 驗證並提交 State Transition:套用當前 Gate,保存 Evidence,選擇 Continue、Repair、Retry、Fallback 或 Stop。
- 完成 Durable Commit 並交付:確認 Terminal State、Artifact、Trace 與必要 Evidence 已持久化,再以 Response 或 Event Stream 更新 Client。
不是每個 Request 都會重複走滿八階段。唯讀問答可能只需要一次 Model Inference 與 Verification;長任務則會在第 4~7 階段循環多次。
以 RAG 問答為例,模型提出 rag_search 只代表它需要資料。Harness 還要套用 Tenant Filter、執行 Retrieval、保存 Source Reference、把結果送回模型,再檢查 Citation 與 Grounding。呼叫搜尋工具,不等於答案已經 Grounded。
Control Plane 與 Data Plane
Control Plane 與 Data Plane 是責任分界,不是 Microservice 規定。
Data Plane 執行工作
- 呼叫模型
- 執行 Tool、Command 與 API
- 讀寫 Workspace
- 查詢 RAG 或 Database
- 產生 Artifact
- 執行測試
Control Plane 決定工作如何被允許與推進
- Identity、Tenant 與 Effective Policy
- Task Contract、Priority 與 Admission
- Budget、Capacity 與 Cancellation
- Canonical Run State
- Approval、Escalation 與 Completion Authority
- Version、Deployment、Rollback 與 Kill Control
兩者可以存在同一個 Process。分界的用途,是避免 Tool Worker 悄悄改寫全域 Policy,也避免 Client Button 直接跳過 Server Authority。
一個可擴展的原則是:
集中管理 Invariants 與 Authority,在受控邊界內保留局部自主。
Architecture Dependency、Tenant Scope、Required Tests 與高風險批准可以集中強制;Agent 仍可在邊界內選擇演算法、局部重構路徑與允許的 Tool 順序。控制「不能破壞什麼」,通常比規定每一步怎麼做更耐久。
Headless Harness Service:讓多個 Client 共用同一套執行核心

Figure 2-3|多個 Client 透過穩定的雙向 Protocol 共用 Harness Service、Agent Core 與 Durable Thread State。
當同一個 Agent 要出現在 CLI、IDE、Desktop、Web 與 Partner Product 時,最直接的 Prototype 是每個 Client 各接一次 Agent SDK。很快便會出現行為分岔:
- 某個 Client 支援 Approval,另一個不支援
- Diff、Progress 與 Tool Event 在不同介面使用不同語意
- 每個 Client 各自組裝 Prompt 或維護 Session State
- 修正 Agent Loop 時,需要同步修改多個產品
Headless Harness Service 把執行核心與 Durable State 放在不依賴 UI 的 Runtime 中。Client 負責輸入、呈現與互動,不負責成為長任務的唯一 Authority。
CLI / IDE / Desktop / Web / Partner Client
↕
Stable bidirectional protocol
↕
Headless Harness Service
auth · thread manager · events
approvals · config · negotiation
↕
Agent Core Runtime
loop · context · tools · sandbox
↕
Durable Thread State / Event History
OpenAI 的 Codex App Server 是一個具體例子。OpenAI 說明 Codex Web、CLI、IDE Extension 與 Desktop App 由同一套 Codex Harness 支撐;App Server 提供雙向 JSON-RPC 介面,讓 Client 提交 Request、接收多個 Event Update,Server 也能在需要 Approval 時主動發出 Request 並暫停 Turn。3
這個案例同時顯示一個重要細節:相同 Harness 不代表所有 Client 都必須使用完全相同的部署方式。Local App 可以啟動 Child Process;Web Runtime 可以在 Container 中執行;某些 Client 也可能暫時保留 Same-process Integration。需要穩定的是 Thread Identity、Event Lifecycle、Approval、Cancellation、Version Negotiation 與 Reconnect Semantics。
Headless 是邏輯邊界,不是「一定遠端」的同義詞。Harness Service 與 Agent Core 也可以在同一個 Process 中,只要 Client Protocol 與 State Authority 沒有因此變得模糊。
Composable Harness Stack:組合可以,重複掌權不行
Production Harness 很少由單一產品包辦。常見組合可能是:
Requirement / Issue System
→ Task Runner
→ Orchestrator
→ Coding Agent
→ Sandbox / Workspace
→ Tool and Protocol Layer
Runtime State、Memory、Policy、Observability、Evaluation 與 Artifact Storage 可能橫跨整個 Stack。
問題不在組合,而在 Authority 重疊:
| 衝突 | 典型後果 |
|---|---|
| Double Retry | 同一 Side Effect 執行兩次 |
| Split-brain Task State | 看板、Worker 與 Agent 對狀態各有不同答案 |
| Duplicate Memory | Runtime、Project Notes 與 Local Memory 保存不同版本的事實 |
| Nested Sandbox | 外層與內層的 Mount、Network 或 Permission Policy 衝突 |
| Conflicting Approval | UI Approval 繞過 Enterprise Deny,或兩層 Gate 給出相反決定 |
每兩層交界至少要有 Integration Contract,說清楚:
- Identity 與 Tenant Scope 如何傳遞
- Operation / Correlation ID
- Payload 與 Protocol Version
- Error、Retry、Cancellation 與 Unknown Outcome Semantics
- Evidence、Audit 與 State Reconciliation
- 哪一層擁有最終 Authority
加入新元件前,先問:
移除它之後,哪一個具體 Failure Mode 會重新出現?
如果回答不出來,新增的可能不是控制,而是另一層維護成本。
Agent 生態不是單一產品類別

Figure 2-4|九類 Agent 產品解決不同層級的 Failure Mode;它們不是一條成熟度階梯,也不應直接放進同一排行榜。
以下九類是本系列使用的分析地圖,不是業界標準,也不是固定的產品標籤。成熟產品可能跨越多個類別。
| 類別 | 主要解決的問題 |
|---|---|
| Coding Agent | 直接讀寫程式碼、使用工具並交付 Patch 或 Artifact |
| Agent Runtime | 管理跨 Turn / Session 的執行、事件與 Process Lifecycle |
| Harness Framework | 提供 State、Tool、Checkpoint、Policy 與 Subagent Primitives |
| Task Runner | 把 Issue、Ticket 或 Spec 轉成可追蹤的 Work Unit |
| Orchestrator | 管理多個 Agent、資源、並行、隔離與工作 Ownership |
| Full Lifecycle Platform | 串接需求、執行、驗證、批准、部署與治理 |
| Knowledge / Memory Layer | 管理跨 Session 知識、偏好、歷史、讀取與過期 |
| Requirements / Specification Layer | 把人類意圖轉成可執行、可驗證的需求 |
| Standards / Protocol Layer | 定義跨 Tool、Client、Agent 或 Repository 的交換契約 |
分類的用途是先定位問題:
- MCP 提供互通契約,不會自動成為 Authorisation System
- Coding Agent 不等於 Durable Runtime
- Orchestrator 不會自動解決 Memory Governance
- Task Runner 不等於完整 SDLC
- Full Lifecycle Platform 也可能超出一個 Queue Consumer 的實際需求
先找到 Failure Mode 所在的層級,再比較產品。否則同一張 Ranking 可能同時放進執行者、Runtime 與協調平台,分數看似精確,問題卻沒有對齊。
Harness 想把什麼調節到 Desired State?
「元件齊全」也不能直接證明 Harness 有效。還要問它想把系統維持在什麼 Desired State。
MartinFowler.com 的文章在 Coding-agent 脈絡下區分 Maintainability、Architecture Fitness 與 Behaviour Harness。5 本系列在這三類之外,再加入 Reliability / Operations 與 Product Quality / Taste,作為較完整的產品與營運視角。後兩類是本文的延伸,不應反過來歸因給原文章。
| Regulation Domain | 想維持的狀態 | 常見 Sensor |
|---|---|---|
| Maintainability | Duplication、Complexity、Dependency Hygiene、Documentation Drift | Lint、Static Analysis、Test-quality Checks |
| Architecture Fitness | Module Direction、Ownership、Layering、API Boundary | Architecture Tests、Dependency Analysis |
| Behaviour | Acceptance Criteria、User Journey、Permission、Business Correctness | API / Browser Tests、Contract Tests |
| Reliability / Operations | Latency、Error、Capacity、Recovery、Data Integrity | Runtime Telemetry、SLO、Incident Replay |
| Product Quality / Taste | Consistency、Accessibility、Design Judgement、Writing Voice | Calibrated Rubric、Model Evaluator、Human Sampling |
同一套 Harness 不必同時覆蓋全部 Domain,但每個 Domain 都要回答:
- Desired State 是什麼?
- 最重要的 Failure Mode 是什麼?
- 哪些 Guide 與 Sensor 可 Deterministic?
- 哪些需要 Semantic Judgement 或 Human Sampling?
- 誰擁有最後 Authority?
Desired State 沒有被定義,再多 Sensor 也無法穩定證明「做對了」。
用這張地圖審查一套 Agent 系統
面對新的 Agent 架構,可以依序追問:
- Request 在哪裡被 Admit? Identity、Tenant、Schema 與 Capacity 由誰確立?
- Contract 與 Effective Policy 在哪裡? 目標、Budget、Tools、Approval 與 Stop Conditions 是否可追溯?
- 每類 State 的 Authority 是誰? Client、Worker、External System 與 Issue Tracker 衝突時如何 Reconcile?
- 誰推進 State Transition? 哪些步驟由程式決定,哪些允許模型提議?
- 誰授權並執行 Side Effect? Operation ID、Retry Ownership 與 Unknown Outcome 如何處理?
- Completion 依賴哪些 Evidence? Contract、Policy、Verifier 與 Human Gate 如何共同決定接受?
- Client 斷線或 Worker Crash 後怎麼恢復? Durable Commit、Checkpoint、Reconnect 與 Replay 在哪裡?
- 組合元件是否重複掌權? Retry、Memory、Approval、Workspace 與 Task State 是否有明確 Owner?
這八題能得到具體答案時,架構的真實形狀通常已經浮現。若答案只是「Framework 應該有處理」,下一步是找到真正的 State、Policy、Protocol 與 Evidence Contract,而不是再加一張 Logo。
理論轉實作:Part 02 檢查表
- Request Boundary 明確處理 Identity、Tenant、Schema、Admission 與 Correlation ID。
- Task Contract 與 Effective Policy 分開建模,版本與決策可以追溯。
- Run Lifecycle、External Side Effect 與 Client Projection 的 Authority 邊界清楚。
- Model Proposal、Capability Authorisation、Execution 與 Completion Acceptance 沒有混成一步。
- Durable State 與 Evidence 在 Delivery 前完成足以恢復和去重的 Commit。
- Headless Client Protocol 支援 Event、Approval、Cancel、Reconnect 與 Version Negotiation。
- 多層 Stack 沒有 Double Retry、Split-brain State、Conflicting Approval 或重複 Memory Authority。
- 團隊能說明這套 Harness 調節的 Desired State,以及哪些 Failure Mode 仍未被覆蓋。
Part 03 會進入這張地圖中央的 Controller,拆開 Agent Loop、Tool Request / Result Pairing、Streaming、Approval、Stop Conditions 與 Goal Drift。沒有 Part 02 的 Authority、State 與 Evidence 邊界,Loop 只會更快地放大原本的混亂。
Footnotes
-
Anthropic, Building effective agents, 19 December 2024. ↩
-
OpenAI, Unrolling the Codex agent loop, 23 January 2026. ↩
-
OpenAI, Unlocking the Codex harness: how we built the App Server, 4 February 2026. ↩ ↩2
-
OpenAI, Harness engineering: leveraging Codex in an agent-first world, 11 February 2026. ↩
-
Birgitta Böckeler, MartinFowler.com, Harness engineering for coding agent users, 2 April 2026. ↩