◢ Lesson 7 ⏱ 105 min

AI 编程实战 · 从用工具到造 harness

🎬 开场 · Karpathy 说「我现在用英语写代码比 Python 多」

📅
2022
AI 是高级 Tab 补全
🤝
2024
AI 是 pair programmer
🏗
2026
AI 是整支施工队

3 年时间 · 你和 AI 的工作关系从「我打字 · 它接尾巴」变成「我画图 · 它打地基 + 砌墙 + 装修」。

Karpathy 在他的演讲 Software is Changing Again 里说了一句让无数工程师拍大腿的话 —— 「我现在用英语写代码比 Python 多」。这不是修辞 · 是字面意思:他给 Claude Code 下指令的 token 总量已经超过他亲手敲代码的 token 总量。


这一课的认知地图 · 8 模块

A · 地基🔧Harness 定义 · 7 组件 · L1-L5 实物地图
B · 长跑 agent🧬Effective Harness 4 阶段演化 · P-G-E
C · 实战⚙️CLAUDE.md · hooks · skills · subagents
D · 一天09:00→18:00 · harness 动起来
E · 终极🎯专业度 × harness · L7 punchline
F · 避坑🚫7 大反模式
G · 上生产🛠spec → ship 5 步
🎯 期末⚒️用 Agent SDK 造 mini harness

📚 写作锚点 · 这一课的所有概念都对照 Anthropic 官方文档Building effective agents · Claude Code Best Practices · Agent SDK 文档)和 Karpathy 的公开演讲·不编造数字 · 不编造案例。


模块 A · Harness · LLM 的「车身」

A.1 · 三个层次 · Prompt → Context → Harness

继 prompt engineering、context engineering 之后 · 从 2025 年 2 月起 · AI 圈又冒出一个新概念叫 harness engineering。OpenAI 用它五个月写了 100 万行代码 · Anthropic 紧接着发文分享 harness 架构 —— 整个 AI 编程圈在 2025-2026 年迎来这个新词的爆发。

但要搞清楚 harness engineering 是什么 · 得先理清它和它两个”前任”的关系。

layer 1
Prompt Engineering
怎么问问题

研究怎么把发给模型的话说清楚·让模型更容易理解你的真实意图。

范围:模型的输入字符串这一段。门槛低 · 模型变强后已经很少单独提了。

layer 2 ⊃ layer 1
Context Engineering
怎么给信息

研究在最合适的时机·把最合适的内容放到模型的 context 里。Context 不只包含 prompt · 还有对话历史、工具列表、skill 列表等。

范围:所有进入 context 的内容。Context 有容量上限 · 不能无止境塞东西。

layer 3 ⊃ layer 2
Harness Engineering
怎么搭系统

研究怎么围绕大模型搭一个完整可靠的 agent。研究对象覆盖了除大模型之外的所有内容 —— 权限管控、工具管理、错误恢复、长任务执行等等。

范围:除模型本身之外的所有工程。是 prompt eng + context eng 的超集 · 站在更高系统层。

💡 一句话理清三者关系 —— 三层是层层递进 · 研究范围层层扩大的关系。Prompt 研究”怎么问”·context 研究”怎么给”·harness 研究”怎么搭”。它们关注的问题越来越大 · 越来越广

画出来 · 三层的「⊃ 关系」

📐 三层套娃 · 外层包含内层 · 研究范围层层扩大 · 滚动进入视野自动播放
🔧 Harness Engineering
怎么搭系统
📦 Context Engineering
怎么给信息
💬 Prompt Engineering
怎么问问题
研究范围 · 发给模型的 prompt 字符串
↑ Context Eng 还多研究 ↓
对话历史 · 工具列表 · skills · CLAUDE.md · 上下文压缩
↑ Harness Eng 还多研究 ↓
主循环 · 权限 · hooks · subagents · 长任务 · 评估反馈 · 错误回滚
从内到外看 · 最里面的蓝盒子·是 prompt eng 的研究地盘(只是字符串)。黄盒子加上的部分 · 是 context eng 的研究地盘(context 里的所有其他内容)。最外的绿盒子加上的部分 · 是 harness eng 的研究地盘(整个 agent 系统)。三层是真正的 ⊂ 关系 · 不是平行的三种技能。

为了把这个抽象的”研究范围”概念再具象化一点 · 看一下一次真实的 Claude Code 调用里 · 模型实际”看到”的 context 是怎么分配的 ——

📊 真实场景 · 一次 Claude Code 调用 · 200K context 的分配
3%
8%
7%
40%
30%
2%
10% 空
system prompt
tools schema
CLAUDE.md(项目级指令)
对话历史
RAG / 文件读取
你刚输入的 prompt · 0.5-2%

Prompt eng 优化的是最后那 2%·context eng 优化的是整个 200K 怎么填·harness eng 优化的是让这一切运行起来的整套系统

A.2 · Harness 是什么 · 从马具说起

“harness” 这个词在英文里的本意是 马具 —— 套在马身上、用来控制马的那些装备:缰绳、嚼子、头套 …

🐴
原意
脱缰的马 + 马具

马很强 · 但脱缰就乱跑。马具不是用来削弱马 · 是用来驾驭马的力量 —— 让强大变成”可用的强大”。

🧠
类比到 AI
大模型 + Harness

大模型很强 · 但放任不管会发散、会幻觉。Harness 不是用来削弱模型 · 是给它套上一套系统 · 让强大变成”稳定的强大”。

Harness 的”公式”

LangChain 在 2025.3.10 的文章 The Anatomy of Agent Harness 给出了被业界广泛接受的公式 ——

Agent = Model + Harness

或者反过来 · Harness = Agent − Model —— 凡是不属于模型的部分 · 都是 harness

⚠️ 要注意 · Harness Engineering 是一个非常新的概念 · 目前业界还没有形成严格的学术定义。这个公式是大多数人比较认可的一种说法 —— 但它不是唯一答案 · 也不是钦定真理。这一节后面会专门讨论这个概念的争议。

起源故事 · 2025 年 2-3 月这个词怎么火起来的

📅 harness engineering 的火起来的时间线
2025.2.5

Hash Mondal 的个人博客 My AI adoption journey 首次提出 “harness engineering”。 原话:“我也不知道业界有没有公认叫法 · 我就姑且叫它 harness engineering。要是有更好的词 · 我随时改口。“

2025.2.11

OpenAI 发文 · 详细记录五个月用 AI 写 100 万行代码的实战。这篇文章把概念引爆全网。 有意思的细节:标题用了 harness engineering · 但正文里只用了一次 harness 这个词。

2025.2.17

Martin Fowler 网站发表 Harness Engineering: First Thoughts · 把概念带进顶级软件工程圈。

2025.3.10

LangChain 发文给出 Agent = Model + Harness 公式 · 把概念定型。

2025.3.24

Anthropic 发文 · 给出 Planner / Generator / Evaluator 的经典三 agent 架构(虽然 Anthropic 自己克制 · 通篇只用了 harness 这个名词没生搬新词 · 但业界直接把这套架构当成 harness engineering 教科书级案例)。

从 Hash Mondal 的”姑且叫它”到三大厂背书 · 这个词的固化只用了 50 天。这也是为什么概念虽热 · 但定义还不稳定 —— 它仍在演化中

A.3 · 形象看 · 5 个 harness 级别 · 5 种产品

定义说完了 —— 但 harness 是个抽象工程概念 · 你现在脑子里可能还是没画面。在深入 7 个组件、3 大优化、P/G/E 架构之前 · 先给你一张地图 —— 同一个项目 · 在 5 个 harness 复杂度级别下分别造出来 · 直接看每一级别长什么样、能干什么、干不了什么。

下面这个 widget · 用同一个项目(个人任务管理器)作为载体 ——

🎯 同一个项目(个人任务管理器)· 5 种 harness 级别 · 5 种产品
点 L1-L5 看每一级别能造出来的网站长什么样 · 能干什么 · 干不了什么
这一级别真正的 PROMPT + HARNESS 长什么样
💬 你要写的 prompt
把 v1 升级成完整 SaaS MVP
- 加 React 前端 + Express 后端 + SQLite + Prisma
- 用户注册 / 登录 (邮箱+密码 · JWT)
- 任务支持:标签 / 优先级 / 截止日期
- 支持搜索 / 筛选 / 排序
- 加完整的单元测试

请先做规划(plan mode)· 我审完再开干
🔧 你要配的 harness
// 项目结构 + .claude/ 出现
my-tasks/
├── CLAUDE.md         // ← 重点 · 项目级 system prompt
├── frontend/  (React + Vite)
├── backend/   (Express + Prisma + SQLite)
├── package.json
└── .claude/
    └── commands/
        └── new-feature.md   // 自定义 slash command

// CLAUDE.md 大致内容(~60 行)
# TodoApp · 个人任务管理 SaaS

## Tech Stack
- Frontend: React 19 + TypeScript + Vite + Tailwind
- Backend: Express + Prisma + SQLite
- Auth: bcrypt + JWT (15min access + 7d refresh)
- Test: vitest · 必须 > 70% 覆盖率

## Conventions
- 文件名 kebab-case · 类型用 PascalCase
- 所有 API 走 zod 校验
- 错误用 Result<T,E> · 不抛 exception

## ⚠️ 不要碰
- /migrations 已上线的 migration 不能改
- prod env 文件不要 git add

## Commands
- bun dev / bun test / bun db:migrate
🎯 一句话总结

Claude Code interactive 单 agent loop · 配 ~60 行 CLAUDE.md · 偶尔 /compact。用了 harness 7 组件里的 4-5 个(主循环 / 工具集 / 权限 / 记忆与会话 / 部分 hooks)。

↓ 用这套 prompt + harness · 能产出什么 ↓
tasks.myapp.io/dashboardTTaskFlow🔍 搜任务...👤📥 收件箱⭐ 重要🗓 今天📊 项目🏷 标签⚙ 设置今天 · 5 件事3 个未完成 · 2 个已完成全部未完成已完成完成 L7 spec 编写高优先级#spec今天实现 v0 prototype中优先级#code今天录制 demo 视频中优先级#demo今天联系 3 个 beta 用户低优先级#user今天
↑ 这是 L3 harness 级别 · 同一个个人任务管理器项目 · 在这一级别能造出来的样子
📅 时长
3 小时
💰 成本
~$15
🌍 现实例子
一个能拿出去秀的 "我的 task app" · 但还不是 SaaS
✅ 能干什么
  • React + Express + SQLite
  • 用户登录 · 数据存数据库
  • 跨设备访问(云端数据)
  • 标签 · 截止日期 · 优先级
  • 搜索 / 筛选 / 排序
