# 策展 · X (Twitter) 🔥🔥

> 📖 本站完整內容索引（documentation index）：[llms.txt](/llms.txt)

> 作者：Codez (@0xCodez) · 平台：X (Twitter) · 日期：2026-06-17

> 原始來源：https://x.com/0xCodez/status/2066867539305459732

## 中文摘要

# 使用 Claude 進行 Agentic 程式開發的 harness 工程：從單一 Agent 到自我優化系統的 14 步路線圖。

每個人都在談論循環（loop），但幾乎沒人談論這些循環是在什麼基礎上運作的。每 10 個開發者中就有 9 個在預設的 harness 上運行 Claude Code——沒有規則、沒有 subagent、沒有 hook、沒有記憶。

然後他們會納悶為什麼他們的循環產出的全是垃圾。事實很簡單：循環的品質取決於底層的 harness。這是一份通往 harness 的 14 步路線圖——從單一 Agent 到一個能自我優化的系統。

> 追蹤我的 Substack 以獲取最新的 AI 資訊：movez.substack.com

循環工程（Loop engineering）——建立一個按排程提示 Agent 的系統——是本月最受關注的話題。但撰寫這篇長文的 Addy Osmani 很謹慎地指出了循環底下的東西：

「循環工程位於 harness 的上一層。Harness 是單一 Agent 運作的環境。循環本身就是 harness，但它是在計時器上運作、產生輔助工具，並自我供給。」

Harness 工程就是設計那個環境：模型、工具、權限、context、記憶。

這是最不起眼的一層，但它決定了上面的一切是否能運作。在糟糕的 harness 上運行出色的循環，只是快速大量生產垃圾的捷徑。

![這是一張展示 AI 代理系統架構的示意圖，分為「自我改進系統」、「循環機制」與「基礎架構」三個層次。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/e6ec2f7fd056e8f6.png)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">該圖表標題為「Three floors, one foundation」（三層樓，一個地基），詳細內容如下：

1. 第一層（頂層）：
   - 標題：SELF-IMPROVING SYSTEM（自我改進系統）
   - 說明：memory compounds - skills sharpen - the system gets better every run（記憶累積、技能磨練，系統在每次執行後變得更好）

2. 第二層（中層）：
   - 標題：THE LOOP（循環機制）
   - 說明：prompts the agent on a timer - spawns helpers - feeds itself（定時提示代理程式、生成輔助工具、自我供給）

3. 第三層（底層，黑色背景）：
   - 標題：THE HARNESS · THE FOUNDATION（控制與基礎）
   - 內容項目：model - tools - permissions - context - subagents - hooks - memory
   - 說明：the environment one agent runs inside - everything above stands on this（代理程式運行的環境，上述所有層級皆建立於此）</div></details>

14 個步驟。3 個層級。這是支撐一切的基礎。

---

第 1 部分 · 什麼是 Harness

## 01. Harness 是單一 Agent 運作的環境。

剝去術語，harness 就是四件事：負責思考的模型、它能觸及的工具、對這些工具的權限，以及它在每次執行開始時讀取的 context。

這就是全部的表面。其他一切——subagent、hook、記憶——都是塑造這四者之一的方法。

![這是一張展示代理程式（Agent）架構運作流程的系統流程圖。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/7b7f4702e2ef9c7a.png)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">此圖表描述了一個代理程式架構的運作流程，包含以下組件與文字：
- 頂層：User / App（發出 request，接收 response）。
- Agent Harness（外框）：包含 Context manager、Permission &amp; guardrails、State &amp; memory 以及底部的 Observability。
- Agentic Loop / Orchestrator（核心區塊）：
    - LLM / Model (inference only)：發出 tool call request 給 Tool Executor，若失敗則進入 Retry &amp; error handler。
    - Tool Executor (execution only)：執行外部呼叫（executes call）至 External Tools &amp; APIs，並將結果（tool result）回傳給 LLM，若需核准則進入 Human-in-the-loop。
- 外部組件：External Tools &amp; APIs。

