在 Claude Code 源码的深处,有一个叫 Dream 的系统。它一个藏在 services/autoDream/ 目录里的小系统,它的注释里有这样一行字:
"Background memory consolidation. Fires the /dream prompt as a forked subagent when time-gate passes AND enough sessions have accumulated."
— 来自泄露源码 services/autoDream/autoDream.ts翻译过来:"后台记忆巩固。当到一定的时间、或足够多的会话积累之后, 以子进程的形式触发 /dream 提示。"
工程师没有把这个系统叫做 "memory consolidation"(记忆巩固), 没有叫 "background sync"(后台同步),没有叫 "knowledge update"(知识更新)。 他们叫它 Dream。
这个命名选择,本身就是一个值得细看的定位理解。
你睡着的时候大脑在做什么
先说一件大家都有过的体验:某个复杂的问题,白天怎么想都想不通, 睡了一觉起来,答案突然就有了。
这不是偶然,也不是迷信。认知科学家知道,睡眠期间大脑会做两件很重要的事: 一是把白天接收的碎片化信息从短期记忆整合进长期记忆; 二是把不重要的信息遗忘掉,给重要的信息腾出空间。 这个过程叫 记忆巩固(Memory Consolidation), 发生在我们的快速眼动睡眠(REM 睡眠)阶段——也就是最容易做梦的阶段。
现在,让我们一起看看 Claude Code 的 Dream 系统是怎么工作的。
四个阶段
Dream 系统有四个阶段,代码注释里直接写明了: Orient(定向)→ Gather(收集)→ Consolidate(巩固)→ Prune(修剪)。
我们一个一个来看。
Phase 1 · Orient(定向)
AI 醒来之后,第一步是搞清楚自己在哪里。它会扫描记忆目录,
读一个叫 MEMORY.md 的索引文件,快速浏览已有的记忆主题文件。
就像你早上起床的第一件事,是想起昨天到底发生了什么。
Phase 2 · Gather(收集)
然后是收集新信号。Dream 系统有优先级顺序: 首先看"日志"(如果有按天存档的操作日志), 然后检查旧记忆里有没有和现状矛盾的内容, 最后才会去 grep 对话记录文件——但代码注释里特别强调: "不要穷尽地读所有记录。只寻找你已经怀疑有价值的东西。"
这个细节很关键。Dream 系统不是无差别地扫描所有信息, 而是基于已有认知去主动寻找线索。这更接近人类的"反刍思考", 而不是机械的数据备份。
Phase 3 · Consolidate(巩固)
把值得记住的事情写进持久化的记忆文件。 重点不是新建一堆文件,而是把新信号合并进已有的主题文件里, 避免重复,把相对日期("昨天"、"上周")转换成绝对日期以防日后失去意义, 删掉已经被证伪的旧记忆。
Phase 4 · Prune(修剪)
最后,更新索引文件,保持它的精简。代码里有一个硬性限制: 索引文件不能超过 200 行,总体积不能超过 25KB。 原话是这么说的:
索引文件的定位
"它是索引,不是存储仓库。每条条目应该是不超过 150 个字符的一行: [标题](文件.md) — 一句话摘要。不要把记忆内容直接写进索引里。"
然后它会删掉过时的、错误的、已被覆盖的记忆指针, 缩短太长的条目,给新的重要记忆腾出位置。
四个阶段,跑完一遍,Dream 结束。AI 继续去做你让它做的事。
什么时候会"做梦"
Dream 不是随时都会发生的。它有三道门,必须同时满足才会触发:
时间门: 距离上次记忆巩固至少 24 小时。 会话门: 在这段时间里,至少有 5 个不同的工作会话。 扫描节流: 距离上次检查至少 10 分钟,防止频繁重复触发。
还有一道隐形的门:如果当前是 KAIROS 模式(Anthropic 尚未公开发布的一种"始终在线"的 AI 助手模式), 或者是远程模式,Dream 会直接跳过——这两种情况有各自的记忆处理机制。
Dream 的触发条件
≥24小时未做过记忆巩固 + ≥5个工作会话已积累 + 当前非 KAIROS/远程模式 + 距上次检查 ≥10分钟,四个条件同时满足,Dream 才会启动。
翻译成人话:Claude 不会在你和它密集交互的时候去"做梦", 只有在它"休息"了足够长时间、积累了足够多的新经历之后,才会在下次被唤醒时悄悄处理那些记忆。
这是有意为之,还是趋同演化?
这里有一个让我想了很久的问题。
认知科学里有一个理论,叫 海马体重放(Hippocampal Replay): 大脑在睡眠期间会重新"播放"白天的经历,把短期记忆转化为长期记忆。 这个过程在生物学上被观察和研究了几十年。
Claude Code 的 Dream 系统,在结构上和这个理论高度吻合: 等待积累足够的"经历"(会话数),在"休息"期间(24小时间隔)触发, 用四个阶段对记忆进行整理和精简。
但 Anthropic 的工程师在设计这个系统的时候,真的是在有意模仿人脑吗? 还是说,当你面对"如何让 AI 有效管理长期记忆"这个工程问题时, 这套四步流程是最自然的解法——而人脑在进化中碰巧也得出了同一个答案?
生物学里把这叫做趋同演化(Convergent Evolution): 不同的物种,在面对相同的环境压力时,独立演化出了相似的解决方案。 鸟的翅膀和蝙蝠的翅膀,从完全不同的祖先出发,走向了同一种形态。
也许,当你用计算机系统解决"如何可靠地存储和整理长期记忆"这个问题时, 四步流程就是那个收敛解——无论你是进化了数百万年的神经网络,还是一群深夜写代码的工程师。
一个细节:它有多诚实
读这段代码时,有一个技术细节让我印象深刻,值得单独说一下。
Dream 系统在追踪"修改了哪些文件"时, 代码注释里特别写了这样一段话:
"This is an INCOMPLETE reflection of what the dream agent actually changed — it misses any bash-mediated writes and only captures the tool calls we pattern-match. Treat as 'at least these were touched', not 'only these were touched'."
— 来自泄露源码 tasks/DreamTask/DreamTask.ts翻译过来:"这份记录并不完整——它只能捕捉到我们通过模式匹配追踪的工具调用, 会遗漏掉通过命令行直接写入的文件变更。把它当作'至少动了这些', 而不是'只动了这些'。"
这段注释是在告诉维护这个代码的工程师:这个追踪是不完整的,请不要过度依赖它。
这种主动标注自己局限性的代码风格,在工程实践里不常见。 大多数代码注释要么解释"它做了什么",要么在 bug 出现后才事后补充限制条件。 但这里是主动地、提前地告诉读者:这段代码的输出有已知的不完整性,请自行决定如何使用。
这个细节透露出一种特定的工程文化:不追求"看起来完美",而是追求"真实地记录现状"。
一个你可能关心的实际问题
如果你用 Claude Code 做开发工作,Dream 系统意味着什么?
意味着 Claude Code 不只是每次对话里的即时工具, 它还有一个持续在后台运行的记忆系统,会随着你的使用而演进。 你今天跟它讨论的项目架构决策,可能会被它整理进记忆, 两周后当你重新打开同一个项目时,它"记得"你们之前的讨论。
当然,这个系统目前仍然是有限制的—— 它不会无限积累记忆,而是主动修剪、保持精简。 但方向是明确的:Anthropic 在让 Claude Code 从一个"对话工具" 变成一个"有记忆的长期工作伙伴"。
而这个设计,他们选择叫它 Dream。
写在最后
如果 AI 需要"睡觉"来整理记忆,如果它需要"休息"才能更好地记住重要的事—— 也许,遗忘和休息不是人类智能的缺陷,而是任何有效记忆系统的必要设计。