乐于分享
好东西不私藏

我放进每个项目的 CLAUDE.md 模板:60 行,让 Claude Code 少问、少猜、少返工

我放进每个项目的 CLAUDE.md 模板:60 行,让 Claude Code 少问、少猜、少返工

很多人第一次用 Claude Code 改项目,都会遇到同一个问题:它不是不会写代码,而是不知道这个项目的默认规则。

怎么启动?

怎么跑测试?

哪些目录不能动?

改完怎么算真的完成?

失败了能不能跳过检查?

这些问题,如果你每次都靠聊天回答,就等于每次都在重新培训 Claude Code。

我的做法很简单:

把这些固定答案写进项目根目录的 CLAUDE.md。

很多人以为 Claude Code 不够懂项目,其实是项目没有给它一份“默认上下文”。

这篇给你两份可以直接复制的模板:

  • • 一份 20 行最小版,今天就能放进项目
  • • 一份 60 行完整版,适合长期维护

先用起来,再把 Claude Code 反复问你的问题补进去。

先说结论:CLAUDE.md 只回答一种问题

只回答一个问题:

Claude Code 每次进这个项目,都必须提前知道什么?

注意这里的关键词:每次。

如果某个信息只对今天这个任务有用,不要写进 CLAUDE.md,直接写在 prompt 里。

如果某个流程偶尔才用一次,比如写公众号、做 code review、查日志、生成发布说明,不要全塞进 CLAUDE.md,更适合做成 Skill 或 slash command。

如果某个规则只属于你自己,不属于团队,比如“我喜欢先让 AI 给我三个方案”,放到 ~/.claude/CLAUDE.md 或 CLAUDE.local.md。

项目根目录的 CLAUDE.md,只放这类东西:

  • • 这个项目怎么跑
  • • 怎么验证改动
  • • 哪些目录负责什么
  • • 哪些规则不能违反
  • • 哪些坑新同学一定会踩
  • • Claude Code 做完以后要交付什么证据

价值标准只有一个:下次不用再解释。

先给 20 行最小版

如果你只想今天就用,先复制这 20 行。

# CLAUDE.md## Project这个项目是:<一句话说明项目用途>。做改动时优先保持现有架构和代码风格,不做无关重构。## Commands- 安装:`<command>`- 开发:`<command>`- 测试:`<command>`- 只跑单测:`<command>`- 类型检查:`<command>`- 构建:`<command>`## Structure- `<path>`:<核心入口>- `<path>`:<业务逻辑>- `<path>`:<测试>- `<path>`:<生成文件/不要手改>## Rules- 改动超过 3 个文件,先给计划- 优先复用现有模式,不要新增不必要依赖- 不要修改生成文件、密钥、真实用户数据- 不要为了通过检查而删除测试或降低断言## Done完成时说明:- 改了哪些文件- 跑了哪些命令- 结果是什么- 哪些没验证到## Gotchas- `<gotcha>`- `<gotcha>`

就这几段,已经能解决很多问题。

Claude Code 最常问你的,通常就是:

“怎么跑?”

“哪里改?”

“什么不能动?”

“改完怎么证明?”

这些问题有固定答案,就不要每次用聊天来回答。

如果你想让 Claude Code 在项目里更稳定,再看下面的 60 行完整版。

60 行完整版 CLAUDE.md 模板

下面这份可以直接复制。

先别追求完美。填 60 行以内,跑几次 Claude Code,再把它反复问的问题补进去。

