记忆系统 Memory
记忆系统 Memory
Section titled “记忆系统 Memory”如果说上下文窗口是 Claude 的「短期记忆」,那 CLAUDE.md 就是它的「长期记忆」。
打个比方:你招了个实习生,每天换一个工位。他记不住昨天你们约定了什么,除非你把规矩写在一张便签上、贴在他每天必看的墙上。CLAUDE.md 就是那张便签——每次会话开始,Claude 都会自动读它,不用你每次重复说。
四级记忆体系
Section titled “四级记忆体系”Claude Code 的记忆不是一个大杂烩文件,而是四层金字塔,从全局到局部层层覆盖。理解这四层,才能把规矩放对地方。
| 层级 | 文件位置 | 作用域 | 谁来维护 |
|---|---|---|---|
| 企业级 | /Library/Application Support/ClaudeCode/CLAUDE.md(macOS) |
全公司所有项目 | IT / 安全团队 |
| 用户级 | ~/.claude/CLAUDE.md |
当前用户的所有项目 | 你自己 |
| 项目级 | ./CLAUDE.md 或 ./.claude/CLAUDE.md |
当前项目(随仓库走) | 团队共享 |
| 本地级 | ./CLAUDE.local.md |
当前项目、当前机器 | ⚠️ 已弃用 |
讲个小故事说明它们的用处:
- 企业级写「所有提交必须走内部安全扫描」——全公司通用,谁也别想绕。
- 用户级写「我偏好中文回复、回答要简洁」——你自己的习惯,跨项目生效。
- 项目级写「本项目用 pnpm 而非 npm、测试跑 vitest」——团队共享,提交进 git 一起走。
- 本地级曾经用来写「我自己机器上的特殊路径」,但官方已标记为弃用(deprecated),现在推荐用
.claude/settings.local.json来放本地私有配置。
会话启动时,Claude 会从上到下依次读取这四层,全部内容拼起来塞进上下文。所以企业级 + 用户级 + 项目级的内容会一起生效。
@import:把记忆拆开复用
Section titled “@import:把记忆拆开复用”当 CLAUDE.md 写得越来越长,一个问题出现了:它每次都进上下文,吃 token。而且团队规矩和个人习惯混在一个文件里,乱。
@import 语法解决这个问题。你可以在 CLAUDE.md 里引用其它文件:
# 项目规范
@docs/conventions/coding-style.md@docs/conventions/testing.md
@~/.claude/personal-preferences.mdClaude 读到 @ 开头的路径时,会把那个文件的内容也读进来。好处是:
- 拆分管理:把大文件拆成多个小文件,各管各的。
- 跨项目复用:用户级习惯写一次,多个项目
@import进来。 - 按需精简:不常用的内容拆出去,主文件保持精炼。
# 快捷方式:一句话加进记忆
Section titled “# 快捷方式:一句话加进记忆”写 CLAUDE.md 不用每次打开编辑器。在对话里,以 # 开头打一句话,Claude 会问你「这条规矩存到哪个文件」,然后自动追加进去。
> # 永远不要直接修改 migrations 目录下已发布的迁移文件存到哪个文件?> 项目(./CLAUDE.md)已添加。这个快捷方式让「边干边立规矩」变得很顺手。你不用停下来去编辑文件,说完一句话它就记下了。
/init:一键生成项目记忆
Section titled “/init:一键生成项目记忆”接手一个新项目,不知道该往 CLAUDE.md 里写什么?用 /init:
/initClaude 会自动扫描项目——读 package.json、看目录结构、读关键配置文件——然后生成一份初始的 CLAUDE.md,包含:
- 项目用什么技术栈、什么包管理器
- 怎么跑测试、怎么构建
- 代码风格的初步判断
这不是终点,而是起点。生成的文件你可以再手动润色。新项目的第一天,/init 跑一遍,规矩就有了雏形。
/memory:随时编辑记忆
Section titled “/memory:随时编辑记忆”/memory 命令会用你的默认编辑器打开 CLAUDE.md(通常按层级打开多个文件让你选)。比 # 快捷方式适合做大改动——比如重写整个「代码规范」段落。
/memoryauto memory:自动记忆
Section titled “auto memory:自动记忆”除了你手写的 CLAUDE.md,Claude Code 还有「自动记忆」能力。在交互过程中,Claude 会判断哪些信息值得长期记住,并询问你是否要存进记忆文件。
比如你纠正它两次「这个项目用 tab 不用空格」,它可能主动提议:「要不要把『用 tab 缩进』加进项目记忆?」你说好,它就写进去。下次开新会话,这条规矩就在了。
这是从「你手写规章」进化到「Claude 帮你沉淀规章」的一步。
写什么、不写什么
Section titled “写什么、不写什么”CLAUDE.md 是「贴在墙上的规章」,但不是什么都该往上贴。一个原则:写稳定的、反复出现的规矩,不写一次性的需求。
| ✅ 该写 | ❌ 不该写 |
|---|---|
| 代码风格、技术栈约定 | 「这次帮我修一下 login 页的 bug」 |
| 测试 / 构建命令 | 具体的 API 密钥、密码 |
| 不可碰的目录 | 临时的偏好(比如「今天先不写测试」) |
| 提交信息规范 | 大段的具体业务逻辑(拆到文档里 @import) |
还有一个关键认知:CLAUDE.md 是建议性的,不是强制性的。Claude 会参考它,但不保证 100% 照做——就像墙上的规章,员工可能违反。如果你有绝对不能违反的规则(比如「永远不能 force push」),那不该写 CLAUDE.md,而该写 Hooks。Hooks 是「不可贿赂的门卫」,100% 执行。
一个 CLAUDE.md 模板
Section titled “一个 CLAUDE.md 模板”# 项目:电商后台
## 技术栈- 前端:React 18 + TypeScript + Vite- 后端:NestJS + Prisma- 测试:Vitest- 包管理:pnpm(不要用 npm)
## 命令- 测试:pnpm test- 单文件测试:pnpm test path/to/file- 构建:pnpm build- 代码检查:pnpm lint
## 规则- TypeScript strict 模式,禁止 any- 新函数必须带测试- 不修改已发布的 Prisma migration- 提交信息走 conventional commits
## 结构- /src/modules 按业务模块组织- /generated 是自动生成,不要手改CLAUDE.md 是贴在墙上的规章——四级分层管好作用域,@import 拆分复用,#随手加,/init 一键生成。但记住它是建议性的,硬规则要交给 Hooks。
下一站,去 斜杠命令 Commands 看看怎么把反复打的指令变成一键快捷。🚀