❌ 干不了什么
  • 只支持单用户(无协作)
  • 没有第三方集成(calendar / email)
  • 没有 admin / 计费 / 工作区
  • 上线还需要手动配置
💡 这个 showcase 想传递什么

同一个想法 · 同一个 Claude · 5 种 harness 配置 · 5 种产品形态

L1 学生写一个 prompt 就能造出来 · L5 需要 Anthropic P/G/E + OpenAI 5 艺术品的全套设施(后面 A.7 / A.6 会讲到)。能造什么取决于你能搭多复杂的 harness · 不取决于”用了什么大模型”。

这个个人任务管理器项目 · 会作为本课的贯穿项目 · 后面 B-G 各模块都会引用它 —— 让你随时能把抽象概念挂回这 5 个具体画面上。

A.4 · 一个例子 · LLM 加上 harness 长什么样

为了把”那 98%“从抽象概念变成可触摸的东西 · 看一段代码。先看不加 harness 的裸 LLM ——

❌ 裸 LLM · Claude API 直接调
from anthropic import Anthropic

client = Anthropic()
response = client.messages.create(
  model="claude-sonnet-4-5",
  messages=[{
      "role": "user",
      "content": "列出当前目录下所有 .py 文件"
  }],
)
print(response.content[0].text)

输出“对不起 · 我无法访问你的文件系统 · 也无法执行命令。我只能根据上下文给你回答。”

Claude 实际只做了一件事 —— 预测下一个 token。它看到「列出 .py 文件」这个 prompt · 老老实实输出一句”我做不到”。这就是 LLM 的原始状态。

现在看同样的请求 · 加上 Anthropic 官方 Agent SDK(它的官方介绍就是 “a general-purpose agent harness”)——

✅ 加 harness · Claude Agent SDK
from claude_agent_sdk import query, ClaudeAgentOptions

async for message in query(
  prompt="列出当前目录下所有 .py 文件",
  options=ClaudeAgentOptions(
      allowed_tools=["Bash", "Glob"],  # ← 工具表
  ),
):
  print(message)

输出真实的文件列表 —— main.py · utils.py · test_auth.py …

Prompt 一模一样 · LLM 还是同一个 Claude · 但结果完全不同。差别在那个 SDK 里 —— 它替你写了主循环、暴露了 Glob 和 Bash 工具、管了权限、维护了 context。这一套就是 harness

💡 这段代码告诉你什么

Anthropic 在 Agent SDK 官方文档里把它自己定义为 “a powerful, general-purpose agent harness”。这不是社区俚语 · 是 Anthropic 正式的 framework 概念。

Harness = LLM 之外的所有工程层 —— 决定模型能调什么工具、能看什么 context、能改什么文件、什么时候停下来。模型是发动机 · harness 是车身

L7 这一课的主线 · 就是教你读懂这层 · 选对配置 · 最终自己造一个 harness

A.5 · 互动 · 拆开 harness 的 7 组件

如果 harness 是”那 98%“·它具体由什么构成?Anthropic 的 Agent SDK Overview 官方列出了 7 个一等公民组件 —— 它们一起把”只会预测 token 的 LLM”包装成”能写代码的产品”。点任一组件看 Anthropic 的定义 + 设计该组件时的关键取舍

🔧 harness anatomy · 拆开 AI 编程工具的引擎舱
Anthropic Agent SDK 钦点的 7 个一等公民组件 · 点组件看细节
🧠LLMpredict next token🔁主循环gather → act → verify → repeat🛠工具集Read · Write · Edit · Bash · Grep ...👥子代理AgentDefinition · 派出专精 agent🔌MCP 协议外部工具生态接入钩子PreTool · PostTool · Stop ...🛡权限控制default / acceptEdits / bypass / plan💾记忆与会话CLAUDE.md · skills · resume
🔁主循环gather → act → verify → repeat

Anthropic 官方循环:「gather context → take action → verify work → repeat」。Agent SDK 的核心 · 这个 loop 怎么转决定 agent 的整体运动方式。

⚖️ 设计时的关键取舍
  • · 何时终止 · 无 tool_call · 最大轮数 · 用户中断
  • · 工具调用 · 串行 vs 并行
  • · 错误回滚策略 · 重试 / 跳过 / 终止
💡 7 个组件 · 7 根可调旋钮

每个组件不是”开/关”的 boolean · 而是一根可调旋钮

主循环可以(一两步就停 · 让用户审)也可以(自治几十轮)。
工具集可以(只读不写)也可以全栈(Bash · Edit · Web · MCP 全开)。
权限可以(每个 diff 都问)也可以(acceptEdits 自动通过)。
钩子可以(每个工具调用都拦截)也可以(全程不介入)。

不同 harness 设计师的”工作哲学” · 体现在他们怎么拧这 7 根旋钮。同样一个 Claude · 7 根旋钮拧到不同位置 · 就长成不同性格的 agent —— 这就是为什么不同 AI 编程工具的体验天差地别 · 哪怕底下都是同一个模型。

A.6 · 实战范式一 · OpenAI 的三大优化类别

7 组件是 harness 的”建筑材料”·但拿到材料怎么搭出一个真的能干活的系统?看大厂的实战。

OpenAI 在 2025.2.11 那篇引爆全网的文章里 · 详细记录了他们用五个月 AI 写 100 万行代码的过程。把里面的优化点抽象出来 · 大致可以分成三大类 ——

🧠
category 1
上下文管理

让 agent 拿到充足的项目信息。新员工不知道规范 = 干不了活 · agent 也一样。

· OpenAI 一开始用一个超大 AGENTS.md 装所有规范
· 后来发现”大而全反而迷失” —— 内容太多模型抓不到重点
· 最终把 AGENTS.md 压到 ~100 行 · 只当目录用 · 相关文档分散放
· 强制重要信息进 code repo · 让仓库成为唯一事实来源
category 2
验证与反馈

让 agent 自己验证产出。没有验证 = 没办法保证准确率。

· 接入 Chrome DevTools · agent 可以自己截图 / 看 DOM · 验 UI
· 接入完整可观测性栈 · 读日志 / 看指标 / 追链路
· 每个任务跑在完全隔离环境 · 独立日志独立指标
· Lint + 测试形成自动闭环 · 不合规就报错 · agent 收报错就改 · 直到全过
🧹
category 3
技术再清理

后台 agent 做垃圾回收。大规模生成必然引入烂代码 · 不管会积少成多。

· 后台 codex 任务定期扫整个 codebase · 找偏离架构规范的写法
· 自动修改 · 自动提交 PR
· 文档同样处理 · 自动扫”过时文档”·和实际代码对不上的修
· 两套独立维护方案 · 代码和文档都不放任自流
💡 OpenAI 那篇文章的核心论断

“Humans steer, agents execute” —— 人类掌舵 · agent 执行。

OpenAI 在文章里抛出了一个非常关键的论断:“虽然人类不再需要亲自手写代码 · 但软件工程并没有消失 · 而是演变成完全不同的形态。如今软件工程师的核心职责变了 · 变成了为 agent 搭建稳定可靠的系统与支撑框架。”

Harness engineering 不是”如何写好 prompt”或”如何管 context”这么简单 —— 它在重塑整个软件工程的开发流程。这也是 OpenAI 那篇文章被业内反复引用的原因。

📚 原文 · OpenAI Engineering Blog · Harness Engineering (2025.2.11) · 强烈推荐精读原文 · 这里只做了简化提炼。

A.7 · 实战范式二 · Anthropic 的 P-G-E 三 agent 架构(teaser)

如果 OpenAI 教你优化什么 · Anthropic 教你怎么分工。2025.3.24 的 Effective harnesses for long-running agents 给出了 harness 的经典三 agent 架构 —— Planner 拆需求 · Generator 实现 · Evaluator 独立审 ——

📐 P-G-E · 一句话

Planner 拆 · Generator 写 · Evaluator 审 —— 三方制衡 · 互不护短

Solo 单 agent:20 min · $9 · 废品
Full Harness (P-G-E):6 hr · $200 · 能用
慢 18× · 贵 22× · 但产出从废品到能用

🔭 完整的演化故事 + 时序图 + 数字账单 + Sonnet 4.6 后的简化 · 全部在 模块 B(长跑型 agent · Effective Harness 的演化)。那一整个模块都在拆这套架构 —— 这里只是先认个脸 · 让你知道 A.6 的 OpenAI 和 P-G-E 是 harness 的两套并行实战范式。

📚 原文 · Anthropic Engineering Blog · Effective harnesses for long-running agents

A.8 · 争议 · Harness Engineering 是噱头还是工程范式

讲到这里 · 你可能会发现一个让人不安的事实 —— harness engineering 用到的所有技术 · 竟然没有一个是新的

Linter 代码检查、任务拆解、独立评估、自动反馈循环 … 这些东西早就有了。Harness engineering 真正做的事 · 只不过是把这些技术重新组织了一下 · 统一放到一个新词下面。

所以业界关于这个概念的争议非常大 ——

⚠️ 批评方观点
这就是个噱头
  • 没有任何新技术 · linter / 任务拆解 / 评估 · 都是老东西新瓶装
  • 专门造个新词到处宣传 · 不就是炒概念吗?
  • 所有 harness 设计迟早要被淘汰 —— 随着大模型变强 · 这些”约束 / 兜底”的设计会被模型自身吸收 · 最终变得不需要
✅ 支持方观点
这是工程范式的升级
  • 工程进步往往不在于发明新技术·在于有没有一套统一框架把零散能力组织起来
  • OpenAI / Anthropic 已经用 harness engineering 跑出了 100 万行真实代码 · 这是可验证的成果
  • 它提供的是一套新的系统思维架构·不是一批颠覆性新技术

模型变强 → harness 缩水 · Anthropic 自己的两个证据

更扎心的是 · 模型升级正在蚕食 harness engineering 的生存空间。Anthropic 文章里给了两个具体例子:

证据 1 · 上下文焦虑

Sonnet 4.5 有一个问题:context 长了之后模型急于结束任务·以更少 token 完成交付 · 影响质量。Anthropic 一开始用”上下文重置”这种 harness 技术对抗它 —— 但升级到 Opus 4.5 后这个问题就大幅缓解·不再需要那个 harness 设计了。

证据 2 · 强制分步执行

Anthropic 一开始在 prompt 里强制 Generator 每次只做一个功能点 · 否则它会一口气全部都做漏洞百出。但用 Opus 4.6 之后不再需要 —— 模型的全局统筹能力够强 · 可以自己决定先做哪个再做哪个。Anthropic 后续就把这个约束去掉了。

