03 · 怎么记住你的习惯
上一篇我们聊了上下文窗口——一张很大但会清空的桌子。翔宇当时的第一个念头就是:那每次启动 Claude Code,它岂不是什么都不记得?后来发现 Anthrop

上一篇我们聊了上下文窗口——一张很大但会清空的桌子。翔宇当时的第一个念头就是:那每次启动 Claude Code,它岂不是什么都不记得?后来发现 Anthropic 给出的方案比想象中精妙——两种记忆 + 四层架构,把「每天都是第一天」这个问题彻底解决了。——翔宇
要点速览
- 你将理解 AI 为什么需要两种截然不同的记忆机制
- 你将理解 CLAUDE.md 和上下文各自解决什么问题
- 你将理解四层记忆架构的设计逻辑
- 你将理解 Auto Memory 的四种类型以及它的定位
1. 一个有趣的问题
假设你有一个超级聪明的助手。什么都会,反应飞快,解决问题一流。
但每天早上来上班,他不记得昨天发生过什么。你得重新告诉他:项目用的是 Next.js,数据库是 PostgreSQL,代码风格遵循这套规范,构建命令是这个……
第一天你觉得还行。第二天开始烦了。第三天你想辞退他。
现在换个设定。同样这个助手,但桌上放着一本你写好的手册——《新员工必读》。每天来上班先翻一遍,五分钟后进入状态。你再也不需要重复解释任何事。
这就是今天要一起探索的问题:Claude Code 怎么解决「每天都是第一天」?
2. 从一种记忆到两种记忆
上一篇讲了上下文窗口——Claude 在一次会话中能同时看到的信息总量。关键词是「一次会话」。会话结束,上下文清空。
这像人的工作记忆。你现在读这篇文章,脑子里同时装着前几段的内容,这就是工作记忆在运转。但合上文章去做别的事,过几天回来,很多细节已经忘了。
如果 AI 只有工作记忆会怎样?每次启动 Claude Code,它对你的项目一无所知。你得反复解释技术栈、构建命令、代码规范、架构决策……这些解释本身还要占上下文空间,挤掉了本来可以用来做正事的位置。
所以 Claude Code 有两种记忆,各管各的:
上下文 = 工作记忆。 一次会话内有效,能同时处理大量信息,会话结束就没了。上一篇已经理解了这个。
CLAUDE.md = 长期记忆。 写在文件里,永久保存,每次启动自动加载。不管你关机几天,再启动它还在。
🧠 底层逻辑 这两种记忆解决的是完全不同的问题。工作记忆解决「这次对话需要看什么」,长期记忆解决「每次对话都需要知道什么」。你不会把今天中午吃了什么写进笔记本,也不会每天重新记一遍自己家的地址。不同的信息,天然适合不同的记忆方式。
3. CLAUDE.md——你写给 AI 的「入职手册」
CLAUDE.md 就是那本放在桌上的手册。一个普通的 Markdown 文件,任何文本编辑器都能打开。
每次 Claude Code 启动,它做的第一件事就是读这个文件。读完之后,文件内容变成这次会话的背景信息——Claude 回答你的每一个问题时,都「知道」手册里写的东西。
技术上说,CLAUDE.md 的内容被注入到了系统提示里。你不需要理解系统提示是什么,只需要知道:写在 CLAUDE.md 里的东西,Claude 每次都会看到。
那应该写什么?想象你要给一个聪明但对你的项目一无所知的新同事写一份备忘录。你不会写公司的全部历史,不会贴 500 行源代码,也不会把所有制度从头到尾抄一遍。你只会写他上班第一天最需要知道的那些事。
具体来说,一份好的 CLAUDE.md 通常包含三类信息:
这是什么(WHAT)。 项目的一句话介绍、技术栈、核心目录结构。
为什么这样设计(WHY)。 关键的架构决策——比如「选 Next.js 是因为需要 SSR」。这类信息 Claude 从代码里看不出来,必须你告诉它。
怎么操作(HOW)。 构建命令、测试命令、部署流程。
🔑 关键点 CLAUDE.md 有个行数预算:官方建议 200 行以内。文件越长,消耗的上下文越多,Claude 对指令的遵循度也会下降。内容确实很多时,可以用 imports 引用外部文件,或者拆到
.claude/rules/目录下。
4. 一个新问题浮现了
如果记忆系统只有一个 CLAUDE.md,你很快会碰到一个具体的麻烦:个人偏好和项目规范混在了一起。
你喜欢中文回复——这是个人偏好,跟项目无关。项目用 TypeScript——这是项目规范,跟你个人无关。
在多个项目之间切换时,个人偏好每个项目都要写一遍?团队有多个人时,每个人的偏好都要写进项目的 CLAUDE.md?
想一想:如果让你来设计,你会怎么拆?
5. 四层架构——每一层各管各的
Anthropic 的方案是分四层:
第一层:企业级。 系统管理员定的,全公司统一执行。比如「所有代码不允许包含硬编码的 API 密钥」。优先级最高,任何人都无法覆盖。个人用户可以忽略这一层。
第二层:用户级。 你的个人偏好,存在 ~/.claude/CLAUDE.md。比如「用中文回复」「代码注释用英文」。跨项目生效——不管在哪个项目里启动 Claude Code,它都知道你的偏好。
第三层:项目级。 项目根目录的 CLAUDE.md。比如「这个项目用 TypeScript + Next.js」「构建命令是 pnpm build」。只在这个项目里生效。
第四层:规则级。 .claude/rules/ 目录下的文件,支持按路径匹配。比如你可以设一条规则:只有当 Claude 编辑 src/api/ 目录下的文件时,才加载「所有 API 必须有错误处理」这条规范。最精细的一层。
🎨 打个比方 四层架构像穿衣服。公司要求穿工装(企业级)→ 你个人偏好穿白衬衫(用户级)→ 今天的项目要求戴安全帽(项目级)→ 进特定区域还要加护目镜(规则级)。每一层各管各的,互不冲突。
这四层从高到低加载,后面的可以覆盖前面的(企业级除外)。日常使用中,你只需要关注两个文件:
~/.claude/CLAUDE.md—— 你的个人偏好- 项目根目录的
CLAUDE.md—— 项目规范
到这里,手册系统已经很完整了。但还有一类信息,手册装不下。
6. AI 需要「自己记笔记」
CLAUDE.md 解决了一个问题:你把规则写下来,Claude 每次启动都能看到。
但工作中还有一些东西不太适合写进正式手册。
比如你纠正了 Claude 一次:「测试不要 mock 数据库,用真实数据库。」这条信息很有价值——下次写测试时应该记住。但它不是一条「项目规范」,不太适合写进 CLAUDE.md。
再比如 Claude 在帮你调试时发现,某类错误的根因总是缓存没清。这是一条经验教训,对未来有用,但你不会主动写进手册。
这就是 Auto Memory 的角色。
💬 通俗讲 CLAUDE.md 是你写的「员工手册」,Auto Memory 是员工自己带的「工作笔记本」。手册写的是公司规章,笔记本记的是工作中积累的经验教训。你不需要告诉他什么时候该记——他自己判断。
Auto Memory 是 Claude Code 的自动笔记系统。你什么都不用做——Claude 在对话过程中会自动识别哪些信息值得记住,然后分类存储到持久化文件里。下次启动新会话时,这些笔记自动可用。
7. 四种笔记类型
Claude 不会把你说的每句话都记下来。它只记「对未来有用的经验」——就像你不会记住今天午饭吃了什么,但会记住「公司楼下那家店很难吃」。
它把经验分成四类:
a. user——关于你是谁
Claude 了解到你的角色、技能背景、工作偏好。比如「用户是后端工程师,熟悉 Go 但刚接触 React」。有了这条记忆,下次它解释前端概念时会自动用后端类比,而不是假设你有前端基础。
b. feedback——你的纠正
这是最重要的类型。你说「不要这样做」「以后都用这种方式」,Claude 自动记下来。比如你说「测试不要 mock 数据库」,下次它写测试时就直接用真实数据库,不需要再提醒。
如果你发现 Claude 反复犯同一个错误——很可能是缺少对应的 feedback 记忆。反过来,你纠正它的每一次,都在帮它变得更好。
c. project——项目的动态信息
项目的进展、截止日期、阶段性决策。比如「3 月 5 日开始合并冻结,移动端要发版」。这类信息有时效性——冻结结束后这条记忆就过期了。
d. reference——外部资源的位置
某个系统在哪里、某份文档在哪里找。比如「Pipeline 相关的 Bug 在 Linear 项目 INGEST 里跟踪」。帮助 Claude 在需要时知道去哪查信息。
🔍 深入一步 四种类型的设计其实对应了四种不同的「保质期」:user 几乎不变(你的背景不会天天换),feedback 长期有效(偏好相对稳定),project 有时效(阶段性的),reference 需要定期更新(外部资源会迁移)。理解保质期,就知道哪些记忆最终会过期需要清理。
8. 笔记存在哪、怎么加载
每个项目有自己的记忆目录:~/.claude/projects/<项目标识>/memory/。里面有一个索引文件 MEMORY.md 和若干单独的记忆文件。
MEMORY.md 是「目录页」——只存每条记忆的标题和简短描述,不存具体内容。具体内容在各自的文件里。
这里有一个重要的机制:MEMORY.md 的前 200 行在每次会话启动时自动加载到上下文。 超过 200 行的部分被截断。
这意味着 MEMORY.md 要保持精简——只放指针和一句话描述,不要把具体内容直接写在里面。
🧠 底层逻辑 为什么限制 200 行?因为 Auto Memory 的内容也要占上下文空间。如果所有记忆在启动时全量加载,相当于桌子还没开始工作就被一堆笔记本铺满了。200 行是一个平衡点——足够装下最重要的经验索引,又不过多侵占工作空间。
9. 什么信息放哪
现在两套记忆系统都清楚了。判断标准很简单:这条信息是「规则」还是「经验」?
规则——必须遵守的、每次都需要的——放 CLAUDE.md。比如技术栈声明、构建命令、代码规范、架构约定。
经验——有用但非强制的、在工作中自然积累的——让 Auto Memory 自己记。比如你的纠正反馈、调试中发现的规律、项目的临时状态。
还有第三类:Claude 随时能从代码里直接看到的——不用存。文件结构、函数签名、Git 历史——这些信息就在项目里,Claude 需要时自己去读就行。
⚡ 速记 每次都需要 → CLAUDE.md。工作中发现的 → Auto Memory。代码里有的 → 不存。
有些人会把调试经验、个人偏好这些「软信息」也写进 CLAUDE.md。这样做可以,但会浪费 CLAUDE.md 有限的行数预算。这些信息更适合交给 Auto Memory——Claude 纠正几次后会自动记住,你不需要手动维护。
10. 完整的画面
把两篇的内容串起来,Claude Code 的完整信息架构是这样的:
会话开始时,Claude 自动加载三样东西:系统提示(内置的,你看不到)、CLAUDE.md(你写的规则手册)、MEMORY.md 前 200 行(它自己记的经验索引)。这些是「底色」——每次对话的起点。
会话进行中,你和 Claude 的交互、读取的文件、执行的命令输出——这些都进入上下文窗口(工作记忆)。同时 Claude 在后台识别值得记忆的信息,自动存入 Auto Memory。
会话结束时,上下文清空——工作记忆消失。但 CLAUDE.md 和 Auto Memory 里的内容完好无损。下次启动,底色还在。
🎯 一句话理解 Claude Code 的记忆系统 = 你写的规则(CLAUDE.md)+ 它自己记的经验(Auto Memory)+ 当前会话的工作台(上下文窗口)。三者各司其职,缺一不可。

11. 你真的懂了吗
这篇拆了一个概念:记忆系统。
费曼的检验时间:
- 有人说「Claude Code 记忆力很好,什么都能记住」。你能解释为什么这个说法不准确吗?它有几种「记忆」,各自的特点是什么?
- CLAUDE.md 为什么建议控制在 200 行以内?超过会怎样?背后的原理是什么?
- Auto Memory 的 feedback 类型为什么被说是「最重要的」?你能举一个场景说明它解决了什么问题吗?
- 假设你要给一个新同事解释「MEMORY.md 前 200 行自动加载」这个设计,你会怎么解释它的合理性?
这篇在概念网络中的位置
到目前为止,三个概念的关系:
位置(第 1 篇)→ AI 住在你电脑里,所以能直接看你的文件。 上下文(第 2 篇)→ 它通过上下文窗口看文件,一张很大但有限的桌子。 记忆(本篇)→ 桌子会清空,但 CLAUDE.md 和 Auto Memory 让它每次启动都不用从零开始。
你知道了 Claude 怎么「看」你的项目、怎么「记住」你的规则。但你和它说话的方式,直接决定了它能不能准确理解你的意图。→ 下一篇「对话」