用 CLAUDE.md 把你的规矩固化下来
不用每次开头重申一遍术语表、口径和禁忌。写一次,之后每个会话自动加载。附路径限定规则和自动记忆两个进阶机制。
- 出处
- How Claude remembers your project
- 来自
- Anthropic 官方文档
- 查证日期
- 2026/08/04
每次开新会话,都要重新交代一遍:「术语用客户那套,不要用行业通称」「数字一律保留一位小数」「不确定的地方标出来不要圆过去」。
这些话说第三遍的时候,就该写进文件了。
CLAUDE.md 是什么
每次会话开始时自动加载的一份说明。 你写在里面的内容,Claude 每次都会读。
判断某件事该不该写进去,有个很好用的标准(官方给的):
- Claude 第二次犯同一个错
- 你把上次打过的那句纠正又打了一遍
- 一个新同事需要同样的背景才能上手
任何一条成立,就该写进去。
放在哪里
按加载顺序,从范围最广到最具体:
| 范围 | 位置 | 用来放什么 |
|---|---|---|
| 组织统一 | macOS /Library/Application Support/ClaudeCode/CLAUDE.mdWindows C:\Program Files\ClaudeCode\CLAUDE.md |
公司层面的规范(由 IT 部署) |
| 个人偏好 | ~/.claude/CLAUDE.md |
你在所有项目里的习惯 |
| 项目共享 | ./CLAUDE.md 或 ./.claude/CLAUDE.md |
团队共用,随版本库分发 |
| 项目私有 | ./CLAUDE.local.md |
只属于你的,记得加进 .gitignore |
一个常见的误解
很多人以为是「子目录覆盖上级」。不是。 官方的机制是:
All discovered files are concatenated into context rather than overriding each other.
所有找到的文件拼接进上下文,不是互相覆盖。顺序是从文件系统根部往下到你的工作目录,越靠近工作目录的越后被读到。
这个区别很重要:它意味着上下级的规则会同时生效。如果两处说法冲突,Claude 可能任选一个——所以定期清理矛盾的旧规则是必要的,而不是指望后面的自动覆盖前面的。
该怎么写
尺寸:控制在 200 行以内
官方明确说:超过 200 行会消耗更多上下文,并且降低遵循度。 写得越长,它照做的概率反而越低。
内容多了怎么办?往下看路径限定规则。
具体到可以验证
官方给的对照很说明问题:
| ❌ 模糊 | ✅ 具体 |
|---|---|
| 「格式规范一点」 | 「数字保留一位小数,百分比带 % 号」 |
| 「注意术语」 | 「用客户的品类名,不用行业通称;对照表见 @docs/术语表.md」 |
| 「文件放整齐」 | 「访谈稿放 interviews/,产出放 output/」 |
能不能被检查,是唯一的标准。
一个研究咨询场景的例子
# 项目背景
某快消客户的 2026 品类研究。样本 40 份深访,已完成转录。
# 术语与口径
- 品类名用客户内部叫法,对照表见 @docs/术语表.md
- 数字保留一位小数
- 引用受访者原话时保留原始措辞,不要润色
# 分析规范
- 每个结论必须能追溯到具体的访谈编号
- 材料里没有依据的,写「材料未涉及」,不要推断
- 不确定的地方明确标出,不要用确定的语气写
# 禁止
- 不要删除 interviews/ 下的任何原始文件
- 不要修改 术语表.md
注意最后那节。「禁止」写清楚,比「请注意」有用得多。
用 @ 引入其他文件
术语表见 @docs/术语表.md,分析框架见 @docs/framework.md
被引用的文件会在启动时一起加载。注意:这只是组织方式,不省上下文——引入的文件同样占空间。
想在文中提到路径但不引入,用反引号包起来:`@README` 是文字,@README 是引入。
进阶一:路径限定规则
CLAUDE.md 写不下的时候,把规则拆进 .claude/rules/:
你的项目/
├── .claude/
│ ├── CLAUDE.md # 主要说明
│ └── rules/
│ ├── 访谈编码.md
│ ├── 数据处理.md
│ └── 报告格式.md
真正值钱的是 paths 限定。 加上 frontmatter,这条规则只在 Claude 碰到匹配的文件时才加载:
---
paths:
- "interviews/**/*.md"
---
# 访谈稿处理规则
- 受访者身份一律用编号,不出现真实姓名
- 保留原始措辞,不做语言润色
- 每段标注时间戳
这样处理访谈稿时这条规则生效,写报告时它不占上下文。
没有 paths 字段的规则无条件加载,优先级和 .claude/CLAUDE.md 相同。
个人级规则
~/.claude/rules/ 下的规则对你机器上所有项目生效。适合放跟项目无关的个人偏好。
用户级规则先于项目规则加载,所以项目规则优先级更高。
进阶二:自动记忆
除了你手写的 CLAUDE.md,Claude 还会自己记笔记——这是另一套机制。
| CLAUDE.md | 自动记忆 | |
|---|---|---|
| 谁写的 | 你 | Claude |
| 内容 | 指令和规则 | 它学到的模式和经验 |
| 什么时候写 | 你想到就写 | 它觉得以后用得上时 |
自动记忆默认开着。它会根据你的纠正和偏好自己攒笔记,存在 ~/.claude/projects/<项目>/memory/。
看它记了什么:/memory,选自动记忆文件夹。全是纯 markdown,你可以随时改或删。
关掉它:/memory 里有开关,或在项目设置里 "autoMemoryEnabled": false。
主动让它记:直接说「记住:数字一律保留一位小数」,它会存进自动记忆。想进 CLAUDE.md 的话,明确说「把这条加到 CLAUDE.md」。
它没照做怎么办
官方给的排查顺序:
一、先确认文件真的加载了。 跑 /context,看 Memory files 那一栏。不在里面 = 它根本没看见。
二、检查位置对不对。 参照上面的位置表。
三、把指令写具体。 「用两空格缩进」比「格式规范一点」有效得多。
四、找矛盾。 多个 CLAUDE.md 之间说法冲突时,Claude 可能任选一个。
还有一条很重要的认知:
CLAUDE.md content is delivered as a user message after the system prompt, not as part of the system prompt itself.
CLAUDE.md 是作为一条用户消息送进去的,不是强制配置。 它会读、会尽量照做,但不保证严格遵守。
如果某件事必须在特定时刻发生(比如每次改完文件都要做某个检查),那该用 hook,不是 CLAUDE.md。hook 是在固定的生命周期节点执行的 shell 命令,跟 Claude 怎么想无关。
压缩之后规则会丢吗
项目根目录的 CLAUDE.md 不会丢——/compact 之后 Claude 会从磁盘重新读一遍再注入。
子目录里的嵌套 CLAUDE.md 不会自动重注入,要等下次读到那个目录的文件时才重新加载。
所以:只在对话里口头说过的要求,压缩之后就没了。 想让它活过压缩,就得写进文件——这也是「说第三遍就该写下来」这条规则的另一个理由。
从哪开始
别一上来就写一个大文件。
从你这周重复说过的那一句话开始。 写进 ~/.claude/CLAUDE.md,一行就行。下次再遇到第二句,再加一行。
三个月之后回头看,那个文件就是你的工作方式本身。