一个比较中立的立场

🎯 我的立场(仅供参考)

Harness Engineering 不是噱头 · 但也不是终局

说它不是噱头 · 是因为 OpenAI 和 Anthropic 通过 harness engineering 把 agent 的稳定性、自动化程度、生产力推了一大步。这些是可验证的工程成果 · 不是概念炒作。

说它不是终局 · 是因为随着模型继续增强 · 今天这些”约束 / 兜底”的系统设计 · 很可能会被模型自身一步步吸收。那时很多 harness 就不再需要了。

所以我更愿意把 harness engineering 看成是一个过渡期的关键技术·它可能不是未来的终局答案 · 但是当下最现实的答案

实操含义 · 在今天 · 模型依然会犯错、会幻觉、会在复杂任务中偏离轨道。谁能把 harness 搭得更稳 · 谁就能更早把 AI 转化为真正的生产力

💡 学完模块 A 你应该能 ——

  1. 清楚 prompt eng / context eng / harness eng 三个层次的关系 —— 研究范围层层扩大
  2. 给出 harness 的公式 · 知道它的起源故事(Hash Mondal · OpenAI · LangChain · Anthropic 的 50 天)
  3. 看懂 harness 的 7 个组件(Agent SDK 一等公民)
  4. 知道两套实战范式 —— OpenAI 的三大优化类别 + Anthropic 的 Planner / Generator / Evaluator 架构
  5. 对 harness engineering 持有自己的批判性立场 —— 不当噱头 · 也不当终局
  6. 有一张 L1-L5 harness 复杂度地图 · 知道每个级别能造出什么样的产品(A.3)

📚 核心参考 · OpenAI · Harness Engineering (2025.2.11 · 三大优化类别原文) · Anthropic · Effective harnesses for long-running agents (P/G/E 架构 + 长任务模式) · Anthropic · Harness design for long-running application development (P/G/E 演进) · Claude Agent SDK overview (7 组件 API) · Hash Mondal · My AI adoption journey (harness engineering 一词的起源)


模块 B · 长跑型 agent · Effective Harness 的演化

上一模块定义了 harness 的 7 个一等公民 + L1-L5 的产品形态。现在立刻拿一个真实工程案例感受一下 ——「在跨多个会话、跨几天几周的长任务里 · harness 是怎么一步步被设计出来的」。这是 Anthropic 自己在 2024 年底 - 2025 年生产环境里踩过坑后演化出的架构 · 也是后续 C-H 各模块大量 callback 的源头。

Anthropic 在 Effective harnesses for long-running agents 这篇文章里 · 把这套问题完整拆开 · 然后一步一步地演化出了今天大家熟知的 Planner / Generator / Evaluator 架构。这一模块跟着 Anthropic 的脚步走一遍 · 看 harness 怎么从「一个 agent 一顿乱造」演化成「三方制衡」· 再演化成「模型变强之后又能简化」。

B.1 · 全景 · 4 阶段演化

Harness 不是 Anthropic 一开始就设计成 P-G-E 三方架构的。它是一连串「遇到问题 → 引入新东西 → 暴露下一个问题」串起来的链式演化 —— 总共 4 个阶段 · 每一步都有一个具体的工程困境逼着 Anthropic 加一个组件。

先看演化链的全貌 —— 每个 Stage 卡片告诉你「这阶段的背景 · 引入了什么 · 结果」· 卡片之间的 ↓ 箭头标注「下一阶段为什么必须出现」——

🧬 演化链 · 看 agent 如何从 1 个分裂到 3 个
点阶段 · 或按 ▶ 自动播放整条演化线
CONTEXT 容量💥 context overflow · 半截而逃Single Agent既规划 又执行 又自检⚠ 急于求成 · 抛下烂摊子 · 视而不见地"完工"一个 agent 包揽规划 / 执行 / 自检 —— 全乱
阶段 0为什么会有这一阶段 ——没有 harness · 看会发生什么

一个 agent 干所有事 · context 一爆就抛下烂摊子 · 给 agent 加东西的起点。

看完了演化链 · 下面这个互动组件让你单独深入任意一阶段 · 看它的具体架构图 + 完整故事 ——

🧬 Anthropic 长跑 agent harness · 4 阶段演化
点不同阶段 · 看 harness 如何从「单 agent 烂摊子」演化到「P-G-E 三方制衡」
用户需求 → 一个 agent 一口气全做用户需求模糊复杂单 agent既规划又执行⚠ context 满了 · 半截而逃下一班接手 · 不知前情
没有 harness · 直接派活
⚠ 这阶段还在翻车
急于求成 · 抛下烂摊子
✅ 这阶段加了什么
——
💬 故事

Anthropic 想让 agent 克隆 claude.ai。直接派出去 · agent 一口气想做完所有功能 · 上下文满了 · 半截就溜了。下一个 agent 来接手 · 完全不知前情 · 只能猜 · 一猜就坏事。

💡 怎么读这两个组件 —— 演化链回答「为什么会有这一步」 · 互动组件回答「这一步具体长什么样」。后续 B.2 - B.9 会逐个细讲每一步背后的故事 + 数字 + 时序图。

B.2 · 故事开始 · 让 agent 克隆 claude.ai

Anthropic 做了一个实验 —— 让一个 agent 把 claude.ai 整个聊天界面克隆出来。这是一个很有代表性的任务 ——

🎯 任务画像 · 为什么这个任务有代表性
表面
”只是一个聊天界面”
实际
200+ 个具体功能点 · 流式输出 · 多轮对话 · 文件上传 · 代码块 · markdown · …
问题
一口气全做 · 几乎不可能 —— 单个 context 装不下

直接派给一个 agent · 不加任何 harness —— 结果惨烈。下面这一节讲清楚 · 到底是怎么惨烈的。

B.3 · 第一次翻车 · Solo 单 agent 的 3 个失败模式

Anthropic 把这次失败拆成了三种典型的”翻车姿势” —— 每一种都很有画面感 ——

💥
翻车 1 · 急于求成

agent 接到需求立马就开干 · 干劲爆棚 · 想一口气把所有功能全做完。结果干到一半 · context 已经满了。

🏃
翻车 2 · 抛下烂摊子

context 满了 · 当前会话被迫结束。很多功能只做了一半 · 但代码里没有任何「我做到哪了」的记录。

🙈
翻车 3 · 视而不见的”完工”

下一班 agent 接手 · 不知道前面发生了什么 · 只能粗略扫一眼代码 · 看起来差不多 · 于是”大功告成”草草收工。

💡 核心症结

单 agent 模式的根本问题 —— 「规划」和「执行」混在一个 context 里。规划做不细 · 执行就急于求成。执行装不下 · 规划也跟着丢。这两件事必须解耦

B.4 · 第一招 · Initializer + 「班际交接物」

Anthropic 在第一篇文章里给出的解法 —— 在 generator 前面加一个 Initializer agent。它只跑一次 · 干一件核心的事 —— 把模糊需求拆成详细的功能列表 —— 同时留下几样后续 agent 必须读的”交接物” ——

🚀 Initializer · 只跑一次
起手式 · 把环境拉齐
  • feature-list.json · 200+ 条详细功能点
  • init.sh · 启动开发服务器的脚本
  • claude-progress.txt · 每次会话写一段「我做了什么」
  • 首次 git commit · 锚定初始状态
🔄 Coding Agent · 每会话跑一次
稳扎稳打 · 一个功能点一个
  • 开局先读 progress.txt + git history · 知道前班做到哪
  • 从 feature list 挑 一个 没做的
  • 实现 + 测试 + 写入 progress · commit · 收工
  • 留一个干净状态 · 给下一班 agent

关键洞察 · 文件系统当 agent 的”班际交接本” · git 当 audit log · JSON 当 todo list。这些东西不是新发明 —— 就是人类工程师协作一直在用的东西。Harness 的本质 · 是让 agent 也用上人类协作的基础设施。

B.5 · 第二招 · 把 Planner 单独拆出来

第二篇文章 Harness design for long-running application development 进一步演化。Anthropic 发现 —— Initializer 里最核心的工作是「拆功能列表」· 这件事值得单独做一个 agent

🔍 为什么拆出来

· 「拆需求」需要一种特殊的思考方式 —— 把模糊的用户描述展开成清晰的功能点。这跟”写代码”是两种完全不同的认知模式。

· 拆出来后 · 可以单独优化 Planner 的 prompt 和工具·而不影响 Generator。

· 还可以让人在 Planner 阶段介入 —— review feature list · 加 / 删条目 —— 再让 Generator 开干。

到这一步 · 我们有了 Planner + Generator 两个 agent。Generator 收到 feature list · 一项一项做 · 做完一个标一个。看起来不错了?等等 —— Anthropic 在生产环境里发现了一个新坑。

B.6 · 第三招 · Evaluator · 解决”王婆卖瓜”

光让 Generator 生成代码是不够的 · 还得评估产出质量。Anthropic 尝试了 3 种方案 ——

方案 1 · 人工评估

效率太低了。都 AI 时代了 · 能交给 AI 的就交给 AI 吧。

方案 2 · Generator 自评 ·「王婆卖瓜」

让 generator 自己评估自己的产出 —— 听起来挺合理。但 Anthropic 发现根本不好用。原因很简单 ——「自评」这件事本质上就是王婆卖瓜 · 自卖自夸。Agent 对自己做的东西天然有滤镜 · 即使产出里有明显的 bug · 也能视而不见 · 给自己打个高分草草收工。

方案 3 · 独立的第三方 Evaluator agent

Anthropic 的最终方案 —— 做一个专门的评估 agent。它是独立的第三方 · 没理由替别的 agent 护短 —— 评估结果就客观多了。另外一个好处 · 可以单独优化 Evaluator 的 prompt 和工具 · 让它的评估能力做到最好。

💡 生成 ≠ 评估。这两件事必须由不同的 agent来做 —— 因为评估的客观性 · 来自于评估方不是利益相关方。Anthropic 用工程手段把这条制度化了。

B.7 · 完整时序图 · 三方协作

到这里 · 我们就有了 Planner / Generator / Evaluator 三个 agent。它们怎么分工合作完成一个功能点?下面这个互动时序图按 Anthropic 原文的叙事顺序走一遍 —— 点 ▶ 看箭头按节奏飞 ——

🎬 三方协作时序图 · 一个功能点的完整生命周期
Planner · Generator · Evaluator · 怎么分工合作完成用户需求
Planner拆需求 · 列功能点Generator挑一项 · 实现Evaluator独立评估 · 反馈规划谈标准实现收工
STEP 0 / 10

