Part 2 · 第 12 课,共 16 课
用 CLAUDE.md 为项目建立持久记忆
为智能体提供持久的项目记忆。
10 min
第 1 步 / 共 5 步 · 什么是 CLAUDE.md
每段 Claude Code 会话都从全新的上下文窗口开始——智能体并不记得你上一次的对话。CLAUDE.md 文件正是你跨会话传递知识的方式:它是一份用纯 Markdown 写成的持久指令文件,Claude 会在每段会话开始时读取它。
可以把它看作专为智能体写的项目“入职文档”。构建命令、各部分代码所在的位置、团队遵循的约定——任何你原本每次都要重新解释的内容,在这里写一次就够了。
第 2 步 / 共 5 步 · 用 /init 生成
你不必从零开始编写 CLAUDE.md。在 Claude Code 会话中运行:
/initClaude 会分析你的代码库,并生成一份起始的 CLAUDE.md,其中包含它能自行发现的构建命令、测试说明与约定。如果 CLAUDE.md 已经存在,/init 会给出改进建议,而不会覆盖它。
把生成的文件当作初稿。再用 Claude 无法推断出的内容来完善它——架构决策、“始终执行 X”的规则,以及一位新队友需要的背景信息。
第 3 步 / 共 5 步 · 文件存放在哪里
CLAUDE.md 可以存放在几个位置,每个位置作用域不同。Claude 会从你启动它的目录沿目录树向上查找,并加载找到的每一个文件,作用域从最广到最窄:
- 项目记忆——
./CLAUDE.md或./.claude/CLAUDE.md。团队共享,纳入版本控制。这是你最常用的一个。 - 用户记忆——
~/.claude/CLAUDE.md。你在所有项目中的个人偏好(仅你自己)。 - 本地记忆——
./CLAUDE.local.md。个人的、项目特定的笔记;请把它加入.gitignore,以免被提交。 - 托管策略(Managed policy)——由 IT 部署的组织级文件(例如 macOS 上的
/Library/Application Support/ClaudeCode/CLAUDE.md)。
越靠近你工作目录的文件越晚被读取,因此项目指令会叠加在用户指令之上。
第 4 步 / 共 5 步 · 该写什么(以及不该写什么)
目标是写入 Claude 在每段会话中都应记住的事实与约定——而不是分步骤的操作流程。好的条目具体且可验证:
- 构建与测试命令:“提交前运行
npm test。” - 约定:“使用 2 个空格缩进。”
- 项目结构:“API 处理器位于
src/api/handlers/。” - 这个仓库特有的“始终执行 X”规则。
应当省略的内容:
- 多步骤的操作流程或任务特定的工作流 → 改为制作一个 Skill,让它只在相关时加载。
- 只对代码库某一部分有意义的指令 → 改用
.claude/rules/中的路径限定规则。 - 含糊的指导,比如“把代码格式化得好看些”或“测试你的改动”——太模糊,难以可靠遵循。
让每个 CLAUDE.md 保持在 约 200 行以内:它在每段会话中都会被完整载入,臃肿的文件会消耗上下文,反而降低 Claude 的遵循程度。使用 Markdown 标题和要点,让智能体能像你一样快速浏览它。
第 5 步 / 共 5 步 · 之后用 /memory 编辑
随着工作推进,你会发现需要补充的内容——Claude 重复犯的某个错误,或你反复输入的某条纠正。要查看和编辑你的记忆文件,运行:
/memory/memory 会列出当前会话中加载的每一个 CLAUDE.md、CLAUDE.local.md 和规则文件,并允许你在编辑器中打开其中任意一个。(这也是确认某个文件确实被加载的最快方式——如果它不在列表里,Claude 就看不到它。)你也可以直接对 Claude 说*“把这条加到 CLAUDE.md 里”*,它会替你修改文件。
本节回顾
CLAUDE.md是持久的项目记忆——一份 Claude 在每段会话开始时读取的 Markdown 文件。/init从你的代码库生成起始文件;/memory列出并打开会话中加载的记忆文件。- 文件按作用域加载:项目(
./CLAUDE.md)、用户(~/.claude/CLAUDE.md)、本地(./CLAUDE.local.md)和托管策略。 - 写入事实与约定;把操作流程移到 Skill,把路径特定的规则移到
.claude/rules/。让它保持在约 200 行以内。
常见问题
如何在 Claude Code 中创建 CLAUDE.md?
在会话中运行 /init。Claude 会分析你的代码库,并写出一份起始的 CLAUDE.md,包含它能发现的构建命令、测试说明与约定。如果 CLAUDE.md 已经存在,/init 会给出改进建议而非覆盖它。你也可以手动创建该文件——它只是 Markdown。
CLAUDE.md 应该放在哪里?
对于团队共享、项目级的指令,放在 ./CLAUDE.md 或 ./.claude/CLAUDE.md 并提交它。对于跨所有项目的个人偏好,使用 ~/.claude/CLAUDE.md。对于私有、项目特定的笔记,使用 ./CLAUDE.local.md 并加入 .gitignore。Claude 会从你启动它的目录沿目录树向上加载所有这些文件。
CLAUDE.md 和 /memory 有什么区别?
CLAUDE.md 是文件;/memory 是查看和编辑它的命令。运行 /memory 会列出会话中加载的每一个 CLAUDE.md、CLAUDE.local.md 和规则文件,并在编辑器中打开其中任意一个——便于确认某个文件确实被加载。
CLAUDE.md 里不该写什么?
避免写入多步骤的操作流程和任务特定的工作流——把这些打包成一个 Skill,让它只在相关时加载。把只对代码库某一部分有意义的指令放进 .claude/rules/ 下的路径限定规则。也不要写含糊的指导,比如“把代码格式化得好看些”;具体、可验证的指令效果好得多。
为什么 Claude 不遵循我的 CLAUDE.md?
CLAUDE.md 是上下文,而非强制执行的配置,因此并不保证遵守——对于含糊或相互冲突的指令尤其如此。运行 /memory 确认文件已加载,把指令写得具体明确,并删除彼此矛盾的规则。如果某件事必须在固定时刻执行,请改用 Hook。