类似人类大脑,AI代码助手如Claude Code在处理数千行代码、生成洞察、解决Bug、发现架构后,一旦会话结束,它便“失忆”了。下一次会话将从零开始,重新读取相同文件,重新追踪执行路径,重复发现模式,知识无法累积。
这是纯粹依赖上下文窗口架构的根本局限。上下文窗口就像是工作记忆:容量大、速度快,但具有挥发性。当它填满时,旧内容会被压缩或丢弃;当会话结束时,一切都随之消失。
一个直观的解决方案是:把所有东西都保存到磁盘。但“所有东西”实在太多了。一个包含200轮交互的调试会话可能会产生数兆字节的工具调用、错误消息、失败尝试和死胡同。将所有这些加载到下一个会话中,会浪费大部分上下文窗口在无关的历史信息上。你需要选择性地保留教训,丢弃脚手架式的中间过程。
另一个极端是:什么都不保存。让模型在每次会话中都从代码库中重新推导知识。这对于小型项目可行,但在规模化场景下会崩溃。一个已经在代码库上工作了数月的开发者拥有无法仅从代码中推导出的上下文:例如选择某种架构的原因、团队偏好的模式、尝试过但最终放弃的方法、用户的沟通风格等。
Claude Code 采取了一种中间路线。它拥有五种持久化机制,每种机制都在不同的时间尺度和抽象级别上运行:CLAUDE.md 指令文件、带有类型文件系统的自动记忆目录、一个后台记忆提取代理、汇总旧消息的上下文压缩以及原始会话记录。它们共同构成了一个分层的持久化架构——它既不是维基,也不是简单的RAG(检索增强生成),而是一种介于两者之间、用全面性换取简易性的方案。
本文将逐层深入探讨这些机制:它们如何存储知识,丢弃什么,在哪里截断,以及哪些信息会穿透这些层级。
第一层:CLAUDE.md — 指令层
在模型接收到任何用户消息之前,它会加载一系列指令文件。这些是人工编写(或人工编辑)的 Markdown 文件,用于指导模型在特定项目中如何行为。它们是数据持久化中最稳定的一层——不仅跨会话保留,甚至跨用户共享。
发现机制
系统通过以特定顺序遍历文件系统来发现 CLAUDE.md 文件:
- 托管层:
/etc/claude-code/CLAUDE.md(全局管理员指令,对所有用户生效) - 用户层:
~/.claude/CLAUDE.md(私有全局指令,对所有项目生效) - 项目层: 从当前工作目录 (CWD) 向上遍历到根目录,在每个目录中检查:
CLAUDE.md.claude/CLAUDE.md.claude/rules/*.md(提交到代码库中,与团队共享)
- 本地层: 每个项目根目录下的
CLAUDE.local.md(被 Git 忽略,仅限该开发者私有)
文件按此顺序加载,但优先级从下到上递增——即本地文件 (Local) 优先级最高。