Claude Code无感升级:你的AI助手,现在“懂你”又“记得你”!
您不再需要担心在 Claude Code 中丢失会话上下文 (session context)。全新的自动记忆 (auto-memory) 功能解决了工作流程中一个令人头疼的问题。如果您之前使用过 Claude Code,对此问题应该深有体会:关闭会话后第二天回来,Claude 就会从头开始。这通常意味着您需要重复输入相同的项目细节、偏好和决策,才能回到之前的状态。
Anthropic 现已为 Claude Code 推出了自动记忆功能,其目标很简单:让会话间的衔接更加顺畅。现在,Claude 可以在与您协作时构建并维护其专属记忆。在您工作时,它会默默地记录项目相关的有用上下文信息,例如构建命令、编码偏好、架构选择,甚至是您共同解决的疑难 bug。
当您开启新的会话时,这些上下文信息已然存在,因此您能够无缝地从上次中断的地方继续,无需从头开始。这项功能之所以特别引人注目,在于您无需手动管理它,Claude 会自主处理。
大多数 Claude Code 用户都已熟悉 CLAUDE.md,该文件用于向 Claude 提供指令。而自动记忆则通过一个名为 MEMORY.md 的新文件,引入了第二层机制。与 CLAUDE.md 不同,MEMORY.md 文件由 Claude 自行编写和更新,它在不同会话间充当一个持续更新的草稿本。
我基于一个真实项目对 Claude Code 的自动记忆功能进行了一项测试,旨在探究 Claude 会记住哪些信息、这些信息存储在何处,以及在重新开始新会话时其可靠性如何。在本文中,我将详细解释自动记忆的工作原理,深入剖析 CLAUDE.md 和 MEMORY.md 之间的异同,分享我的测试结果,并演示如何在必要时对该功能进行控制。

在深入探讨之前——如果您在使用 Claude Code 时希望超越基础提示操作,我将主持一场实用的动手工作坊,或许能为您提供帮助。
1. Claude Code 自动记忆的工作原理
一旦您更新 Claude Code,自动记忆功能便会默认启用。无需任何安装或配置,它会立即开始工作。在您进行会话操作时,Claude 会默默地观察并记录您的操作。它会自主判断并决定哪些内容应保存,以供后续会话使用。
以下是 Claude 存储的信息类型:
• 项目模式,例如构建命令、测试工作流以及代码库的组织方式
• 调试洞察,包括疑难问题的解决方案和特定错误背后的根本原因
• 架构笔记,例如重要文件、模块间的关系和核心抽象
• 您的偏好,例如沟通风格、工作流习惯和工具选择
关键在于,所有这些都无需手动输入。Claude 会自动识别重要信息并记录下来。
自动记忆存储在哪里?
每个项目都有独立的记忆目录,存储路径为:~/.claude/projects/
如果您正在使用 Git worktrees,每个 worktree 都将拥有独立的记忆目录。在 Git 仓库之外,Claude 则会转而使用当前工作目录。
在该文件夹内,通常会发现如下结构:
~/.claude/projects/<project>/memory/
├── MEMORY.md # Main index loaded at the start of each session
├── debugging.md # Notes about debugging history and recurring issues
└── … # Other topic files Claude creates when needed
MEMORY.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 对记忆目录进行读写操作。
CLAUDE.md 与 MEMORY.md 有何区别?
CLAUDE.md 一直是 Claude Code 的一部分。你可以在这个文件中编写你希望 Claude 遵循的指令、规则和偏好。
而 MEMORY.md 的工作方式则有所不同。
你无需亲自编写 MEMORY.md。Claude 会自动创建并更新它。
最简单的理解方式是:CLAUDE.md 用于你提供指令,而 MEMORY.md 则是 Claude 自己的备忘录。在 MEMORY.md 中,Claude 会记录下在与你协作过程中学习到的有用上下文,例如:
• 你的偏好设置
• 常见的项目模式
• 有效的命令
• 失败的命令
• 过往会话中的有用笔记
重要的是,Claude 会随着时间的推移自行积累这些信息,而无需你手动输入。因此,两者的区别很简单:
• CLAUDE.md : 你向 Claude 发出指令 的地方
• MEMORY.md : Claude 为自己记录笔记 的地方
这两个文件结合起来,能在会话开始时为 Claude 提供更丰富的上下文信息。
一个文件用于告知 Claude 你希望它如何行事,而另一个则帮助它记住之前从你的项目中学习到的内容。
理解 Claude Code 的内存层次结构
Claude Code 并非只依赖于 CLAUDE.md 和 MEMORY.md。它实际上是通过一个分层内存系统运行的。每个层级都扮演着不同的角色,具体取决于指令的适用对象和其应用范围。
核心思想很简单:更具体的指令会覆盖更广泛的指令。
这意味着项目级别的 CLAUDE.md 将优先于你的全局用户级别记忆。自动记忆(Auto-memory)也存在于项目级别,这意味着其作用范围仅限于你和当前正在处理的特定项目。
另一个有用的细节是 CLAUDE.local.md。这个文件会自动添加到 .gitignore 中,使其成为存储私有本地设置的理想位置,例如沙盒 URL、本地测试笔记,或任何你的团队无需共享的信息。
Claude 在会话开始时加载哪些内容?
当你开启一个新的 Claude Code 会话时,Claude 会从多个层级加载上下文信息。
这通常包括:
• 如果存在,你的组织策略
• 你的项目级 CLAUDE.md (包含共享团队指令)
• 你的个人 ~/.claude/CLAUDE.md 偏好设置
• MEMORY.md 的前 200 行,其中记录了 Claude 保存的笔记
在你编写第一个提示之前,Claude 就已经对你的项目约定、偏好以及从先前会话中学习到的上下文有了实际的了解。
将 Claude Code 自动记忆付诸行动
让我们从头开始创建一个项目,将自动记忆付诸实践,并看看它如何运作。
1. 更新 Claude Code
首先,为了确保自动记忆功能可用,你需要确保你的 Claude Code 是最新版本。
claude update