# CLAUDE.md## 0. 项目一句话这个项目是:<用一句话说明产品/系统/仓库的真实用途>。Claude Code 在这个项目里的目标是:- 优先完成可验证的小步改动- 保持现有架构和风格一致- 不引入不必要的新依赖## 1. 常用命令依赖安装:- `<command>`本地开发:- `<command>`类型检查:- `<command>`格式化 / lint:- `<command>`单元测试:- `<command>`只跑某个测试:- `<command>`构建:- `<command>`如果命令失败,先阅读报错并定位根因,不要通过跳过检查、删除测试、放宽类型来“修复”。## 2. 项目结构- `<path>`:<这个目录负责什么>- `<path>`:<这个目录负责什么>- `<path>`:<这个目录负责什么>重要入口:- `<path>`:<应用入口 / 服务入口 / 路由入口>- `<path>`:<核心业务逻辑入口>- `<path>`:<测试或验证入口>不要在这里写每个文件的解释。Claude 可以自己读代码。这里只写“应该先去哪儿看”。## 3. 改代码前先做在修改文件前,Claude Code 应该:1. 先搜索现有实现,复用项目已有模式2. 如果改动超过 3 个文件,先给出简短计划3. 如果涉及接口、数据库、权限、支付、登录、发布流程,必须先说明风险4. 不确定时先提问,不要靠猜测补全关键业务规则## 4. 代码约定这个项目的特殊约定:- `<rule>`:例如“API 错误统一用 AppError,不直接 throw 普通 Error”- `<rule>`:例如“前端请求必须走 src/lib/api,不在组件里直接 fetch”- `<rule>`:例如“状态管理优先用现有 store,不新增全局状态库”只写本项目特有的约定。不要写“代码要清晰”“注意性能”这种 Claude 本来就知道、也无法执行的空话。## 5. 验证标准Claude Code 完成任务前,必须说明:- 实际改了哪些文件- 运行了哪些验证命令- 每个命令的结果是什么- 哪些部分没有验证到,以及原因默认完成标准:1. 相关测试通过2. 类型检查通过3. lint / format 没有新增问题4. 用户可见改动需要说明如何人工检查如果无法运行验证命令,必须明确原因,不能只说“应该可以”。## 6. 禁止事项Claude Code 不要做这些事:- 不要修改 `<generated path>` 下的生成文件,除非任务明确要求- 不要提交密钥、token、cookie、真实用户数据- 不要为了让测试通过而删除测试或降低断言- 不要在没有说明原因的情况下新增依赖- 不要大范围重构与当前任务无关的代码- 不要用临时 mock 掩盖真实集成问题## 7. 已知坑这个项目里容易踩的坑:- `<gotcha>`:<为什么容易错,正确做法是什么>- `<gotcha>`:<为什么容易错,正确做法是什么>- `<gotcha>`:<为什么容易错,正确做法是什么>如果 Claude Code 在同一个问题上错了两次,把新规则补到这里。## 8. 更新这份文件的规则当出现下面情况时,更新 `CLAUDE.md`:- Claude Code 反复问同一个项目问题- Claude Code 反复违反同一条项目约定- 项目的启动、测试、构建命令发生变化- 新增了重要目录、服务或边界更新原则:- 新增规则要短,最好一行说清- 删除过期规则- 不把一次性任务背景写进来- 文件过长时,优先删除 Claude 可以从代码中自己推断的信息

主模板到这里。

不要把 CLAUDE.md 写成百科全书,要写成默认决策表。

下面只拆两件事:每段该填什么,以及什么不该填。

你知道吗Anthropic 文档里明确建议先用 /init 生成 starter CLAUDE.md,再人工删改。项目根目录的 CLAUDE.md 适合提交到 git;个人偏好更适合放在 CLAUDE.local.md 或 ~/.claude/CLAUDE.md。

0. “项目一句话”不是介绍项目,是校准目标

很多人的 CLAUDE.md 第一段会这样写:

这是一个基于 Next.js 和 PostgreSQL 的全栈项目。

这句话没错,但信息密度低。

Claude Code 看 package.json 和目录结构,大概率也能猜出来。

更有用的是这种:

这是一个给内容创作者使用的公众号选题和发布工作流项目。核心目标不是“功能多”,而是让选题、写作、审稿、发布形成可复用流程。

第一种告诉它技术栈。

第二种告诉它取舍。

当 Claude Code 要不要新增一个复杂抽象、要不要引入新依赖、要不要把功能做得很通用时,第二种信息会影响它的判断。

CLAUDE.md 里最值钱的部分,通常不是“用了什么”,而是“在乎什么”。

1. 常用命令:给 Claude 一个可执行的验收按钮

Claude Code 的优势在于:写完代码后,它能自己跑命令,看结果,再修。

但前提是:它知道该跑什么。

如果你每次都要补一句:

“我们这里不是 npm,是 pnpm。”

“测试不要全跑,跑这个 package 就行。”

“构建命令不是 build,是 check。”

那这些就应该写进 CLAUDE.md。

命令区要尽量具体。

不要写:

运行测试。

要写:

单元测试:- `pnpm test -- --runInBand`只跑某个测试:- `pnpm test path/to/file.test.ts`

这里的深层逻辑是:你在给 Claude 一个可以闭环的按钮。

没有验证按钮,Claude Code 做完只能说“我改好了”。

有验证按钮,它才能说:

“我改了这 3 个文件,运行了类型检查和相关测试,结果都通过;E2E 没跑,因为本地缺少浏览器环境。”

前一种要你兜底,后一种能交给证据。

这一句可以直接写进去:

如果命令失败,先定位根因,不要通过跳过检查、删除测试、放宽类型来修复。

2. 项目结构:不要画地图,要标入口

CLAUDE.md 最容易写废的地方,就是项目结构。

很多人会把目录树贴进去:

src/  components/  pages/  utils/  hooks/  services/

这对 Claude Code 帮助不大。

它自己 ls 一下就能看到。

