用过 Claude Code 的人大概都有这个体验:关掉会话,第二天回来,Claude 从零开始。你得重新交代项目细节、编码偏好、架构决策,才能回到昨天的进度。
Anthropic 现在推出了 Claude Code 的自动记忆功能(auto-memory),目标很简单:让会话之间的衔接更顺畅。Claude 会在你工作的过程中,自动记录有用的上下文——构建命令、编码偏好、架构选择,甚至你们一起解决过的疑难 bug。
下次打开新会话,这些上下文已经在那里了。你可以从上次停下的地方继续,而不是从头来过。
大多数 Claude Code 用户已经熟悉 CLAUDE.md——用来给 Claude 写指令的文件。自动记忆在此基础上新增了一个文件:MEMORY.md。和 CLAUDE.md 不同,这个文件由 Claude 自己创建和更新,相当于一个跨会话的持续笔记本。
本文将详细介绍自动记忆的工作原理、CLAUDE.md 与 MEMORY.md 的区别、实际测试结果,以及如何控制这个功能。
1. 自动记忆的工作原理
更新 Claude Code 后,自动记忆默认开启,无需安装或配置。在你工作的过程中,Claude 会默默观察并记录笔记,自行决定哪些信息值得保存到下次会话。
-
• 项目模式:构建命令、测试流程、代码库组织方式 -
• 调试经验:疑难问题的解决方案和错误根因 -
• 架构笔记:重要文件、模块关系、核心抽象 -
• 你的偏好:沟通风格、工作流习惯、工具选择
关键在于,这一切不依赖手动输入。Claude 自己判断什么重要,自动记下来。
记忆存储在哪里?
每个项目有自己的记忆目录,存储在:
~/.claude/projects//memory/ 路径基于 Git 仓库根目录,同一仓库内的所有子目录共享同一个记忆位置。如果使用 Git worktree,每个 worktree 有独立的记忆目录。 目录结构通常是这样的:
~/.claude/projects/<project>/memory/
├── MEMORY.md # 主索引,每次会话开始时自动加载
├── debugging.md # 调试历史和常见问题笔记
└── ... # Claude 按需创建的其他主题文件
200 行限制
一个重要细节:新会话启动时,Claude 只会将 MEMORY.md 的前 200 行加载到系统提示中。
当 MEMORY.md 变得太长时,Claude 会把详细笔记拆分到独立的主题文件(如 debugging.md 或 api-conventions.md),保持主文件简短实用。这些额外的主题文件不会在启动时加载,Claude 只在需要时按需读取。
工作流程是这样的:
-
• 新会话启动,加载 MEMORY.md 的前 200 行 -
• Claude 需要某段调试历史,按需读取 debugging.md -
• Claude 学到新东西,更新 MEMORY.md 或某个主题文件
值得注意的是,这不是后台进程——你可以在会话中实时看到 Claude 读写记忆目录。
2. CLAUDE.md 和 MEMORY.md 有什么区别?
很多开发者会问:既然已经有 CLAUDE.md 了,为什么还需要 MEMORY.md?
CLAUDE.md 一直是 Claude Code 的一部分,是你写指令、规则和偏好的地方。
MEMORY.md 不一样。你不需要自己写 MEMORY.md,Claude 会自动创建和更新它。
最简单的理解方式:CLAUDE.md 是你给 Claude 的指令,MEMORY.md 是 Claude 自己的笔记本。
在 MEMORY.md 中,Claude 会记录工作中学到的有用上下文:
-
• 你的偏好 -
• 反复出现的项目模式 -
• 哪些命令有效、哪些会失败 -
• 过去会话中的有用笔记
区别很简单:
-
• CLAUDE.md:你告诉 Claude 该怎么做 -
• MEMORY.md:Claude 给自己记笔记
两个文件配合使用,让 Claude 在会话开始时就有更好的上下文。一个告诉 Claude 你希望它怎么表现,另一个帮它记住关于你项目的已有认知。
记忆层级体系
Claude Code 不只依赖 CLAUDE.md 和 MEMORY.md,它实际上通过一个分层记忆系统工作。核心原则是:更具体的指令会覆盖更宽泛的指令。
项目级的 CLAUDE.md 优先于全局用户级记忆。自动记忆也在项目级别,意味着它的作用范围是你和你正在工作的特定项目。
还有一个实用细节:CLAUDE.local.md 会自动加入 .gitignore,适合存放私有的本地设置,比如沙箱 URL、本地测试笔记等不需要团队共享的内容。
会话启动时加载什么?
打开新的 Claude Code 会话时,Claude 会从多个层级加载上下文:
-
• 组织策略(如果有的话) -
• 项目级 CLAUDE.md(团队共享指令) -
• 个人 ~/.claude/CLAUDE.md 偏好 -
• MEMORY.md 的前 200 行(Claude 保存的笔记)
所以在你写第一条提示之前,Claude 已经对你的项目规范、个人偏好和之前会话的上下文有了基本了解。
3. 实战:自动记忆上手体验
第一步:更新 Claude Code
确保你使用的是支持自动记忆的版本:
claude update
然后检查版本号,需要 1.0.18 或更高:
claude --version
第二步:创建测试项目
创建一个测试项目并初始化 Git:
mkdir test-claude-memory && cd test-claude-memory
git init
初始化 Git 很重要,因为 Claude Code 依赖 Git 仓库根目录来确定记忆的存储位置。如果项目不是 Git 仓库,项目级记忆就无法正常工作。
然后在项目中启动 Claude Code:
claude
第三步:触发自动记忆
自动记忆不会因为你打开了会话就创建文件。Claude 需要和你一起做点事情,才会开始记笔记。
在会话中给 Claude 一个任务,比如:
Build a simple RAG pipeline with LangChain
完成后,运行 /memory 命令,你会看到自动记忆已开启,并有三个记忆选项:
-
• 选项 1:用户记忆 — 打开全局 ~/.claude/CLAUDE.md,这是你的个人偏好文件,跨所有项目生效 -
• 选项 2:项目记忆 — 打开当前项目的 CLAUDE.md,存放团队级别的上下文 -
• 选项 3:打开自动记忆文件夹 — 这是 Claude 管理的部分,包含 MEMORY.md 和各主题文件
第四步:开关自动记忆
输入 /memory 命令时,你会看到:
Auto-memory: on
你可以直接在这里切换开关,无需修改配置文件。选中 Auto-memory: on 这一行按回车,就会切换为 Auto-memory: off。
如果你要做一些不想让 Claude 记住的探索性工作,或者只是一次性会话,这是暂停记忆的最快方式。
第五步:冷启动测试
关闭 Claude Code,在同一项目中启动新会话,不提供任何上下文,直接问:
What do you know about this project?
Claude 会从 MEMORY.md 中读取之前的记忆,给出项目的详细概述。所有信息都是从上一次会话中自动保存的——这就是自动记忆的实际效果。
4. 控制自动记忆
自动记忆默认开启,大多数情况下这是合理的设置。但有些场景你可能需要关闭它。
单个项目关闭
在项目的设置文件中添加:
// .claude/settings.json
{
"autoMemoryEnabled": false
}
只影响当前项目,其他项目不受影响。
全局关闭
在用户级设置文件中添加:
// ~/.claude/settings.json
{
"autoMemoryEnabled": false
}
所有项目都会停用自动记忆。
CI 环境强制关闭
在 CI 流水线或其他自动化环境中,使用环境变量是最可靠的方式:
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 # 强制关闭
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=0 # 强制开启
这个环境变量会覆盖 /memory 开关和 settings.json 中的设置,确保自动化环境中 Claude 不会保存 CI 会话的笔记。
手动编辑记忆文件
记忆文件就是普通的 Markdown 文件,你随时可以打开编辑。
最方便的方式是在 Claude Code 中使用 /memory 命令,它会打开记忆文件选择器,让你直接跳转到系统编辑器中编辑。
你也可以从终端直接打开:
open ~/.claude/projects/<project>/memory/MEMORY.md
当你想删除过时的笔记、清理不再相关的条目,或者随着项目变化重新组织记忆时,这个功能很实用。


