Claude Code 的自动记忆按项目目录存。在 A 目录让它记住的事,换到 B 目录它就不知道了。这篇讲它存在哪、分几类、怎么让一条偏好在所有项目里生效。
一、Claude Code 的两套持久化机制
Claude Code 有两套独立的「记忆」:
| CLAUDE.md | Auto Memory(自动记忆) | |
|---|---|---|
| 谁来写 | 你自己写 | Claude 自动写 |
| 存什么 | 指令、规则、约定 | Claude 在协作中学到的知识 |
| 加载方式 | 每次会话全量加载 | 仅加载 MEMORY.md 前 200 行,详细内容按需读取 |
| 典型内容 | "用 2 空格缩进"、"测试用 vitest" | "用户是前端工程师,偏好 TypeScript" |
二、核心机制:按项目目录隔离
记忆存在哪?
所有自动记忆存储在 ~/.claude/projects/ 目录下,每个项目对应一个独立的子目录:
~/.claude/projects/
├── -home-ubuntu-workspace/ # /home/ubuntu/workspace 的记忆
│ └── memory/
│ ├── MEMORY.md # 索引文件
│ ├── user_profile.md # 用户画像
│ └── project_xxx.md # 项目信息
├── -home-ubuntu-my-app/ # /home/ubuntu/my-app 的记忆
│ └── memory/
│ └── MEMORY.md
└── -home-ubuntu-another-project/ # 另一个项目
└── memory/
└── MEMORY.md
目录命名规则:把项目的绝对路径里的 / 换成 -。输入一个路径试试:
~/.claude/projects/-Users-me-my-app/memory/MEMORY.md- 你在项目 A 里告诉 Claude 的偏好,在项目 B 里 Claude 完全不知道
/resume恢复会话也是项目隔离的——只能恢复当前目录下的历史会话- 同一个 git 仓库的不同 worktree 共享同一份记忆(因为路径归属同一个 repo)
三、Auto Memory 的四种类型
Claude 会自动将学到的信息分为四类:
1. user(用户画像)
记录你是谁、擅长什么、怎么协作效率最高。
---
name: 用户画像
description: 前端全栈工程师,Node+TS 技术栈
type: user
---
前端全栈工程师,熟悉 Node.js + TypeScript 技术栈...
作用:Claude 会根据你的背景调整回答深度。对资深工程师不会解释基础概念,对新手会多给上下文。
2. feedback(反馈偏好)
你纠正过 Claude 的行为,或者确认过某个做法是对的。
---
name: wrangler 必须加 --remote
description: wrangler R2 命令必须加 --remote,因为本地 GLIBC 版本问题
type: feedback
---
wrangler R2 操作必须加 --remote 参数。
**Why:** 本机 GLIBC 版本低,本地模拟会报错。
**How to apply:** 所有 wrangler r2 相关命令都要加 --remote。
作用:同样的坑不踩第二次。这是最有价值的记忆类型。
3. project(项目上下文)
当前项目的背景、目标、进展。
---
name: CoffeesMap V2 迁移
description: V2 进行中,Supabase 数据迁移 + R2 图片迁移已完成
type: project
---
CoffeesMap V2 正在进行中...
作用:Claude 能理解你当前在做什么,给出更贴合上下文的建议。
4. reference(外部引用)
外部系统的位置和用途。
---
name: Cloudflare 账号信息
description: Cloudflare R2 bucket、API token 的位置
type: reference
---
R2 bucket 名称: xxx, API token 在 ...
作用:Claude 知道去哪里找信息,不用每次都问你。
四、MEMORY.md:记忆的索引
MEMORY.md 是每个项目记忆目录下的索引文件,每次会话启动时自动加载前 200 行。它只包含指向详细记忆文件的链接:
# Memory Index
- [user_profile.md](user_profile.md) — 前端全栈工程师,Node+TS
- [feedback_wrangler.md](feedback_wrangler.md) — wrangler 命令必须加 --remote
- [project_coffeesmap.md](project_coffeesmap.md) — CoffeesMap V2 迁移进展
注意:超过 200 行的内容会被截断,所以要保持索引简洁。详细内容放在各个记忆文件里,Claude 会按需读取。
五、/resume 也是隔离的
/resume 命令用于恢复之前的会话,它默认只显示当前项目目录下的历史会话。
快捷键扩展范围
在 /resume 的会话选择器中:
Ctrl+A:显示本机所有项目的会话Ctrl+W:显示同一仓库所有 worktree 的会话Ctrl+B:只显示当前 git 分支的会话Space:预览会话内容
命令行用法
claude --continue # 继续当前目录的最近一次会话
claude --resume # 打开选择器
claude --resume "会话名" # 按名称恢复(搜索当前仓库及其 worktree)
六、CLAUDE.md 的层级体系
CLAUDE.md 也有作用域,但它的层级更丰富:
组织级策略(强制执行,不可跳过)
└── 用户级:~/.claude/CLAUDE.md(所有项目生效)
└── 项目级:./CLAUDE.md 或 ./.claude/CLAUDE.md(当前项目)
└── 本地级:./CLAUDE.local.md(个人覆盖,加入 .gitignore)
└── 子目录级:子目录下的 CLAUDE.md(按需加载)
实用建议:
- 团队共享的规则放
./CLAUDE.md,提交到 git - 个人偏好放
./CLAUDE.local.md,加入.gitignore - 全局个人偏好放
~/.claude/CLAUDE.md
七、实战建议
1. 让记忆跨项目生效
如果你希望某些偏好在所有项目中都生效(比如"我是 TypeScript 开发者,偏好函数式风格"),把它写进 ~/.claude/CLAUDE.md,而不是依赖 Auto Memory。
2. 定期审查记忆
运行 /memory 命令可以查看当前加载的所有记忆文件,选中即可编辑。建议定期清理过时的记忆。
3. 主动让 Claude 记住关键信息
当你发现某个知识点未来会反复用到,直接说"记住这个",Claude 会立即保存。比如:
- "记住:这个项目的部署用 GitHub Actions,触发条件是 push 到 main"
- "记住:数据库连接串在 Vault 里,key 是 prod/db-url"
4. 切换目录前想清楚
如果你的工作跨多个目录,记得:每个目录的 Claude 是「独立的」。在一个目录里建立的上下文,不会自动带到另一个目录。
5. 善用 /resume 的快捷键
忘了在哪个目录聊过?用 Ctrl+A 显示所有项目的会话历史,可以快速定位。
八、总结
| 机制 | 作用域 | 谁写的 | 加载时机 |
|---|---|---|---|
| CLAUDE.md | 组织/用户/项目/子目录 | 你 | 每次会话启动 |
| Auto Memory | 项目目录 | Claude | MEMORY.md 前 200 行启动加载,详细文件按需 |
| /resume 会话 | 项目目录(可扩展) | 系统 | 手动恢复 |
| Checkpoints | 当前会话 | 系统 | Esc×2 回退 |