Auto Dream — 自动记忆整理
概述
Auto Dream 是 Claude Code 的后台记忆整合机制。它在会话间自动审查、组织和修剪持久化记忆文件,确保未来会话能快速获得准确的上下文。 记忆系统存储在文件系统中(默认~/.claude/projects/<project-slug>/memory/),由 MEMORY.md 索引文件和若干主题文件(如 user_language.md、project_overview.md)组成。随着会话积累,记忆会变得过时、冗余或矛盾——Dream 负责清理这些堆积。
架构
核心模块
记忆路径解析
优先级(src/memdir/paths.ts):
CLAUDE_COWORK_MEMORY_PATH_OVERRIDE环境变量(完整路径覆盖)autoMemoryDirectory设置项(settings.json,支持~/展开)- 默认:
<memoryBase>/projects/<sanitized-git-root>/memory/
memoryBase = CLAUDE_CODE_REMOTE_MEMORY_DIR 或 ~/.claude。
触发机制
自动触发(Auto Dream)
每个对话轮次结束后,executeAutoDream() 按顺序检查三重门控:
- Bash 工具限制为只读命令(
ls、grep、cat等) - 只能读写记忆目录内的文件
- 用户可在 Shift+Down 后台任务面板中查看进度或终止
手动触发(/dream 命令)
通过 /dream 命令随时触发,无门控限制:
- 在主循环中运行(非 forked agent),拥有完整工具权限
- 用户可实时观察操作过程
- 执行前自动更新锁文件 mtime
配置开关
默认值(无 GrowthBook 连接时):
整理流程(4 阶段)
Dream agent 执行的提示词包含 4 个阶段:Phase 1 — 定位(Orient)
ls记忆目录,查看现有文件- 读取
MEMORY.md索引 - 浏览现有主题文件,避免重复创建
Phase 2 — 采集信号(Gather)
按优先级收集新信息:- 日志文件(
logs/YYYY/MM/YYYY-MM-DD.md,KAIROS 模式下的追加式日志) - 过时记忆 — 与当前代码库状态矛盾的事实
- 会话记录 — 窄关键词 grep JSONL 文件(不全文读取)
Phase 3 — 整合(Consolidate)
- 合并新信号到现有主题文件,而非创建近似重复
- 将相对日期(“昨天”、“上周”)转为绝对日期
- 删除被推翻的事实
Phase 4 — 修剪与索引(Prune)
MEMORY.md保持在 200 行以内、25KB 以内- 每条索引项一行,不超过 150 字符
- 移除过时/错误/被取代的指针
记忆类型
记忆系统使用 4 种类型(src/memdir/memoryTypes.ts):
不保存的内容:代码模式、架构、文件路径(可从代码推导);Git 历史(
git log 权威);调试方案(代码中已有)。
锁文件机制
.consolidate-lock 文件位于记忆目录内:
- 文件内容:持有者 PID
- mtime:即
lastConsolidatedAt时间戳 - 过期:1 小时(防 PID 复用)
- 竞态处理:双进程同时写入时,后读验证 PID,失败者退出
- 回滚:forked agent 失败或被用户终止时,mtime 回退到获取前的值
使用场景
场景 1:日常开发中的自动整理
开发者连续多天使用 Claude Code 处理不同任务。Auto Dream 在积累 5+ 个会话且距上次整理 24 小时后自动触发,整合分散在多次会话中的用户偏好和项目决策。场景 2:手动整理记忆
用户发现 Claude 重复犯相同错误或遗忘之前的决策。输入/dream 立即触发整理,无需等待自动触发周期。
场景 3:新会话快速上下文
新会话启动时,MEMORY.md 被加载到上下文中。经过 Dream 整理的记忆文件结构清晰、信息准确,让 Claude 快速了解用户和项目。
场景 4:KAIROS 模式下的日志蒸馏
KAIROS(长驻助手模式)中,agent 以追加方式写入日期日志文件。Dream 负责将这些日志蒸馏为主题文件和MEMORY.md 索引。
与其他系统的关系
- extractMemories(
src/services/extractMemories/):每轮次结束时从对话中提取新记忆并写入。Dream 不负责提取,只负责整理。 - CLAUDE.md:项目级指令文件,加载到上下文中但不属于记忆系统。
- Team Memory(
TEAMMEMfeature):团队共享记忆目录,与个人记忆使用相同的 Dream 机制。