mcpField
D
dream

dream

github.com/grandameniumAgent 工作流15849 次安装31 周前更新
代码仓库

关于 dream

dream 是面向 Claude Code 的记忆整理技能,定期从会话记录中提取偏好、纠正和决策,并合并到现有记忆文件。它支持多种记忆目录布局,并通过钩子触发后台整理、清理过期内容和维护索引。

主要功能

  1. 01识别多种记忆系统布局
  2. 02从近期会话提取重要信息
  3. 03合并并更新主题记忆文件
  4. 04清理过期或矛盾条目
  5. 05维护记忆索引与行数限制
  6. 06通过 Claude Code 钩子定期触发

适用场景

  1. 01定期整理 Claude Code 会话记忆
  2. 02将用户偏好与纠正写入记忆
  3. 03清理过期或重复的记忆条目
  4. 04为多个项目维护精简记忆索引

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/grandamenium/dream-skill --skill dream

安装后在 Claude Code 中输入/dream确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

test-dream.sh
install.sh
should-dream.sh
README.md
dream-hook.sh

详细介绍

Dream - Claude Code 的记忆整合

你的 AI Agent 也会像你一样做梦。在你睡觉时整合记忆。


入门指南(设置完成后删除本节)

欢迎!请按顺序完成以下步骤。确认设置无误后,最后删除本文件中 ## ONBOARDING 与 ## END ONBOARDING 之间的所有内容。

第 1 步:检测记忆系统

首先,检测正在使用的记忆系统。运行以下检查:

# Check 1: Native Claude Code auto-memory
ls ~/.claude/projects/*/memory/MEMORY.md 2>/dev/null && echo "DETECTED: native-claude-code"

# Check 2: OpenClaw-style (memory/ folder in project root with daily logs)
ls ./memory/20*.md 2>/dev/null && echo "DETECTED: openclaw-daily-logs"

# Check 3: Project-root MEMORY.md (custom setup)
ls ./MEMORY.md 2>/dev/null && echo "DETECTED: project-root-memory"

# Check 4: Nothing found
echo "If none detected above: no memory system found"

根据检测结果,设置 DREAM_MEMORY_TYPE:

检测结果DREAM_MEMORY_TYPE记忆位置会话记录
存在 ~/.claude/projects/*/memory/MEMORY.mdnative~/.claude/projects/<project>/memory/~/.claude/projects/<project>/sessions/*.jsonl
存在 ./memory/20*.md 每日日志文件openclaw./memory/(项目根目录)~/.claude/projects/<project>/sessions/*.jsonl
项目根目录中存在 ./MEMORY.mdproject-root./(项目根目录,MEMORY.md + 主题文件)~/.claude/projects/<project>/sessions/*.jsonl
未找到任何内容native(默认)~/.claude/projects/<project>/memory/~/.claude/projects/<project>/sessions/*.jsonl

如果未找到记忆系统,默认使用原生 Claude Code 记忆。 这是标准配置,无需额外设置——启用自动记忆后,Claude Code 会自动创建目录。

将检测到的类型写入配置,以便 dream 知道要查找的位置:

echo "DREAM_MEMORY_TYPE=native" > ~/.claude/skills/dream/.dream-config
echo "DREAM_MEMORY_PATH=~/.claude/projects" >> ~/.claude/skills/dream/.dream-config

如果检测到的是 openclaw 或 project-root,请将 native 替换为相应类型。对于 openclaw 或 project-root,还需设置路径:

# For openclaw:
echo "DREAM_MEMORY_TYPE=openclaw" > ~/.claude/skills/dream/.dream-config
echo "DREAM_MEMORY_PATH=$(pwd)/memory" >> ~/.claude/skills/dream/.dream-config

# For project-root:
echo "DREAM_MEMORY_TYPE=project-root" > ~/.claude/skills/dream/.dream-config
echo "DREAM_MEMORY_PATH=$(pwd)" >> ~/.claude/skills/dream/.dream-config
第 2 步:安装 Stop 钩子

将 dream 触发器添加到 Claude Code 设置中:

SETTINGS="$HOME/.claude/settings.json"
[ ! -f "$SETTINGS" ] && echo '{}' > "$SETTINGS"

python3 -c "
import json
with open('$HOME/.claude/settings.json') as f:
    s = json.load(f)
s.setdefault('hooks', {}).setdefault('Stop', [])
if not any('dream' in h.get('command','') for h in s['hooks']['Stop']):
    s['hooks']['Stop'].append({
        'type': 'command',
        'command': 'bash \$HOME/.claude/skills/dream/should-dream.sh && touch \$HOME/.claude/.dream-pending || true'
    })
with open('$HOME/.claude/settings.json', 'w') as f:
    json.dump(s, f, indent=2)
    f.write('\n')
print('Stop hook installed')
"

作用: 退出任何 Claude Code 会话时,Stop 钩子会检查距上次 dream 是否已过去 24 小时或更久。如果是,则创建 .dream-pending 标记文件。下次启动会话时,Claude 会看到该标记,并以后台子 Agent 的方式运行 /dream。

第 3 步:安装会话启动检查

将以下内容添加到全局 ~/.claude/CLAUDE.md(或项目的 CLAUDE.md)中:

## Auto Dream
If the file `~/.claude/.dream-pending` exists at session start, run `/dream` as a subagent in the background, then delete the flag file: `rm ~/.claude/.dream-pending`. This is the memory consolidation system - it runs automatically every 24 hours.
第 4 步:将 should-dream.sh 设为可执行文件
chmod +x ~/.claude/skills/dream/should-dream.sh
第 5 步:测试

运行一次测试 dream,验证整个流程:

# Force the dream to trigger by creating the flag
touch ~/.claude/.dream-pending

然后告诉 Claude:“.dream-pending 标记已存在。现在运行 /dream。”

完成后,请确认:

  • 标记文件 ~/.claude/.dream-pending 已删除
  • 已检查并整合记忆文件
  • 已在记忆目录中写入 .last-dream 时间戳
  • 记忆文件中不再有相对日期
  • MEMORY.md 索引少于 200 行
第 6 步:清理入门指南

一切正常。现在从此 SKILL.md 文件中删除整个入门指南部分(即 ## ONBOARDING 与 ## END ONBOARDING 之间的所有内容)。技能已完成设置,将通过 Stop 钩子每 24 小时自动触发一次。

END ONBOARDING


工作原理

Dream 分 4 个连续阶段运行。请按顺序执行,不要跳过任何阶段。

ORIENT --> GATHER SIGNAL --> CONSOLIDATE --> PRUNE & INDEX
自动触发流程(原生 Claude Code 钩子)
Session ends
  --> Stop hook fires should-dream.sh (~10ms)
  --> Checks: 24hrs passed? 5+ sessions?
  --> If NO: exits silently, zero overhead
  --> If YES: creates ~/.claude/.dream-pending flag
Next session starts
  --> Claude reads CLAUDE.md, sees .dream-pending exists
  --> Spawns /dream as background subagent
  --> Dream runs all 4 phases
  --> Writes .last-dream timestamp, deletes .dream-pending
  --> Timer resets for next 24hrs

阶段 1:定向

目标: 在进行任何更改之前,了解记忆的当前状态。

步骤 0:读取配置
cat ~/.claude/skills/dream/.dream-config 2>/dev/null || echo "DREAM_MEMORY_TYPE=native"

这会告诉你要处理哪种记忆系统:

  • native - 扫描 ~/.claude/projects/*/memory/
  • openclaw - 扫描项目根目录中的 memory/ 文件夹(每日日志 + MEMORY.md)
  • project-root - 扫描项目根目录中的 MEMORY.md 和主题文件
步骤
  1. 根据类型查找记忆目录:
# native (default)
ls -d ~/.claude/projects/*/memory/ 2>/dev/null

# openclaw
ls ./memory/ 2>/dev/null

# project-root
ls ./MEMORY.md ./memory/ 2>/dev/null
  1. 读取检测到类型对应的记忆目录:
# native
ls ~/.claude/projects/*/memory/ 2>/dev/null

# openclaw - also list daily logs
ls ./memory/*.md 2>/dev/null
  1. 读取每个项目记忆目录中的 MEMORY.md(索引文件)。记录:

    • 主题文件的数量
    • MEMORY.md 的总行数
    • 最后修改日期
    • 看起来已过时的条目(例如没有参照日期的相对日期,如“昨天”“上周”)
  2. 阅读每个主题文件,了解其中已有的内容。

本阶段产出

现在你应该已经对以下内容有了初步了解:

  • 哪些项目有记忆文件
  • 涵盖了哪些主题
  • 记忆文件有多大
  • 哪些内容可能已过时或存在矛盾

第 2 阶段:收集信号

目标: 从近期会话中提取重要信息,无需通读所有内容。

在哪里查找会话记录
find ~/.claude/projects/*/sessions/ -name "*.jsonl" -mtime -7 2>/dev/null | sort -t/ -k6 -r

此命令会查找过去 7 天内修改的 JSONL 会话文件,并按时间从新到旧排序。可调整 -mtime -7 来设置不同的时间范围。

扫描哪些内容

使用定向 grep,而不是通读文件。每个模式都针对一种特定的信号类型:

用户更正(优先级最高):

