02 · 记忆的三层体系
位置决定命运。信息放错层,等于没放。
开场比喻
想象一家咨询公司的员工服务客户。员工要靠三层记忆才能干活:
| 层次 | 比喻 | 实际对应 |
|---|---|---|
| 公司规章 | 所有员工必须遵守 | CLAUDE.md(项目宪法) |
| 客户档案 | 员工对"这位客户"的长期认知 | auto-memory(跨会话记忆) |
| 今日工单 | 今天的具体问题、临时便签 | 对话上下文(本次会话) |
用错层次是最常见的翻车点——把个人偏好塞进 CLAUDE.md、把项目规则塞进 auto-memory,都是典型错误。
三层硬参数对比
| 层次 | 存放位置 | 生命周期 | 谁能看到 | 典型内容 |
|---|---|---|---|---|
| CLAUDE.md | 仓库内,入 git | 项目寿命 | 所有协作者 | 项目规则、约定、禁区 |
| auto-memory | ~/.claude/.../memory/ | 跨会话,本机 | 只有你账户的 Claude | 用户画像、个人偏好、项目背景 |
| 对话上下文 | 当前会话 | 本次对话 | 只有本次 Claude | 今天的任务、临时 debug |
三问判断法
拿到一条信息,问三个问题决定它的归宿:
① 下次会话还需要它吗?
├─ 否 → 什么都不用做,会话结束自然丢掉
└─ 是 ↓
② 是关于"项目"还是"我这个人"?
├─ 个人 → auto-memory
└─ 项目 ↓
③ 适合入 git 给团队看吗?
├─ 否(你个人对此项目的偏好)→ auto-memory
└─ 是 → CLAUDE.mdauto-memory 的四个子类型
auto-memory 不是大箱子,它有四种明确分类——错用分类也会降低未来的召回质量。
① user — 关于你是谁
你的角色、技术栈、知识边界。
前端开发者,Vue3 + Element Plus 主栈,React/Next.js 在学。不熟 Rust。价值:让 Claude 讲解时挑对类比方式("类似 Vue 的 computed")。
② feedback — 你教过 Claude 的协作方式
最重要也最易忽视的一类。
双向都要记:
- ✅ 纠正 → 记(防止再犯)
- ✅ 肯定 → 也要记(只记纠正会让 Claude 越来越畏手畏脚)
带 Why 的 feedback 比裸规则强 10 倍:
规则:文档用中文,代码 / 文件名保持英文
Why: 用户是中文母语,但项目开源,代码要面向国际
How: README / CLAUDE.md / 教学文档——中文;
*.ts / *.tsx / 路径 / CLI 命令——英文带 Why 的好处:边界场景 Claude 能自己判断。不带 Why,只能死记对号入座。
③ project — 非技术的项目背景
技术约定该进 CLAUDE.md。这里放 CLAUDE.md 不该装的东西——动机、人事、时间线、商业约束。
XX 项目目标用户在东亚,准备上线后投日本市场
Why: 影响地区优先级
How: 新增地区 / 选默认货币 / 做 SEO 时按 JP > TW > US 排代码里推不出来,但会影响决策。
④ reference — 外部系统坐标
不存内容,存"去哪找"。
汇率数据源:Bank of Japan 公开 API
Bug 跟踪:Linear 的 XXX project
设计稿:figma.com/file/xxx什么 不 该进 auto-memory
即使用户亲口说"记住",这些也别存:
| 不该存 | 为什么 |
|---|---|
| 代码模式、目录结构、文件路径 | 读代码就有,还会过时 |
| Git 历史、谁改了什么 | git log 是权威 |
| Debug 修复过程 | 修了在代码里,写进 commit message |
| 和 CLAUDE.md 重复的 | 双份维护,还会冲突 |
| 一次性任务的临时状态 | 留在对话 |
判断公式:跨会话 + 非冗余 + 不能从代码推导——三个都满足才存。
记忆的"保质期"
记忆是当时的快照,容易过期:
- 三个月前:"项目用 React 17" → 可能已升到 19
- 半年前:"bug 在 Linear APPRISE project" → 项目可能已迁移
- 去年:"团队用 Slack" → 今年可能换 Lark 了
用记忆前三道检验:
- 引用具体路径 / 函数名 →
ls/grep先确认还在 - 描述"当时的状态"(版本、人数、业务规则)→ 去读代码 / git log
- 用户问"最近 / 现在" → 别靠记忆,去看现状
一条没验证的记忆不是事实,只是线索。
相关命令:# 和 /memory
# 和 /memory 是 Claude Code 管理配置记忆的两个内建命令,主要操作对象是 CLAUDE.md;但 /memory 还额外提供了打开 auto-memory 文件夹的入口(见下文第三个选项)。
# 前缀:一行快速追加
输入行以 # 开头,Claude Code 会把后面的内容快速写进 CLAUDE.md:
# 这个项目只能用 pnpm,npm 会污染 lockfile回车后会弹选择:
| 选项 | 写到哪 |
|---|---|
| Project memory | 当前仓库的 CLAUDE.md(入 git) |
| Project memory (local) | 当前仓库的 CLAUDE.local.md(不入 git) |
| User memory | ~/.claude/CLAUDE.md(全局个人) |
适合:临时想起一条规则,想立刻固化。
/memory 命令:编辑器模式
列出所有活跃的 CLAUDE.md 文件,用 $EDITOR 打开编辑。
适合:删过时的、重组章节、批量改写。
此外 /memory 还有第三个选项:Open auto-memory folder——打开 auto-memory 实际存放的目录(~/.claude/projects/<path>/memory/),用于:
- Review 全量记忆
- 手动删除过时条目
- 跨项目搬家 / 备份
类比
| 动作 | 工具 | Shell 类比 |
|---|---|---|
| 追加一行 | # | echo "..." >> CLAUDE.md |
| 修改 / 整理 | /memory | vim CLAUDE.md |
| 看 auto-memory 原始文件 | /memory → 选项 3 | 打开 ~/.claude/.../memory/ |
入库与否
| 文件 / 目录 | 入 git 吗 | 原因 |
|---|---|---|
<repo>/CLAUDE.md | ✅ 入 | 项目宪法,团队共享 |
<repo>/CLAUDE.local.md | ❌ 不入(默认 gitignored) | 本机专用 |
<repo>/.claude/commands/ | ✅ 入(如果团队要用) | 项目专属 slash 命令 |
<repo>/.claude/skills/ | ✅ 入(如果团队要用) | 项目专属 skills |
<repo>/.claude/settings.json | ✅ 入 | 团队统一设置(权限、hook) |
<repo>/.claude/settings.local.json | ❌ 不入(默认 gitignored) | 本地覆盖 |
~/.claude/CLAUDE.md | 不在 repo | 跨项目个人宪法 |
~/.claude/projects/.../memory/ | 不在 repo | auto-memory,私人档案 |
一句话底线:
带
local字样的不入;~/.claude/下的不能入;其他按团队取舍。
反模式
① 把项目规则塞 auto-memory
"记住这个项目用 pnpm" → 应进 CLAUDE.md
② 把个人偏好写 CLAUDE.md
"我喜欢简洁回答" → 应进 auto-memory(团队看到会尴尬)
③ 把一次性 debug 存记忆
"上次这个 bug 是 xxx 导致的" → 留在对话,commit message 里写
④ 只记纠正不记肯定
Claude 越来越保守,最后什么都不敢做
⑤ 记忆囤积症
什么都存 → 重要的被噪声淹没 → 召回质量下降
⑥ 不带 Why 的 feedback
边界场景无法迁移
⑦ 盲信过期记忆
不验证就用 → 给出错信息
⑧ 在 CLAUDE.md 和 auto-memory 重复写同一条
双份维护成本,还会冲突
一句话总结
位置决定命运:信息放错层,等于没放。
放 CLAUDE.md 的要公开、稳定、项目范围;放 auto-memory 的要个人、跨会话、但不入 git;其余都留在对话。