Claude Code Memory 深潜:CLAUDE.md、Auto Memory 与渐进式上下文披露
Agent Memory Engineering 专栏 · 2/6。 本文不猜测未公开的 Claude Code Runtime,而是依据 Anthropic 当前官方文档,把可验证的加载、写入、召回与压缩行为还原成一套工程模型,并明确区分“官方契约”和“本文推导”。
专栏导航:总览与选型地图 · Codex · Claude Code · Hermes · Mem0 · Letta · Graphiti
0. 研究边界:能验证什么,不能声称什么
Claude Code 的核心 Runtime 没有以可逐行审计的形式完整公开。因此,本文不会把行为观察写成“源码证明”,也不会伪造内部类名、数据库表或后台任务。
本文使用三层证据:
| 证据层 | 可得出的结论 | 不能越过的边界 |
|---|---|---|
| Anthropic 官方 Memory 文档 | 文件位置、加载顺序、导入规则、Auto Memory 容量与存储位置 | 不能推出未公开的内部函数实现 |
| 官方 Context / Settings / Hooks 文档 | Compaction 后的恢复、策略层级、可观测事件 | 不能证明所有平台实现细节完全相同 |
| 本文工程推导 | 缓存层级、Token 成本、冲突模型、生产治理建议 | 必须显式标为推导或建议 |
资料于 2026-07-15 联网复核。官方文档是持续更新的行为契约,文末记录了可复查链接与核对内容。
0.1 本文要回答的十个问题
CLAUDE.md、Auto Memory 和 Conversation Compaction 分别解决什么问题?- Managed、User、Project、Local 与 Nested Instructions 如何组合?
- 为什么“离当前目录更近”不等于数据库式覆盖?
@pathImport 是模块化,还是 Token 优化?.claude/rules/如何实现路径级渐进披露?- 为什么
MEMORY.md只加载前 200 行或 25 KB? - Topic Files 如何把 Hot Index 和 Cold Evidence 分开?
/compact之后哪些指令会恢复,哪些需要再次触发?- 文件记忆如何被审计、污染、冲突或跨 Worktree 共享?
- 大型 Monorepo 应如何设计一套可测试的 Instruction Architecture?
1. Claude Code 不是一种 Memory,而是三条生命周期
官方文档把 Claude Code 的持久上下文分成两类:CLAUDE.md 是人写的持久指令,Auto Memory 是 Claude 自己维护的跨会话笔记。[C1]
工程上还必须把第三类机制单独列出:Context Compaction。它不是跨会话事实库,而是让当前长会话继续运行的上下文压缩机制。[C2]
| 机制 | 主要作者 | 生命周期 | 默认进入当前 Context 的方式 | 主要用途 |
|---|---|---|---|---|
CLAUDE.md / Rules | 人、团队、组织 | 跨会话、可版本控制 | 启动加载或按路径触发 | 规范、约束、项目知识 |
| Auto Memory | Claude | 跨会话、机器本地 | MEMORY.md Hot Index + Topic File 按需读取 | 纠正、偏好、踩坑经验 |
| Conversation Compaction | Runtime / Model | 当前会话 | 压缩旧对话并继续推理 | 保持长 Run 连续性 |
所以:
Instruction Memory ≠ Learned Memory ≠ Conversation Compaction把它们混为一谈会产生三个典型错误:
- 把强制安全策略写进
CLAUDE.md,误以为模型一定执行; - 把所有自动经验塞进 Always-on 文件,导致启动 Context 持续膨胀;
- 把
/compact当作长期记忆,以为新会话仍能访问压缩摘要。
1.1 Control Plane、Data Plane 与 Working Set
可以把三类机制进一步映射为:
Managed Settings / Permission Rules → Enforcement Control Plane
CLAUDE.md / .claude/rules → Behavioral Instruction Plane
Auto Memory → Learned Experience Plane
Conversation + Tool Results + Compaction → Current Working Set官方明确说明:Managed Settings 可以禁止工具、路径或命令,CLAUDE.md 只是在 Context 中塑造行为,并不是客户端强制执行层。[C1][C3]
这条边界非常关键:
Policy 必须由 Runtime Enforcement 保证;Memory 只能影响模型决策,不能替代权限系统。
2. CLAUDE.md Loader:它不是单文件读取,而是指令解析器
Claude Code 会从当前工作目录向文件系统根目录回溯,寻找每一级目录中的 CLAUDE.md 和 CLAUDE.local.md。[C1]
发现后的内容不是“最近文件覆盖上层文件”,而是按顺序拼接:
Filesystem Root ↓Ancestor CLAUDE.md ↓Ancestor CLAUDE.local.md ↓... ↓Current Directory CLAUDE.md ↓Current Directory CLAUDE.local.md在同一级目录内,CLAUDE.local.md 追加在 CLAUDE.md 之后。离启动目录更近的内容因此出现在更靠后的 Context 位置,但官方同时提醒:相互矛盾的自然语言规则并没有数据库式确定性覆盖,模型可能任意选择其中一条。[C1]
2.1 五种 Scope 不是五种优先级覆盖表
| Scope | 典型位置 | 所有者 | 共享方式 | 适合内容 |
|---|---|---|---|---|
| Managed Policy | /etc/claude-code/CLAUDE.md 等平台路径 | IT / DevOps | 机器策略分发 | 组织编码规范与合规提醒 |
| User | ~/.claude/CLAUDE.md、~/.claude/rules/*.md | 个人 | 本机 | 个人工作流、偏好工具 |
| Project | ./CLAUDE.md 或 ./.claude/CLAUDE.md,以及 .claude/rules/*.md | 团队 | Git | 架构、测试、提交规范 |
| Local | ./CLAUDE.local.md | 个人 | 通常 Git Ignore | 私有路径、本机命令 |
| Nested | 子目录中的 CLAUDE.md,或面向子目录的 paths Rules | 子系统维护者 | Git | 局部模块约束 |
Managed Policy 的“不可由个人排除”来自客户端设置层,而不是因为它在 Prompt 中拥有某种不可违背的系统消息权重。[C1][C3]
2.2 启动加载与按需加载必须区分
官方行为契约给出两条路径:[C1]
祖先目录中的 CLAUDE.md→ 启动时完整加载
当前目录之下子目录中的 CLAUDE.md→ Claude 读取该子目录文件时按需加载这是一种典型的 Progressive Disclosure:
- 仓库根规则进入 Hot Context;
- 子模块规则保持 Cold;
- 文件访问事件成为加载触发器;
- 同一个会话的可见指令集会随工作路径变化。
如果把全部子项目规则都塞进根文件,Monorepo 的 Instruction Cost 会接近:
按路径触发后,启动成本更接近:
而任务增量成本为:
2.3 一个行为级 Loader 还原
下面是依据官方发现与拼接规则整理的行为级伪代码,不是 Claude Code 原始源码:
def build_startup_instructions(cwd, settings): project_root = resolve_project_root(cwd) layers = []
layers += load_managed_policy(settings) layers += load_user_instructions("~/.claude/CLAUDE.md", settings) layers += load_unscoped_rules("~/.claude/rules", settings)
for directory in walk_from_fs_root_to(cwd): # 项目根还支持 .claude/CLAUDE.md 这一存放形式。 for path in discover_directory_instructions(directory, project_root): if exists(path) and not excluded(path, settings): layers += expand_imports(path, max_depth=4)
layers += load_unscoped_rules(project_root / ".claude/rules", settings) return concatenate(layers)
def on_file_read(path): load_nested_claude_files_for(path) activate_path_scoped_rules_matching(path)这个模型揭示了一个常被忽略的问题:Context 不是启动时一次性固定的。Nested Instructions 让 Instruction Set 成为随工具访问动态变化的工作集。
3. @path Import:模块化语法,不是上下文分页
CLAUDE.md 可以用 @path/to/import 引入其他文件。官方当前规则包括:[C1]
- 支持相对路径和绝对路径;
- 相对路径相对于包含 Import 的文件解析,而不是 Shell 当前目录;
- 被引入文件还可以继续 Import,最大递归深度为四层;
- Markdown Inline Code 与 Fenced Code Block 中的
@path不会被解析; - 第一次遇到项目外部 Import 时,会展示文件清单并要求用户批准;
- 用户拒绝后,外部 Import 保持禁用,不会每次重复弹窗。
3.1 为什么相对路径基准很重要
假设:
repo/├── CLAUDE.md└── docs/ ├── agent.md └── rules/ └── testing.mddocs/agent.md 中写:
@rules/testing.md正确解析目标是:
repo/docs/rules/testing.md如果错误地以 repo/ 或进程 CWD 为基准,同一指令文件在不同启动位置会加载不同内容,Instruction Build 将不再可复现。
3.2 Import 不降低 Token 成本
官方明确提醒:Import 适合组织内容,但被引入文件仍在启动时展开并进入 Context。[C1]
所以:
Split by @import→ improves maintainability→ does not automatically reduce startup tokens如果目标是减少 Context,应该使用:
- Nested
CLAUDE.md的目录触发; .claude/rules/的pathsFrontmatter;- Auto Memory 的 Topic Files;
- Agent 主动读取而不是 Always-on 注入。
3.3 Import 是一个供应链入口
外部绝对路径 Import 能把 Home Directory、共享配置或工作区外规则引入 Prompt。这带来三个风险:
- 内容漂移:外部文件变化不经过当前仓库 Review;
- 信任扩散:项目成员看到
@path,却未必拥有同一文件; - Prompt Supply Chain:被引入内容可以改变工具决策,但不会出现在当前仓库 Diff 中。
外部 Import 首次审批是一道重要信任门,但生产治理还应记录:
source_pathcontent_hashapproved_byapproved_atloaded_at官方目前承诺的是审批行为,不等于提供完整的版本锁定与变更审计。
4. .claude/rules/:把 Instruction Routing 做成路径匹配
项目级 .claude/rules/ 与用户级 ~/.claude/rules/ 都会递归发现 Markdown 文件;用户级 Rules 先于项目级 Rules 加载。没有 paths Frontmatter 的规则在启动时加载;带 paths 的规则在 Claude 读取匹配文件时触发。[C1]
示例:
---paths: - "services/payment/**/*.java" - "libs/money/**/*.kt"---
# Money Rules
- 金额必须使用定点类型。- 所有舍入模式必须显式声明。4.1 Rules 是 Retrieval Router,不只是文件拆分
可以把路径规则理解成一个确定性 Retriever:
Current File Path→ Glob Match→ Applicable Instruction Set→ Context Injection它和 Vector Retrieval 的差别是:
| 维度 | Path Rules | Vector Memory |
|---|---|---|
| 召回键 | 文件路径 | 语义相似度 |
| 确定性 | 高 | 近似 |
| 可解释性 | 可指出匹配 Glob | 需要解释相似度与重排 |
| 适合内容 | 模块约束、语言规范 | 模糊经验、跨任务事实 |
对于 Coding Agent,文件路径本身携带强结构信号,因此确定性 Routing 往往比“把所有规范做 Embedding”更可靠。
4.2 Symlink 与大型仓库边界
官方文档说明 .claude/rules/ 支持 Symlink,循环 Symlink 会被检测;新版本还支持通过指向项目的 Symlink Path 触发 paths 匹配。[C1]
这意味着规则匹配不能只比较未经规范化的字符串路径。一个合理的行为模型至少需要:
Input Path→ Resolve / Normalize→ Detect Symlink Cycle→ Establish Project Boundary→ Glob Match在大型 Monorepo 中,claudeMdExcludes 可以跳过无关祖先文件或其他团队的规则目录;Managed Policy 文件不能被排除。[C1]
5. Auto Memory:Hot Index 与 Topic Files 的双层结构
Auto Memory 默认开启。Claude 会基于未来复用价值决定是否记录构建命令、调试经验、架构说明、代码偏好和工作习惯;它并不保证每个会话都写入。[C1]
每个项目对应一个目录:
~/.claude/projects/<project>/memory/├── MEMORY.md├── debugging.md├── architecture.md└── workflows.md项目标识优先由 Git Repository 推导,因此同一仓库的不同 Worktree 和子目录共享同一个 Auto Memory Directory;Git 仓库之外则使用 Project Root。Auto Memory 是机器本地状态,不会自动跨机器或云环境同步。[C1]
5.1 MEMORY.md 是 Index,不是无限正文
每次新会话启动时,只加载 MEMORY.md 的:
前 200 行或前 25 KB取先到者这个限制只针对 Auto Memory 的 MEMORY.md。CLAUDE.md 仍会完整加载,只是官方建议每个文件尽量低于 200 行以减少 Context 成本和规则失遵。[C1]
MEMORY.md 的工程角色更接近:
Compact Registry+ Routing Summary+ Most Valuable Always-on Lessons详细信息移动到 Topic Files 后,由 Agent 根据索引按需读取。
5.2 两级读取路径
flowchart LR S["Session Start"] --> C["CLAUDE.md Loader"] S --> M["MEMORY.md: first 200 lines or 25 KB"] C --> H["Hot Context"] M --> H H --> D{"Need detailed memory?"} D -->|"yes"| T["Read topic file on demand"] T --> W["Current working context"] D -->|"no"| W F["File access"] --> R["Load nested rules"] R --> W这是一种非常实用的 Cache Hierarchy:
| 层级 | 容量 | 延迟 | 进入 Context 的频率 |
|---|---|---|---|
Root / Managed CLAUDE.md | 小 | 启动时 | 每次 |
MEMORY.md Index | 有硬上限 | 启动时 | 每次 |
| Topic Files | 可扩展 | 需要文件读取 | 按需 |
| Repository / External Docs | 很大 | 搜索与工具调用 | 任务相关 |
5.3 一个行为级 Write Path
官方没有公开完整内部写路径。根据其行为契约,只能严谨还原到:
Conversation / Tool Observation→ Claude judges future usefulness→ Write or update MEMORY.md / topic file→ Future session loads bounded index→ Agent may read topic file on demand生产系统还需要但官方文档未承诺的能力包括:
- 多进程 File Lock;
- Optimistic Version Check;
- Mutation Log;
- Write-time Secret Detection;
- Topic File Garbage Collection;
- 跨机器同步冲突解决。
这些不能被写成 Claude Code 已实现,只能作为 File Memory 的生产化补强。
5.4 /memory 是最小治理面
/memory 会列出当前会话加载的 CLAUDE.md、CLAUDE.local.md 和 Rules 文件,并提供 Auto Memory 开关与目录入口。Auto Memory 文件是普通 Markdown,可由用户审计、编辑或删除。[C1]
这使系统获得三个重要性质:
- Inspectable:人可以看到 Agent 记了什么;
- Correctable:错误记忆可直接修正;
- Deletable:不需要调用专有数据库 API 才能删除。
但“文件已删除”是否等于“当前 Context 已清除”仍要区分:已经注入本轮 Context 的内容不会因为磁盘文件删除而自动从模型输入中撤回。
同一套有界索引模式还可以隔离到 Subagent。Subagent Frontmatter 可声明 memory: user|project|local,Claude Code 会按 Subagent 名称建立独立目录,在启动时注入其 MEMORY.md 的前 200 行或 25 KB,并自动开放 Read、Write、Edit 工具供其维护记忆。[C5] 这让代码审查、测试或架构分析等角色可以分别积累经验,而不是把所有角色状态混入主 Agent;其中 project Scope 可进入版本控制,也应按仓库贡献者可修改的输入来治理。
6. Auto Memory 的一致性边界
文件结构简单,不代表一致性问题消失。
6.1 Worktree 共享会产生并发写入面
官方说明同一 Git Repository 的 Worktree 和子目录共享一个 Auto Memory Directory。[C1]
如果两个 Claude Code Session 同时更新 MEMORY.md:
Session A reads v1Session B reads v1Session A writes v2Session B writes v3 based on v1没有锁或版本校验时,A 的更新可能被覆盖。这是由官方存储边界推导出的并发风险,不代表官方文档确认存在该 Bug。
一个生产级写入协议应至少是:
Read(content, hash)→ Build mutation→ Lock project memory→ Re-read current hash→ Reject or merge on drift→ Atomic replace→ Append audit event6.2 机器本地意味着可用性优先于分布式一致性
Auto Memory 没有形成多副本分布式系统,因此严格来说这不是 CAP 定理中的一致性取舍。它做的是更直接的产品选择:用无跨机器协调换取本地可用性和低延迟,代价是没有跨机器一致性:
- 本地读写简单、低延迟;
- 不需要中央服务;
- 离线可用;
- 但换机器后没有相同经验;
- 团队无法天然共享 Agent 自己积累的知识;
- 备份与删除证明由本地文件系统负责。
需要跨机器共享的团队事实应该优先进入 Version-controlled CLAUDE.md、Rules、文档或受治理的外部 Memory Service,而不是假设 Auto Memory 是团队知识库。
6.3 Index Drift
当 MEMORY.md 指向已经删除、改名或内容漂移的 Topic File,会产生:
Registry says memory existsbut evidence cannot be loaded可观测指标应包括:
broken_topic_link_countorphan_topic_file_countmemory_index_bytesmemory_index_linestopic_read_hit_ratestale_memory_correction_rate7. Compaction:为什么它和 Memory 必须分开
Context Compaction 解决当前会话 Token 接近上限的问题。它压缩旧对话和工具结果,让同一个 Run 能继续;Auto Memory 与 CLAUDE.md 则跨会话存在。[C2]
官方故障排查文档给出一个很有价值的恢复差异:[C1]
Project-root CLAUDE.md→ /compact 后从磁盘重新读取并注入
Nested CLAUDE.md→ 不会在 compact 后统一重新注入→ 之后再次读取对应子目录文件时才重载所以 Compaction 之后的 Instruction Working Set 可能暂时缩小:
Before compact:Root Rules + Nested A + Nested B + Conversation
After compact:Root Rules + Compacted Conversation
Later reads module A:Root Rules + Nested A + Compacted Conversation7.1 三类状态的恢复语义
| 状态 | /compact 后 | 新会话后 | 磁盘删除后 |
|---|---|---|---|
Root CLAUDE.md | 重新注入 | 重新加载 | 下一次恢复时消失 |
| Nested Instructions | 路径再次触发 | 路径触发 | 未再次注入 |
MEMORY.md | 当前 Runtime 行为依官方实现 | 启动载入受限前缀 | 新会话不再载入 |
| Topic File | Agent 按需读取 | Agent 按需读取 | 后续读取失败 |
| Conversation-only Instruction | 取决于摘要保留 | 消失 | 不适用 |
因此,希望跨会话或跨 Compaction 稳定存在的关键约束,不应只出现在 Conversation 中。
8. Security:Memory 是可持久化 Prompt Injection 面
Claude Code 官方文档强调 CLAUDE.md 是 Context,而不是强制配置。[C1][C3] 这意味着任何能修改这些文件的主体,都可能持续改变未来会话行为。
8.1 信任域必须分层
Managed Policy→ organization-controlled
Repository CLAUDE.md / Rules→ repository contributor-controlled
CLAUDE.local.md→ local user-controlled
Auto Memory→ model-written from observed content
External Import→ external file owner-controlled最危险的错误是把所有层都当成“可信系统提示词”。
8.2 Auto Memory Poisoning
可能的攻击链:
Untrusted issue / webpage / repository text→ model treats instruction as useful lesson→ writes persistent auto memory→ malicious guidance survives future sessions→ later tool decision is influenced文件可读可删降低了恢复难度,但不能阻止写入发生。生产化防护应包括:
- 写入时标注来源类型与 Trust Label;
- 外部内容不得直接升级为行为指令;
- Secret / Credential Pattern 检测;
- 高风险 Mutation 进入 Quarantine;
- 周期性 Diff 与异常写入速率告警;
- 工具权限独立于 Memory 内容执行。
这些措施对应的是持久化 Prompt Injection 的分层防护,而不是依赖某一个字符串过滤器证明 Memory 安全。[C6]
8.3 Managed Settings 与 Managed Instructions 的职责
| 需求 | 应使用的控制面 |
|---|---|
| 禁止危险命令 | permissions.deny 等设置 |
| 强制 Sandbox | Managed Settings |
| 强制认证方式 | Managed Settings |
| 提醒代码规范 | Managed CLAUDE.md |
| 项目架构说明 | Project CLAUDE.md / Rules |
| Agent 经验 | Auto Memory |
“禁止”与“建议”不能只靠措辞强度区分,必须由不同 Runtime 层承载。
9. Monorepo:如何设计可持续的 Instruction Architecture
一个常见失败模式是把目录树、依赖列表、所有命令和每个团队规范都塞进根 CLAUDE.md。官方建议每个 CLAUDE.md 尽量低于 200 行,并指出过长文件会消耗 Context、降低遵循率;/doctor 还能建议删除模型可从仓库自行推导的内容。[C1]
9.1 推荐目录
repo/├── CLAUDE.md # 全局不变量、路由索引、关键命令├── .claude/│ ├── rules/│ │ ├── security.md # Always-on│ │ ├── java.md # paths: **/*.java│ │ ├── frontend.md # paths: apps/web/**│ │ └── database.md # paths: migrations/**│ └── settings.json├── services/│ ├── billing/CLAUDE.md # Billing 局部不变量│ └── identity/CLAUDE.md # Identity 局部不变量└── AGENTS.md # 通过根 CLAUDE.md 显式导入9.2 根文件只保留“不可从代码廉价推导”的信息
适合保留:
- 构建或测试中的反直觉前置条件;
- 容易造成生产事故的架构约束;
- 团队明确选择及其理由;
- 常见失败路径;
- 进入详细规则的路由说明。
不适合长期重复:
- 可由
package.json、Gradle 或目录结构直接读出的事实; - 生成后很快漂移的文件清单;
- 每个模块的完整 API 文档;
- 没有明确行为影响的背景介绍。
9.3 Conflict Matrix
每条重要规则应能回答:
| 字段 | 示例 |
|---|---|
| Scope | services/payment/** |
| Owner | Payment Platform Team |
| Enforcement | Test / Lint / Runtime / Prompt only |
| Source | .claude/rules/money.md |
| Supersedes | 旧规则 ID |
| Review date | 2026-07-15 |
如果一条规则只有 Prompt 文本、没有测试或 Runtime Enforcement,就应明确标注为 Best-effort Instruction。
10. 可观测性与测试:如何证明“正确规则在正确时刻被加载”
官方提供 InstructionsLoaded Hook,用于记录哪些 Instruction Files 在何时、因为什么原因被加载。[C1][C4]
这让 Instruction System 可以从“感觉 Claude 应该看到了”升级为可观测路径:
File Read→ Rule Match→ InstructionsLoaded Event→ Context Change→ Agent Decision10.1 建议记录的事件字段
{ "session_id": "...", "instruction_path": "...", "scope": "project|local|nested|rule|managed", "load_reason": "startup|path_match|post_compaction|manual", "content_hash": "sha256:...", "bytes": 2310, "loaded_at": "..."}10.2 必须做的测试
Loader Contract Test
构造临时目录树,验证祖先顺序、Local 追加顺序、Exclude 与 Managed Policy 不可排除。
Import Test
覆盖相对路径、绝对路径、四层递归上限、Code Fence 跳过、循环引用和外部审批。
Path Rule Test
为每个 Glob 提供 Positive / Negative Fixture,避免 **/*.java 之类规则意外覆盖生成目录。
Compaction Recovery Test
记录 Compact 前后 Instruction Set,验证 Root 重新注入、Nested 仅在再次访问时恢复。
Memory Poisoning Eval
把“要求 Agent 永久记住危险指令”的文本放入不可信文件,检查是否进入 Auto Memory、是否被标注来源、是否影响后续工具调用。
10.3 指标不能只看 Token
startup_instruction_tokenspath_rule_activation_countinstruction_conflict_rateinstruction_adherence_rateauto_memory_write_rateauto_memory_correction_ratetopic_file_read_hit_ratepost_compaction_instruction_miss_rateToken 降低但关键规则漏载,不是优化;规则全部加载但冲突率上升,也不是成功。
11. Claude Code 路线的优势与边界
11.1 优势
- 与 Coding Agent 的文件世界天然一致;
- 人类可读、可审计、可修改;
- Project Instructions 可进入 Git Review;
- Directory 与 Glob 提供确定性 Routing;
- Hot Index + Topic Files 支持渐进披露;
- 不依赖独立 Vector DB 才能形成有效长期上下文。
11.2 边界
- 自然语言冲突没有数据库式确定性覆盖;
CLAUDE.md是 Best-effort 行为指令,不是权限执行层;- Auto Memory 机器本地,不能天然充当团队知识库;
- 文件共享会引入多 Session 并发和 Drift 问题;
- Topic Index 可能出现断链与过期;
- 对模糊跨项目语义召回,纯路径结构不一定足够;
- 动态事实的有效时间与冲突历史需要额外 Temporal Model。
11.3 最准确的架构定义
Claude Code Memory 不是:
Markdown instead of Vector DB而是:
Hierarchical Instruction Loader+ Path-triggered Retrieval+ Bounded Auto-memory Index+ Agentic Topic-file Read+ Human-auditable Local Storage+ Compaction-aware Reinjection它最值得学习的不是“用文件就够了”,而是:
利用代码仓库现有的目录、路径、版本控制和文件工具,把 Memory Retrieval 变成可解释的 Progressive Disclosure。
12. 工程落地清单
在团队中采用类似路线时,至少确认:
- 根
CLAUDE.md是否只保留全局不变量? - 路径规则是否有 Positive / Negative Fixture?
- Import 是否有外部路径审批与 Hash 审计?
- 安全限制是否由 Settings / Sandbox 强制,而非只写 Prompt?
- Auto Memory 是否有来源、Secret 与 Poisoning 检查?
- 多 Worktree Session 是否会覆盖同一文件?
MEMORY.md是否保持在启动预算内?- Topic File 是否有断链与过期清理?
- Compaction 后是否验证关键 Root Instructions 重新注入?
/memory与InstructionsLoaded是否进入日常排障流程?
参考资料
下列资料均于 2026-07-15 联网核对。Claude Code Runtime 未完整开源,因此本文只把官方文档写成“行为契约”;伪代码、成本模型和生产化补强均为本文工程推导。
[C1] Anthropic:How Claude remembers your project
- How Claude remembers your project
- Markdown 原文
- 核对内容:
CLAUDE.mdScope 与加载顺序、Nested Lazy Load、@Import、四层递归、外部审批、Rules、claudeMdExcludes、Auto Memory 位置、200 行 / 25 KB、Worktree 共享、/memory、Compaction 后 Root / Nested 恢复差异。
[C2] Anthropic:Manage context and compaction
- Context window
- 核对内容:Context Working Set、Compaction 目的与跨会话 Memory 的职责差异。
[C3] Anthropic:Settings and permissions
- Settings
- Permissions
- 核对内容:Managed Settings、权限拒绝、Sandbox 与
CLAUDE.mdBest-effort 行为指令的边界。
[C4] Anthropic:Hooks
- Hooks reference
- 核对内容:
InstructionsLoaded事件与指令加载可观测性。
[C5] Anthropic:Subagents
- Subagents
- 核对内容:Subagent 可维护独立持久 Memory,避免把所有角色经验混入主 Agent。
[C6] OWASP:Agent Memory Security
- OWASP Agent Memory Guard
- AI Agent Security Cheat Sheet
- 核对内容:Memory Poisoning、持久化 Prompt Injection、来源与审计边界。
上一篇:Codex Memory 源码深潜 · 下一篇:Hermes Memory 源码深潜