圖表重點在於展示 AI 代理程式如何透過編排器（Orchestrator）協調模型推理、工具執行、狀態管理以及人機協作（Human-in-the-loop）的完整迴圈。</div></details>

Harness 比人們想像中更重要的原因在於：Agent 是一個 `while True` 循環，它會選擇一個工具、執行它、查看結果，然後決定下一步。

Harness 定義了存在哪些工具、Agent 被允許做什麼，以及它在開始時知道什麼。相同的模型，不同的 harness，就是完全不同的 Agent。

---

## 02. 整個 harness 都位於一個資料夾中：.claude/

所有塑造你 Agent 的東西都位於你專案根目錄的一個單一目錄中。學會這種佈局，你就能一眼看懂任何人的 harness：

```python
.claude/
├─ CLAUDE.md          # 常駐事實 — 每次對話都會讀取
├─ settings.json      # 權限、模型、hook
├─ .mcp.json          # 外部工具連接
├─ rules/             # 路徑範圍內的行為
│  ├─ tests.md
│  └─ python-types.md
├─ agents/            # subagent 定義（每個約 30 行）
│  ├─ reviewer.md
│  └─ eval-runner.md
├─ skills/            # 可重複使用的工作流程
│  └─ pr-checklist/
│     └─ SKILL.md
└─ agent-memory/      # 執行之間保留的內容
   └─ STATE.md
```

區分乾淨的 harness 與混亂的 harness 的一條規則：保持它足夠小，小到你能解釋為什麼每個檔案都存在。如果你說不出某個規則、hook 或 subagent 是做什麼用的，就把它刪掉。

---

## 03. Harness vs 循環 vs 系統。三個樓層，不要混在一起。

大多數「我的 Agent 設定一團糟」的問題都源於混淆了這三個樓層。請釐清它們：

- **Harness** 是單一 Agent 居住的執行環境。靜態配置：模型、工具、權限、context。這就是本篇的主題。

- **循環** 在計時器上提示 Agent、產生輔助工具、自我供給。它運作在 harness 之上。

- **自我優化系統** 是循環加上會累積的記憶——每次執行都會讓下一次執行更精準。

實務上的做法：將常駐事實放入 context，將強制執行放入 hook，將程序放入 skill，將隔離放入 subagent。

把這些混在一起——在 CLAUDE.md 中強制執行、讓程序塞滿 context——是不穩定且昂貴的 Agent 的根本原因。

---

## 04. 預設的 harness。開箱即用的東西。

安裝 Claude Code，開啟一個資料夾，你就已經擁有了一個 harness——只是一個空的。預設配置給你一個強大的模型、內建工具（讀取、寫入、bash、搜尋），並對所有風險操作進行批准提示。沒有專案 context，沒有自訂 subagent，沒有記憶。

