跳转到内容

CLAUDE.md 是什么:让它一开口就懂你的项目

📍 Claude Code 干活

一张项目说明书自动飘到 Claude 手里被读取

用着用着,你一定会撞到的痛点

Section titled “用着用着,你一定会撞到的痛点”

你装好 Claude Code 用了一周。某天早上你又开一个新对话准备让它帮你改简历,你打:

「帮我改一下简历。」

它问:「好的,你的简历在哪里?」

你打:~/Documents/求职/简历最新.md

它继续问:「你想改成什么风格?之前有特别偏好吗?」

你打:「中文,语气克制,不要那种『我有幸』『我荣幸』的虚词,用动词起头讲事实。」

它又问:「目标行业 / 岗位是?」

……

你抬头看一眼屏幕,心里咕哝:「这一模一样的对话我上周已经讲过 3 遍了。」

这就是没有 CLAUDE.md 的状态。

痛点 3 次,角色越来越疲惫

CLAUDE.md 是什么:让它一开机就记得

Section titled “CLAUDE.md 是什么:让它一开机就记得”

CLAUDE.md 是一个普通的 markdown 文档——你写一次,放在固定位置,Claude Code 每次启动自动加载,把你写的偏好、规则、上下文全都吃进去。

下次你打开一个新对话直接说:

「帮我改一下简历。」

它直接说:「好,改 ~/Documents/求职/简历最新.md 是吧?我用动词开头讲事实,不用「有幸」那种虚词,目标投咱们之前对齐的产品经理岗位。直接开改吗?」

省了 3 分钟、3 轮问答。

这就是 CLAUDE.md 唯一一个功能:把你跟 AI 的「磨合记忆」从对话里搬出来,变成一份持久文档。

它不是配置文件,不是数据库,就是一篇你写给 AI 看的「项目说明书 / 个人偏好书」。

CLAUDE.md 文档示意图,带三个区段标注

下面是一份改简历专用的 CLAUDE.md 真实例子。直接抄走改:

# 简历相关项目说明
## 我是谁
- 5 年产品经理,前 2 年做 SaaS,后 3 年做电商
- 目前找:中大厂产品经理岗(优先字节、美团、拼多多)
- 简历主版本路径:~/Documents/求职/简历最新.md
## 写作风格(给 Claude 的)
- 中文为主,克制不夸张
- 动词起头讲事实(❌「我有幸负责」 → ✅「主导」「驱动」「上线」)
- 数据要具体(❌「显著提升」 → ✅「DAU 从 8k 到 23k」)
- 避免空词:有幸、荣幸、致力于、不懈努力
## 项目背景
- 上家公司 X 的项目:XX 商品中台,我是 PM 一号位
- 上上家公司 Y 的项目:XX 增长黑客模块
## 别问我的事(直接动手即可)
- 「简历」永远指 ~/Documents/求职/简历最新.md
- 「JD」永远指 ~/Documents/求职/JD 收集/ 这个目录
- 改完直接给我 diff,不要先问要不要改

读完这份 CLAUDE.md,Claude 知道你是谁、你的项目背景、你的写作偏好、文件路径、哪些事可以不用问直接干。

注意三个关键部分:

  1. 我是谁 — 让它有「人物画像」
  2. 写作风格 / 工作偏好 — 让它每次输出都符合你审美
  3. 别问我的事 — 让它不用反复追问,直接动手

最后一部分是新手最容易忘的,但对效率提升最大。

⚠️ 这里省掉的是它追问你的问题。改文件、跑命令之前要不要你点确认,由权限模式和权限规则决定,写进 CLAUDE.md 改变不了,见让 Claude 跑命令。

三层 CLAUDE.md:全局、项目、子目录叠放在一起

CLAUDE.md 最常用的是三个位置,作用范围不一样:

路径:~/.claude/CLAUDE.md

作用:所有项目都生效。

适合写:

  • 你是谁(你的名字、职业、城市、偏好的语言)
  • 通用品味(中文用不用 emoji、代码注释用中文还是英文)
  • 全局红线(token 一律放在环境变量里,不写明文)

📁 2. 项目级 CLAUDE.md(项目根目录)

Section titled “📁 2. 项目级 CLAUDE.md(项目根目录)”

路径:/你的项目目录/CLAUDE.md(也可以放在 /你的项目目录/.claude/CLAUDE.md)

作用:只在这个项目内生效。

适合写:

  • 这个项目用什么技术栈(React 18 / Python 3.12 / PostgreSQL)
  • 这个项目的代码规范(camelCase / 4 空格缩进)
  • 这个项目的特殊规则(commit message 用英文 / PR 必须附测试)

📂 3. 子目录 CLAUDE.md(细粒度)

Section titled “📂 3. 子目录 CLAUDE.md(细粒度)”

