跳到正文
Neaptide工作室
博客

CLAUDE.md 设置指南:为 Claude Code 编写项目说明与示例

Neaptide · 2026年9月20日 · 8 分钟阅读 · 更新于: 2026年10月3日

用可调整模板编写 CLAUDE.md,记录项目命令与验证规则,检查文件加载,并排查 Claude Code 忽略说明的原因。

本文目录
项目文件夹及表示结构、命令和验证的卡片。

Claude Code 能读懂项目代码,但有些工作规则在代码里看不出来:为什么测试环境不能给真实客户发邮件,哪些目录是自动生成的,团队靠哪项检查确认修复有效。如果每开一个新任务都要重讲一遍,就该把它们写进 CLAUDE.md。

CLAUDE.md 是一个 Markdown 文件,用来给 Claude Code 提供长期有效的指令。项目命令、重要限制和验证标准都可以记在里面。起步时在仓库根目录建一个文件就够了。文件可以放在哪里、如何加载,Anthropic 文档里有说明。

下面用一个小型网站项目做示例。目录和命令请换成你自己的:这是一份练习用的模板,没有人在你的应用上验证过。

哪些规则值得写下来

假设要给咨询表单加一个“公司”字段。只知道项目用 TypeScript 远远不够,智能体还得找到表单,弄清数据发往哪里,并且在不惊动真实销售团队的前提下测试提交。

好的规则能帮人做出具体决定:

把笼统的要求改写成项目规则
过于笼统可用于工作
写高质量代码修改表单后检查空值、无效邮箱和成功提交
遵循设计使用现有 TextField 组件及其错误状态
不要破坏项目修改处理函数后运行对应测试与类型检查
注意多语言标签和错误消息写入字典,不直接写在组件里
检查结果分别报告已执行检查与无法执行的检查

右边一列并不适用于所有仓库,它有用,是因为贴合这个项目。如果你的项目里没有 TextField,就得改写规则,否则这条说明本身就会制造错误。

回想一下你最近给智能体提过的意见,哪些下次还用得上?只针对某个按钮的要求,留在当前任务里;适用于所有表单的约定,才写进项目规则。

CLAUDE.md 放在哪里

团队共用的规则放在项目根目录的 `CLAUDE.md`。跨项目通用的个人偏好可以放在 `~/.claude/CLAUDE.md`。子目录里的 CLAUDE.md,会在 Claude 读取该目录下的文件时加载。

初始结构可以很简单:

project/
├── CLAUDE.md
├── README.md
├── package.json
└── src/

如果文件已经存在,先读一遍。两套相近的规则很难同步维护:测试命令换了,往往只改了其中一份。

文件名也要核对。编辑器隐藏扩展名时,一不留神就会建成 `CLAUDE.md.txt`。

怎样生成初稿

在已打开的 Claude Code 会话里执行 `/init`,它会根据项目生成一份初始 CLAUDE.md。生成的内容要逐项核对:命令是否存在,路径是否还有效,限制是否符合你的工作方式。Anthropic 的建议也是先生成、再修订。

如果想先看方案、暂时不动文件,可以这样说:

阅读 README、package.json 中的脚本与目录结构,提出 CLAUDE.md 草稿。包含启动和检查命令、重要修改边界,以及不能从代码中确定的事项。把未知内容列为问题,暂时不要创建或修改文件。

这样拿到的是一份可以和仓库逐项对照的文本。不要因为它看起来工整就照单全收。项目里没有对应脚本的话,`npm test` 毫无用处。

网站项目的 CLAUDE.md 示例

这份模板是我们为本文写的,假设有一个服务类网站,使用 npm、TypeScript、翻译字典,以及单独配置的表单测试。命令和目录名只是为了展示结构,使用前请换成真实名称。

# 项目

带咨询表单的服务网站,界面为俄语和英语。
主要用户流程:选择服务并提交咨询。

## 代码位置
- src/components/forms/ — 字段与表单。
- src/server/leads/ — 咨询处理。
- src/i18n/ — 界面语言字典。
- tests/leads/ — 咨询处理测试。

## 命令
- npm run dev — 本地启动。
- npm run typecheck — 类型检查。
- npm run test:leads — 咨询处理测试。
- npm run build — 构建应用。

## 修改规则
- 复用现有表单组件与错误处理函数。
- 界面文案写入两个语言版本的字典。
- 项目现有工具足够时,不添加依赖。
- 保留其他人尚未完成的改动。

## 验证
- 修改咨询流程时,检查必填项、无效邮箱,以及向测试接收端成功提交。
- TypeScript 修改后运行 npm run typecheck。
- 修改咨询处理后运行 npm run test:leads。
- 界面修改后,在浏览器检查受影响页面。
- 无法执行某项检查时,说明原因及剩余不确定性。

