🎬 开场 · Karpathy 说「我现在用英语写代码比 Python 多」
3 年时间 · 你和 AI 的工作关系从「我打字 · 它接尾巴」变成「我画图 · 它打地基 + 砌墙 + 装修」。
Karpathy 在他的演讲 Software is Changing Again 里说了一句让无数工程师拍大腿的话 —— 「我现在用英语写代码比 Python 多」。这不是修辞 · 是字面意思:他给 Claude Code 下指令的 token 总量已经超过他亲手敲代码的 token 总量。
这一课的认知地图 · 8 模块
📚 写作锚点 · 这一课的所有概念都对照 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 是什么 · 得先理清它和它两个”前任”的关系。
研究怎么把发给模型的话说清楚·让模型更容易理解你的真实意图。
范围:模型的输入字符串这一段。门槛低 · 模型变强后已经很少单独提了。
研究在最合适的时机·把最合适的内容放到模型的 context 里。Context 不只包含 prompt · 还有对话历史、工具列表、skill 列表等。
范围:所有进入 context 的内容。Context 有容量上限 · 不能无止境塞东西。
研究怎么围绕大模型搭一个完整可靠的 agent。研究对象覆盖了除大模型之外的所有内容 —— 权限管控、工具管理、错误恢复、长任务执行等等。
范围:除模型本身之外的所有工程。是 prompt eng + context eng 的超集 · 站在更高系统层。
💡 一句话理清三者关系 —— 三层是层层递进 · 研究范围层层扩大的关系。Prompt 研究”怎么问”·context 研究”怎么给”·harness 研究”怎么搭”。它们关注的问题越来越大 · 越来越广。
画出来 · 三层的「⊃ 关系」
为了把这个抽象的”研究范围”概念再具象化一点 · 看一下一次真实的 Claude Code 调用里 · 模型实际”看到”的 context 是怎么分配的 ——
Prompt eng 优化的是最后那 2%·context eng 优化的是整个 200K 怎么填·harness eng 优化的是让这一切运行起来的整套系统。
A.2 · Harness 是什么 · 从马具说起
“harness” 这个词在英文里的本意是 马具 —— 套在马身上、用来控制马的那些装备:缰绳、嚼子、头套 …
马很强 · 但脱缰就乱跑。马具不是用来削弱马 · 是用来驾驭马的力量 —— 让强大变成”可用的强大”。
大模型很强 · 但放任不管会发散、会幻觉。Harness 不是用来削弱模型 · 是给它套上一套系统 · 让强大变成”稳定的强大”。
Harness 的”公式”
LangChain 在 2025.3.10 的文章 The Anatomy of Agent Harness 给出了被业界广泛接受的公式 ——
Agent = Model + Harness
或者反过来 · Harness = Agent − Model —— 凡是不属于模型的部分 · 都是 harness
⚠️ 要注意 · Harness Engineering 是一个非常新的概念 · 目前业界还没有形成严格的学术定义。这个公式是大多数人比较认可的一种说法 —— 但它不是唯一答案 · 也不是钦定真理。这一节后面会专门讨论这个概念的争议。
起源故事 · 2025 年 2-3 月这个词怎么火起来的
Hash Mondal 的个人博客 My AI adoption journey 首次提出 “harness engineering”。 原话:“我也不知道业界有没有公认叫法 · 我就姑且叫它 harness engineering。要是有更好的词 · 我随时改口。“
OpenAI 发文 · 详细记录五个月用 AI 写 100 万行代码的实战。这篇文章把概念引爆全网。 有意思的细节:标题用了 harness engineering · 但正文里只用了一次 harness 这个词。
Martin Fowler 网站发表 Harness Engineering: First Thoughts · 把概念带进顶级软件工程圈。
LangChain 发文给出 Agent = Model + Harness 公式 · 把概念定型。
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 · 用同一个项目(个人任务管理器)作为载体 ——
把 v1 升级成完整 SaaS MVP
- 加 React 前端 + Express 后端 + SQLite + Prisma
- 用户注册 / 登录 (邮箱+密码 · JWT)
- 任务支持:标签 / 优先级 / 截止日期
- 支持搜索 / 筛选 / 排序
- 加完整的单元测试
请先做规划(plan mode)· 我审完再开干// 项目结构 + .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:migrateClaude Code interactive 单 agent loop · 配 ~60 行 CLAUDE.md · 偶尔 /compact。用了 harness 7 组件里的 4-5 个(主循环 / 工具集 / 权限 / 记忆与会话 / 部分 hooks)。
- React + Express + SQLite
- 用户登录 · 数据存数据库
- 跨设备访问(云端数据)
- 标签 · 截止日期 · 优先级
- 搜索 / 筛选 / 排序
- 只支持单用户(无协作)
- 没有第三方集成(calendar / email)
- 没有 admin / 计费 / 工作区
- 上线还需要手动配置
同一个想法 · 同一个 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 ——
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”)——
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 的定义 + 设计该组件时的关键取舍:
Anthropic 官方循环:「gather context → take action → verify work → repeat」。Agent SDK 的核心 · 这个 loop 怎么转决定 agent 的整体运动方式。
- · 何时终止 · 无 tool_call · 最大轮数 · 用户中断
- · 工具调用 · 串行 vs 并行
- · 错误回滚策略 · 重试 / 跳过 / 终止
每个组件不是”开/关”的 boolean · 而是一根可调旋钮:
主循环可以短(一两步就停 · 让用户审)也可以长(自治几十轮)。
工具集可以狭(只读不写)也可以全栈(Bash · Edit · Web · MCP 全开)。
权限可以严(每个 diff 都问)也可以松(acceptEdits 自动通过)。
钩子可以密(每个工具调用都拦截)也可以疏(全程不介入)。
不同 harness 设计师的”工作哲学” · 体现在他们怎么拧这 7 根旋钮。同样一个 Claude · 7 根旋钮拧到不同位置 · 就长成不同性格的 agent —— 这就是为什么不同 AI 编程工具的体验天差地别 · 哪怕底下都是同一个模型。
A.6 · 实战范式一 · OpenAI 的三大优化类别
7 组件是 harness 的”建筑材料”·但拿到材料怎么搭出一个真的能干活的系统?看大厂的实战。
OpenAI 在 2025.2.11 那篇引爆全网的文章里 · 详细记录了他们用五个月 AI 写 100 万行代码的过程。把里面的优化点抽象出来 · 大致可以分成三大类 ——
让 agent 拿到充足的项目信息。新员工不知道规范 = 干不了活 · agent 也一样。
AGENTS.md 装所有规范AGENTS.md 压到 ~100 行 · 只当目录用 · 相关文档分散放让 agent 自己验证产出。没有验证 = 没办法保证准确率。
后台 agent 做垃圾回收。大规模生成必然引入烂代码 · 不管会积少成多。
“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 独立审 ——
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 文章里给了两个具体例子:
Sonnet 4.5 有一个问题:context 长了之后模型急于结束任务·以更少 token 完成交付 · 影响质量。Anthropic 一开始用”上下文重置”这种 harness 技术对抗它 —— 但升级到 Opus 4.5 后这个问题就大幅缓解·不再需要那个 harness 设计了。
Anthropic 一开始在 prompt 里强制 Generator 每次只做一个功能点 · 否则它会一口气全部都做漏洞百出。但用 Opus 4.6 之后不再需要 —— 模型的全局统筹能力够强 · 可以自己决定先做哪个再做哪个。Anthropic 后续就把这个约束去掉了。
一个比较中立的立场
Harness Engineering 不是噱头 · 但也不是终局
说它不是噱头 · 是因为 OpenAI 和 Anthropic 通过 harness engineering 把 agent 的稳定性、自动化程度、生产力推了一大步。这些是可验证的工程成果 · 不是概念炒作。
说它不是终局 · 是因为随着模型继续增强 · 今天这些”约束 / 兜底”的系统设计 · 很可能会被模型自身一步步吸收。那时很多 harness 就不再需要了。
所以我更愿意把 harness engineering 看成是一个过渡期的关键技术·它可能不是未来的终局答案 · 但是当下最现实的答案。
实操含义 · 在今天 · 模型依然会犯错、会幻觉、会在复杂任务中偏离轨道。谁能把 harness 搭得更稳 · 谁就能更早把 AI 转化为真正的生产力。
💡 学完模块 A 你应该能 ——
- 清楚 prompt eng / context eng / harness eng 三个层次的关系 —— 研究范围层层扩大
- 给出 harness 的公式 · 知道它的起源故事(Hash Mondal · OpenAI · LangChain · Anthropic 的 50 天)
- 看懂 harness 的 7 个组件(Agent SDK 一等公民)
- 知道两套实战范式 —— OpenAI 的三大优化类别 + Anthropic 的 Planner / Generator / Evaluator 架构
- 对 harness engineering 持有自己的批判性立场 —— 不当噱头 · 也不当终局
- 有一张 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 干所有事 · context 一爆就抛下烂摊子 · 给 agent 加东西的起点。
看完了演化链 · 下面这个互动组件让你单独深入任意一阶段 · 看它的具体架构图 + 完整故事 ——
Anthropic 想让 agent 克隆 claude.ai。直接派出去 · agent 一口气想做完所有功能 · 上下文满了 · 半截就溜了。下一个 agent 来接手 · 完全不知前情 · 只能猜 · 一猜就坏事。
💡 怎么读这两个组件 —— 演化链回答「为什么会有这一步」 · 互动组件回答「这一步具体长什么样」。后续 B.2 - B.9 会逐个细讲每一步背后的故事 + 数字 + 时序图。
B.2 · 故事开始 · 让 agent 克隆 claude.ai
Anthropic 做了一个实验 —— 让一个 agent 把 claude.ai 整个聊天界面克隆出来。这是一个很有代表性的任务 ——
直接派给一个 agent · 不加任何 harness —— 结果惨烈。下面这一节讲清楚 · 到底是怎么惨烈的。
B.3 · 第一次翻车 · Solo 单 agent 的 3 个失败模式
Anthropic 把这次失败拆成了三种典型的”翻车姿势” —— 每一种都很有画面感 ——
agent 接到需求立马就开干 · 干劲爆棚 · 想一口气把所有功能全做完。结果干到一半 · context 已经满了。
context 满了 · 当前会话被迫结束。很多功能只做了一半 · 但代码里没有任何「我做到哪了」的记录。
下一班 agent 接手 · 不知道前面发生了什么 · 只能粗略扫一眼代码 · 看起来差不多 · 于是”大功告成”草草收工。
单 agent 模式的根本问题 —— 「规划」和「执行」混在一个 context 里。规划做不细 · 执行就急于求成。执行装不下 · 规划也跟着丢。这两件事必须解耦。
B.4 · 第一招 · Initializer + 「班际交接物」
Anthropic 在第一篇文章里给出的解法 —— 在 generator 前面加一个 Initializer agent。它只跑一次 · 干一件核心的事 —— 把模糊需求拆成详细的功能列表 —— 同时留下几样后续 agent 必须读的”交接物” ——
feature-list.json· 200+ 条详细功能点init.sh· 启动开发服务器的脚本claude-progress.txt· 每次会话写一段「我做了什么」- 首次 git commit · 锚定初始状态
- 开局先读
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 种方案 ——
效率太低了。都 AI 时代了 · 能交给 AI 的就交给 AI 吧。
让 generator 自己评估自己的产出 —— 听起来挺合理。但 Anthropic 发现根本不好用。原因很简单 ——「自评」这件事本质上就是王婆卖瓜 · 自卖自夸。Agent 对自己做的东西天然有滤镜 · 即使产出里有明显的 bug · 也能视而不见 · 给自己打个高分草草收工。
Anthropic 的最终方案 —— 做一个专门的评估 agent。它是独立的第三方 · 没理由替别的 agent 护短 —— 评估结果就客观多了。另外一个好处 · 可以单独优化 Evaluator 的 prompt 和工具 · 让它的评估能力做到最好。
💡 生成 ≠ 评估。这两件事必须由不同的 agent来做 —— 因为评估的客观性 · 来自于评估方不是利益相关方。Anthropic 用工程手段把这条制度化了。
B.7 · 完整时序图 · 三方协作
到这里 · 我们就有了 Planner / Generator / Evaluator 三个 agent。它们怎么分工合作完成一个功能点?下面这个互动时序图按 Anthropic 原文的叙事顺序走一遍 —— 点 ▶ 看箭头按节奏飞 ——
点 ▶ 播放 · 或单步按 →
循环 1 · 谈标准 · Generator 和 Evaluator 先就「做到什么程度算完成」反复 2-3 轮 · 这一步避免 Evaluator 后面拿不存在的标准卡 Generator。
循环 2 · 改 bug · 实现完毕 · Evaluator 跑测试列问题 · Generator 改 · 再交 · 反复 2-3 轮直到通过。
两个循环 · 各管各的 —— 第一个对齐预期 · 第二个保证产出。
B.8 · 数字账单 · Solo vs Full Harness
Anthropic 拿了一个具体的任务来对比 —— 让两套方案分别做一个游戏制作工具 —— 看效果差多少 ——
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 的 Generator 能一次拿完所有功能点 · 自己决定先做哪个 · 稳步推进 · 不再急于求成。
于是 evaluator 也直接评估最终产出就够了 · 不再分功能点评估。
Harness 不是越复杂越好。当模型变强 · 之前必须用 harness 顶住的约束 · 现在模型自己就能 hold 住了 —— harness 反而可以简化。
所以 harness 设计有个动态性 —— 它要随模型版本演化。三年前 · GPT-3.5 需要重 harness 才能完成的任务 · 今天 Sonnet 4.6 一个直觉就解决了。下次 Anthropic 发布更强的模型 · 现有 harness 里又会有一批约束失去存在意义。
这是这一模块最反直觉的洞察 —— harness 不是工程的终局 · 是工程为当下模型的能力短板临时搭的脚手架。
💡 学完模块 B 你应该能 ——
- 讲清楚 Solo 失败的 3 个模式 —— 急于求成 / 抛下烂摊子 / 视而不见的”完工”
- 知道 Initializer / Planner / Evaluator 各自解决了什么具体问题
- 看到 P-G-E 时序图能立刻指出 两个循环各自的作用 —— 谈标准 / 改 bug
- 心里有 Solo vs Full Harness 数字账单(20min/$9 vs 6h/$200)· 不再凭直觉拍方案
- 理解 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.json | C.7 MCP |
| 钩子 | .claude/settings.json hooks 字段 | C.5 hooks |
| 权限控制 | .claude/settings.json permissions | C.5 hooks 同节 |
| 记忆与会话 | CLAUDE.md / CLAUDE.local.md / /compact / /clear | C.2 + C.3 |
加上一个没在 7 组件里但实战中越来越重要的能力 —— Skills · 可挂载的能力包 —— 详见 C.4。
💡 怎么读这一模块 · 不要从头按顺序读。先扫这张表 · 找你最关心的组件 · 直接跳到对应章节。每一节都自洽。
C.2 · CLAUDE.md · 项目级 system prompt
整个 harness 里最高 ROI 的单一可配置项 —— Claude Code 启动时自动读取项目根目录的 CLAUDE.md。它的内容直接进每一次对话的 system prompt · 等于一个永久的项目级 instruction。
为什么它如此重要 ——
- 你不写 · agent 每次都得自己摸索项目(前 10 轮全在搞清楚”我用什么测试框架”)
- 你写得太长 · 每次对话烧掉一半 context(attention 稀释)
- 你写得不准 · agent 永远在错误的轨道上
2026 年的最佳实践 · 双文件分层 ——
项目级共识 —— 技术栈 / 约定 / 不要碰的文件 / 测试规则 / @imports 拆分。Simon Willison 推荐 ≤ 200 行 · 多了就用 @imports 把子文档拆出去。
2026 年的新做法(obviousworks.ch 总结)—— 个人 shortcuts / WIP 笔记 / API key 路径 / 你自己的偏好 · 都放这里。永远不进 git。
下面这个互动组件 · 拿一份真实风格的 CLAUDE.md(接近 Anthropic / Vercel / Cloudflare 仓库的水平)让你点节查看每节的内容 + 为什么写 + 反模式 ——
告诉 agent 「我是什么项目 · 做什么用的 · 关键约束是什么」。没有这一节 · agent 每次都得自己猜。
# AcmePay · 跨境支付 API
这是一个 B2B 支付平台 · 接 30+ 国家银行 · 处理百万级日交易。
**核心约束**:
- 所有金额计算用 Decimal · 永远不用 float
- 任何用户输入都走 zod schema 校验
- 数据库写操作必须在 transaction 里
- 不允许 console.log · 用项目自带的 logger写「这是一个 web 应用」这种没营养的话 · 不如不写。
① 越长越好 · 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。
/compact/clear/clearTask()/compact 留摘要C.4 · Skills · 可挂载的能力包
Skills 是 2025 下半年才从 Anthropic 实验功能晋级到一等公民的概念 —— 「会做某件事」的打包。每个 skill 是一个文件夹 · 里面一份 SKILL.md 描述「我会做什么」+ 「什么时候唤起我」· 加上可选的脚本 / 模板 / 子文件。
它跟 CLAUDE.md 的关键区别 ——
每次对话都加载 · 烧 context。适合项目级永久共识(用什么测试框架 · 哪些文件不能碰)。
只在用户的当前请求匹配 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 装哪里 ——
~/.claude/skills/<name>/· 用户级 · 所有项目都能用<project>/.claude/skills/<name>/· 项目级 · 跟着 git- 从官方 marketplace / plugin 安装 · 自动放到合适位置
C.5 · Hooks · harness 的自动反应
Hooks 是把任意 shell 命令挂到 Claude Code 生命周期事件上。Agent 触发到那个事件时 · 你的命令自动跑。
核心事件(来自 Claude Code 文档 + Anthropic 内部模板)——
| 事件 | 什么时候触发 | 典型用法 |
|---|---|---|
| SessionStart | session 开始 | 把当前 git status / 环境 inject 到对话 |
| UserPromptSubmit | 用户每次发送 prompt | 检查 prompt 是否提到敏感词 / 自动加 timestamp |
| PreToolUse | agent 准备调工具前 | 权限检查 · 阻止改 prod 文件 |
| PostToolUse | 工具调完之后 | 自动 format / 跑相关测试 / 通知 Slack |
| Stop | session 结束 / 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 直接干——
- 保护主 context —— 一次大搜索可能读 30 个文件 · 主 agent 不该被这些原始内容污染
- 专精 ——
code-reviewer的 system prompt 跟主 agent 完全不同 · 适合专门审 diff - 并行 —— 5 个 subagent 并行跑 · 主 agent 只收 5 个总结
什么任务该派 subagent · 用 4-tier 思维快速判断 ——
Agent loop · LLM 自己决定先 grep 哪里 / 读哪个文件 / 跑哪个测试。
路径事先不可知 · 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 消息。
两条实战准则 ——
- MCP 也算 harness 一部分 · 你装一个 GitHub MCP · agent 就有了写 GitHub 的权限。装之前先 review 它能做什么 · 别把 prod 的 GitHub token 暴露给一个不熟悉的 MCP server。
- MCP 触发 permission gate · Claude Code 默认对 MCP tool call 要求确认。可以用
.claude/settings.json的permissions.allow字段开 whitelist · 但不要 yolo 全开。
C.8 · 三个黑客松冠军 · 三种 harness 哲学
讲完零件 —— 看一下真实工程师怎么把这些零件拼成自己的 harness。三个人都是 2026 年 Anthropic / Cerebral Valley 黑客松的冠军 / 跨平台 builder · 他们的配置都公开在 GitHub 上 · 你可以直接 clone 来跑。三种完全不同的哲学 ——
---
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
新会话开局先读 · 不重复同一个错误两次把整个 harness 配置(skills + agents + hooks + 安全扫描 + 记忆持久化)打包成可一键装的 plugin。8 小时黑客松写出 v0 · 半年后 100K+ stars · 119 skills · 28 agents · 60 slash commands。harness 的核心是「沉淀」—— 你每发现一个有用的工作流 · 都把它沉到 skill 里 · 让后人不必重新踩坑。
三种哲学没有对错 · 全看你的任务规模和团队结构 ——
Affaan(集大成派)适合个人 / 小团队·把每个有用的工作流都沉淀成 skill·让 harness 越用越强。
Bedirhan(多会话编排派)适合跨领域复杂项目·把不同子系统拆成独立 Claude 会话·用文件系统当 IPC。
Alireza(跨平台派)适合不绑定 IDE 的团队·一份 skills · 在 Cursor / Codex / Claude Code 都能跑。
实战建议 —— 别从空白 CLAUDE.md 开始。先 clone 这三个仓库其中一个最像你场景的·跑一周 · 你自然会知道要改什么。这是冠军们花了几个月迭代出的起点 · 你为什么不站在他们肩膀上?
C.9 · 自检 · 一份 harness 配置的 review 清单
写完 / 抄完一份配置 · 在交给项目之前 · 过一遍这个清单 ——
| # | 检查项 | 不过会怎样 |
|---|---|---|
| 1 | CLAUDE.md ≤ 200 行 · 多了用 @imports 拆 | 每次对话烧 context · attention 稀释 |
| 2 | CLAUDE.md 每条规则都可验证(不写”愿景”) | agent 把它当 fluff 略过 |
| 3 | 敏感东西全在 CLAUDE.local.md · gitignored | prod key 进 git 一次 · 全网都能看 |
| 4 | PreToolUse 有 destructive 命令的拦截 | rm -rf / 你说了不算 |
| 5 | PostToolUse 有 format + 相关测试自动跑 | 每个 commit 风格漂移 · 隐藏 bug 堆积 |
| 6 | 自定义 subagent 的 tools 字段是 白名单 · 不全开 | code-reviewer 也能 Bash · 没必要的攻击面 |
| 7 | .mcp.json 里的 server 你都看过源码 | 不熟的 MCP server 拿到你的 token |
| 8 | 装第三方 skill 时 review 它带来的 hooks | 隐藏的 PostToolUse 命令偷跑 · 难 debug |
💡 学完模块 C 你应该能 ——
- 拿到一份陌生项目 · 5 分钟内说出它的 harness 配了什么 / 缺什么
- 给自己项目写出 CLAUDE.md + settings.json + .mcp.json 的最小三件套
- 知道什么任务派 subagent · 什么任务自己干
- 装第三方 skill / MCP server 前会 review 它的副作用
- 有一个你心目中的工程师 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 小时的真实工作日
D.2 · 时间线 · 跟着真实 git 历史走一遍
点任意时间块看那一刻的细节 —— 那一秒按下的命令、派出的 subagent、触发的 hook、context 长什么样。所有时间戳直接来自 git log --pretty=format:"%ai %s" 5b705477..80f5b4b8。
Task("explorer") × 6 · 每个 1 个 issue / PR主 agent 不读 inbox · 派 explorer 并行 · 主 context 不被污染。15 分钟后收 6 份 JSON 总结。
D.3 · 四个节拍 · 把一天拆成可复用的模式
看完时间线 · 你会发现这一天其实就是 4 个节拍 在循环 ——
早上面对的是未知 —— 12 个 issue / 5 个 PR / 昨晚的 bug · 不知道哪个该先做。主 agent 不读 issue · 派 5-10 个 explorer subagent 并行查 · 主 context 只收 1-行总结。
关键命令 · Task(“explorer”, scope=issue) × N · 不要在主 context 直接 grep
选定一个任务 · 主 agent 上场 —— 先 plan 再 execute · 不要让它直接开冲。PostToolUse hook 在每个 Edit 后自动 format + 跑相关测试 · 你不用手按。
关键命令 · /plan-and-execute · PostToolUse · biome format + bun test —related $FILE
Context 满 · 同任务用 /compact 续命(80K → 5K 摘要)。切任务用 /clear 重启。两者永远别用错 —— 错用 /clear 等于扔了今天的全部上下文。
决策树 · 还在做同一件事 → /compact · 切到完全无关 → /clear · 临时探一下 → Task()
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 扫」上 —— 因为你没派 explorer · 自己读
- 你沉淀过 0 个 skill —— 同一件事每天都要重新打一遍 prompt
这两件事 · 是你升老手最快的两个 leverage 点。
💡 学完模块 D 你应该能 ——
- 把 4 个节拍(扫 / 做 / 切 / 沉)对照自己 · 找到 1 个最大漏点
- 看到一个任务 · 立刻反应该用
Task()还是/compact还是/clear· 不再 yolo- 本周至少沉淀 1 个 skill · 让下周比这周少做一次重复 prompt
- context bar 进入你的肌肉记忆 —— 看一眼就知道要不要 /compact
- 理解「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 黑客松 收官 · 前三名分别是 ——
MedKit · 医学住院医师模拟训练平台 · 用 4 个并行 Claude Code 会话 · 各管一块(voice / clinical / 3D / core)。
Wrench Board · 帮独立维修工诊断复杂问题。每个细分领域派一个专门 agent · 同时 5-6 个并行跑。
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 · 每一个都是某种专业判断的化石 ——
里面 102 条静态分析规则 · 每一条都是「我 / 230 个 contributor 见过这种坑」的化石。SQL 拼接 / 空 catch / hardcoded secret / 未 sanitize 的 HTML —— 不是 AI 自己想出来的 · 是写 skill 的人沉淀进去的。
化石内容:8+ 年安全工程的痛
system prompt 写 “你的输出必须是 JSON · 让主 agent 容易消费” —— 这不是 prompt 技巧 · 是「我做过 multi-agent · 知道结构化输出比自由文本好用 10 倍」的工程教训。
化石内容:multi-agent 集成经验
“永远先研究 · 再写代码” + “同件事做 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 · 单人开发。
每一步显示 ——
- 那一刻实际打的 prompt 大意
- 哪些 skill / agent / hook 自动跑了(都是真存在于
.claude/目录里的 · 不是编的) - 那一步
git log --shortstat的真实数字(添加行数 / 改动文件数) - 项目累计状态 + leverage 比例(打几个字符 / AI 写几行)
git log --shortstat · skills 的 snippet 直接来自 .claude/skills/*/SKILL.md · 没有美化。 421 commits · 1,097 files · 1 个人 · 5.5 个月跑通完整 SaaS(5 apps 单仓 monorepo)。这是「专业度 × harness」的实证 · 不是理论。💡 这就是 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 的水平 ——
superpowers@claude-plugins-officialAnthropic 官方的”超能力”集合 —— 14 个 skill 一次打包 · 覆盖 brainstorming → writing-plans → TDD → systematic-debugging → using-git-worktrees → subagent-driven-development → 完整 dev 流。装完它一个 · 等于装了 14 个最常用 skill。
/plugin install superpowers@claude-plugins-officialclaude-md-management@claude-plugins-official带一个 claude-md-improver skill —— 自动审改你的 CLAUDE.md · 给规则补”为什么” · 砍掉空话 · 帮你压到 200 行天花板内(模块 C.2 讲过的双层做法)。
/plugin install claude-md-management@claude-plugins-officialskill-creator@claude-plugins-official沉淀自己 skill 的”造 skill 的 skill”。直接说「把刚才那一套流程沉淀成 skill」· 它会帮你建 SKILL.md + frontmatter + 触发条件。E.6 练习沉淀第一块化石就靠它。
/plugin install skill-creator@claude-plugins-officialcontext7@claude-plugins-official解决幻觉 API 头号方案 —— AI 写代码常 import 不存在的函数。装上这个 · agent 写库相关代码前会自动查 context7 拿当下最新的官方文档 · 不再 hallucinate React 18 API 在 React 19 里。
/plugin install context7@claude-plugins-officialcode-simplifier@claude-plugins-official专治 AI 写的不必要复杂代码 —— AI 喜欢加 abstract base class / factory / wrapper 让代码看起来「专业」。这个 skill 反过来 · 一句话「简化这段」直接给你砍。F 模块反模式 5 的解药。
/plugin install code-simplifier@claude-plugins-officialfrontend-design@claude-plugins-official前端工程师必装。description 写「做出独特、生产级的前端界面 · 避免 AI slop 美学」—— 触发后 agent 会按 brutalist / editorial / 等十几种风格出方案 · 不再千篇一律「purple gradient on white」。
/plugin install frontend-design@claude-plugins-officialfeature-dev@claude-plugins-officialfeature 开发的完整流水线·内含 3 个 subagent —— code-explorer 摸现状 / code-architect 出方案 / code-reviewer 审产出。基本就是模块 B 的 P-G-E 给你做好的 turn-key 版。
/plugin install feature-dev@claude-plugins-officialmcp-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-officialremember@claude-plugins-official跨会话持久化记忆 —— 解决模块 B 那个「下一班 agent 不知前情」的问题。它会把关键决定写到 ~/.claude/memory/decisions.jsonl · 新会话开局先读 · 跨日不失忆。
/plugin install remember@claude-plugins-officialralph-loop@claude-plugins-official模块 C.8 讲的 Geoffrey Huntley 的 Ralph 模式 —— Anthropic 把它打包成官方 skill 了。写好 PRD · 一行命令进入自治循环 · 跑到 PRD 全绿才停。别上来就用 · 先理解 C.8 的哲学。
/plugin install ralph-loop@claude-plugins-official# 一次性添加 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」的直觉变成可拖动的公式 ——
能跑 · 但产品撑不住 1 个真实用户
这个 widget 想让你亲手感受一件事 —— harness 和专业度是相乘的 · 任何一边为 0 · 结果归零。
- 拖「专业度」到 0 · harness 拉满 10 也救不了 · 你只能产生空壳 prompt
- 拖「harness」到 0 · 专业度满 10 · 也只能跑你自己一个人 · 没有 leverage
- 两个都拉满 · 100 分 · 这就是 Affaan / Bedirhan 这类人的位置
E.6 · 推论 · AI 时代该专攻什么
如果 harness = 你的专业度 × 沉淀质量 · 那 AI 时代的工程师该专攻什么 · 答案就很清楚了 ——
- 背 100 个 prompt 模板
- 研究 Cursor / Claude / Copilot 谁更厉害
- 追每周新功能 / 新模型
- 「AI prompt engineer」当 title
→ 公式右边 · 没专业度撑着 · 结果归零
- 深耕一个领域(安全 / 数据 / 后端 / 你自己的行业)
- 每个项目结束 · 沉淀一份你自己的 skill
- 把每个跨过的坑写成 hook 或 CLAUDE.md 规则
- title 不重要 · skill 仓库大小才重要
→ 公式左边充实 · 你的专业度 24/7 跑在 AI 身上
E.7 · 你的下一步 · 5 分钟练习
打开你的 editor · 列以下三件事 ——
我在 ____ 领域有 ____ 年经验。我比同辈强的地方是 ____。
把上面 3 件事中最高频的那件·沉淀成一个 SKILL.md · 放到 ~/.claude/skills/<name>/。下周这件事再做的时候 · 一句话唤起。这就是你自己 ECC 的第一块化石。
E.8 · L7 一句话
AI 给你的杠杆
=
你的 domain 专业度
×
你 harness 沉淀质量
前者你这辈子都在攒。后者 L7 教你 8 个模块怎么搭。
两个都满 · 你就是下一个 hackathon 冠军。
💡 学完模块 E 你应该能 ——
- 复述 L7 的核心公式 · 解释为什么是乘法不是加法
- 看到一个 hackathon 冠军作品 · 能立刻识别背后的 expertise × harness
- 列出 3 个你能立刻沉淀成 skill 的高频工作流
- 明白 AI 时代该把 80% 精力放在 domain 深度 · 不是 「AI 技巧」
- 开始你自己的 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 个反模式速查表
bun test --related $FILE 挂到 PostToolUse · AI 一改就跑测试 · 偷工立刻暴露/clear · 续命用 /compact · 探索类子任务用 Task() 隔离code-reviewer subagent · 让独立第三方 agent 审 diff —— 跟模块 B 的 Evaluator 同一个道理 · 比自己看 10 倍可靠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.mdplan.md(功能列表 + 验收标准)G.2 · 每步的”常见翻车”
| 步 | 常见翻车 | 对应反模式 |
|---|---|---|
| SPEC | 让 AI 写 spec · 自己只 review · 结果 spec 缺一半边界条件 | 反模式 1(Vibes 编码) |
| PLAN | AI 拆得太粗 · 你没追问就接受 · 实现阶段才发现遗漏 | 反模式 3(让 AI 做架构) |
| CODE | 让 AI 一次做完所有功能点 · 单次 context 装不下 · 自己崩溃 | 反模式 4(context 污染) |
| VERIFY | 只让 AI 自评(王婆卖瓜)· 没用独立 Evaluator · 没人审 diff | 反模式 2(跳过测试)+ 6(不审) |
| SHIP | 让 AI 直接 push prod · 没人在线监控 · 出问题没法回滚 | 反模式 3(架构)+ 7(过度依赖) |
G.3 · 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。