Claude Code记忆层加载顺序总结

2026-04-11 11:291阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐
问题描述:

TL;DR

按照cc官方文档 ,Claude Code的记忆分为CLAUDE.md files、Auto Memory两个互补的部分,并且都在会话开始时被加载。

CLAUDE.md 大家比较熟悉,可以存在用户目录、项目目录的各个层级。具体可见官方文档。

Auto Memory 的位置则在~/.claude/projects/<project>/memory/

从cc的源码来看,不同级别的CLAUDE.md 与 Auto memory 的整体加载顺序,应如下:

1. Managed Memory (/etc/claude-code/CLAUDE.md) - 全局管理指令 2. User Memory (~/.claude/CLAUDE.md) - 用户级别的全局指令 3. Project Memory (从根目录到当前工作目录(CWD),自下而上遍历,自上而下加载) ├── CLAUDE.md (项目根目录中的) ├── .claude/CLAUDE.md └── .claude/rules/*.md (按字母顺序) 4. Local Memory (CLAUDE.local.md,也在项目中) - 项目本地指令 5. Auto Memory (源码中的@memdir) ~/.claude/projects/<project>/memory/MEMORY.md 6. Team Memory (共享团队记忆,如启用。)

引子:

image603×240 20.7 KB

当在cc中输入/memory,可以看到比较直观的看到这三个记忆文件(夹),然而在使用过程中,会发现存在rules、不同层级的CLAUDE.md 等复杂情况。而官方的文档 How Claude remembers your project - Claude Code Docs 说的并不清楚,民间的解读也存在互相冲突的部分。既然cc的源码已经开源,我决定自己探究一番。

纠正1:User Memory先于Project Memory加载

在Claude Code的源码中,对加载顺序其实已有清晰的注释说明 (src/utils/claudemd.ts:1-16):

/** * Files are loaded in the following order: * * 1. Managed memory (eg. /etc/claude-code/CLAUDE.md) - Global instructions for all users * 2. User memory (~/.claude/CLAUDE.md) - Private global instructions for all projects * 3. Project memory (CLAUDE.md, .claude/CLAUDE.md, and .claude/rules/*.md in project roots) - Instructions checked into the codebase * 4. Local memory (CLAUDE.local.md in project roots) - Private project-specific instructions * ... */

具体的加载代码 (src/utils/claudemd.ts:790-1007):

- 第 803-823 行:Managed 文件首先加载 - 第 825-847 行:User 文件其次加载 - 第 849-934 行:Project 和 Local 文件(自下而上遍历,自上而下加载) - 第 979-992 行:Auto Memory 倒数第二加载 - 第 994-1007 行:Team Memory 最后加载

然而此民间解读的顺序却是先Project Memory再User Memory,明显存在不同; claude-howto/02-memory/README.md at main · luongnv89/claude-howto · GitHub

菜鸟教程的顺序正确,但缺少Auto Memory的相关解读。https://www.runoob.com/claude-code/claude-code-memory.html

纠正2: 同一Project中CLAUDE.md加载顺序

cc官网上,对于一个项目里不同层级CLAUDE.md 文件的加载顺序,只说了遍历的方向是从下往上:

“walking up the directory tree from your current working directory”

然而在 src/utils/claudemd.ts:849-934 中,可以清楚的看到Project Memory 的加载方式是:自下而上遍历,自上而下加载。这点是官方文档没讲清楚的。

// 先从当前目录自下而上遍历收集所有目录的CLAUDE.md,直到根目录 while (currentDir !== parse(currentDir).root) { dirs.push(currentDir) currentDir = dirname(currentDir) } // 然后反转后再自上而下加载,从根目录向下依次加载CLAUDE.md for (const dir of dirs.reverse()) { // 加载 CLAUDE.md, .claude/CLAUDE.md, .claude/rules/*.md }

补充:Auto memory相关机制

cc源代码中Auto memory的位置:src/memdir。这里放一段总结。
image772×823 148 KB
image891×897 58.8 KB

值得注意的有以下几点:

  1. 自动记忆加载过程中会通过语义查询,比如"哪些记忆与xx功能相关?“

  2. Auto memory存在记忆年龄这个概念,加入上下文时会添加诸如This memory is 2 days old.的新鲜度警告。

  3. 会话开始时MEMORY.md 只会加载前200行,而CLAUDE.md 文件无论长度如何都能完整加载。

网友解答:
--【壹】--:

学到了 感谢分享


--【贰】--:

认真看了,佬总结得很到胃


--【叁】--:

挺干货的,学习了


--【肆】--:

解决了我的疑惑,感谢分享


--【伍】--:

感谢分享学习一下