## 环境
- 仅向测试接收端执行提交检查。
- 所需环境变量名称见 .env.example。
- 不要把密钥值写入代码、报告或文档。

## 报告
简述修改、已执行检查及剩余问题。
区分测试结果和对应用行为的推测。

先检查命令,再确认验证规则确实做得到。没有测试接收端,写一条指令也变不出来;要么先准备好测试环境,要么写明眼下可行的验证办法。

不必保留所有章节。库项目更看重公共 API 和兼容性;文章类网站更看重内容结构、元数据和内部链接。

怎样判断说明是否有帮助

这里有两个问题要分开看:文件有没有加载,智能体的行为有没有改变。

运行 `/context`,在 Memory files 列表里找到你的文件,然后交给智能体一个结果明确的小任务。Anthropic 明确建议用这个命令确认文件已加载。

以示例网站为例:

给咨询表单添加可选“公司”字段。修改前找到现有字段组件与提交处理函数。修改后检查填写和不填写公司时都能提交。只列出实际执行过的检查。

然后看三点:

  1. 是否用了指定组件与翻译字典?
  2. 不填可选字段时是否仍能提交?
  3. 报告中的检查结果是否能与工具输出核对?

如果有一项不符合,先找原因。可能是规则含糊,可能是代码里还有一个相似的处理函数,也可能是测试没有覆盖这个场景。弄清楚问题出在哪里,再考虑要不要加一条禁令。

可以做一份简单的记录:任务、预期操作、实际结果、改了哪条规则。这是我们建议的验证方法,本文并没有做过这样的实验。成功一次,不代表这条规则以后都会被遵守。

Claude 忽略 CLAUDE.md 时怎么办

先确认该加载的文件确实加载了,再看看项目里其他文件有没有同一主题的说明。按照文档,Claude 找到的所有 CLAUDE.md 会合并进入上下文,所以嵌套文件不会自动取消上层的规则。

接着看措辞。“认真测试”留给智能体的选择太多;“修改咨询处理函数后运行某某命令”指定的是一个看得到结果的动作。

还有一种可能:说明已经过时。测试搬了位置、目录结构变了,相关规则就要跟着改。一份描述旧项目的文档,智能体照着做也做不对。

最后,删掉重复的内容和泛泛的愿望。Anthropic 建议说明要简短、贴合项目,并在工作中不断修订。没有哪个篇幅能保证指令一定被遵守。

什么时候使用 rules 和 Skills

项目变大以后,按用途拆分说明。`.claude/rules/` 用来存放按主题划分的规则,其中也包括只对特定路径生效的规则。Skills 适合那些只在特定情况下才用到的可重复流程。

不同类型的说明放在哪里
内容适合的位置
主要命令和通用检查顺序CLAUDE.md
所有表单的校验约定主题规则
发布准备流程Skill
今天添加“公司”字段当前任务

这样维护起来更省事:发布流程变了,不必去改每一个场景说明。不过,拆成多个文件并不会让规则更准确,内容上的矛盾还是得逐条解决。

CLAUDE.md 为什么不能替代访问限制

“不要给真实客户发邮件”是一条有用的工作约定,技术上的访问限制则要另行配置。Claude Code 提供 `/permissions` 以及 allow、ask、deny 规则,CLAUDE.md 里写什么都不会改变这些权限。

在表单这个例子里,应当把测试环境配置成:提交的请求确实发往测试接收端。这样一来,收件方是否正确,就不再取决于智能体怎么理解某段文字。

常见问题

要点速览

CLAUDE.md 可以用俄语写吗?

可以。对俄语团队来说,这是完全可行的做法。文件名、命令和标识符保持原样,规则要写到同事能够核对的程度。官方介绍的是普通文本格式,没有规定指令必须用哪种语言。上下文指南 (https://support.claude.com/en/articles/14553240-give-claude-context-claude-md-and-better-prompts)。

要把整个 README 搬进去吗?

不用。先写 README 之外智能体还缺的东西:检查方法、例外情况和不容易看出来的决策。整份照搬只会多出一处需要维护的地方;安装细节和产品介绍留在原文档里更合适。

与自动记忆有什么不同?

CLAUDE.md 里是你自己写下的说明;自动记忆是 Claude 在工作过程中保存的笔记。两者互补。记忆机制说明 (https://code.claude.com/docs/en/memory#claude-md-vs-auto-memory)。

每个任务后都要重写吗?

不用。只添加以后还会用到的规则,比如命令变了、有了通用的检查方法,或者同一个错误反复出现。一次性的要求留在任务里。改完规则后,重跑一个小场景,看看是不是更容易得到可核实的结果。