接下来,你可以检查当前版本;它应高于 2.1.76。
claude –version
2. 设置测试项目
现在,让我们设置一个测试项目,并在该文件夹中初始化 Git。
mkdir test-claude-memory && cd test-claude-memory
git init
在这里运行 git init 至关重要,因为 Claude Code 依赖于 Git 仓库的根目录来确定记忆文件的存放位置。因此,如果你的项目不是一个 Git 仓库,这种项目级别的记忆设置将无法按预期工作。
现在,我们准备好在这个测试项目中运行 Claude Code。
claude

3. 开始使用 Claude 记忆
自动记忆不会仅仅因为你打开了一个会话就创建文件。Claude 需要先与你合作处理一些事项,然后才会开始进行记录。我指示 Claude Code 使用 LangChain 构建一个 RAG (Retrieval Augmented Generation) 流水线。
Build a simple rag pipleine with langchain

现在,如果你运行 /memory 命令,可以看到自动记忆已开启,并提供了三个记忆选项。

选项 1: 用户记忆
这将在你的系统编辑器中直接打开你的全局 ~/.claude/CLAUDE.md 文件。
这是你的个人记忆文件。它包含了在你所从事的每一个项目中都将保留的指令和偏好。这可能包括你偏好的编码风格、你喜欢使用的工具,或者你希望 Claude 遵循的通用习惯,无论你身处哪个项目。
这是一个由你自行管理的文件。
选项 2: 项目记忆
这将打开你当前项目中的 CLAUDE.md 文件。
这是一个共享项目文件。它通常存放着团队层面的上下文信息,例如编码标准、架构决策以及整个团队遵循的通用工作流程。如果项目处于源代码控制之下,此文件可以被提交,以便团队中的每个人都能从中受益。
这也是一个由你编写和维护的文件。Claude 会读取它,但不会更新它。
选项 3:打开自动记忆文件夹
这是由 Claude 管理的部分。
选择此选项会打开内存目录,其中存储着 Claude 自己的笔记,包括 MEMORY.md 以及它在你的不同会话中创建的任何主题文件。这正是我们在本文中一直讨论的那个文件夹。
在 Windows 上,该文件夹可能不会总是自动打开。如果发生这种情况,你可以从终端手动导航到它,具体操作如下:
ls $env:USERPROFILE\.claude\projects\<your-project-path>\memory\
4. 自动记忆开关
当你输入 /memory 命令时,你会看到
Auto-memory: on

你可以在这里将其打开或关闭,而无需修改任何配置文件。只需停留在 Auto-memory: on 这一行上并按下回车键,它就会切换为 Auto-memory: off。

如果你即将进行不希望 Claude 记住的探索性工作,或者你正在运行一次性会话,这是为当前项目暂停记忆功能的最快方法。
在新项目开始时运行 /memory 命令是一个好主意,这有助于确认开关处于开启状态,并在记忆开始积累之前熟悉你的文件所在位置。
5. 在冷会话中测试自动记忆
现在,让我们完全关闭 Claude Code,并在同一项目中开启一个新的会话,然后发送这条不带任何上下文的消息,看看 Claude 的记忆功能是否能在冷会话中得以保留。
What do you know about this project?
Claude 读取新会话的记忆内容,并为我提供了我的项目的详细概述:

所有这些都从上一会话的 MEMORY.md 中被调取出来。这表明 Claude Code 的自动记忆功能正如预期的那样运行。
控制 Claude 自动记忆
自动记忆功能默认是开启的,在大多数情况下,这可能是最合适的设置。但有些情况下,你可能希望将其关闭。Claude Code 为你提供了几种实现方式,具体取决于你所需要的控制粒度。
为单个项目关闭自动记忆
如果你只想为某个项目禁用自动记忆,请将以下设置添加到该项目的设置文件中:
// .claude/settings.json
{
“autoMemoryEnabled”: false
}
此举仅针对该项目禁用自动记忆功能,而在其他所有项目中仍保持启用状态。
全局禁用自动记忆
如果你希望在所有项目中禁用自动记忆功能,则应将相同的设置添加到你的用户级设置文件中:
// ~/.claude/settings.json
{
“autoMemoryEnabled”: false
}
这将全局应用此更改,因此 Claude 将在所有项目中停止使用自动记忆功能。
在 CI 环境中强制禁用自动记忆
如果你在 CI pipeline 或其他托管环境中运行 Claude Code,最安全的选择是使用环境变量:
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=1 # Force off
export CLAUDE_CODE_DISABLE_AUTO_MEMORY=0 # Force on
此变量会覆盖 /memory 开关以及在 settings.json 中设置的所有内容。
这使得它成为最可靠的方法,能够确保自动记忆功能绝不会在你不想让 Claude 保存 CI 会话记录的自动化环境中运行。
编辑记忆文件
记忆文件就是 Markdown 文件,这意味着你可以随时打开和编辑它们。
最便捷的方式是通过 Claude Code 内部的 /memory 命令。它会打开记忆文件选择器,让你直接跳转到系统编辑器中任意一个记忆文件进行编辑。
当你想要删除过时的笔记、清理不再重要的条目,或者随着项目变更重新整理记忆文件时,此功能非常有用。
你也可以直接从终端打开这些文件:
open ~/.claude/projects/<your-project>/memory/MEMORY.md
夜雨聆风