Skip to content

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(关于你):你的技术背景、工作角色、偏好风格

markdown
用户是前端工程师,熟悉 React/TypeScript,后端知识一般。
前端问题直接给高级方案,后端问题需要更详细的解释。

feedback(行为反馈):你告诉过 Claude 应该怎么做、不该怎么做

markdown
不要在修 bug 时顺手重构周边代码。用户说过"只改我让你改的地方"。
原因:之前 Claude 改一个小 bug 时把整个文件都重写了,导致 diff 很难看。

project(项目信息):某个决策的背景、某段时间的工作进展

markdown
认证系统改用 session cookie(而非 JWT)是由合规要求驱动的,非技术偏好。
截止日期:2025-08-01。方案选择时以合规为第一优先级。

reference(外部资源):有用的外部系统地址和资源指针

markdown
设计稿在 Figma(链接见项目 README)。
Bug 追踪在 Linear,项目名 "WEBAPP"。

自动记忆

Claude 会在两种情况下主动写记忆:

  1. 你明确要求时:说"记住这个"、"以后都这样做"
  2. Claude 认为信息重要时:比如一个会影响后续工作方向的技术决策

自动写入的内容会以合适的类型保存。


手动管理记忆

查看当前生效的记忆

text
/memory

打开当前项目的 MEMORY.md 索引,看到所有记忆条目的列表和简短说明。

让 Claude 记住某件事

text
记住:这个项目用 Redux Toolkit,我们决定不引入 Zustand,原因是团队已经熟悉 Redux
text
以后回复我一律用中文,即使我用英文提问

让 Claude 忘掉某件事

text
忘掉关于 Webpack 配置的那条记忆,我们已经迁移到 Vite 了

Claude 会找到对应条目并删除或修改。

直接编辑记忆文件

记忆文件是普通 Markdown,可以直接用文本编辑器改:

bash
# 找到项目记忆目录
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 记住:

text
记住:我们选择用 Vitest 而不是 Jest,原因是 Vitest 对 ESM 的支持更好,
而这个项目全面使用 ES Modules

定期清理过时记忆

记忆会随时间积累,旧信息会产生干扰。每隔一段时间用 /memory 检查一下,把不再成立的条目让 Claude 删掉。

验证记忆是否真的生效

text
你现在有哪些关于这个项目的记忆?

Claude 会列出它当前持有的所有相关记忆,可以确认关键信息有没有被正确记录。


开始闯关

目标:让 Claude 记住一件事,然后验证它真的记住了。

第 1 步:告诉 Claude 一个你的偏好

输入:

text
记住:回复我的时候,如果有多种方案,先说你推荐哪个,再解释原因,不要一上来就把所有选项都列出来

第 2 步:查看记忆文件是否创建

text
/memory

确认新的记忆条目出现在列表里。

第 3 步:重启验证

Ctrl+D 退出,重新启动 Claude Code,然后问它:

text
你现在有哪些关于我的偏好的记忆?

确认它能说出你刚才记的那条内容。


通关检定

  • [ ] 能说出记忆系统和 CLAUDE.md 的分工差异
  • [ ] 知道四种记忆类型(user/feedback/project/reference)各适合记什么
  • [ ] 成功让 Claude 记住了一条内容
  • [ ] 用 /memory 查看到了刚才记住的条目
  • [ ] 重启后验证,Claude 仍然能"记得"那条内容

全部点亮就算通关 ✓


卡关了?翻车指南在这

说了"记住",但重启后 Claude 不知道这件事了

踩坑清单:① 确认 Claude 说"好的,我记住了"之后文件确实被创建了(用 ls ~/.claude/projects/<hash>/memory/ 确认);② 检查是否在错误的目录下启动了新会话。

记忆越积越多,开始互相冲突

记忆文件没有自动去重机制,时间一长可能出现冗余甚至矛盾的条目。定期用 /memory 检查,发现过时的就让 Claude 删掉或合并。

想删除某条记忆,但 Claude 找不到它

说话可以更具体:/memory 查看索引,找到对应条目的名称,然后说"删掉名叫 xxx 的那条记忆"。或者直接找到文件路径手动删除。


下一关

2.9 Hooks 系统 →

记忆帮 Claude 记住你的偏好,Hooks 则让 Claude 每次操作后自动触发你的脚本——格式化、通知、拦截危险命令,一条规则配好就不用再管了。

面向公开用户维护,内容基于 Claude Code 官方文档与真实使用经验整理