点 ▶ 播放 · 或单步按 →

💡 注意这两个循环

循环 1 · 谈标准 · Generator 和 Evaluator 先就「做到什么程度算完成」反复 2-3 轮 · 这一步避免 Evaluator 后面拿不存在的标准卡 Generator。

循环 2 · 改 bug · 实现完毕 · Evaluator 跑测试列问题 · Generator 改 · 再交 · 反复 2-3 轮直到通过。

两个循环 · 各管各的 —— 第一个对齐预期 · 第二个保证产出。

B.8 · 数字账单 · Solo vs Full Harness

Anthropic 拿了一个具体的任务来对比 —— 让两套方案分别做一个游戏制作工具 —— 看效果差多少 ——

🏁 Anthropic 实测 · 同一个任务(做一个游戏制作工具)
两种方案 · 跑给你看 —— 然后看产出长什么样
⏱ 跑步比赛 · 看时间和成本的差距
Solo
1 agent · 直接派活
S
20min · $9
花费
$0
Full Harness
Planner + Generator + Evaluator
F
6hr · $200
花费
$0
5min
20min
1hr
3hr
6hr
18×
22×
🖼 但产出长这样 —— 这才是真正想给你看的
Solo · 产出在 20min · $9 后定格
solo-output.localmy Taskstask 1: [object Object]task ??? undefined(button does nothing)??? side menu❌ console:TypeError · Cannot read property 'map' of undefinedFailed to load module · 3 unhandled promises
基本不可用
Full Harness · 产出在 6hr · $200 后定格
full-output.appTaskFlow+ New今天 · 3 件事待办 · 2 件已完成完成 spec · 已 ✓今天实现 v0 prototype今天上线 staging今天邀 3 个 beta 用户今天✓ 所有 unit test 通过 · ✓ 通过 evaluator review · ✓ 无 console error
达到可用水准
贵 22× · 慢 18× —— 但产出从「废品」跨到「能用」。非线性的 ROI · 不是「成本翻倍 = 效果翻倍」。选不选 harness · 取决于「这次任务能不能容忍废品」。
💡 这个对比想告诉你什么

Harness 越重 · 越慢 · 越贵 · 但产出从废品变成可用。这是一个典型的非线性 ROI —— 不能用”成本翻倍 = 效果翻倍”去算。

实战时的取舍 —— 一次性 demo · 用 Solo 没毛病;要交付给真实用户 · Solo 不够 · 必须上 Full Harness。选哪个不取决于”哪个更好”·取决于”这次任务能不能容忍废品”

B.9 · 反演化 · Sonnet 4.6 之后的简化

最后一个有意思的细节 —— Anthropic 在 Sonnet 4.6 发布之后 · 把上面 P-G-E 架构里最关键的一个约束去掉了 ——

原版约束

Anthropic 在 prompt 里强制 Generator —— 一次只做一个功能点 · 做完再做下一个。

否则让 Generator 自由发挥 · 它还是会急于求成 · 留下烂摊子。

Sonnet 4.6 后

Sonnet 4.6 的 Generator 能一次拿完所有功能点 · 自己决定先做哪个 · 稳步推进 · 不再急于求成。

于是 evaluator 也直接评估最终产出就够了 · 不再分功能点评估。

🌀 这件事的元教训

Harness 不是越复杂越好。当模型变强 · 之前必须用 harness 顶住的约束 · 现在模型自己就能 hold 住了 —— harness 反而可以简化。

所以 harness 设计有个动态性 —— 它要随模型版本演化。三年前 · GPT-3.5 需要重 harness 才能完成的任务 · 今天 Sonnet 4.6 一个直觉就解决了。下次 Anthropic 发布更强的模型 · 现有 harness 里又会有一批约束失去存在意义

这是这一模块最反直觉的洞察 —— harness 不是工程的终局 · 是工程为当下模型的能力短板临时搭的脚手架。

💡 学完模块 B 你应该能 ——

  1. 讲清楚 Solo 失败的 3 个模式 —— 急于求成 / 抛下烂摊子 / 视而不见的”完工”
  2. 知道 Initializer / Planner / Evaluator 各自解决了什么具体问题
  3. 看到 P-G-E 时序图能立刻指出 两个循环各自的作用 —— 谈标准 / 改 bug
  4. 心里有 Solo vs Full Harness 数字账单(20min/$9 vs 6h/$200)· 不再凭直觉拍方案
  5. 理解 harness 设计的动态性 —— 模型变强 · harness 反而能简化

📚 核心参考 · Anthropic · Effective harnesses for long-running agents (第一篇 · Initializer + 班际交接) · Anthropic · Harness design for long-running application development (第二篇 · P-G-E + Sonnet 4.6 简化)


模块 C · Harness 实战 · 把零件拼成你自己的 harness

模块 A 告诉你 harness 有 7 个一等公民 · 模块 B 让你看到长跑场景下 P-G-E 三 agent 怎么演化出来。这一模块换一个视角 —— 不讲架构 · 讲落地 —— 7 组件每一个都对应哪个文件 / 哪条命令 / 哪个配置。读完 · 你应该能动手拼装自己项目的 harness · 而不是只在概念层点头。

C.1 · 全景 · 7 组件 → 实战清单

下面这张映射表 —— 左边是模块 A 讲过的 7 个组件 · 右边是它们在 Claude Code 里的真实落点。把它当作这一模块剩下章节的目录 ——

7 组件(模块 A)实战落点 · 文件 / 命令本模块章节
主循环Claude Code 交互 session · —no-interactive贯穿全模块
工具集Read / Edit / Bash / WebFetch 等内建C.5 hooks 调控
子代理.claude/agents/<name>.md + Task()C.6 subagents
MCP 协议.mcp.jsonC.7 MCP
钩子.claude/settings.json hooks 字段C.5 hooks
权限控制.claude/settings.json permissionsC.5 hooks 同节
记忆与会话CLAUDE.md / CLAUDE.local.md / /compact / /clearC.2 + C.3

加上一个没在 7 组件里但实战中越来越重要的能力 —— Skills · 可挂载的能力包 —— 详见 C.4。

💡 怎么读这一模块 · 不要从头按顺序读。先扫这张表 · 找你最关心的组件 · 直接跳到对应章节。每一节都自洽。

C.2 · CLAUDE.md · 项目级 system prompt

整个 harness 里最高 ROI 的单一可配置项 —— Claude Code 启动时自动读取项目根目录的 CLAUDE.md。它的内容直接进每一次对话的 system prompt · 等于一个永久的项目级 instruction

为什么它如此重要 ——

2026 年的最佳实践 · 双文件分层 ——

📄 CLAUDE.md · 公开
进 git · 团队共享

项目级共识 —— 技术栈 / 约定 / 不要碰的文件 / 测试规则 / @imports 拆分。Simon Willison 推荐 ≤ 200 行 · 多了就用 @imports 把子文档拆出去。

📄 CLAUDE.local.md · 私有
gitignored · 个人 / 敏感

2026 年的新做法(obviousworks.ch 总结)—— 个人 shortcuts / WIP 笔记 / API key 路径 / 你自己的偏好 · 都放这里。永远不进 git。

下面这个互动组件 · 拿一份真实风格的 CLAUDE.md(接近 Anthropic / Vercel / Cloudflare 仓库的水平)让你点节查看每节的内容 + 为什么写 + 反模式 ——

📄 一份真实 claude.md · 分节剖析
点节看:实际内容 + 为什么写 + 不要这样写
📋 sections
🎯项目上下文
💡 为什么写这一节

告诉 agent 「我是什么项目 · 做什么用的 · 关键约束是什么」。没有这一节 · agent 每次都得自己猜。

✅ 实际内容(markdown)
# AcmePay · 跨境支付 API

这是一个 B2B 支付平台 · 接 30+ 国家银行 · 处理百万级日交易。

**核心约束**:
- 所有金额计算用 Decimal · 永远不用 float
- 任何用户输入都走 zod schema 校验
- 数据库写操作必须在 transaction 里
- 不允许 console.log · 用项目自带的 logger
❌ 反模式

写「这是一个 web 应用」这种没营养的话 · 不如不写。

⚠ CLAUDE.md 三大反模式

① 越长越好 · 500 行的 CLAUDE.md · 每次对话烧 8K token · 还稀释 attention。
② 把敏感东西写进去 · prod API keys / 客户名 · 进了 git 就回不去。
③ 写”愿景”不写”约定” · 「我们要做最好的产品」对 agent 零用。要写 能验证 的规则(“函数 ≤ 50 行”·“必须先写测试”)。

C.3 · Context 管理 · 三种「清场」动作

跑久的 Claude Code 会话 · context 总会膨胀。你有三种不同的清场动作 —— 选错就要么白丢上下文 · 要么白烧 token。

/compact

把目前的对话压缩成摘要 · 保留关键结论 + 当前任务状态。80K → 5K · 同任务继续干。

什么时候用 · 你还在做同一个任务 · 只是 context 太长 · 想腾空间继续。

/clear

完全清空对话 · 从头开始。只保留 CLAUDE.md。

什么时候用 · 完全切换任务 · 或者前面跑歪了 · 想从零再说。

Task()

派一个 subagent · 在独立的 context 里跑 · 主对话只收一个总结。沙盒式探索

什么时候用 · 临时想搜索 / 探索一个文件 / 跑一个独立子任务 · 不想污染主 context。

💡 真实场景 · 选哪个
跑了 2 小时调一个 bug · 终于快搞定 · context 满了 → /compact
agent 一直在错误方向 · 你想从头说 → /clear
刚做完一个 PR · 现在要做下一个完全无关的 → /clear
主任务跑着 · 临时让 agent 探索一个文件 → Task()
跑了 30 分钟 · 都在收集信息 · 准备开始实现 → /compact 留摘要

C.4 · Skills · 可挂载的能力包

Skills 是 2025 下半年才从 Anthropic 实验功能晋级到一等公民的概念 —— 「会做某件事」的打包。每个 skill 是一个文件夹 · 里面一份 SKILL.md 描述「我会做什么」+ 「什么时候唤起我」· 加上可选的脚本 / 模板 / 子文件。

它跟 CLAUDE.md 的关键区别 ——

CLAUDE.md
永远进 system prompt

每次对话都加载 · 烧 context。适合项目级永久共识(用什么测试框架 · 哪些文件不能碰)。

Skill
按需挂载 · 不用不烧

只在用户的当前请求匹配 skill description 时才加载 SKILL.md 全文。适合特定任务的工作流(准备 release · 跑 lint · 生成 changelog)。

一个 skill 的最小结构 ——