你应该告诉它:

  • • 业务入口在哪里
  • • 旧代码和新代码的边界在哪里
  • • 哪些目录是生成物
  • • 哪些目录看起来能改,但其实不能乱动
  • • 做某类任务应该先看哪里

比如:

- `apps/web/src/app`:Next.js App Router 页面入口- `packages/domain`:核心业务规则,前端不要绕过这里直接拼逻辑- `packages/generated`:接口生成代码,不要手改- `scripts/publish-wechat.ts`:公众号发布入口,改发布逻辑先看这里

这不是目录介绍。

这是项目导航。

你要把 Claude Code 当成一个刚入职、但搜索能力极强的新同事。

不用把每条路都讲一遍,告诉它应该从哪个门进去。

这一句可以直接写进去:

不要在这里解释每个文件,只写做某类任务应该先看哪个入口。

3. 代码约定:只写 Claude 猜不到的东西

我不建议在 CLAUDE.md 里写一堆通用好习惯。

比如:

- 写干净代码- 注意性能- 保持可维护性- 遵循最佳实践

这些话没错,但没有执行力。

Claude Code 不会因为你写了“注意性能”,就知道这个项目里缓存应该放 Redis 还是内存。

更好的写法是:

- API 错误统一返回 `Result<T, AppError>`,不要在 handler 里直接 throw 普通 Error- 前端组件不要直接请求后端,统一走 `src/lib/api-client`- 新增数据库字段必须同时更新 migration、schema 类型和 seed 数据- 文案生成逻辑不要写死在页面里,放到 `modules/content-rules`

这类规则有三个特征:

第一,它是本项目特有的。

第二,它能指导具体修改。

第三,如果不写,Claude Code 真的可能做错。

CLAUDE.md 的每一行都应该经得起这个问题:

删掉这一行,Claude 会不会更容易犯错?

如果不会,就删。

这一句可以直接写进去:

只写本项目特有约定,不写“代码要清晰”“注意性能”这类空话。

4. 改代码前先做:把“别乱来”变成流程

Claude Code 的风险常常来自速度。

你刚说完“帮我优化一下”,它可能已经开始改 8 个文件。

这时候你再说“等等,不是这个方向”,已经晚了。

所以我会在 CLAUDE.md 里写一段“改代码前先做”。

这段不是限制它,而是给它触发条件:

  • • 小改动,可以直接做
  • • 超过 3 个文件,先计划
  • • 涉及数据库/权限/支付/发布,先讲风险
  • • 不确定业务规则,先问

这比你每次临时提醒有效。

因为 Claude Code 每次开新会话都会读到。

我特别建议写这一句:

如果改动超过 3 个文件,先给出简短计划,不要直接修改。

这条规则能挡住很多“AI 写太快导致返工”的情况。

小任务直接做。牵涉面变大,先让它停一下。

5. 验证标准:让“完成”变成证据,而不是语气

Claude Code 最容易出现的一种回答是:

“现在应该可以了。”

我最不喜欢这个“应该”。

问题不在语气,在于没有证据。

所以我会把完成标准写进 CLAUDE.md:

完成任务前必须说明:- 实际改了哪些文件- 运行了哪些验证命令- 每个命令的结果是什么- 哪些部分没有验证到,以及原因

这段会把 Claude Code 的交付,从“给你一个结论”变成“给你一组证据”。

你看它的最终回复时,不需要重新猜:

  • • 它到底有没有跑测试
  • • 它是不是只改了代码没验证
  • • 它有没有因为环境问题跳过某个检查
  • • 它有没有动到不该动的文件

我判断一个 agent 工作流是否成熟,主要看它能不能把验证过程交代清楚。

这一句可以直接写进去:

完成前必须说明:改了哪些文件、跑了哪些命令、结果是什么、哪些没验证到。

6. 禁止事项:不要写道德口号,要写事故清单

“不要乱改代码”没用。

什么叫乱改?

Claude 不知道。

禁止事项要写成事故清单:

- 不要修改 `generated/` 下的生成文件- 不要为了测试通过删除测试- 不要把真实 token 写进示例配置- 不要在没有说明原因的情况下新增依赖- 不要改与当前任务无关的大段代码

这类规则越具体越好,最好来自真实事故。

比如你发现 Claude Code 曾经为了让 TypeScript 过,直接把类型改成 any。

那就补一条:

- 不要用 `any` 绕过类型错误;如果必须使用,说明原因和边界。

你发现它喜欢在前端组件里直接 fetch。

那就补一条:

- 不要在 React 组件里直接请求后端,统一走 `src/lib/api-client`。

CLAUDE.md 不是一次写完的。

它应该像防错清单一样,从你真实踩过的坑里长出来。

