02 · 记忆的三层体系

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.md

auto-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 了

用记忆前三道检验

  1. 引用具体路径 / 函数名 → ls / grep 先确认还在
  2. 描述"当时的状态"(版本、人数、业务规则)→ 去读代码 / git log
  3. 用户问"最近 / 现在" → 别靠记忆,去看现状

一条没验证的记忆不是事实,只是线索。

相关命令:#/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
修改 / 整理/memoryvim 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/不在 repoauto-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;其余都留在对话。


← 01 · CLAUDE.md 怎么写 | 目录 | 03 · Skill 什么时候该做、怎么做 →