.claude/skills/release-prep/
├── SKILL.md            ← 必有 · 描述 + 操作步骤
├── changelog-template.md  ← 可选 · skill 用到的模板
└── scripts/
    └── make-notes.sh   ← 可选 · skill 触发的脚本

SKILL.md 头部用 YAML frontmatter 描述 —— Anthropic 内部和官方文档一致 ——

---
name: release-prep
description: 当用户要"准备 release" / "出版本" / "tag 一个 release" · 用这个 skill
---

# 怎么干

1. 跑 git log v$LAST..HEAD --oneline · 拿到所有 commit
2. 按 feat/fix/docs 分组
3. 用 ./changelog-template.md 当模板生成
4. 草稿写到 docs/releases/ · 提 PR

关键设计 —— description 字段是唤起开关 · agent 看用户消息 · 觉得匹配就把 SKILL.md 全文塞进 context。你写 description 时要写得像搜索查询 · 不要写”我是 release prep”。

有的 skill 自带 hooks —— 比如「自动 format」这种 skill · 内部会注册一个 PostToolUse hook 到 settings.json。装 skill 时 hooks 跟着进来。详见 C.5。

Skills 装哪里 ——

C.5 · Hooks · harness 的自动反应

Hooks 是把任意 shell 命令挂到 Claude Code 生命周期事件上。Agent 触发到那个事件时 · 你的命令自动跑。

核心事件(来自 Claude Code 文档 + Anthropic 内部模板)——

事件什么时候触发典型用法
SessionStartsession 开始把当前 git status / 环境 inject 到对话
UserPromptSubmit用户每次发送 prompt检查 prompt 是否提到敏感词 / 自动加 timestamp
PreToolUseagent 准备调工具前权限检查 · 阻止改 prod 文件
PostToolUse工具调完之后自动 format / 跑相关测试 / 通知 Slack
Stopsession 结束 / agent 完工桌面通知 · 总结写入 progress.txt

一个真实的 settings.json(综合多位工程师公开过的配置)——

{
  "hooks": {
    "PostToolUse": [
      { "matcher": "Edit",
        "command": "biome format $FILE" },
      { "matcher": "Edit",
        "command": "bun test --related $FILE" }
    ],
    "PreToolUse": [
      { "matcher": "Bash",
        "command": "echo 'block' >&2 && exit 1",
        "condition": "$COMMAND =~ 'rm -rf /'" }
    ],
    "Stop": [
      { "command": "osascript -e 'display notification \"Claude done\" with title \"Claude Code\"'" }
    ]
  }
}

💡 skills 和 hooks 的关系 · 一个 skill 可以自带 hooks —— 装 skill 时 hooks 自动注册。比如装一个「auto-format」skill · 它会往 settings.json 里加 PostToolUse hook。你装 skill = 同时安装它带来的 hooks。所以装第三方 skill 前 · 一定要 review 它的 settings 改动。

C.6 · Subagents 唤起 · 用 Task() 派遣专精 agent

Subagent 是 harness 里最强的隔离机制 —— 主 agent 用 Task() 调用 · subagent 在完全独立的 context 里跑 · 用专属的 system prompt 和工具子集 · 干完只返回一个总结给主 agent。

为什么要派 subagent · 不是主 agent 直接干——

什么任务该派 subagent · 用 4-tier 思维快速判断 ——

🪜 task recipe matcher · 选任务 · 看推荐档位
点击任务 · 看推荐 tier · 工具 · 为什么不能降档 / 升档
🐛 修一个跨 3 个文件的 bug· 用户报告 · 你都不知道在哪 · 让 AI 自己探索
🪜 4 个 tier · 推荐位置 = 高亮
cost
单 LLM 调用← 太轻 · 做不动这种任务
一句话能描述的任务 · 直接发 prompt · 拿结果
2-3×
cost
Workflow · 路径固定← 太轻 · 做不动这种任务
步骤事先知道 · 写代码把多次 LLM 调用串起来
cost
Single Agent + Tools✓ 推荐
任务路径不可知 · 让 LLM 自己想下一步 · 调工具
10-15×
cost
Multi-Agent→ 太重 · 烧 token 没收益
任务太复杂 · 单 agent 装不下 · 必须分工
💡 为什么这个 tier

Agent loop · LLM 自己决定先 grep 哪里 / 读哪个文件 / 跑哪个测试。

🛠 推荐工具
Claude Code interactiveCursor ComposerAiderCline
⬇ 为什么不降一档

路径事先不可知 · workflow 写不出来 · 必须让 LLM 边做边决定。

⬆ 为什么不升一档

单 agent 完全够 · 不需要多个专家视角。

🎯 下次怎么识别这种任务
  • · 路径事先不可知
  • · 需要 LLM 调多个工具
  • · 需要看真实数据再决定
  • · 需要 1-N 轮 tool_call

怎么定义自己的 subagent —— .claude/agents/<name>.md

---
name: security-auditor
description: 审查 PR 是否有 SQL injection / XSS / 鉴权遗漏等安全问题
tools: [Read, Grep, Bash]
model: opus
---

# 你的职责
你是一个安全审计 agent · 不写代码 · 只 review。

## 必须检查的 5 项
1. 所有 user input 是否走 zod / 参数化查询
2. 鉴权中间件是否在 router 顶部
3. 敏感字段(password / token)是否进 log
4. secret 是否硬编码
5. dependency 是否有已知 CVE

## 输出格式
- 列 issue · 每条带文件路径 + 行号 + 严重程度
- 不要"建议" · 只列 "必须修 / 应该修 / 可以忽略"

主 agent 用 Task({ subagent_type: 'security-auditor', prompt: 'review #123' }) 派出去 · 拿到结构化报告。

Anthropic 官方建议(来自 Building effective agents)—— 能不升档就不升。改一个 typo 派 Claude Code · 烧 1000 token + 启动 8 秒 · 你自己改 2 秒。90% 的日常任务都在 1× / 2-3× 区间 · 别一上来就 multi-agent。

C.7 · MCP · 把外部系统接进 harness

MCP 协议的概念在 L6 模块 C 讲过了 —— 这里只看实战层:怎么在你的项目里接 MCP server。

.mcp.json 在项目根目录 —— Claude Code 启动时自动加载 · 把里面声明的所有 server 接进可用工具集:

{
  "mcpServers": {
    "github": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-github"],
      "env": { "GITHUB_TOKEN": "$GITHUB_TOKEN" }
    },
    "linear": {
      "command": "npx",
      "args": ["@linear/mcp"]
    },
    "slack": {
      "command": "npx",
      "args": ["@modelcontextprotocol/server-slack"]
    },
    "internal-api": {
      "command": "node",
      "args": ["./scripts/internal-mcp.js"]
    }
  }
}

接进来后 · agent 多出 mcp__github__* · mcp__linear__* 这些工具 —— 没有任何代码改动 · agent 就能 query Linear / 评论 PR / 发 Slack 消息

两条实战准则 ——

C.8 · 三个黑客松冠军 · 三种 harness 哲学

讲完零件 —— 看一下真实工程师怎么把这些零件拼成自己的 harness。三个人都是 2026 年 Anthropic / Cerebral Valley 黑客松的冠军 / 跨平台 builder · 他们的配置都公开在 GitHub 上 · 你可以直接 clone 来跑。三种完全不同的哲学 ——

🧑‍💻 三个真实工程师 · 三种 harness 哲学
同样的 Claude Code · 同样的 7 组件 · 看他们各自怎么搭
文件树 · 点切换
📁 ~/.claude/skills/
📁 ~/.claude/agents/
📁 project/
everything-claude-code/SKILL.md主 skill · 唤起所有子能力
---
name: everything-claude-code
description: 当用户开始一个新项目 / 一个需要"高质量产出"的任务时 · 自动加载 ECC 的最佳实践
allowed-tools: [Read, Write, Edit, Bash, Task]
---

# 你是一个研究优先的工程 agent

ECC (Everything Claude Code) 的核心原则 ——

## 1. 永远先研究 · 再写代码
拿到任务 · 先 grep / read 至少 3 个相关文件
没有上下文 · 不要假设 · 让 Task() 派一个 explorer

## 2. 用 skill 而不是 prompt
任何"我经常这样做"的工作流 · 立刻沉淀成一个新 skill
skill 不仅是教程 · 是可执行的指令包

## 3. 安全扫描每次都跑
PreToolUse 触发 security-scanner subagent
检查 SQL injection / 敏感字段进 log / hardcoded secrets

## 4. 内存持久化
重要决定写到 ~/.claude/memory/decisions.jsonl
新会话开局先读 · 不重复同一个错误两次
集大成派Affaan Mustafa 的 harness 哲学 ——

把整个 harness 配置(skills + agents + hooks + 安全扫描 + 记忆持久化)打包成可一键装的 plugin。8 小时黑客松写出 v0 · 半年后 100K+ stars · 119 skills · 28 agents · 60 slash commands。harness 的核心是「沉淀」—— 你每发现一个有用的工作流 · 都把它沉到 skill 里 · 让后人不必重新踩坑。

同样的 Claude Code · 三种完全不同的搭法 · 没有"标准答案"。你应该挑一个最像你的工程师 · 抄过来 · 再慢慢改 —— 而不是从空白 CLAUDE.md 开始一行一行琢磨。
🧠 这三位的对比想告诉你什么

三种哲学没有对错 · 全看你的任务规模和团队结构 ——

Affaan(集大成派)适合个人 / 小团队·把每个有用的工作流都沉淀成 skill·让 harness 越用越强。
Bedirhan(多会话编排派)适合跨领域复杂项目·把不同子系统拆成独立 Claude 会话·用文件系统当 IPC。
Alireza(跨平台派)适合不绑定 IDE 的团队·一份 skills · 在 Cursor / Codex / Claude Code 都能跑。

实战建议 —— 别从空白 CLAUDE.md 开始。先 clone 这三个仓库其中一个最像你场景的·跑一周 · 你自然会知道要改什么。这是冠军们花了几个月迭代出的起点 · 你为什么不站在他们肩膀上?

C.9 · 自检 · 一份 harness 配置的 review 清单

写完 / 抄完一份配置 · 在交给项目之前 · 过一遍这个清单 ——

