Claude Code记忆层加载顺序总结
- 内容介绍
- 文章标签
- 相关推荐
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
值得注意的有以下几点:
-
自动记忆加载过程中会通过语义查询,比如"哪些记忆与xx功能相关?“
-
Auto memory存在记忆年龄这个概念,加入上下文时会添加诸如
This memory is 2 days old.的新鲜度警告。 -
会话开始时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
值得注意的有以下几点:
-
自动记忆加载过程中会通过语义查询,比如"哪些记忆与xx功能相关?“
-
Auto memory存在记忆年龄这个概念,加入上下文时会添加诸如
This memory is 2 days old.的新鲜度警告。 -
会话开始时MEMORY.md 只会加载前200行,而CLAUDE.md 文件无论长度如何都能完整加载。
--【壹】--:
学到了 感谢分享
--【贰】--:
认真看了,佬总结得很到胃
--【叁】--:
挺干货的,学习了
--【肆】--:
解决了我的疑惑,感谢分享
--【伍】--:
感谢分享学习一下
--【陆】--:
太强了!

