Claude Code 实践课程 · Lesson 01

CLAUDE.md 怎么写

它不是文档,是 prompt——每一行都在消耗注意力预算。

01

一个根本认知

CLAUDE.md 在每个 session 开头被原样塞进上下文。它和你打字输入的指令没有本质区别,只是「每次都自动说一遍」。

系统 prompt
CLAUDE.md
你的对话 + 工具结果
剩余空间

每个 session 的上下文窗口。CLAUDE.md 永远占着这一段——写 10 条规则,每条被遵守的概率高;写 50 条,全部被稀释。

所以编辑它的原则是做减法,判断标准只有一个:

删掉这一行,Claude 的行为会变差吗?不会就删。

02

什么值得写(按价值排序)

共同点:都是模型从代码里推不出来的信息。点开每一类看标准和例子。

i.命令最高价值区
构建、测试、lint 的确切命令。模型猜不到你用 pnpm 还是 npm,猜错就浪费一轮。单文件测试命令必写——它是模型最常用的。 测试单文件: pnpm vitest run <path>
ii.偏离默认的约定只写「不同」的部分
模型的默认行为已经很合理,只写你的项目偏离默认的地方。空泛的要求是废话,具体的禁令才有效。 写干净、可维护的代码
数据库改动必须走 migration,禁止直接改 schema.sql
iii.隐性知识,性价比极高
准入门槛:排查过 30 分钟以上的问题才配写在这里。误导性报错、环境怪癖——这是模型从代码里读不出来的东西。 XX_ENV 缺失时报错有误导性,实际原因是缺 .env.local
iv.关键文件指针指路,不贴内容
告诉模型重要逻辑在哪个文件,让它自己去读。路径相对稳定,内容会过时——贴内容进来等于埋一颗过时炸弹。 权限逻辑统一入口: src/lib/auth/permissions.ts
03

练习:删行审判

下面是一份新项目跑 /init 后生成的模拟 CLAUDE.md。逐行裁决:保留删掉,还是改成 Hook(该 100% 执行、不该靠 prompt 的规则)。

my-project/CLAUDE.md 已判 0 / 10 · 答对 0

这就是你到任何新项目裁剪 /init 初稿时要做的事——这个手感比任何模板都值钱。

04

反模式清单

描述架构、复述代码结构
代码自己会说话,而且这类描述必然过时。模型读 src/ 比读你的总结更准。
通用编程建议
「先思考再写」「保持整洁」——系统 prompt 里已经有了,写在这里纯属重复占地。
到处 IMPORTANT / 必须
强调是稀缺资源。全都重要 = 全都不重要。
需要 100% 执行的规则写在这里
prompt 管「倾向」,hooks 管「纪律」。「每次改完必须跑 lint」写 CLAUDE.md 会被偶尔忘掉,写成 hook 不会。(第 3 课展开)
写完不再维护
过时的命令比没有命令更糟——模型会自信地跑错的命令,然后你们俩一起 debug 一个不存在的问题。
05

三层结构,各司其职

CLAUDE.md 可以放在三个层级,加载时机和职责完全不同。点开每一层:

全局 ~/.claude/CLAUDE.md
所有项目的每个 session 都加载。只放跨项目的个人偏好(语言习惯、个人工作流),越短越好——这里的每一行都在向你所有项目收注意力税。
项目 项目根/CLAUDE.md
主战场。命令、约定、坑、文件指针都写在这里。进 git,团队共享——队友和 CI 里的 Claude 都受益。本课的模板就是为这一层准备的。
子目录 子目录/CLAUDE.md
只在模型碰那个子目录的文件时才加载,平时不占上下文。适合大仓库里的模块特例:比如 legacy/ 下「这里的代码禁止重构,只修不改」。
06

它是长出来的,不是写出来的

/init
新项目第一步。CC 扫描仓库生成初稿——然后拿着 §4 的反模式清单去裁剪它。初稿通常偏啰嗦,裁剪就是 §3 练的那个手感。
#
对话中按 # 键,随手把刚学到的教训存进 CLAUDE.md。这是它保持鲜活的机制——好的 CLAUDE.md 是几十次「踩坑 → 按 # 记一笔」累积出来的。
两周
定期回看。哪些行从来没影响过行为?删掉。CLAUDE.md 和代码一样会腐烂,区别是它腐烂时不报错。
07

到新项目的验证清单

学了不算会,验证过才算。带着这份清单去你的真实项目(勾选状态会自动保存):

跑 /init 生成初稿,对照模板和反模式清单裁剪——目标是删掉至少三分之一。
开全新 session,让 Claude「跑一下测试」——它是否不经搜索直接用对命令?用对 = 命令区生效。这是最直接的有效性信号。
故意让它做一件违反某条约定的事(比如直接改 schema),看它是否遵守约定、提出异议。
两周后回看:哪些行从来没影响过行为?删掉它们。

勾选状态存在浏览器 localStorage 里,下次打开还在。

本课带走一句话
CLAUDE.md 的编辑原则是做减法——删掉这行,行为会变差吗?不会就删。