目录
-
-
-
-
-
-
-
-
-
-
-
附:五套 Memory 对照表
-
附:反事实表 —— 少一层会发生什么
-
一页纸
第 章节:先建立一张地图
⚠️ 使用者痛点提示: 初学者常常把所有 “memory” 功能混为一体,导致无法定位到底哪部分代码负责存取。下面内容帮你拆解,其实,
Claude Code 源码里的 memory 并不是单一功能。而是五套名字相似、职责不同的机制。
| 角色 | 类比/说明 | 保存时间 | 主要文件 |
| Instructions Memory
| CLAUDE.md/.claude/rules/*.md/claude.local.md?. | 持续
| .claude/CLAUDE.md/.claude/rules/*.md/claude.local.md?说起来,/... .md/... .md?.clade/
|
| Auto Memory
| META+feedback+project+reference+.... | 持续
| MEMORY.md + subject files in /memory/ dir. |
| Session Memory
| summary.md 在 /session-memory/.../summary.md。 |
| Agent Memory
| |
"Agent Memory与Team Memory进一步
作用域,但主要原理保持一致"
• 本章主角是 Auto Memory。完整生命线如下: |
启动 Claude Code
│
”
├─ getMemoryFiles │ 加载 CLAUDE.md 与 Auto Memory 的 MEMORY.md 索引
│ ▼ 使用者说:“记住我喜欢逐行中文注释”
├─ 路 A :主 Agent 当场 Write/Edit 记忆
└─ 路 B :本轮结束后 extractMemories 后台补记
▼主题文件 feedback_source_walkthrough.md +MEMORY.md 中的一行目录
▼未来某次使用者又问源码
├─ 扫描最多 个主题文件的 frontmatter
├─ sideQuery 最多选择 个相关文件
├─ 异步读取正文
└─ 作为 relevant_memories attachment 注入主对话
`
从**说明来看,**
- 主 Agent 当场写文件可直接让知识即时生效;- 如果 Agent 没写,后台提取器将在轮结束后补全。
- 每条 “topic file” 都携带前置 `frontmatter`,为后续召回做准备。
一句话主线🔑 使用者痛点方法:
- 明确区分 “何时写” 与 “何处写”,避免一次性追加导致索引膨胀。
先纠正三个常见误解 ⚠️ 使用者痛点:
-
"Auto Memory 是唯一持久化模块": 有多个层级,需了解每个角色的职责。
-
"所有信息都直接保存在 MEMORY.md": MEMORY.md 仅为索引,真正内容存于独立主题文件。
-
"项目根就是 Auto Memory 根": 工作树共享同一个基准方法,避免冲突与重复。
第 章节:总开关和目录定位——Memory 存到哪里
📄 文件: src/memdir/paths.ts 第 - 、- 行
🎬 对应 demo : **Claude Code 启动,先判断这次是否允许使用长期记忆**
### 总开关 isAutoMemoryEnabled
ts
export function isAutoMemoryEnabled: boolean { //① 环境变量明确要求关闭立即关闭 const envVal = process.env.CLAUDE_CODE_DISABLE_AUTO_MEMORY if ) { return false } //② 环境变量明确写成 /false 相当于明确要求打开 if ) { return true } //③ --bare 简化模式关闭自动发现和后台记忆行为 if ) { return false } //④ 远程环境没有持久盘即使写了下次也不存在所以关闭 if &&!process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR ) { return false } //⑤ 使用者 settings.json 显式配置优先 const settings = getInitialSettings if { return settings.autoMemoryEnabled } //⑥ 默认开启 return true}
**源码** : paths.ts L21-L55
**优先级链** : 环境变量 ➜ --bare ➜ 持久盘 ➜ settings.json ➜ 默认开启
### 基础目录 getMemoryBaseDir
ts
export function getMemoryBaseDir: string { if { return process.env.CLAUDE_CODE_REMOTE_MEMORY_DIR } // 本机默认使用 ~/.claude return getClaudeConfigHomeDir}
**源码** : paths.ts L79-L89
### 项目级 Auto Memory 方法
ts
function getAutoMemBase: string { // 优先找 canonical git root // 所有 worktree 所以共享同一份项目记忆 return findCanonicalGitRoot)?,getProjectRoot}
export const getAutoMemPath = memoize: string => {
const override = getAutoMemPathOverride?,getAutoMemPathSetting
if {
return override
}
const projectsDir = join,'projects')
return (
join),'memory') + sep
).normalize
},=> getProjectRoot)
export function getAutoMemEntrypoint: string {
return join。'MEMORY.md')
}
**源码** : paths.ts L198-L258
演示假设项目是 `/repo/shop`:
~/.claude/projects/-repo-shop/memory/
├── MEMORY.md
└── ...
---
。