AutoDream:后台记忆整合与自我完善
核心概念
AutoDream 是 Claude Code 的后台自动化记忆处理器。如果说 Auto Memory 是在对话中实时记录“碎片化知识”,那么 AutoDream 就是在系统空闲时对这些记忆进行的“离线清洗”与“归并”。它模拟了人类睡眠时的记忆固化过程,通过一个独立的子代理(Sub-agent)审阅历史对话,提炼出更高维度的模式,并优化 .claude/memory 下的文档结构。
源码级拆解
AutoDream 的实现核心是位于 src/services/autoDream/ 目录下的处理逻辑:
触发逻辑与“三关制” (Gate Logic): 在
autoDream.ts中,系统每次在交互空闲时都会通过executeAutoDream调用runAutoDream,但只有在以下三个条件全部满足时才会真正“开火”:- 时间闸门 (Time Gate):距离上次整合(
lastConsolidatedAt)已超过minHours(默认 24 小时)。 - 会话闸门 (Session Gate):自上次整合以来,至少有
minSessions(默认 5 个)历史会话发生了变动。 - 锁定机制 (Lock Gate):必须成功通过
tryAcquireConsolidationLock获取锁定,防止多个进程同时进行“梦境整合”。
- 时间闸门 (Time Gate):距离上次整合(
整合过程与子代理模式: 满足条件后,系统调用
runForkedAgent启动一个“隐形”的子代理。这个代理会:- 接收由
consolidationPrompt.ts构建的指令,目标是“提高记忆的检索效率和准确性”。 - 对
memoryRoot(通常是.claude/memory/)下的文件进行读写。 - 在执行过程中,子代理被施加了严格的工具限制(如 Bash 工具仅限 Read-Only 操作),确保“整合”过程不会意外修改生产代码。
- 接收由
锁定状态管理 (Consolidation Lock):
consolidationLock.ts维护了一个名为.consolidate-lock的文件。它的特殊之处在于:- 文件内容:存储当前持有锁的进程 PID,用于检测僵尸进程(Zombie Processes)。
- 元数据 (mtime):该锁文件的
mtime(修改时间)被定义为全局的lastConsolidatedAt。这意味着,即便没有正在运行的任务,锁文件也会作为一个持久的时间戳存在。
边界条件
- 回滚逻辑 (Rollback):如果子代理在执行过程中崩溃或被用户杀死(Kill),
rollbackConsolidationLock会将.consolidate-lock的mtime重置回执行前的状态,以便系统在下个周期重新尝试。 - 隐私与安全:虽然是后台任务,但它依然遵循
isAutoMemoryEnabled的全局开关。如果用户禁用了自动记忆,AutoDream 也将不再工作。 - 资源敏感:AutoDream 的默认频率非常低(24 小时/5 会话),这是为了避免频繁的模型调用产生不必要的成本。
相关主题
- 阅读
src/services/extractMemories/了解碎片化记忆是如何最初被捕获的。 - 阅读
src/utils/forkedAgent.ts了解 Claude Code 如何管理这些“后台子任务”。
源码锚点
claude-code-opensource/src/services/autoDream/autoDream.ts: 任务调度与触发核心。
📄 src/services/autoDream/autoDream.ts — 任务调度与触发核心。
typescript
const SESSION_SCAN_INTERVAL_MS = 10 * 60 * 1000
type AutoDreamConfig = {
minHours: number
minSessions: number
}claude-code-opensource/src/services/autoDream/consolidationLock.ts: 锁定与时间管理实现。
📄 src/services/autoDream/consolidationLock.ts — 锁定与时间管理实现。
typescript
const LOCK_FILE = '.consolidate-lock'
// Stale past this even if the PID is live (PID reuse guard).
const HOLDER_STALE_MS = 60 * 60 * 1000
function lockPath(): string {
return join(getAutoMemPath(), LOCK_FILE)
}claude-code-opensource/src/tasks/DreamTask/DreamTask.ts: 对话状态与 UI 任务反馈逻辑。
📄 src/tasks/DreamTask/DreamTask.ts — 对话状态与 UI 任务反馈逻辑。
typescript
const MAX_TURNS = 30
// A single assistant turn from the dream agent, tool uses collapsed to a count.
export type DreamTurn = {
text: string
toolUseCount: number
}