这一句可以直接写进去:

不要为了让检查通过而删除测试、降低断言、改成 any,除非明确说明原因和边界。

7. 已知坑:这是最值得写的部分

如果只能保留 CLAUDE.md 的一个区块,我可能会保留“已知坑”。

因为这是 Claude Code 最难从代码里推断出来的东西。

代码能告诉它“现在是什么”。

但不一定告诉它“为什么不能那样改”。

比如:

- 登录态同时存在 cookie 和 localStorage,是历史迁移遗留。不要只改其中一个,否则老用户会掉登录。- `legacyPayment` 看起来没人用,但企业客户还在走这个入口。删除前必须确认迁移状态。- 测试里不能连真实数据库,必须用 `TEST_DATABASE_URL`。

这类信息非常值钱。

它来自团队经验,也是新人最容易问老同事的问题。

你把它写进 CLAUDE.md,Claude Code 就不会每次都像第一天入职。

8. 更新规则:让它越用越准,而不是越写越肿

CLAUDE.md 最大的风险之一,是越写越长。

一开始你写 50 行,很清楚。

过一个月,变成 300 行。

里面混着旧命令、废弃目录、一次性任务背景、个人偏好、已经不存在的架构。

这时候 Claude Code 更容易忽略关键规则。

所以我建议给 CLAUDE.md 自己也写维护规则:

当 Claude 反复问同一个问题时,补一行。当 Claude 反复犯同一个错时,补一行。当某条规则过期时,删掉。不要把一次性任务背景写进来。

我自己的判断标准是:

每次只补一条能减少下次沟通成本的规则。

不要整理今天的聊天记录。不要塞进所有知识。只沉淀会重复发生的东西。

一个坏 CLAUDE.md 长什么样

坏的 CLAUDE.md 通常有四种。

第一种,百科全书型。

把 README、接口文档、目录树、历史背景、开发计划全塞进去。

看起来很完整,实际信号很低。

第二种,口号型。

全是“写高质量代码”“遵循最佳实践”“考虑边界情况”。

这些话没有错,但不够具体,Claude Code 很难执行。

第三种,过期型。

命令已经变了,目录已经迁了,但文件还没更新。

这种最危险。

过期规则比没有规则更糟,因为它会让 Claude Code 坚定地走错路。

第四种,混杂型。

团队规则、个人偏好、一次性任务、临时想法全放在一个文件。

结果每次会话都背着一大包不相关上下文。

我会这样分:

  • • 项目长期规则:放 ./CLAUDE.md
  • • 个人偏好:放 ~/.claude/CLAUDE.md 或 CLAUDE.local.md
  • • 一次性任务背景:放当前 prompt
  • • 偶尔使用的复杂流程:做成 Skill
  • • 大段参考资料:用 @file 引用,不要整段复制

别让 CLAUDE.md 承担所有事情。

它只负责项目默认记忆。

我现在的使用流程

我一般这样做:

第一步,在项目根目录跑:

/init

让 Claude Code 先生成一版。

第二步,不直接相信它生成的内容。

我会删掉三类东西:

  • • 它从文件树里显而易见能看出来的
  • • 太泛的好习惯
  • • 不确定、可能过期、像猜出来的描述

第三步,补上它猜不到的东西:

  • • 测试命令
  • • 生成文件边界
  • • 不能碰的目录
  • • 项目特殊约定
  • • 常见坑

第四步,正常使用 Claude Code。

只要它重复问我一个问题,我就想:

这是不是应该写进 CLAUDE.md?

只要它重复犯一个错误,我就想:

这是不是应该变成一条明确规则?

第五步,定期删。

我不追求 CLAUDE.md 越来越长。

我追求它越来越像一份高密度的项目操作手册。

真正的作用:把你的判断前置

Claude Code 的效率不只来自模型能力。

项目环境会直接决定它的表现。

同一个 Claude Code:

在一个没有规则、没有测试命令、没有目录说明的项目里,它会一直问、一直猜、一直等你兜底。

在一个写好 CLAUDE.md、有清晰验证命令、有明确边界的项目里,它会更像一个已经熟悉团队习惯的同事。

没写之前,你在回答 6 个低级问题。

写完之后,它至少能先读入口、跑检查、带着验证结果回来。

你只是把重复沟通提前写下来了。

所以我不太建议一上来就追各种“Claude Code 神级技巧”。

先做一件很朴素的事:

把你已经回答过两次的问题,写进 CLAUDE.md。

它不会让 Claude Code 突然变成架构大师。

但它会让 Claude Code 少问很多低级问题。

也会让你少做很多无意义的复述。

CLAUDE.md 的价值很朴素:

让 AI 更懂你这个项目。


相关学习资料