![這是一張展示「Harness」作為核心組件，與 Session、Tools、Sandbox 及 Orchestration 進行互動的系統架構示意圖。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/8ecf9d7d1e431a1f.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">該圖表以「Harness」為中心，透過雙向箭頭與四個周邊模組進行連結，呈現系統的運作架構：
1. **Harness**：位於中心，圖示為一個放射狀的星形符號。
2. **Tools + Resources / MCP**：位於上方，圖示為一個公事包。
3. **Session**：位於左側，圖示為兩個勾選符號。
4. **Sandbox**：位於右側，圖示為終端機指令提示符號「&gt;_」。
5. **Orchestration**：位於下方，圖示為節點連結的流程圖符號。

圖中所有模組與中心 Harness 之間均以實線箭頭與虛線箭頭表示雙向的資料或指令傳輸路徑。</div></details>

對於一次性任務，預設配置還可以。但對於任何你做超過一次的事情，預設配置會讓 Agent 每次對話都從頭重新推導你的專案，對安全操作請求許可，並在你關閉終端機時忘記一切。

接下來的十個步驟就是為了縮小這個差距。

---

## 05. CLAUDE.md：常駐事實，保持簡短。

CLAUDE.md 在每次對話開始時讀取。這是 Agent 對你專案的常駐知識——慣例、架構、「我們因為那次事故而不這樣做」。

![這張圖表展示了如何透過階層式的檔案結構與 `CLAUDE.md` 檔案，為不同層級的專案與部門建立 AI 協作的上下文知識庫。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/19b0c62987d78455.png)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">圖片呈現了一個樹狀目錄結構，旨在說明如何組織檔案以提供 AI 系統（如 Claude Code）所需的上下文資訊。結構分為四個層級：

- **Level 0 (根目錄):** 包含 `CLAUDE.md`，定義了 Sarah 的個人工作風格與溝通偏好。
- **Level 1 (Acme 目錄):** 包含 `CLAUDE.md`，說明公司業務、Sarah 的角色及其團隊資訊。
- **Level 2 (部門層級):** 如 Marketing、Finance、Operations、Product，各部門目錄下均有 `CLAUDE.md`，分別定義品牌語調、預算結構、供應商管理及產品規格等資訊。
- **Level 3 (專案層級):** 如 Q1 Campaign、2026 Budget、Office Move，為具體的活躍專案提供目標、預算與關鍵日期等細節。

此外，部分目錄（如 Past Campaigns、Brand Assets）作為參考資料夾，不包含 `CLAUDE.md` 檔案。整體架構透過在不同深度配置 `CLAUDE.md`，讓 AI 能根據當前操作的目錄層級，自動獲取對應的背景知識。</div></details>

最常見的錯誤：讓它變成一份巨大的程序文件，塞滿了每次對話。

每天都在使用的人的規則：將主要的記憶檔案保持在 500 token 以下。常駐事實放在這裡。

多步驟程序放在 skill（步驟 8）。路徑特定的行為放在適用該路徑的 rules/ 檔案中。如果 CLAUDE.md 的某個部分變成了一種程序而不是事實，它就屬於其他地方。

> 大聲朗讀你的 CLAUDE.md。每一行都應該是 Agent 在每次對話中都需要的事實（例如「我們使用 pnpm，而不是 npm」）。如果某一行是程序（例如「要新增功能，首先……」），請將其移至 skill。

如果是針對某個資料夾的規則，請將其移至 rules/。

---

## 06. settings.json：權限與模型，設定一次。

預設的 harness 會在每次風險操作前詢問。當你在觀察時這是對的，但當你不在時就是錯的。settings.json 是你預先批准安全事項、拒絕危險事項並選擇執行模型的地方。

```python
{
  "model": "claude-sonnet-4-6",
  "permissions": {
    "autoApprove": [
      "Read(*)", "Grep(*)",
      "Bash(npm test)", "Bash(git status)"
    ],
    "deny": [
      "Bash(rm -rf*)", "Bash(git push*)",
      "Edit(.env*)", "Edit(secrets/*)"
    ]
  }
}
```

判斷是否自動批准的測試：如果這件事出錯了，復原有多難？復原成本低 → 自動批准。

復原成本高（強制推送、刪除檔案、觸碰機密）→ 一律拒絕或提示。中間地帶如果能記錄下來，自動批准是可以的。

---

## 07. Subagent：處理髒活的隔離 context。

Subagent 是從主 Agent 啟動的獨立 Claude 對話——它有自己的 context window，自己的工具清單。重點不是為了平行處理而平行處理，而是為了讓主 context 保持清淨。

一個讀取 40 個檔案的研究任務、一個需要新視角的審查過程、一個產生大量日誌的評估執行——這些都屬於 subagent，這樣它們就不會污染主執行緒。

<video src="https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/c03b5c96db4515e4.mp4" poster="https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/67b9d81a8bc28f15.jpg" autoplay loop muted playsinline preload="metadata" style="max-width:100%;height:auto;display:block;margin:1rem 0"></video>

任何 harness 中最有價值的 subagent 是檢查主 Agent 工作成果的那一個。模型審查自己的輸出太容易放水了；

一個擁有全新 context window 的獨立審查者能捕捉到寫作者自己說服自己的盲點。這就是讓 harness 之上的每個循環都值得信賴的「寫作者 vs 檢查者」分工。

---

## 08. Skill：Agent 可重複使用的程序。

Skill 是一個 Agent 會執行的 SKILL.md 檔案——當你用 `/skill-name` 呼叫它，或者當任務符合其描述時自動執行。

![此圖展示了「技能（Skill）」目錄的結構與檔案內容範例，說明如何透過 Markdown 檔案定義品牌規範與相關資源。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/27e855dbff341750.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">圖中左側顯示一個名為「anthropic_brand/」的目錄結構，包含以下檔案：
- SKILL.md
- docs.md
- slide-decks.md
- apply_template.py

右側詳細展示了「anthropic/brand_style/SKILL.md」的檔案內容，分為兩個部分：
1. YAML Fontmatter：
   - name: Anthropic Brand Style Guidelines
   - description: Applies Anthropic's official brand colors and typography to PowerPoint presentations

2. Markdown (Freeform Content)：
   - ## Overview：本技能提供 PowerPoint 簡報的官方品牌識別資源，包含預設品牌模板與應用樣式的工具。
   - ## Colors：
     - Main Colors:
       - Dark: `#141413` - Primary text and dark backgrounds
       - Light: `#faf9f5` - Light backgrounds and text on dark
       - Light Gray: `#e8e6dc` - Subtle backgrounds
   - ### Typography：
     - Headings: Poppins (with Arial fallback)
     - Body Text: Lora (with Georgia fallback)

該圖解說明了如何將結構化的元數據（Metadata）與自由格式的內容（Freeform Content）結合，以定義特定功能的「技能」。</div></details>

與 subagent 不同，它在同一個 context window 中執行。它只是成為對話一部分的可重複使用指令。

建立它的觸發點：你發現自己正在把相同的指令貼到每次新的對話中。這就是一個即將誕生的 skill。PR 檢查清單、評估程序、發布流程——寫一次，永遠呼叫。

而且因為 skill 是可重複使用的單位，它們是讓 harness 隨時間進步的關鍵：每次程序以新的方式失敗時，你將教訓加入 skill，下一次執行就會繼承它。

---

## 09. Hook：模型無法產生幻覺的確定性規則。

到目前為止的一切都取決於模型是否理解你的指令。Hook 不會。

Hook 是一個在 Agent 生命週期固定點觸發的 shell 指令——在工具執行前、檔案變更後、對話結束時——它的退出代碼（exit code）可以阻擋該動作。Hook 是強制執行，CLAUDE.md 是建議。

![這是一張展示「Claude Code」工具中「PreToolUse」攔截機制與權限判斷流程的邏輯流程圖。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/68d09a02cc4db299.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">該圖表描述了當 Claude Code 執行 Bash 指令（例如 `rm -rf /tmp/build`）時，系統如何透過攔截機制進行權限控管。流程如下：
1. 起始點：Claude 執行 Bash 指令。
2. 觸發 PreToolUse：系統接收到 `tool_name: "Bash"` 與 `command: "rm -rf /tmp/build"`。
3. 匹配檢查：
   - 檢查 `your matcher` 是否符合 "Bash"。若否，則進入「tool proceeds」（工具繼續執行）。
   - 若符合，則進一步檢查 `your if` 條件是否符合 "Bash(rm *)"。若否，則進入「tool proceeds」。
4. 執行 Hook：若上述條件皆符合，則執行 `your hook command`（即 `block-rm.sh`）。
5. 決策結果：
   - 若執行 Hook，則進入 `blocked` 狀態，輸出 `permissionDecision: "deny"`，隨後 Claude Code 繼續執行。
   - 若未觸發攔截（tool not matched），則直接進入 `tool proceeds`，隨後 Claude Code 繼續執行。</div></details>

兩個 hook 在幾乎每個 harness 中都佔有一席之地：

- 一個 `PreToolUse` 閘門，以確定性方式阻擋危險指令——`rm -rf`、讀取 `.env`、推送到 main。退出代碼 2 會在呼叫發生前停止它。模型無法透過說服來繞過它。

- 一個 `PostToolUse` 格式化工具，在每次編輯後執行你的 linter 或格式化程式。Agent 永遠不會提交未格式化的程式碼，因為 harness 會自動格式化它。

```python
"hooks": {
  "PreToolUse": [{
    "matcher": "Bash",
    "command": "./.claude/hooks/block-dangerous.sh"
    // exit 2 = 在呼叫執行前阻擋它
  }],
  "PostToolUse": [{
    "matcher": "Edit|Write",
    "command": "prettier --write \"$CLAUDE_FILE_PATH\""
  }]
}
```

將 hook 用於任何必須發生或絕對不能發生的事情——安全性、格式化、稽核日誌。

不要將它們用於判斷性決策；那是模型的工作。一個好的 harness 有一兩個精準的 hook，而不是二十個。

---

第 3 部分 · 讓它產生複利

## 10. 加入循環。現在 harness 在計時器上運作。

配置好的 harness 仍然在等你輸入。循環讓它自己運作。最簡單的版本是 Claude Code 中的 `/loop`——一個按節奏重複的提示。

![這張流程圖展示了「代理人迴圈」（agentic loop）的運作機制，說明使用者如何與自動化代理進行互動。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/d958e9079cca0b3d.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">該圖表描述了一個名為「agentic loop」的自動化處理流程，包含三個核心步驟：
1. Gather context（收集背景資訊）
2. Take action（採取行動）
3. Verify results（驗證結果）

流程的運作方式如下：
- 起始點為「Your prompt」（您的提示詞）。
- 流程進入「agentic loop」迴圈，從收集資訊、採取行動到驗證結果。
- 若結果未達標，流程會透過「repeat」（重複）路徑回到「Gather context」階段繼續執行。
- 最終流程結束於「Done」（完成）。
- 此外，圖表下方標示「You: interrupt, steer, or add context」（您：中斷、引導或添加背景資訊），並以虛線箭頭指向「Take action」階段，表示使用者可以在過程中進行干預或調整。</div></details>

將它與 `/goal` 配對，循環就會一直持續直到目標條件為真，並由獨立的評分者而非 Agent 自評來檢查。

```python
> /loop 30m /goal 所有測試通過且 lint 乾淨。
  篩選新的失敗，在 claude/ 分支中草擬修復。

▲ Claude 使用你建立的 harness：
  - rules/ 用於慣例
  - reviewer subagent 來檢查每次修復
  - PreToolUse hook 阻擋推送到 main
✓ 循環中。獨立評分者決定「完成」。
```

注意剛剛發生了什麼：循環並沒有增加智慧。它重複使用了 harness 中的一切——規則、reviewer subagent、安全 hook。一個好的 harness 讓循環變得微不足道。這就是先建立基礎的全部意義。

---

## 11. 加入動態工作流程。Harness 編寫自己的編排。

對於單一循環來說太複雜的任務——大規模平行、高度結構化、對抗性——Claude 可以即時編寫自己的 JavaScript harness。

這就是動態工作流程：`agent()` 來產生，`parallel()` 來分發，`pipeline()` 來串流。它將你的 harness 定義的 subagent 組合成諸如「分發與合成」或「對抗性驗證」之類的模式。

![此圖展示了兩種 AI 代理工作模式，分別為「代理團隊（Agent Teams）」與「動態工作流（Dynamic Workflows）」。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/34b86e48951cd99c.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">圖片分為左右兩部分，皆以「claude」作為代理節點：

1. 左側「AGENT TEAMS」：顯示三個不同顏色的「claude」節點形成一個三角形，節點間有雙向箭頭連結，代表代理間的協作。
2. 右側「DYNAMIC WORKFLOWS」：展示了一個層級化的工作流程，包含以下階段：
   - 最上方為「claude」，標註「kicks off N tasks」（N 可達數百個）。
   - 中間分為三個層級：
     - 「implementer」：對應「claude」。
     - 「verifiers」：對應兩個「claude」節點。
     - 「fixer」：對應「claude」。
   - 最下方為「claude」，標註「returns when done」。
   - 流程呈現由上至下的樹狀分支與匯總結構。</div></details>

與 harness 工程的連結：動態工作流程的好壞取決於它能呼叫的 subagent 和 skill。

如果你的 harness 有一個精準的 reviewer subagent 和一個寫得很好的評估 skill，工作流程就有很好的組件可以編排。如果 harness 是空的，工作流程就沒什麼可用。

工作流程是指揮家，你的 harness 是管弦樂團。

## 12. 加入記憶。Agent 忘記的，harness 記得。

這一步將配置好的 harness 變成了真正會進步的系統。Agent 在執行之間會忘記一切。Harness 不必如此。

一個狀態檔案——agent-memory/ 中的 markdown 檔案，或是一個 Linear 看板——記錄了嘗試過什麼、什麼有效、什麼失敗、什麼規則存活下來。

![此圖展示了 Claude 平台中「匯入記憶（Import memory）」功能的設定介面，引導使用者將其他 AI 服務的記憶內容遷移至此。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/0ce046aec5004bf7.jpg)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">畫面為一個名為「Import memory to Claude」的彈出式設定視窗，包含兩個步驟：
1. 「Copy this prompt into a chat with your other AI provider」（將此提示詞複製到您與其他 AI 提供者的對話中）：
   - 提示詞內容：「I'm moving to another service and need to export my data. List every memory you have stored about me, as well as any context you've learned about me from past conversations. Output everything in a single code block so I can easily copy it.」
   - 旁邊附有一個「Copy」按鈕與圖示。
2. 「Paste results below to add to Claude's memory」（將結果貼在下方以新增至 Claude 的記憶）：
   - 下方提供一個文字輸入框，標示為「Paste your memory details here」。
視窗底部有「Cancel」與「Add to memory」兩個按鈕。背景為 Claude 的設定頁面，左側選單列出 General、Account、Usage、Capabilities、Connectors、Claude Code 等選項。</div></details>

借鑒最強大的 Agent 使用方式，讓記憶產生複利的模式：

- **離開前寫入**。每次執行結束時更新狀態檔案——學到的教訓、驗證過的事實、下一步是什麼。

- **開始時讀取**。每次執行開始時讀取狀態檔案和相關 skill，這樣它就能恢復而不是重啟。

- **提煉成 skill**。當一個教訓是通用的（例如「Windows 執行器需要 bash，而不是 PowerShell」）時，它就從狀態檔案升級為 skill，應用於未來的每個專案。

```python
# 專案記憶

## 已驗證事實 # 別再猜測這些了
- prc 是美元，不是美分（透過 SELECT MIN/MAX 檢查）
- auth 中介軟體順序：rate_limit -> jwt -> rbac

## 學到的教訓 # 將通用教訓提煉成 skill
- Windows CI 執行器在 PowerShell 中 TLS 1.2 失敗 — 使用 bash
- 超過 100 萬行的資料表遷移必須以 1 萬為單位批次處理

## 上次對話 # 恢復，不要重啟
2026-06-11 · 3 個修復已合併，2 個升級。下一步：驗證 rate-limit 修復。
```

---

## 13. 閉合循環。輸出 → 教訓 → skill → 更好的輸出。

---

這就是三個樓層鎖定在一起，變成一個能自我優化的東西的地方。每次執行產生輸出。Reviewer subagent（步驟 7）檢查它。

結果——什麼通過了、什麼失敗了、學到了什麼——被寫入記憶（步驟 12）。通用的教訓被提煉成 skill（步驟 8）。

下一次執行繼承了更精準的 skill 和更豐富的記憶。

這就是整個自我優化循環，請注意它完全是由 harness 的零件組成的：

- Subagent 評分工作——客觀檢查，全新 context。

- 記憶記錄判決——在執行之間存活。

- Skill 再次執行它——現在帶著上次執行學到的一切。

- 循環再次執行它——現在帶著上次執行學到的一切。

模型從未改變。圍繞它的 harness 變得更精準了。這就是「自我優化」真正的含義——不是模型在學習，而是 harness 在累積。

---

## 14. 發布 harness。打包它。分享它。重複使用它。

在一個專案上運作良好的 harness 是一項 asset。

將 skill、subagent 和規則打包成一個 plugin，你的整個團隊就能一步安裝相同的設定——相同的慣例、相同的安全 hook、相同的審查者。

![此架構圖展示了 AI 代理應用程式從應用層、框架層、執行層到模型層的系統分層架構。](https://pub-75d4fe1e4e80421b9ecb1245a7ae0d1a.r2.dev/curated/b9e77af7a386f4e1.png)

<details class="chart-data"><summary>展開畫面重點</summary><div class="me-note">該圖表呈現了一個 AI 應用程式的四層架構：

1. **頂層**：Your Application（您的應用程式）。
2. **Harness Frameworks (choose one)**：框架層，可選擇以下之一：
   - LangChain / LangGraph (包含 Chains、Agents、Memory、Tools、LCEL、LangGraph)。
   - Microsoft Agent Framework v1.0 (包含 Agents、Graph Workflows、HITL、State、A2A、MCP；註記為 successor to Semantic Kernel + AutoGen v1.0 GA - Apr 2026)。
   - Others (包含 LlamaIndex、CrewAI、Haystack、DSPy)。
   右側註記：abstracts harness wiring。
3. **Agent Harness (runtime layer)**：執行層，包含以下模組：
   - Context manager
   - Permission &amp; guardrails
   - State &amp; memory
   - Tool executor
   - Retry / error handler
   - Human-in-the-loop
   右側註記：manages runtime execution。
4. **Model Layer (swappable)**：模型層，包含：
   - Azure OpenAI / GPT-5
   - Claude (Anthropic)
   - Gemini / Llama / Ollama
   - AWS Bedrock
   右側註記：swappable backends。</div></details>

Harness 不再是你個人的設定，而變成了共享的基礎設施。

最後再說一次建立的順序，因為順序就是教訓：讓一次手動執行在乾淨的 harness 上變得可靠。

加入 context 和權限。加入 reviewer subagent。加入記憶。然後，只有在那之後，才用循環包裝它。在好的 harness 上運行循環會產生複利。在糟糕的 harness 上運行循環只會讓出血更快。

---

## § 讓每個循環變得更糟的 harness 錯誤

- **在預設配置上運行**。沒有 context、沒有規則、沒有記憶——Agent 每次對話都在重新推導你的專案。

- **臃腫的 CLAUDE.md**。程序塞進了常駐 context，拖慢了每次執行。把它們移到 skill。

- **在 CLAUDE.md 中強制執行而不是使用 hook**。模型可以忽略建議。它無法忽略退出代碼為 2 的 hook。

- **同一個 Agent 既寫又評分自己的工作**。加入一個擁有全新 context window 的 reviewer subagent。

- **沒有記憶**。每次執行都從零開始。狀態檔案是讓明天能恢復的關鍵。

- **在糟糕的 harness 上包裝循環**。循環只是更快地產生垃圾。先建立基礎。

- **二十個 hook**。一兩個精準的 hook 勝過一堆沒人懂的程式碼。

- **未經掃描就發布 harness**。洩漏的機密和過大的權限會傳播給每個安裝它的人。

---

## 結論：

循環獲得了榮耀。Harness 做了工作。

循環工程是令人興奮的部分——Agent 自己提示自己，在你睡覺時運作。但循環只是計時器上的 harness。

決定輸出是好是壞的一切，都住在下一層：你選擇的模型、你允許的工具、你寫的 context、你加入的審查者、你保留的記憶。

把那一層蓋好，上面的一切都會產生複利：循環重複使用你的 subagent，工作流程編排你的 skill，記憶讓每次執行都比上一次更精準。

自我優化從來不是模型的屬性。它是你圍繞它建立的 harness 的屬性。

挑一件你現在沒做的事——可能是 reviewer subagent、安全 hook 或狀態檔案——今天就把它加上去。保持 harness 小到足以解釋。然後在上面放一個循環，看著基礎完成工作。

## 標籤

Claude Code, Agent, Harness, 教學資源, Loop Engineering, Anthropic, Claude