路径:/你的项目目录/某个子模块/CLAUDE.md

作用:Claude 读到这个子模块里的文件时才加载,只管这一块。

适合写:

  • 这个模块的特殊规范(/api/ 下的接口必须返回 JSON)
  • 这个模块的历史包袱(/legacy/ 是老代码,只修 bug、不重构)
  • CLAUDE.local.md:放在项目根目录,写只属于你自己的项目偏好(比如你本地的测试地址)。记得把它加进 .gitignore(git 的忽略清单),不提交进仓库。
  • .claude/rules/ 目录:项目大了,可以把规则拆成几个小文件放在这里,还能设定某条规则只在处理某类文件时才加载。

公司统一管理的电脑上,可能还有一份管理员下发的组织级 CLAUDE.md。

  • 启动时就加载:家目录的 ~/.claude/CLAUDE.md,加上从你启动 Claude Code 的目录一路往上、每一级目录里的 CLAUDE.md(和 CLAUDE.local.md)。在项目根目录启动,读到的就是全局这份加项目这份。
  • 用到时才加载:项目下面各个子目录里的 CLAUDE.md,启动时不读,等 Claude 去读那个子目录里的文件时才载入。
  • 是拼在一起,不是覆盖:几份文件的内容全部拼接进上下文,一起摆在 Claude 面前,没有「下级自动覆盖上级」这回事。

类比:

  • 家目录 CLAUDE.md = 你的个人习惯(到哪都带着)
  • 项目 CLAUDE.md = 公司规章(进了这家公司才拿到)
  • 子目录 CLAUDE.md = 部门细则(走进这个部门才翻开)

冲突了怎么办?比如全局规定「代码注释用中文」,某项目 CLAUDE.md 规定「这个仓库的注释用英文」。官方说明里提到,冲突时项目级的指令通常会被优先采纳;但这靠的是 Claude 自己判断,不是强制覆盖,两条规则打架时它也可能随便挑一条。最稳的做法是不在不同层级写互相冲突的规则:全局只写到哪都适用的偏好,项目特有的规则写在项目里。

想确认哪几份已经加载,在会话里输入 /context,看 Memory files 那一栏。(官方说明:Claude 如何记住你的项目,面向开发者,偏技术。)

5 条原则的图标排列

新手第一次写 CLAUDE.md,通常会犯一个错——写得太抽象。比如:

「请保持代码风格优雅。」

这一句话对 AI 等于没说——「优雅」是什么?2 空格还是 4 空格?变量名 camelCase 还是 snake_case?用 const 还是 let?

下面是 5 条原则,每一条都用「错例 vs 正例」演示。

❌ 错例:「代码要 clean。」

✅ 正例:

  • 缩进用 2 个空格
  • 变量名用 camelCase
  • 优先 const,需要重新赋值才用 let
  • 函数不超过 30 行

2. 规则要短,必要时附一句原因

Section titled “2. 规则要短,必要时附一句原因”

❌ 错例:「我喜欢简洁的 commit message,因为我看着舒服,如果太长会感觉项目历史很乱…」

✅ 正例:

  • commit message 用英文(要给海外同事看)
  • 第一行不超过 50 字符
  • 用动词起头(Add / Fix / Update / Remove)

规则本身要短,不写长篇解释;但用一句话点明「为什么」很有用:它明白了你的用意,碰到规则没写到的情况也更容易做对。Anthropic 官方的提示词建议也是这样:说清楚背后的原因,比光下命令效果好。

❌ 错例:「测试要写得完整。」

✅ 正例:

  • 每个 endpoint 至少有 3 个测试:成功、失败、边界
  • 例:POST /api/login 要测「正确密码」「错误密码」「空密码」
  • 用 jest,放在 __tests__/ 目录下

4. 禁止的事,写成「该怎么做」

Section titled “4. 禁止的事,写成「该怎么做」”

❌ 错例:「不要做不合理的修改。」

✅ 正例:

  • commit message 只用字母和数字,不加表情
  • token 一律放在环境变量里,不写明文
  • 改动都走 PR(合并请求)合进 main,不直接推 main 分支

只写「不要 X」,它知道了不能做什么,却不知道该怎么做;把「该怎么做」写在前面、禁止的部分顺带一提,最不容易跑偏。Anthropic 官方的提示词建议(面向开发者,偏技术)也是「告诉 Claude 该做什么,而不是只说不该做什么」。

⚠️ CLAUDE.md 只是写给它看的说明,不是强制开关。真正必须拦住的操作(比如绝不能直接推 main),交给权限规则或 hooks(钩子:在固定时机自动运行的脚本)来拦,见让 Claude 跑命令和 Hooks 那篇。

CLAUDE.md 不是一次性写完的。流程:

  1. 第一周 — 写一个最小版本(50 行就行)
  2. 每次踩坑 — 加一条新规则进去
  3. 每月回顾 — 删掉 outdated 的、合并重复的