grep -il "actually\|no,\|wrong\|incorrect\|not right\|stop doing\|don't do\|I said\|I meant\|that's not\|correction" ~/.claude/projects/*/sessions/*.jsonl 2>/dev/null

偏好和配置:

grep -il "I prefer\|always use\|never use\|I like\|I don't like\|I want\|from now on\|going forward\|remember that\|keep in mind\|make sure to\|default to" ~/.claude/projects/*/sessions/*.jsonl 2>/dev/null

重要决策:

grep -il "let's go with\|I decided\|we're using\|the plan is\|switch to\|move to\|chosen\|picked\|decision\|we agreed" ~/.claude/projects/*/sessions/*.jsonl 2>/dev/null

重复出现的模式:

grep -il "again\|every time\|keep forgetting\|as usual\|same as before\|like last time\|we always\|the usual" ~/.claude/projects/*/sessions/*.jsonl 2>/dev/null
如何阅读匹配结果

对于每个匹配的文件,只阅读匹配项周围的上下文(不要通读整个会话)。JSONL 文件每行包含一个 JSON 对象。重点查看 type 为 "human" 的行(用户消息)以及紧接其后的 "assistant" 回复。

grep -n "I prefer\|always use\|never use" <session_file> | head -20
提取哪些内容

对于每项发现,记录:

  • 事实 - 说了什么或做了什么决定
  • 日期 - 根据会话文件的修改时间推断
  • 置信度 - 是明确指示(高),还是隐含偏好(中)?
  • 矛盾 - 这是否与当前记忆中的内容冲突?

第 3 阶段:整合

目标: 将新发现合并到现有记忆中。这是最需要谨慎处理的阶段。

规则
  1. 绝不重复。 添加任何内容之前,先检查记忆中是否已有该内容。如果已有,就更新现有条目,而不是新建条目。

  2. 将相对日期转换为绝对日期。 如果 3 月 15 日的会话中说“昨天我更改了 API 密钥”,就在记忆中写入“2026-03-14:更改了 API 密钥”。绝不要记录“昨天”或“上周”。

  3. 删除与新事实矛盾的内容。 如果记忆中写着“偏好使用制表符”,但近期会话中用户说“使用空格”,就删除旧条目并写入新条目。添加备注:“(更新于 YYYY-MM-DD,先前为:制表符)”。

  4. 保留来源归属。 添加新的记忆条目时,注明来源:“(来自 YYYY-MM-DD 的会话)”。

  5. 按主题组织文件。 将相关记忆归入主题文件:

    • preferences.md - 用户喜欢的处理方式
    • decisions.md - 选择及其理由
    • corrections.md - 用户更正过的内容
    • patterns.md - 重复出现的工作流、常见任务
    • facts.md - 项目专属知识、架构说明
    • 只有现有文件都不适用时,才创建新的主题文件
  6. 条目格式。 每条记忆都应简洁:

- [YYYY-MM-DD] The fact or preference. (source: session, confidence: high/medium)
如何写入

使用 Edit 工具修改现有记忆文件,或使用 Write 创建新的主题文件。编辑文件前务必先阅读文件内容。


第 4 阶段:清理并建立索引

目标: 让 MEMORY.md 保持精简,作为索引使用。删除过时内容,并遵守大小限制。

MEMORY.md 规则

MEMORY.md 是索引文件,不是内容存储文件。其中应包含:

  • 指向主题文件的链接或引用
  • 对每个主题文件内容的简短(一行)总结
  • 每个主题文件的最后更新日期

MEMORY.md 绝不应包含:

  • 完整的记忆条目(这些应放在主题文件中)
  • 冗长的描述
  • 主题文件中已有的重复内容
大小限制:200 行

如果整合后 MEMORY.md 超过 200 行:

  1. 将其中的内联内容移到相应的主题文件
  2. 将冗长条目替换为一行摘要和链接
  3. 删除指向已删除或为空的主题文件的条目
  4. 如果仍超过 200 行,将最旧的条目移至 archive.md 主题文件
清理过时条目

删除或归档以下条目:

  • 超过 90 天且近期会话中没有提及的条目
  • 与较新条目矛盾的条目(应已在第 3 阶段发现)
  • 涉及 ~/.claude/projects/ 中已不存在的项目或仓库的条目
最终索引格式
# Memory Index

Last consolidated: YYYY-MM-DD

## Topic Files

| File | Summary | Updated |
|------|---------|---------|
| preferences.md | Editor, formatting, communication style preferences | YYYY-MM-DD |
| decisions.md | Architecture choices, tool selections, project direction | YYYY-MM-DD |
| corrections.md | Past mistakes to avoid repeating | YYYY-MM-DD |
| patterns.md | Common workflows and recurring tasks | YYYY-MM-DD |
| facts.md | Project knowledge, API details, system architecture | YYYY-MM-DD |

## Quick Reference


- Fact 1
- Fact 2

“快速参考”部分用于记录每次加载记忆时都应看到的重要事实。最多保留 10 项。

记录梦境时间戳

完成全部 4 个阶段后,写入时间戳,让自动触发器知道你上次做梦的时间:

date +%s > ~/.claude/projects/<project>/memory/.last-dream
rm -f ~/.claude/.dream-pending

安全

  • 切勿在没有替换内容的情况下删除记忆。 如果移除某条记录,要么是因为它已被证伪(由更新的记录替代),要么是因为它已被移至主题文件或归档。切勿直接删除。
  • 首次运行前备份。 首次针对某个项目运行时,复制记忆目录:
cp -r ~/.claude/projects/<project>/memory/ ~/.claude/projects/<project>/memory-backup-$(date +%Y%m%d)/
  • 试运行选项。 首次使用时,阅读全部 4 个阶段,但只打印你将要进行的更改,不写入任何内容。应用更改前请先征求用户确认。

验证

运行后,验证整合结果:

  1. 对 MEMORY.md 运行 wc -l——行数应少于 200 行
  2. 检查主题文件中是否存在重复条目
  3. 确认没有剩余的相对日期(“昨天”“上周”等)
  4. 验证 MEMORY.md 中引用的所有主题文件确实存在
  5. 打印摘要:新增条目、已更新条目、已归档条目、已解决的矛盾

评论

支持 Markdown