--【陆】--:

太强了!

问题描述:

TL;DR

按照cc官方文档 ,Claude Code的记忆分为CLAUDE.md files、Auto Memory两个互补的部分,并且都在会话开始时被加载。

CLAUDE.md 大家比较熟悉,可以存在用户目录、项目目录的各个层级。具体可见官方文档。

Auto Memory 的位置则在~/.claude/projects/<project>/memory/

从cc的源码来看,不同级别的CLAUDE.md 与 Auto memory 的整体加载顺序,应如下:

1. Managed Memory (/etc/claude-code/CLAUDE.md) - 全局管理指令 2. User Memory (~/.claude/CLAUDE.md) - 用户级别的全局指令 3. Project Memory (从根目录到当前工作目录(CWD),自下而上遍历,自上而下加载) ├── CLAUDE.md (项目根目录中的) ├── .claude/CLAUDE.md └── .claude/rules/*.md (按字母顺序) 4. Local Memory (CLAUDE.local.md,也在项目中) - 项目本地指令 5. Auto Memory (源码中的@memdir) ~/.claude/projects/<project>/memory/MEMORY.md 6. Team Memory (共享团队记忆,如启用。)

引子:

image603×240 20.7 KB

当在cc中输入/memory,可以看到比较直观的看到这三个记忆文件(夹),然而在使用过程中,会发现存在rules、不同层级的CLAUDE.md 等复杂情况。而官方的文档 How Claude remembers your project - Claude Code Docs 说的并不清楚,民间的解读也存在互相冲突的部分。既然cc的源码已经开源,我决定自己探究一番。

纠正1:User Memory先于Project Memory加载

在Claude Code的源码中,对加载顺序其实已有清晰的注释说明 (src/utils/claudemd.ts:1-16):

/** * Files are loaded in the following order: * * 1. Managed memory (eg. /etc/claude-code/CLAUDE.md) - Global instructions for all users * 2. User memory (~/.claude/CLAUDE.md) - Private global instructions for all projects * 3. Project memory (CLAUDE.md, .claude/CLAUDE.md, and .claude/rules/*.md in project roots) - Instructions checked into the codebase * 4. Local memory (CLAUDE.local.md in project roots) - Private project-specific instructions * ... */

具体的加载代码 (src/utils/claudemd.ts:790-1007):

- 第 803-823 行:Managed 文件首先加载 - 第 825-847 行:User 文件其次加载 - 第 849-934 行:Project 和 Local 文件(自下而上遍历,自上而下加载) - 第 979-992 行:Auto Memory 倒数第二加载 - 第 994-1007 行:Team Memory 最后加载

然而此民间解读的顺序却是先Project Memory再User Memory,明显存在不同; claude-howto/02-memory/README.md at main · luongnv89/claude-howto · GitHub

菜鸟教程的顺序正确,但缺少Auto Memory的相关解读。https://www.runoob.com/claude-code/claude-code-memory.html

纠正2: 同一Project中CLAUDE.md加载顺序

cc官网上,对于一个项目里不同层级CLAUDE.md 文件的加载顺序,只说了遍历的方向是从下往上:

“walking up the directory tree from your current working directory”

然而在 src/utils/claudemd.ts:849-934 中,可以清楚的看到Project Memory 的加载方式是:自下而上遍历,自上而下加载。这点是官方文档没讲清楚的。

// 先从当前目录自下而上遍历收集所有目录的CLAUDE.md,直到根目录 while (currentDir !== parse(currentDir).root) { dirs.push(currentDir) currentDir = dirname(currentDir) } // 然后反转后再自上而下加载,从根目录向下依次加载CLAUDE.md for (const dir of dirs.reverse()) { // 加载 CLAUDE.md, .claude/CLAUDE.md, .claude/rules/*.md }

补充:Auto memory相关机制

cc源代码中Auto memory的位置:src/memdir。这里放一段总结。
image772×823 148 KB
image891×897 58.8 KB

值得注意的有以下几点:

  1. 自动记忆加载过程中会通过语义查询,比如"哪些记忆与xx功能相关?“

  2. Auto memory存在记忆年龄这个概念,加入上下文时会添加诸如This memory is 2 days old.的新鲜度警告。

  3. 会话开始时MEMORY.md 只会加载前200行,而CLAUDE.md 文件无论长度如何都能完整加载。

网友解答:
--【壹】--:

学到了 感谢分享


--【贰】--:

认真看了,佬总结得很到胃


--【叁】--:

挺干货的,学习了


--【肆】--:

解决了我的疑惑,感谢分享


--【伍】--:

感谢分享学习一下


--【陆】--:

太强了!