#检查项不过会怎样
1CLAUDE.md ≤ 200 行 · 多了用 @imports 拆每次对话烧 context · attention 稀释
2CLAUDE.md 每条规则都可验证(不写”愿景”)agent 把它当 fluff 略过
3敏感东西全在 CLAUDE.local.md · gitignoredprod key 进 git 一次 · 全网都能看
4PreToolUse 有 destructive 命令的拦截rm -rf / 你说了不算
5PostToolUse 有 format + 相关测试自动跑每个 commit 风格漂移 · 隐藏 bug 堆积
6自定义 subagent 的 tools 字段是 白名单 · 不全开code-reviewer 也能 Bash · 没必要的攻击面
7.mcp.json 里的 server 你都看过源码不熟的 MCP server 拿到你的 token
8装第三方 skill 时 review 它带来的 hooks隐藏的 PostToolUse 命令偷跑 · 难 debug

💡 学完模块 C 你应该能 ——

  1. 拿到一份陌生项目 · 5 分钟内说出它的 harness 配了什么 / 缺什么
  2. 给自己项目写出 CLAUDE.md + settings.json + .mcp.json 的最小三件套
  3. 知道什么任务派 subagent · 什么任务自己干
  4. 装第三方 skill / MCP server 前会 review 它的副作用
  5. 有一个你心目中的工程师 model(Affaan / Bedirhan / Alireza · 或其他公开过 harness 配置的人)作为模板的起点

📚 核心参考 · Anthropic · Building effective agents (subagent / workflow 的”圣经”) · Anthropic · Claude Code 官方文档 · hooks / skills / agents · Trail of Bits 公开的 Claude Code 配置 (整套实战级别 settings) · Designing CLAUDE.md correctly (2026) (CLAUDE.local.md 分层做法)


模块 D · 一天的 harness · 一个真实工作日的时间线

模块 A 讲清了 7 组件 · 模块 B 讲清了 P-G-E · 模块 C 讲清了 CLAUDE.md / hooks / skills 怎么配。全是静态配置。这一模块让你看一遍配置动起来是什么样 —— 模块 E 那个 Searchables 项目的 Day 7-8 · 一个工程师从下午 4 点干到晚上 11 点 · harness 怎么转的真实记录

不讲原则。每个时刻都对应一个真实的 git commit + 那一秒按下的命令 —— Task() 派几个 explorer / /clear 切场景 / hook 自动跑 / skill 自动唤起。所有时间戳都来自 git log · 可以自己 verify。

D.1 · 场景 · Searchables Day 7-8 · 一个 7 小时的真实工作日

📅 那一天发生了什么
日期
2026-01-20 → 2026-01-21 · 7 小时 17 个 commit
harness
Claude Code + 6 个自建 skill(new-db-schema / new-api-service / new-frontend-page 等)+ code-reviewer subagent
这一天的两件大事
下午把 highlights 系统(6 种 AI 模板)做完 · 晚上 22:30-22:45 ⚡ 直播系统 Phase 1→4 整套上线
没动 prompt 的关键时刻
晚上 21:41 · 写 40 分钟 design doc · 然后 15 分钟实现 4 个 phase。「沉淀 > 一次性 prompt」

D.2 · 时间线 · 跟着真实 git 历史走一遍

点任意时间块看那一刻的细节 —— 那一秒按下的命令、派出的 subagent、触发的 hook、context 长什么样。所有时间戳直接来自 git log --pretty=format:"%ai %s" 5b705477..80f5b4b8

⏱ Searchables · Day 7-8 · 16:30 → 22:51 · 7 小时真实工作日
点时刻看那一秒 harness 怎么转 · 或按 ▶ 自动走完一天
16:30🚀 Task() · subagent
开工 · 扫 inbox · Task() 并行查 6 个 issue
主 agentClaude Codeexp-1exp-2exp-3exp-4exp-5exp-6
⌨ 你按下的:Task("explorer") × 6 · 每个 1 个 issue / PR

主 agent 不读 inbox · 派 explorer 并行 · 主 context 不被污染。15 分钟后收 6 份 JSON 总结。

💾 此刻的 context 状态
6K
1 / 12

D.3 · 四个节拍 · 把一天拆成可复用的模式

看完时间线 · 你会发现这一天其实就是 4 个节拍 在循环 ——

🌅 节拍 1 · 扫
Task() × N · 并行摸清现状

早上面对的是未知 —— 12 个 issue / 5 个 PR / 昨晚的 bug · 不知道哪个该先做。主 agent 不读 issue · 派 5-10 个 explorer subagent 并行查 · 主 context 只收 1-行总结

关键命令 · Task(“explorer”, scope=issue) × N · 不要在主 context 直接 grep

🛠 节拍 2 · 做
/plan-and-execute + hooks 自动跑

选定一个任务 · 主 agent 上场 —— 先 plan 再 execute · 不要让它直接开冲。PostToolUse hook 在每个 Edit 后自动 format + 跑相关测试 · 你不用手按。

关键命令 · /plan-and-execute · PostToolUse · biome format + bun test —related $FILE

🗜 节拍 3 · 切
/compact 续命 vs /clear 重启

Context 满 · 同任务/compact 续命(80K → 5K 摘要)。切任务/clear 重启。两者永远别用错 —— 错用 /clear 等于扔了今天的全部上下文。

决策树 · 还在做同一件事 → /compact · 切到完全无关 → /clear · 临时探一下 → Task()

💧 节拍 4 · 沉
把今天反复的工作流变成 skill

Searchables 那一天派了 6 次 explorer · highlights 用 4 种 skill 重复套用 · live stream 又来一遍 —— 同一件事做 3 次 · 立刻沉淀成 skill(这就是 .claude/skills/ 里 new-* 那一套的来源)。明天起一句话「新建一个 db schema」就替代整个流程。

关键动作 · create-skill · Stop hook 写 progress.txt + decisions.jsonl

D.4 · 新手 vs 老手 · 同一个时刻 · 5 个对照

把 4 个节拍的差距讲透 —— 同一秒钟 · 新手按什么、老手按什么 ——

情景🌱 新手🏆 老手
面对 12 个 issue逐个读 · 1 小时还没开始干Task(“explorer”) × 12 并行 · 5 分钟拿到总结
写新 feature直接 “实现 X” · agent 一顿乱写/plan-and-execute · 先看计划再让它写
context 满了没意识到 · 继续硬聊 · 模型开始幻觉看 context bar · 立刻 /compact
切到无关任务直接 prompt · 之前 80K context 还挂着/clear 重启 · CLAUDE.md 自动保留
同件事做了 3 次没意识到 · 第 4 次还在重打 prompt立刻 create-skill · 沉淀成可一句话唤起的能力

D.5 · 你的下一步 · 写出你自己的时间线

写一份你昨天的 09:00 → 18:00。每个时刻填三栏 —— 你按了什么、当时在做什么、有没有可以沉淀的 skill

写完你会发现两件事 ——

  1. 你大部分时间花在「节拍 1 扫」上 —— 因为你没派 explorer · 自己读
  2. 沉淀过 0 个 skill —— 同一件事每天都要重新打一遍 prompt

这两件事 · 是你升老手最快的两个 leverage 点。

💡 学完模块 D 你应该能 ——

  1. 把 4 个节拍(扫 / 做 / 切 / 沉)对照自己 · 找到 1 个最大漏点
  2. 看到一个任务 · 立刻反应该用 Task() 还是 /compact 还是 /clear · 不再 yolo
  3. 本周至少沉淀 1 个 skill · 让下周比这周少做一次重复 prompt
  4. context bar 进入你的肌肉记忆 —— 看一眼就知道要不要 /compact
  5. 理解「design doc 先写好 + skill 早沉好 · 是 22:30→22:45 完整 4 phase 的真正秘密」· 不是 AI 神

📚 参考 · Anthropic Claude Code Best Practices · Claude Code Skills 官方文档 · affaan-m/ECC GitHub · 119 skills 仓库


模块 E · Harness 的终极 · 你的专业度

前 4 个模块教你怎么搭 harness。这一模块 —— L7 整门课的 punchline —— 退一步问个更深的问题:为什么有的人的 harness 配出来是 100K stars · 有的人配出来只是网上抄来的空壳?

答案不在 harness 本身。harness 是 know-how 的物化。CLAUDE.md 里每条规则、每个 skill、每个 subagent · 都是某种人类专业判断的化石。你没有这种专业判断 · 你的 harness 就是空的 · AI 给你的回报也是空的。

E.1 · 反直觉数据 · 黑客松冠军都不是工程师

2026.06 · Anthropic 全球 Built-with-Opus-4.7 黑客松 收官 · 前三名分别是 ——

🥇
冠军
Bedirhan Keskin · 医生
伊斯坦布尔 · 内科医生 → 转工程师 1 年

MedKit · 医学住院医师模拟训练平台 · 用 4 个并行 Claude Code 会话 · 各管一块(voice / clinical / 3D / core)。

🥈
第二名
Alexis Chapellier · 电器维修工
法国 · 修电器 8 年

Wrench Board · 帮独立维修工诊断复杂问题。每个细分领域派一个专门 agent · 同时 5-6 个并行跑。

🥉
第三名
Paula Vasquez-Henriquez · 老师
智利 · 计算机科学教师

Maieutic · 教学平台 · 学生必须先解释自己要做什么·Claude 检查解释逻辑通了再让写代码。

🗞 当时头条直接写

“Domain Experts Sweep Claude Opus 4.7 Hackathon” —— getaibook.com

一个医生、一个维修工、一个老师 · 在工程师扎堆的全球黑客松里包揽前三。专业的工程师反而输给跨界 domain 专家 —— 这不是偶然 · 是 AI 时代的结构性反转。

E.2 · 为什么 · harness 是 know-how 的化石

为什么医生能赢工程师?因为她写出来的 CLAUDE.md / skill / subagent · 里面装的全是医学专业判断 —— 工程师根本写不出来。看一下 Affaan 的 ECC 仓库(affaan-m/ECC · 100K stars)里的 3 个 skill · 每一个都是某种专业判断的化石 ——

💎 security-scanner skill

里面 102 条静态分析规则 · 每一条都是「我 / 230 个 contributor 见过这种坑」的化石。SQL 拼接 / 空 catch / hardcoded secret / 未 sanitize 的 HTML —— 不是 AI 自己想出来的 · 是写 skill 的人沉淀进去的

化石内容:8+ 年安全工程的痛

💎 researcher subagent

system prompt 写 “你的输出必须是 JSON · 让主 agent 容易消费” —— 这不是 prompt 技巧 · 是「我做过 multi-agent · 知道结构化输出比自由文本好用 10 倍」的工程教训。

化石内容:multi-agent 集成经验

💎 everything-claude-code skill

永远先研究 · 再写代码” + “同件事做 3 次立刻沉淀成 skill” —— 这两条规则 · 是 230 个 contributor 反复踩过急于求成的坑后浓缩出来的「我们的工作哲学」。

化石内容:230 人的协作教训

