Claude Code 是一个代理式编程环境(agentic coding environment)—— 它能读文件、跑命令、改代码、连接外部工具、自主推进问题,不是一个聊天补全器。 但绝大多数团队使用它的方式仍然停留在"问一句、改一行"。
Claude Code 的能力分四层(第 02 章会展开):
① 直接对话工具(Read / Edit / Bash …) ·
② 项目记忆(CLAUDE.md、auto-memory) ·
③ 团队扩展(技能 / 子代理 / 钩子) ·
④ 多会话编排(并行 / 无人值守)。
我们观察医院团队前三周的日常使用:超过 90% 的对话停留在 Layer I——直接问、直接答、直接补。 没人调用过自己仓库的技能;没人派过子代理做研究;没人写过钩子拦截危险操作。 四层只用了一层,所以是 30%(其实更少)。
需求:在 jeecg-online 模块里加一个表单——把住院患者基础信息收上来。
@Dict、字段名不符 bizPath 规范jeecg-online 文档对接/jeecg-online-forms 帮我加住院患者表单,字段:姓名、住院号、入院时间、科室"@Dict / bizPath / 字段命名规范/verify 编译通过差 6 倍。不是 Claude 变笨了,是你没把该用的层用上。 这本手册剩下的章节就是把这另外 50% 补回来。
Claude's context window fills up fast, and performance degrades as it fills.Anthropic · Claude Code Best Practices
如果你只记本书的一句话,就记上面这句 ——
所有的建议(从 /clear 到子代理、从计划模式到 git worktree)
都是为了同一件事:把上下文当作最稀缺的资源来管理。
第 07 章会算清楚为什么稀缺。
决定上限的不是模型 —— 是模型外面那圈。Anthropic · Claude Code at Scale · 2026
官方原话是 "the harness matters as much as the model" —— 围绕模型搭起来的那一圈(CLAUDE.md · Hooks · Skills · Plugins · LSP · MCP · Subagents), 决定 Claude Code 的实际能力,比模型分数更甚。换 Opus 不会救你,搭好 harness 才会。
把那"一圈"摊开,就是同心的四层。越往内层,越关乎你的当下对话;越往外层,越关乎你的团队资产。
不是功能列表,是使用心智模型。每当你想"这件事我该怎么做",先问自己 —— 它属于哪一层?
Claude 在本轮对话内能用的原子能力。
Read · 读文件Edit / Write · 改文件Bash · 跑命令Grep / Glob · 搜索WebFetch · 抓网页每次启动都会被加载、跨会话存在的知识。
CLAUDE.md · 项目宪法~/.claude/CLAUDE.md · 个人偏好CLAUDE.local.md · 个人项目笔记memory/ · auto-memory@import · 文档拼接把团队的工作方式固化进仓库的三种机制。
.claude/skills/ · 可复用工作流.claude/agents/ · 隔离子代理.claude/hooks/ · 事件触发MCP servers · 外部能力/plugin · 打包安装多个 Claude · 多种模式 · 多条会话的调度。
claude -p · headlessgit worktree · 并行| SKILLS · 技能 | SUBAGENTS · 子代理 | HOOKS · 钩子 | |
|---|---|---|---|
| 本质 | 一段写在 SKILL.md 的"做事说明书" |
独立上下文窗口里的专家 | 事件触发的确定性脚本 |
| 上下文 | 同一窗口·加进主对话 | 独立窗口·只回传摘要 | 不进上下文·shell 层执行 |
| 什么时候用 | 同一段指令你写过两次 —— 它就该是 skill | 研究/审查/重构 —— 会把主上下文淹没的脏活 | 必须每次都发生的强制动作 —— format / lint / 阻止误删 |
| 调用方式 | /skill-name 或由 Claude 按 description 自动加载 |
主 agent 通过 Agent 工具派发 |
PreToolUse / PostToolUse / Stop 等事件自动触发 |
| 失败时 | 模型可能"忘了"用 —— 描述要写清楚触发条件 | 派多了会浪费 token —— 单 agent 能搞定的别派 5 个 | exit code 2 阻塞操作 —— Claude 收到错误反馈并自纠 |
| 本仓库示例 | verify, jeecg-online-forms, diagnose |
Explore, Plan, code-reviewer |
commit 前 /verify · 阻止改 generated 目录 |
Skill 是最容易写、回报最高的扩展。任何"我又给 Claude 解释了一遍同样的事",下次就应该是 skill。
凡是"必须每次都发生 · 零例外"的事,写成 hook。CLAUDE.md 里的规则是建议,hook 是强制。
仅在"并行"或"上下文隔离"真有价值时派出。不要为了显得高级就开 5 个 agent。
Anthropic 官方推荐的四阶段循环。一句话总结:把"想清楚"和"动手做"分开,避免在错的问题上动手。
让 Claude 先读,不写。回答你的问题、整理它对代码的理解,不让它碰文件。
读一下 /src/auth,告诉我现在让 Claude 出书面方案:要改哪些文件、流程是什么、有什么取舍。看完不顺眼就 Ctrl+G 改。
我想加一个 Google OAuth 登录。退出计划模式让它实施。立刻跑测试、跑 lint、跑编译——让它自己看错自己改。
按方案实施。写测试并运行,让 Claude 写提交信息和 PR 描述。它比你更有耐心写完整的"为什么"。
写一条详细的提交信息并跳过 Explore,Claude 会根据"通用 Spring Boot 项目"的印象写——可能完全不符合本仓库的 LiteFlow / 多租户约定。 用上下文修猜错的代码比用上下文先读一遍贵 5–10 倍。
跳过 Plan 直接 Code,平均要返工 2–3 次—— 因为"你以为的需求"和"实际可行的方案"很少第一次就重合。 Plan 是一份契约,让分歧在动手前暴露。
没有跑过测试的代码不能算完成。Claude 会产出"看起来对"的东西。 第 05 章专门讲为什么验证是单一最高杠杆率的实践。
PaymentFlow、加 DepositNode、多租户用 TenantContext差 3 倍。越大、越陌生、越跨模块的改动,差距越夸张。
AskUserQuestion 工具让它问你 20–30 个问题,
覆盖技术 / UX / 边界 / 取舍,写完 SPEC.md 再新开一个会话实施——
研究和实施分两个上下文,省一半 token。
Source · Best Practices §Interview
Anthropic 官方原话:"Give Claude a way to verify its work." 全套官方建议里,这一条被反复说是单一最高杠杆率的实践。本章解释为什么。
Claude 生成代码靠的是概率——它没有"对错"的内置判断,只有"像不像之前见过的可工作代码"的判断。 所以它会产出"看起来对但实际不工作"的东西。
没有验证手段时,你就是它唯一的反馈环——它写、你跑、你贴报错、它改、你再跑…… 循环里每一步都要消耗你的注意力 + 上下文。 给它一把尺子(测试 / 编译 / 截图比对),它就能自己跑这个循环,你只需要在它收工时看一眼结论。
调试一个 Claude 引入的 bug 平均消耗:
报错信息 + 你的复述 ≈ 1K ·
它来回分析 ≈ 5–8K ·
读相关文件确认 ≈ 5K ·
合计约 10–15K token,加你几十分钟。
跑一次 mvn compile 或 vitest:
命令输出(成功)≈ 200 token ·
失败时它自己读错误信息 + 修 ≈ 1–2K ·
合计 0.5–2K token,10 秒钟。
这就是"最高杠杆率"的具体含义—— 一个 "跑完测试" 的指令,把每次错误的成本砍掉一个数量级。 放进每个任务的 prompt 里都不亏。
共同点:每个"可验证"版本都明确告诉 Claude 怎么知道做完了—— 测试用例、像素对比、构建通过。"做完"不再是 Claude 自己判断的,是一个客观的二值信号。
If you can't verify it, don't ship it.Anthropic · Common Failure Patterns
mvn clean compile,前端用 pnpm build,
两个都已经封进 verify 技能。
所有代码改动后让 Claude 跑 /verify——
不要靠人眼看改动,看 diff 不验证就等于在用眼睛跑测试。
本仓库 · .claude/skills/verify/SKILL.md
CLAUDE.md 是每一次会话启动都会被自动注入到对话开头的文件——
Claude 还没看到你说话之前,先看完它。
所以这份文件不是项目说明书,是这个项目下 Claude 的"宪法":定基调、定红线、定本仓库特有的东西。
一行中文 / Markdown 约 30–50 token:
50 行 ≈ 2,000 token
200 行 ≈ 8,000 token
800 行 ≈ 30,000 token
一份 800 行的臃肿 CLAUDE.md ——
你还没说话,主上下文已经少了 15%。
一天工作下来累计就是几十次启动税。
模型对长指令存在"遵循衰减"——越靠后越容易被忘。
一份 50 行的 CLAUDE.md,每条都会被记得;
一份 800 行的,关键 5 条混在 795 行废话里,违反频率显著上升。
所以官方建议是一句话:对每一行都问"删了会不会让 Claude 犯错?" 如果不会,就删。
50–100 行是合理上限。再多的内容用 @import 拆到 .claude/rules/,按需加载。
跨所有项目生效 · 不进仓库 · 写你的 RTK、你的提交风格、你的个人癖好。
进 git · 全员共享 · 模块、架构、踩坑区。本仓库根目录已经做得很好 —— 看一遍就懂。
进 .gitignore · 只你看 · 写你和这个仓库的"小秘密" —— 临时密钥、还在尝试的工作流。
根目录 CLAUDE.md 定基调:项目是什么、架构怎么分、有哪些踩坑区。
子目录 CLAUDE.md 定地方规矩:跑哪条命令、用哪个测试入口、本模块的特有约定。
官方建议:命令应当声明在最靠近"它真正运行的地方"。
根目录写 mvn clean compile 是浪费 —— 模块根目录写才有用,因为那是命令真的能跑通的地方。
# 根 · 定基调 JeecgBoot/CLAUDE.md ├─ 项目是什么 ├─ 模块图 / 架构 └─ 全局约定 # 子目录 · 定命令 .../jeecg-module-his-zhiye/CLAUDE.md ├─ 本模块跑什么 lint ├─ 本模块测什么用例 └─ 本模块特有的坑 # Claude 在该目录工作时 # 会自动加载它,不会污染别处
每 3–6 个月,或每次模型大版本之后,回头审一遍 CLAUDE.md。 旧模型时代写下的"安全网",到新模型上常常变成束缚。
一个真实例子:旧模型容易把跨文件改动搞乱,于是有团队在 CLAUDE.md 里写"一次只改一个文件"。 新模型完全能处理协调的多文件编辑 —— 这条规则就从护栏变成了限速带。
翻修清单:哪条规则去年很重要、今年看是冗余的?哪条还在天天被违反、其实该改成 hook?哪条根本没人记得为啥写的?
上下文 = 这一次会话里 Claude 能"记得"的全部东西 —— 你说过的话、它读过的文件、它跑过的命令的输出。 它有一个固定上限,每次启动从零开始算,用完了不能续杯。 本章只回答一个问题 —— 为什么这玩意儿这么稀缺,又怎么省着花。
Sonnet 默认窗口约 200,000 token,Opus 长上下文版到 1,000,000。 一行中文大约 30–50 token,一行 Java 代码 10–20 token。 看着像个大水池,放水比想象中快。
读一个 500 行的源文件 ≈ 5,000–10,000 token;
全仓 grep 返回几千行匹配 ≈ 2–5 万 token;
一次失败的调试来回(读 3 文件 + 跑测试 + 看报错)≈ 2–3 万 token。
Anthropic 官方原话:"context window fills up fast, and performance degrades as it fills." 社区共识是:用过一半开始遗忘早期约束;三分之二之后不按要求走;接近满会出现幻觉。
场景:你在 JeecgBoot 里查一个跨模块的 bug ——
"his-zhiye 模块发起的请求,internet-hospital 那边没收到"。让 Claude 帮你查:
① 全仓 grep 路由关键字 | ~30,000 token |
| ② 打开 4 个相关 controller / service 文件 | ~30,000 token |
③ 跑一次 mvn compile 看编译报错 | ~5,000 token |
| ④ Claude 来回分析 + 你的追问 | ~10,000 token |
合计约 75,000 token —— 已经吃掉 约 37% 的窗口,而你这才刚开始定位问题。
如果它走错路又翻 5 个文件,接近一半。这时你顺手再问一句"对了,多租户那块怎么配的?" —— 主任务的上下文就被另一件事彻底污染了。 这就是为什么"每个独立任务开新会话"是最高频建议 —— 不是洁癖,是保住剩余预算。
铁律 1 · 每个独立任务开新会话。 修 bug A 顺手问 B,就是上下文污染的头号来源。任务边界等于会话边界。
铁律 2 · 用过一半就主动压缩或清空。
Claude 不一定会主动提醒你。看到顶部进度条接近 50%:
要继续同一任务就 /compact(压缩历史、保留关键决策);
要换话题就 /clear(彻底归零)。两个都是免费的。
铁律 3 · 大块脏活交给子代理。 上面例子里的 ①②两步如果派给子代理跑:子代理在自己那个独立窗口里烧 60K token 没关系(跟你的主会话隔开), 主会话只多了一段 1–2K 的摘要。 省了约 95% 的上下文。 这是上下文管理的最大杠杆 —— 第 10 章细讲。
| 会话指令 | 用途 |
|---|---|
/clear | 无关任务之间·彻底清空上下文 |
/compact | 主动压缩历史·保留关键决策 |
/rewind Esc Esc | 回退到任意检查点·撤销改动 |
/btw | 问一个不影响主线的小问题 |
| Esc | 立刻中断·保留上下文 |
--continue | 继续上一次会话 |
--resume | 从历史会话列表里挑一条 |
/rename | 给会话起名·跨天找回 |
子代理(subagent)的本质:另开一个 Claude 在独立窗口里干活,干完只回传一段摘要给主会话。 上下文隔离 + 只取结论 = 主会话的 token 余额几乎不动。
# 反例:让主会话自己读所有文件 read all auth files and tell me how OAuth works... # → 主上下文瞬间 +50,000 token,能用空间打了对折 # 正例:派给子代理 use a subagent to investigate how our auth system handles token refresh. report findings. # → 主上下文只 +1,500 token,节省约 97%
Claude 能推断意图,但读不到你脑子里。模糊和具体的差距,不是风格问题,是返工次数问题。
模型对每个词的理解是概率分布——一句"加个测试",它可能理解成:单元测试、集成测试、端到端测试;用 mock、不用 mock;覆盖正常路径、还是边界条件。 它必须选一个走。选对了你满意;选错了——你只能返工。
"加个测试" → Claude 选了它认为最常见的解释 → 不对 → 你纠正 → 改 → 又不全对 → 再改。 每次返工 ≈ 5–10K token + 几分钟。
"为 foo.py 加一个测试,覆盖『用户未登录』的边界条件,不要 mock" →
方向锁死、范围锁死、约束锁死。第一次产出就是你要的。
模糊 prompt 累计 20–30K token + 你 15 分钟; 具体 prompt 5K token + 你 2 分钟。 多花 30 秒打字 = 省 13 分钟来回。
共同模式:"动作 + 范围 + 约束 + 成功标准"。 多出来的几十个字是给 Claude 的护栏——它不再需要猜。
用 @path/to/file 而不是用文字描述代码在哪。Claude 回答前会自动读它,比你嘴说一遍准 10 倍。
UI 不对、报错弹窗、设计稿——直接截图粘进对话框。一张图能省一段几百字的"我看到的是这样"。
cat error.log | claude -p "找异常"——让 stdin 直接把上下文喂进去。适合处理超长日志、JSON、CSV。
你开了个 session 修 bug A,顺手问了个 B,又回来改 A。三件事的上下文搅在一起。
/clear。把每个 session 当成一个独立 ticket。
Claude 错了,你纠正;又错,你再纠正;第三次还错。上下文已经被失败的尝试污染。
/clear。把你刚学到的东西写进新 prompt,从零开始。
你的 CLAUDE.md 已经 800 行。重要的规则被淹没在噪音里。
Claude 产出了"看起来对"的代码 —— 你没验证就 commit 了。第二天测试挂在 CI 上。
你让 Claude "看看这个项目"。它读了 200 个文件。你的上下文已经满了,还没开始干活。
前面所有章节都假设:一个人、一个 Claude、一段对话。但 Claude Code 是水平扩展的工具。
塞进 CI、pre-commit hook、shell 脚本。给固定输入,拿结构化输出。
# 一行命令 claude -p "explain this" # 结构化输出 claude -p "list endpoints" \ --output-format json
用 git worktree 把同一个仓库 checkout 到 N 个目录,每个跑一个 Claude,互不污染。
git worktree add ../wt-a feature-a
git worktree add ../wt-b feature-b
# 两个 Claude 同时干
大型迁移、批量审计 —— 用 for 循环跑 N 次 claude -p,每次处理一个文件。
for f in $(cat files.txt); do claude -p "migrate $f. OK or FAIL" \ --allowedTools "Edit" done
Session A 写代码 → Session B(独立上下文 · 没看过 A 的实现细节)做 code review → 把 review 反馈喂回 A 修。
为什么有效?一个 Claude 不会对自己刚写的代码"挑刺"—— 有偏见。两个 Claude 互相约束, 等于免费多了一道质量门禁。
下面这棵树是 JeecgBoot 仓库里和 Claude Code 相关的全部资产。如果你不知道它们在哪、做什么 —— 这就是你"用不深"的原因。
/verify改完代码立刻跑。后端 mvn compile + 前端 lint。
/diagnose用户给截图/报错 → 自动抓 Loki 日志 → 结合代码定位根因。
/scout项目自检:文档漂移、日志噪声、memory 过期。每周扫一遍。
前 11 章讲怎么用。这一章讲一件容易被忽略的事:这套工具会不会一年后烂掉,决定权不在工具,在团队怎么管它。
每个人自己摸索一遍同一件事("压日志 / 跑 Loki / 调多租户"), 等于 10 倍人力浪费,外加 10 个版本互不兼容的技能。 一年后这堆"个人沉淀"散在每人的本地,团队层面什么都没留下。
Claude 帮你写代码的速度大概翻倍 —— 如果评审标准也降了,bug 进生产的速度也跟着翻倍。 生产 bug 的修复成本是开发期的 10–100 倍。 提速没意义,提速 - 兜底成本才有意义。
医院的患者信息、电子病历、HIS 数据是受监管数据。 一次让 Claude 把患者表 grep 进对话 + 截图分享 = 合规事故。 设围栏的成本是改一个配置文件,事故的成本是说不清楚的。
根 CLAUDE.md、.claude/rules/、.claude/skills/、settings.json ——
这些都是需要维护的代码资产,得有名字写在上面。
Anthropic 内部叫这个角色 agent manager(技能管家),一半产品经理一半工程师,
负责审批新技能、淘汰旧规则、推广好做法。
在 .claude/settings.json 里把禁止 Claude 接触的目录列出来,
比如 patient_data/、his_export/、密钥配置目录。
围栏不是"以防万一"——是第一步,先围再用,团队才敢放手。
Claude 写的代码不享受特殊待遇—— PR 评审、测试覆盖、合规检查跟人写的代码一字不差。 Claude 帮你写得更快不等于帮你绕过评审;要是绕过评审,第一段那个"+50% bug"就是你的。
下面这五件事,本周可以全部启动:
CLAUDE.md / .claude/ 配置由 Yaniel Yu 维护。
其他人改这些文件走 PR,他评审合并。
.claude/settings.json,
permissions.deny 里加上 patient_data/、his_export/、
**/credentials.*、**/*.env。一次性的事。
看文档的培训,团队最多能从 30% 用到 50%。带着仓库练一遍 + 当场沉淀,能到 70-80%。
过一遍本手册第 02-04 章。让大家知道有哪些工具、避免"原来还能这样"的惊讶。
/init、/memory、/agents打开 IDE,跟读 CLAUDE.md / rules / skills,让大家明白"为什么咱们这个仓库 Claude 用起来明显更聪明"。
CLAUDE.md + .claude/rules/his-zhiye 或 internet-hospital).claude/skills/,重点看 verify / diagnose / scout每组 2-3 人,挑一题,全程用 Claude Code 完成。讲师巡回点评。
把实战里冒出来的踩坑、约定、技巧当场写进仓库。讲师主持,全员参与。
.claude/rules/?.claude/skills/?CLAUDE.md Recent Changes 要不要补条目?.claude/settings.json 要不要加 hook?产出物:一个 PR — chore: claude code 培训沉淀
所有的模式 ——
都不是定律。
有时候你应该让上下文累积,因为你正在深入一个复杂问题,历史本身有价值。 有时候你应该跳过 plan 模式,让 Claude 直接试错。 有时候一个模糊的 prompt 恰恰是对的 —— 你想先看看 Claude 怎么理解,再去约束。
留意什么有效。Claude 产出漂亮代码时 —— 想想你做了什么。Claude 卡住时 —— 想想为什么。 上下文太杂?prompt 太空?任务太大?时间久了,你会培养出一份这本手册抓不到的直觉。
不是泛泛的"AI 编程指南",是 Anthropic 自己出的、定义"这工具该怎么用"的源头文档。 总时长约一个下午,按 01 → 04 顺序读,读完你比 95% 的工程师都更懂 Claude Code 该怎么用。
本手册一半内容的来源。"give Claude a way to verify its work"、CLAUDE.md 怎么写、Explore→Plan→Code→Commit 循环。 只读一篇 —— 读这篇。
code.claude.com/docs/en/best-practices →本手册第 02 章金句 "harness > model" 的源头。还讲:CLAUDE.md 分层、DRI 角色、放权节奏 —— 团队治理那一套(第 12 章)的纲领文件。
claude.com/blog/how-claude-code-works-in-large-codebases →Anthropic 内部团队(数据基础设施、产品工程、增长、SecOps、客户支持……)怎么真的把这工具用进日常工作。 具体到 prompt、skill、工作流 —— 偷得到的真东西。
claude.com/blog/how-anthropic-teams-use-claude-code →Subagent 是被严重低估的能力 —— 本手册第 03、07、10 章反复提到。怎么写、什么时候派、怎么回传摘要, 官方文档把所有细节讲透了。读完不会再"开 5 个 agent 浪费 token"。
code.claude.com/docs/en/sub-agents →
每篇约 15–30 分钟。加起来一个下午。再加本手册第 11 章 JeecgBoot 仓库的 .claude/ 树 ——
理论 + 实战双轨,就齐了。