2.8 内存与记忆系统
预计耗时:12 分钟
本关任务简报
CLAUDE.md 需要你手动写和维护,它适合放稳定的项目说明。但还有一类信息不太一样:它是在对话过程中逐渐浮现的——某个技术决策的背景、你对某种回答方式的偏好、某个模块的特殊约定。
这类信息如果每次都要重新解释,太费时间。如果放进 CLAUDE.md,又太动态、太个人化,不适合提交进 Git。
记忆系统就是专门解决这件事的:让 Claude 在对话过程中把重要信息记下来,下次启动时自动带进来。
通关奖励:解锁以下技能
- 📁 理解记忆文件的存储结构和读取顺序
- 🏷️ 知道四种记忆类型各自适合记什么
- 💬 能用自然语言让 Claude 记住或忘掉某件事
- 🔍 能查看、验证和清理当前生效的记忆
开始前先检查装备
| 前置知识 | 说明 |
|---|---|
| 2.7 CLAUDE.md 配置 → | 理解 CLAUDE.md 的持久化原理——记忆系统是它的动态补充,两者各司其职 |
机制解析
记忆 vs CLAUDE.md:两种持久化的分工
| CLAUDE.md | 记忆系统 | |
|---|---|---|
| 谁来维护 | 你手动编辑 | Claude 主动或按你要求写入 |
| 内容性质 | 稳定的项目说明和约定 | 动态积累的知识和决策历史 |
| 适合写什么 | 技术栈、构建命令、团队规范 | 个人偏好、踩坑记录、临时决策背景 |
| 能进 Git 吗 | 推荐提交(根目录版本) | 不建议(个人配置) |
两者同时生效,互不替代。一条经验:写给团队看的放 CLAUDE.md,只跟你自己相关的放记忆系统。
文件存储位置
~/.claude/
├── CLAUDE.md ← 全局指令(手动维护)
└── projects/
└── <项目路径hash>/
└── memory/
├── MEMORY.md ← 记忆索引文件(Claude 自动维护)
└── *.md ← 各条记忆条目文件每条记忆是一个独立的 Markdown 文件,MEMORY.md 是索引,列出所有记忆的简短描述。
四种记忆类型
Claude 在写记忆时会给它打上类型标签,方便后续检索和管理:
user(关于你):你的技术背景、工作角色、偏好风格
用户是前端工程师,熟悉 React/TypeScript,后端知识一般。
前端问题直接给高级方案,后端问题需要更详细的解释。feedback(行为反馈):你告诉过 Claude 应该怎么做、不该怎么做
不要在修 bug 时顺手重构周边代码。用户说过"只改我让你改的地方"。
原因:之前 Claude 改一个小 bug 时把整个文件都重写了,导致 diff 很难看。project(项目信息):某个决策的背景、某段时间的工作进展
认证系统改用 session cookie(而非 JWT)是由合规要求驱动的,非技术偏好。
截止日期:2025-08-01。方案选择时以合规为第一优先级。reference(外部资源):有用的外部系统地址和资源指针
设计稿在 Figma(链接见项目 README)。
Bug 追踪在 Linear,项目名 "WEBAPP"。自动记忆
Claude 会在两种情况下主动写记忆:
- 你明确要求时:说"记住这个"、"以后都这样做"
- Claude 认为信息重要时:比如一个会影响后续工作方向的技术决策
自动写入的内容会以合适的类型保存。
手动管理记忆
查看当前生效的记忆:
/memory打开当前项目的 MEMORY.md 索引,看到所有记忆条目的列表和简短说明。
让 Claude 记住某件事:
记住:这个项目用 Redux Toolkit,我们决定不引入 Zustand,原因是团队已经熟悉 Redux以后回复我一律用中文,即使我用英文提问让 Claude 忘掉某件事:
忘掉关于 Webpack 配置的那条记忆,我们已经迁移到 Vite 了Claude 会找到对应条目并删除或修改。
直接编辑记忆文件:
记忆文件是普通 Markdown,可以直接用文本编辑器改:
# 找到项目记忆目录
ls ~/.claude/projects/
# 编辑某个记忆文件
code ~/.claude/projects/<hash>/memory/feedback_code_style.md记忆的读取顺序
每次启动时,按以下顺序叠加读取(都是拼接进上下文,不是互相覆盖;越靠后越接近你当前的工作环境):
全局 CLAUDE.md(~/.claude/CLAUDE.md)
↓
项目 CLAUDE.md(./CLAUDE.md)
↓
项目记忆文件(~/.claude/projects/<项目>/memory/*.md)
↓
当前对话上下文自动记忆是按仓库存的(同一个 git 仓库的所有 worktree、子目录共用一份),没有"全局记忆"这一层;跨项目通用的个人约定写进全局 CLAUDE.md。
值得养成的习惯
记录关键决策,趁热打铁
做了重要技术决定后立刻告诉 Claude 记住:
记住:我们选择用 Vitest 而不是 Jest,原因是 Vitest 对 ESM 的支持更好,
而这个项目全面使用 ES Modules定期清理过时记忆
记忆会随时间积累,旧信息会产生干扰。每隔一段时间用 /memory 检查一下,把不再成立的条目让 Claude 删掉。
验证记忆是否真的生效
你现在有哪些关于这个项目的记忆?Claude 会列出它当前持有的所有相关记忆,可以确认关键信息有没有被正确记录。
开始闯关
目标:让 Claude 记住一件事,然后验证它真的记住了。
第 1 步:告诉 Claude 一个你的偏好
输入:
记住:回复我的时候,如果有多种方案,先说你推荐哪个,再解释原因,不要一上来就把所有选项都列出来第 2 步:查看记忆文件是否创建
/memory确认新的记忆条目出现在列表里。
第 3 步:重启验证
用 Ctrl+D 退出,重新启动 Claude Code,然后问它:
你现在有哪些关于我的偏好的记忆?确认它能说出你刚才记的那条内容。
通关检定
- [ ] 能说出记忆系统和 CLAUDE.md 的分工差异
- [ ] 知道四种记忆类型(user/feedback/project/reference)各适合记什么
- [ ] 成功让 Claude 记住了一条内容
- [ ] 用
/memory查看到了刚才记住的条目 - [ ] 重启后验证,Claude 仍然能"记得"那条内容
全部点亮就算通关 ✓
卡关了?翻车指南在这
说了"记住",但重启后 Claude 不知道这件事了
踩坑清单:① 确认 Claude 说"好的,我记住了"之后文件确实被创建了(用 ls ~/.claude/projects/<hash>/memory/ 确认);② 检查是否在错误的目录下启动了新会话。
记忆越积越多,开始互相冲突
记忆文件没有自动去重机制,时间一长可能出现冗余甚至矛盾的条目。定期用 /memory 检查,发现过时的就让 Claude 删掉或合并。
想删除某条记忆,但 Claude 找不到它
说话可以更具体:/memory 查看索引,找到对应条目的名称,然后说"删掉名叫 xxx 的那条记忆"。或者直接找到文件路径手动删除。
下一关
记忆帮 Claude 记住你的偏好,Hooks 则让 Claude 每次操作后自动触发你的脚本——格式化、通知、拦截危险命令,一条规则配好就不用再管了。