把这个观察推广 ——

💡 CLAUDE.md 里每一条规则 · 不是 prompt 技巧 · 是你过去 5 年工程实战的化石。 「函数 ≤ 50 行」是你被 500 行函数虐过 N 次的痛。 「测试先于实现」是你跑过没测试上线的 prod incident 之后的反思。 「migration 不能改」是你被某次手贱改 migration 害团队回滚的教训。 —— 你写不出 CLAUDE.md · 不是因为不会 prompt · 是因为你没有这些化石

E.3 · 实战 · 一个真实 SaaS 项目 5.5 个月的回放

抽象例子讲到这里 · 直接看一个实证案例 —— Searchables(AI 视频搜索 SaaS · monorepo · 5 apps · API / web / admin / desktop / website)从 0 到 1 长出来的真实 git 历史。这个项目用 Claude Code + 自建的 6 个 skill + 1 个 subagent 跑了 5.5 个月 · 421 commits · 单人开发。

每一步显示 ——

  1. 那一刻实际打的 prompt 大意
  2. 哪些 skill / agent / hook 自动跑了(都是真存在于 .claude/ 目录里的 · 不是编的)
  3. 那一步 git log --shortstat 的真实数字(添加行数 / 改动文件数)
  4. 项目累计状态 + leverage 比例(打几个字符 / AI 写几行)