把它当成你跟 AI 长期合作的「合同迭代版」,不是一份说明书。

进阶:auto memory,让 Claude 自己记笔记

Section titled “进阶:auto memory,让 Claude 自己记笔记”

AI 自己拿笔在更新一份记忆文档,有星星点缀

从 2026 年 2 月(v2.1.59)起,Claude Code 有一个叫 auto memory(自动记忆)的能力,默认开启——它会自己记下值得记的东西,写进它自己的记忆目录,不会动你的 CLAUDE.md。

记忆存在 ~/.claude/projects/<项目>/memory/ 里:一份 MEMORY.md 当目录(索引),每条记忆再单独存成一个小文件。每次启动只自动读 MEMORY.md 的前 200 行(或前 25KB),具体的小文件等用到时再翻。同一个 git 仓库里的子目录共用这一份记忆,而且只存在你这台电脑上。

举一个真实例子:

你:「我跟你说,所有 commit message 都用英文写。」 Claude:「好,已记下。」 (界面上会出现一行 Saved 1 memory 之类的提示:它在自己的记忆里加了一条「用户偏好:commit message 用英文」)

下次你新开对话,它已经记得了——不用你再告诉一遍。

想让某条规则进 CLAUDE.md、而不是它的记忆,直接对它说「把这条加到 CLAUDE.md」就行。

auto memory 默认就开着。如果你想看它具体记了什么,可以打:

/memory

会打开记忆管理界面:列出你的各级 CLAUDE.md,能打开自动记忆的文件夹逐条查看、修改或删除,也能在这里把 auto memory 关掉。分工记清楚:CLAUDE.md 归你管,记忆目录归它自动记——两边互不打架。

auto memory 不是 100% 准确。它可能:

  • 把临时偏好当成长期规则(你今天说「这次用英文」,它以为你「永远要英文」)
  • 过度泛化(你说「这一段代码不要注释」,它以为「整个项目都不要注释」)

所以每两周看一次 /memory,删掉记错的。这点 5 分钟的维护,能让它的记忆一直精准。

❌ 坑 1:CLAUDE.md 写得跟流水账一样

Section titled “❌ 坑 1:CLAUDE.md 写得跟流水账一样”

「我是产品经理,5 年经验,平时用 Notion 多,喜欢喝咖啡,不喜欢加班…」

没用。AI 不在乎你喝什么咖啡。只写「能影响它工作的规则」——文件路径、风格偏好、技术栈选择、避坑清单。其他个人信息全删。

❌ 坑 2:把 CLAUDE.md 写成「写给人看的设计文档」

Section titled “❌ 坑 2:把 CLAUDE.md 写成「写给人看的设计文档」”

「## 架构设计 本系统采用 MVC 模式,前端用 React + TypeScript,后端用 Python FastAPI…」

没用。CLAUDE.md 不是给团队看的文档,是给 AI 看的操作手册。把这种「设计文档」放在 README.md 或者 docs/ 目录,不要塞进 CLAUDE.md。

❌ 坑 3:CLAUDE.md 越写越长(超过 500 行)

Section titled “❌ 坑 3:CLAUDE.md 越写越长(超过 500 行)”

CLAUDE.md 每次启动都会被全文加载进 context——越长越烧钱、越占记忆。

新手第一年,CLAUDE.md 控制在 100-200 行以内。超过了:

  • 把通用规则放家目录 ~/.claude/CLAUDE.md(全局共享)
  • 把模块规则放到对应的子目录 CLAUDE.md
  • 把过时的规则删掉,不要囤

精简的 CLAUDE.md > 臃肿的 CLAUDE.md。

对着空白文件手写有点难?进到项目目录、打开 Claude Code,输入:

/init

它会先看一遍你的项目(代码、构建和测试命令、目录结构),自动生成一份初始的 CLAUDE.md;项目里已经有 CLAUDE.md 的话,它会给出修改建议,不会直接覆盖。生成之后,再按上面 5 条原则删改:删掉它自己看代码就能知道的,补上只有你知道的偏好和坑。改完输入 /context,在 Memory files 那一栏确认它已经加载。

读完这篇你应该理解 CLAUDE.md 的位置、写法、维护节奏。如果你今天就要写一份:手上有项目的,进项目目录跑一次 /init,再按本文的原则删改;还没有具体项目的,先写家目录的全局 CLAUDE.md(50 行内),等遇到第一个具体项目再加项目级的。

接下来这两篇:

→ 上下文窗口怎么算的:会忘记前面说的吗 —— CLAUDE.md 写多了会占 context,这一篇讲清楚怎么不爆

→ 一次说错可以撤回:checkpoint 用法 —— Claude 改坏了怎么一键回滚