如果你刚接触 Claude Code,可能会习惯性地敲下 /init,让它自动生成一份 CLAUDE.md 文件。我最初也是这么做的——毕竟"让 AI 了解项目"听起来很合理。但用了几个月后,我的结论恰恰相反:不要执行 /init,不要让 AI 自己生成 CLAUDE 文件。
/init 做了什么
/init 会扫描你的项目结构、读取关键文件,然后生成一份面面俱到的"项目说明书":技术栈、目录结构、编码规范、测试命令、部署流程……看起来很有用,对吧?
但问题就出在这里——它太"全"了。
全则全矣,唯独不"准"
Claude Code 读取 CLAUDE.md 时,会把它当作核心指令来遵循。一份 /init 产出的文档可能包含几十条规则,而其中大部分是 AI 自己归纳出来的"常识"。比如:
- 项目用 Spring Boot → 自动写上"使用 Spring Boot 框架"
- 目录有
src/main/java→ 写上"代码在 src/main/java 下" - 用了 Maven → 写上"使用 Maven 构建"
这些信息AI 本来就能从项目中推断出来。把它们写进 CLAUDE.md,等于让 AI 去读一堆它已经知道的东西——不仅浪费时间 token,而且多条规则之间可能互相干扰。
我的测试结果
我做过对比测试:同样一个任务,分别在有 /init 生成 CLAUDE.md 的仓库和没有 CLAUDE.md 的仓库中执行。
结果很直观——有 /init 产物的仓库,任务推进速度反而更慢。具体表现在:
- 响应变慢:AI 每次都要消化大量"规则",包括那些本来就已知的信息
- 容易过度遵循:一些模板化的规则被当成硬性约束,反而限制了 AI 的灵活性
- 掩盖真正的问题:当 AI 行为不理想时,一份冗长的自动生成文档很难定位到底是哪条规则出了问题
正确的用法:只写"直觉之外"的信息
CLAUDE.md 真正的价值不在于告诉 AI 已经知道的东西,而在于告诉它仅从代码中看不出来的东西。
换句话说,只有当你发现 AI 的行为不理想时,才应该通过写 CLAUDE.md 来引导它。比如:
- AI 总是用 Tab 缩进而项目用空格 → 写一条缩进规则
- AI 总是用英文输出而你希望它用中文 → 写上"中文优先"
- 项目有特殊的分支策略或部署流程 → 简单说明
一条有针对性的规则,胜过十句正确的废话。
什么时候该写
我的经验法则是:先不用 CLAUDE.md 干活,直到 AI 在某件事上反复犯错,再把它写进去。
这就像教一个人做事——你不会在第一天就给他一本 50 页的手册,而是在他发现坑的时候告诉他怎么避坑。CLAUDE.md 应该是"踩坑记录",而不是"项目简介"。
总结
- 不要执行
/init——它生成的内容太多、太泛、反而拖慢进度 - 不要写 AI 本来就了解的信息——那是浪费
- 只在 AI 行为不理想时写 CLAUDE.md——用它来纠正,而不是用来介绍
- 保持 CLAUDE.md 精简——一个文件十几条规则已经很多了
CLAUDE.md 的价值不在于"全",而在于"准"。写你直觉之外的信息,剩下的事情交给 AI 自己判断。