⏯ 实战回放 · Searchables · AI 视频搜索 SaaS
5.5 个月 · 421 commits · 1 个人 · 用 Claude Code + 6 skills 长出来
D02026-01-13504e2677
Day 0 · 空仓库
🔧 这一刻 harness 怎么用 · prompt → skill → agent → hook → commit
💬
promptprompt
(还没开始 · 只 git init)
🖥 这一刻产品长这样
$ git initInitialized empty Git repositoryempty. waiting for the first prompt.
本步代码 +
0
0 files changed
累计 files
1
in tree
时间
起点
🎯 leverage
~0 字符 → 0
📂 files in tree · 1 → 1,097
📈 lines added (per step) · 峰值在 D24 credit 系统
所有数字直接来自 git log --shortstat · skills 的 snippet 直接来自 .claude/skills/*/SKILL.md · 没有美化。 421 commits · 1,097 files · 1 个人 · 5.5 个月跑通完整 SaaS(5 apps 单仓 monorepo)。这是「专业度 × harness」的实证 · 不是理论
🧠 看完这个回放 · 注意几件事
① Day 4 那次 dump · 40,774 行 · 一次 prompt 把整个 monorepo 骨架出完。这不是因为 prompt 多神 · 是因为开发者已经知道「这种 SaaS 应该长成什么样」—— domain 知识让那个 prompt 能值 200 字符撬动 4 万行。
② Day 8 直播系统 Phase 1→4 · 15 分钟 · 22:30 → 22:38 → 22:39 → 22:45 · 真实 git 时间戳。能这么快不是因为 AI 神 · 是因为前 1 小时先写了 design doc(化石)· skills(new-db-schema · new-api-service · new-frontend-page)把模板都已经沉好。
③ Day 24 credit 系统 · 6,474 行 / 55 files · 一次 prompt · 因为用上了自己几个月前搭好的 4 个 skill (db · api · trpc · better-auth-security)。每个 skill 都是几个月前踩过的坑沉淀下来的。
④ Day 160 一行 fix · 5 个月后还在维护 · 一份成熟的 harness · 让”在线了 5 个月的真用户”也能继续迭代。

💡 这就是 E.2 「化石」的实战版本。Affaan 的 119 skill / Anthropic 的 P-G-E / Lin 的一天 —— 都在这个案例里能看到对应物。所有数字都可以在 git log 里复现

E.4 · 上手 · 这 10 个 skill 一行命令装上 · 立刻有 harness

看完 Searchables 你大概想 ——「我自己怎么开始有这种 harness?要写 6 个 SKILL.md 吗?」

不用从零开始。Anthropic 官方和社区维护着一个 marketplace · 几百个 skill 直接 /plugin install 装上就用。下面这 10 个是作者本人在用的 · 选了对 AI 编程最通用的子集 —— 装完一遍 · 你的 harness 立刻就有 70% Affaan 的水平 ——

🌱 入门 · 3 个必装
superpowers@claude-plugins-official

Anthropic 官方的”超能力”集合 —— 14 个 skill 一次打包 · 覆盖 brainstorming → writing-plans → TDD → systematic-debugging → using-git-worktrees → subagent-driven-development → 完整 dev 流。装完它一个 · 等于装了 14 个最常用 skill。

/plugin install superpowers@claude-plugins-official
claude-md-management@claude-plugins-official

带一个 claude-md-improver skill —— 自动审改你的 CLAUDE.md · 给规则补”为什么” · 砍掉空话 · 帮你压到 200 行天花板内(模块 C.2 讲过的双层做法)。

/plugin install claude-md-management@claude-plugins-official
skill-creator@claude-plugins-official

沉淀自己 skill 的”造 skill 的 skill”。直接说「把刚才那一套流程沉淀成 skill」· 它会帮你建 SKILL.md + frontmatter + 触发条件。E.6 练习沉淀第一块化石就靠它

/plugin install skill-creator@claude-plugins-official
⚙️ 提效 · 3 个常用工作流
context7@claude-plugins-official

解决幻觉 API 头号方案 —— AI 写代码常 import 不存在的函数。装上这个 · agent 写库相关代码前会自动查 context7 拿当下最新的官方文档 · 不再 hallucinate React 18 API 在 React 19 里。

/plugin install context7@claude-plugins-official
code-simplifier@claude-plugins-official

专治 AI 写的不必要复杂代码 —— AI 喜欢加 abstract base class / factory / wrapper 让代码看起来「专业」。这个 skill 反过来 · 一句话「简化这段」直接给你砍。F 模块反模式 5 的解药。

/plugin install code-simplifier@claude-plugins-official
frontend-design@claude-plugins-official

前端工程师必装。description 写「做出独特、生产级的前端界面 · 避免 AI slop 美学」—— 触发后 agent 会按 brutalist / editorial / 等十几种风格出方案 · 不再千篇一律「purple gradient on white」。

/plugin install frontend-design@claude-plugins-official
🚀 进阶 · 3 个工程化能力
feature-dev@claude-plugins-official

feature 开发的完整流水线·内含 3 个 subagent —— code-explorer 摸现状 / code-architect 出方案 / code-reviewer 审产出。基本就是模块 B 的 P-G-E 给你做好的 turn-key 版。

/plugin install feature-dev@claude-plugins-official
mcp-server-dev@claude-plugins-official

自己造 MCP server —— build-mcp-server / build-mcp-app / build-mcpb 三个 skill。想把内部 API / 数据库接进 harness 必备(C.7 讲的就是装别人的 · 这个是造自己的)。

/plugin install mcp-server-dev@claude-plugins-official
remember@claude-plugins-official

跨会话持久化记忆 —— 解决模块 B 那个「下一班 agent 不知前情」的问题。它会把关键决定写到 ~/.claude/memory/decisions.jsonl · 新会话开局先读 · 跨日不失忆。

/plugin install remember@claude-plugins-official
🔥 高级 · 自治派必试
ralph-loop@claude-plugins-official

模块 C.8 讲的 Geoffrey Huntley 的 Ralph 模式 —— Anthropic 把它打包成官方 skill 了。写好 PRD · 一行命令进入自治循环 · 跑到 PRD 全绿才停。别上来就用 · 先理解 C.8 的哲学

/plugin install ralph-loop@claude-plugins-official
🔧 一次性 setup · 第一次用要先加 marketplace
# 一次性添加 Anthropic 官方 marketplace
/plugin marketplace add anthropics/claude-plugins-official

# 然后批量装上面 10 个 (作者本人在用的最小集)
/plugin install superpowers@claude-plugins-official
/plugin install claude-md-management@claude-plugins-official
/plugin install skill-creator@claude-plugins-official
/plugin install context7@claude-plugins-official
/plugin install code-simplifier@claude-plugins-official
/plugin install frontend-design@claude-plugins-official
/plugin install feature-dev@claude-plugins-official
/plugin install mcp-server-dev@claude-plugins-official
/plugin install remember@claude-plugins-official
/plugin install ralph-loop@claude-plugins-official

装完 = 你立刻有 14 (superpowers) + 1 + 1 + 1 + 1 + 1 + 3 (feature-dev) + 3 (mcp) + 1 + 1 ≈ 26+ 个 skill / agent · 直接达到 Affaan ECC 25% 的规模。你只需要在这个地基上 · 加你自己 domain 的 ~10-20 个 skill·就接近他了。

💡 怎么验证装好了 · 启动 Claude Code · 跟它说「列出当前可用的所有 skill」· 它会拉出所有装好的清单。或者直接 /plugin list

E.5 · 公式 · 拖滑块感受乘法效应

看完真实案例 + 一批 skill 在手 · 现在把那种「专业度 × harness」的直觉变成可拖动的公式 ——

🧮 L7 的 punchline · 拖滑块看看
AI 输出质量 = 你的 domain 专业度 × 你的 harness 沉淀质量
domain 专业度你在某个领域的深度5/ 10
harness 沉淀质量你的 know-how 物化到 harness 的程度5/ 10
5
×
5
=
25
🎯 AI 产出质量
垃圾
平庸
良好
冠军级
平庸25/100

能跑 · 但产品撑不住 1 个真实用户

⚡ 4 个真实档位 · 直接跳
自由拖滑块 · 或点上面 4 个档位之一跳到具名场景
⚠ 专业度 = 0
harness 满 10 也救不了 · 输出归零
⚠ harness = 0
专业度满 10 · 输出最多 10 · 卡在你一个人
✨ 两个都满
100 分 · 你的专业度 24/7 跑在 AI 身上

这个 widget 想让你亲手感受一件事 —— harness 和专业度是相乘的 · 任何一边为 0 · 结果归零

E.6 · 推论 · AI 时代该专攻什么

如果 harness = 你的专业度 × 沉淀质量 · 那 AI 时代的工程师该专攻什么 · 答案就很清楚了 ——

❌ 错的方向 · 表面派
学「怎么用 AI」
  • 背 100 个 prompt 模板
  • 研究 Cursor / Claude / Copilot 谁更厉害
  • 追每周新功能 / 新模型
  • 「AI prompt engineer」当 title

→ 公式右边 · 没专业度撑着 · 结果归零

✅ 对的方向 · 地基派
在某个 domain 做到 top 1%
  • 深耕一个领域(安全 / 数据 / 后端 / 你自己的行业)
  • 每个项目结束 · 沉淀一份你自己的 skill
  • 把每个跨过的坑写成 hook 或 CLAUDE.md 规则
  • title 不重要 · skill 仓库大小才重要

→ 公式左边充实 · 你的专业度 24/7 跑在 AI 身上

E.7 · 你的下一步 · 5 分钟练习

打开你的 editor · 列以下三件事 ——

① 我最熟的 domain

我在 ____ 领域有 ____ 年经验。我比同辈强的地方是 ____。

② 我每周都要重复做 3 次以上的 3 件事
1. ____(如:写 release notes / 审 PR 安全 / 写 migration)
2. ____
3. ____
③ 接下来一周的目标

把上面 3 件事中最高频的那件·沉淀成一个 SKILL.md · 放到 ~/.claude/skills/<name>/。下周这件事再做的时候 · 一句话唤起。这就是你自己 ECC 的第一块化石

E.8 · L7 一句话

🎯 整门 L7 的 punchline

AI 给你的杠杆
=
你的 domain 专业度 × 你 harness 沉淀质量

前者你这辈子都在攒。后者 L7 教你 8 个模块怎么搭。
两个都满 · 你就是下一个 hackathon 冠军

💡 学完模块 E 你应该能 ——

  1. 复述 L7 的核心公式 · 解释为什么是乘法不是加法
  2. 看到一个 hackathon 冠军作品 · 能立刻识别背后的 expertise × harness
  3. 列出 3 个你能立刻沉淀成 skill 的高频工作流
  4. 明白 AI 时代该把 80% 精力放在 domain 深度 · 不是 「AI 技巧」
  5. 开始你自己的 skill 仓库 —— 哪怕只有 1 个 SKILL.md · 你已经在公式的右边写下第一笔了

📚 核心参考 · Anthropic · Built-with-Opus-4.7 黑客松官方公告 (medic / repair tech / teacher 冠军故事) · getaibook · Domain Experts Sweep Claude Opus 4.7 Hackathon Results (反直觉数据头条) · affaan-m/ECC GitHub (119 skills · 230 contributors · 100K stars · 全是化石) · Anthropic skills 官方仓库 (Anthropic 沉淀的 know-how)


模块 F · 7 大反模式 · 用 AI 编程的常见坑

学一门新技能 · 知道不能做什么和知道能做什么同等重要。下面 7 个反模式 · 每一个都是真实工程师踩过的坑。识别它们 · 避开它们。

F.1 · 7 个反模式速查表

❌ 反模式 1
”Vibes 编码” · 无 spec 直接干
症状 · 项目跑得很 high · 三个月后无法维护 · 全部重写
根因 · 你自己没想清楚需求 · 把”我想要”当成 prompt 砸给 AI · AI 给的是”它以为你想要”
解药 · 模块 G 第 1 步 · 先写 spec.md · AI 只能 review · 不能 generate spec
❌ 反模式 2
跳过测试 · 因”AI 看起来对”
症状 · 上线后炸 · debug 时发现 AI 跳过了你都没注意到的 edge case
根因 · 把”生成”当”验证” —— AI 写得有 syntactic correctness 不等于 semantic correctness
解药 · 模块 C.5 hooks · 把 bun test --related $FILE 挂到 PostToolUse · AI 一改就跑测试 · 偷工立刻暴露
❌ 反模式 3
让 AI 做架构决策
症状 · 架构混乱 · 不同模块互相耦合 · 想加 feature 牵一发动全身
根因 · AI 不知道你的系统全貌 · 给的方案总是”看起来合理”·但缺跨系统视野
解药 · Karpathy 的”建筑师 + 木匠” —— 架构你定 · 实现交给 AI·在 CLAUDE.md 里写死架构边界
❌ 反模式 4
Context 污染
症状 · 50 轮后 agent 自相矛盾 · 答非所问 · 之前讨论过的细节又问一遍
根因 · 同一个会话里什么都问 · context 被填满垃圾 · 关键信息被挤掉
解药 · 模块 C.3 三种清场动作 · 切任务用 /clear · 续命用 /compact · 探索类子任务用 Task() 隔离
❌ 反模式 5
一种 harness 配置走天下
症状 · 改 typo 也派出长 agent · 改系统也手动 inline edit · 永远不舒服
根因 · 没有按任务调整 harness 配置 · 把工具当锤子看什么都是钉子
解药 · 模块 C.6 的 4 tier 升档判据 —— 每个任务前 30 秒想清楚需要什么配置·改 typo 别派 Claude Code · 跑评估别上 multi-agent
❌ 反模式 6
不审 AI 的 diff
症状 · 安全漏洞 / 性能黑洞 / 静态资源泄露 · code review 阶段才发现
根因 · 假设 AI 写对了 · 没认真看 diff 就 accept
解药 · 模块 C.6 的 code-reviewer subagent · 让独立第三方 agent 审 diff —— 跟模块 B 的 Evaluator 同一个道理 · 比自己看 10 倍可靠
❌ 反模式 7 · 最隐蔽 · 最致命
过度依赖 · 自己不思考
症状 · 半年后水平倒退 · 没有 AI 就写不动代码 · 不知道底层在干啥
根因 · AI 替你思考 → 你越来越不思考 → 思考肌肉退化
解药 · 1) 定期不用 AI 写代码·保持手感 2) 追问 AI 的方案·让它解释 · 学走那些原理 3) 自己造工具(期末挑战)· 主动从”用工具”升级到”造工具”

F.2 · 反模式的”早期信号”

新手最大的问题是没察觉自己在反模式里。下面几个早期信号 · 出现就该警觉:

⚠️ 自检信号
  • ”我也不知道这段代码在干啥 · AI 写的"
  • "测试我先跳过 · AI 写得看着像对的"
  • "这个架构怎么变成这样了 · 之前不是这样设计的"
  • "AI 怎么又问我项目用什么测试框架 · 我感觉刚刚说过"
  • "为什么这个工具最近这么慢 · 之前没这样过"
  • "PR review 时 reviewer 又找出几个 AI 加的没必要的复杂"
  • "我感觉自己最近写代码有点不熟”

任何一条出现 · 立刻停下来反思 · 对照 7 反模式看看自己在哪。早期校正 · 比晚期重写便宜 100 倍。

💡 学完模块 F 你应该能 —— 1) 把 7 反模式背下来 · 编程时心里始终有”是不是踩进去了”的警觉 2) 看到自检信号能立刻识别 3) 知道每个反模式对应的解药前序模块


模块 G · 新工作流 · spec → ship 5 步

把 A-G 的所有概念串成一条可执行的工作流 —— 从想法到生产的 5 步 · 每步都明确”人做什么 · AI 做什么”。

G.1 · 完整流程图

🛠 spec → ship · 5 步工作流
1.📋 SPEC · 写清楚要什么· 人 100% 主导
人做 · 1-2 页 markdown · 需求 / 成功标准 / 边界条件 / 反例 / 不能做什么
AI 做 · 只 review · 绝对不能 generate spec·会给你一个看起来合理但漏 50% 边界条件的版本
→ 输出 · spec.md
2.📐 PLAN · 把 spec 变成功能列表· AI 提议 · 人审
人做 · 看 AI 拆的合理吗 · 顺序对吗 · 依赖关系画清楚没 · 不合理就让它重做
AI 做 · 当 Planner(A.7)· 把 spec 拆成详细功能点 · 每个功能点带验收标准
→ 输出 · plan.md(功能列表 + 验收标准)
3.⌨️ CODE · 一次一个功能点· AI 主导 · 人监控
人做 · 看关键 diff · 关键决策处插嘴 · 偏离 spec 时拉回来
AI 做 · 当 Generator(A.7)· 一次实现一个功能点 · 同时写测试 · 完成提交 review
→ 输出 · 实现代码 + 测试代码 + 每个功能点的进度更新
4.🔍 VERIFY · 三层防线· 人 + AI 都要做
人做 · 1) 手动审关键 diff · 2) 端到端测试跑一遍 · 3) 同事 review —— 三层防线 · 一层不过都不能 ship
AI 做 · 当 Evaluator(A.7 · 独立第三方)· 跑测试 · review 自己的代码 · 找潜在问题
→ 输出 · 通过 / 不通过 · 不通过回到第 3 步
5.🚀 SHIP · 人主导 · AI 当配角· 人 100% 决策
人做 · merge · 部署 · 监控 · 看用户反馈 · 决定下一步迭代
AI 做 · 帮你监控告警 · 帮你 summary 用户反馈 · 帮你拟下一轮的 spec 草稿 · 但不能直接动 prod
→ 输出 · 上线 · 数据 · 下一轮 spec 的种子

G.2 · 每步的”常见翻车”

常见翻车对应反模式
SPEC让 AI 写 spec · 自己只 review · 结果 spec 缺一半边界条件反模式 1(Vibes 编码)
PLANAI 拆得太粗 · 你没追问就接受 · 实现阶段才发现遗漏反模式 3(让 AI 做架构)
CODE让 AI 一次做完所有功能点 · 单次 context 装不下 · 自己崩溃反模式 4(context 污染)
VERIFY只让 AI 自评(王婆卖瓜)· 没用独立 Evaluator · 没人审 diff反模式 2(跳过测试)+ 6(不审)
SHIP让 AI 直接 push prod · 没人在线监控 · 出问题没法回滚反模式 3(架构)+ 7(过度依赖)

G.3 · 5 步的”分工密码”

💡 分工密码 · 5 步看一眼就明白

SPEC · 人 100% · AI 0%(只能 review · 不能 generate)
PLAN · AI 80% 提议 + 人 20% 审 + 改
CODE · AI 90% 执行 + 人 10% 监控
VERIFY · AI 50% 自检 + 人 50% 独立验证
SHIP · 人 100% 决策 · AI 0%(不能动 prod)

注意 · 越靠近物理世界(spec = 想法层 · ship = 真实用户层)· 人的占比越大。越靠近抽象世界(code / verify = 算法层)· AI 占比越大。这就是 Karpathy 的”建筑师 + 木匠”在工作流里的落地

💡 学完模块 G 你应该能 —— 1) 把 5 步当肌肉记忆 · 每个新任务都按它走 2) 看到一段工作流 · 能立刻指出”这步分工错了” 3) 不再问”AI 能不能做这个?” · 改问”这 5 步里 AI 应该做哪几步?“


期末挑战 · 用 Agent SDK 造一个 mini harness

(待写 · 下个迭代)


🎯 L7 进度 · A-G 七模块完整。期末挑战将基于本课所学 · 让你用 Anthropic Agent SDK 实际造一个针对你日常工作的小型 harness。