/dream-skill
Memory consolidation skill for Claude Code. Scans session transcripts for corrections, decisions, preferences, and patterns, then merges findings into persistent memory files. Auto-triggers via native Stop hook every 24hrs. Inspired by how sleep consolidates human memory.
$ npx -y skills add grandamenium/dream-skill --skill dream-skill --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/dream-skill
Context preview
The summary Claude sees to decide when to auto-load this skill.
Memory consolidation skill for Claude Code. Scans session transcripts for corrections, decisions, preferences, and patterns, then merges findings into persistent memory files. Auto-triggers via native Stop hook every 24hrs. Inspired by how sleep consolidates human memory.
SKILL.md
dream-skill.SKILL.mdname: dream
description: "Memory consolidation skill for Claude Code. Scans session transcripts for corrections, decisions, preferences, and patterns, then merges findings into persistent memory files. Auto-triggers via native Stop hook every 24hrs. Inspired by how sleep consolidates human memory."
tags: [memory, maintenance, consolidation, autonomous, hook]
Dream - Memory Consolidation for Claude Code
> Your AI agent dreams like you do. Consolidates memory while you sleep.
---
ONBOARDING (delete this section after setup is complete)
**Welcome! Follow these steps in order. After setup is verified, delete everything between `## ONBOARDING` and `## END ONBOARDING` from this file as the final step.**
Step 1: Detect memory system
Before anything else, detect which memory system is in use. Run these checks:
# 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"
**Based on what you detect, set DREAM_MEMORY_TYPE:**
| Detection | DREAM_MEMORY_TYPE | Memory location | Session transcripts | |-----------|-------------------|-----------------|-------------------| | `~/.claude/projects/*/memory/MEMORY.md` exists | `native` | `~/.claude/projects/<project>/memory/` | `~/.claude/projects/<project>/sessions/*.jsonl` | | `./memory/20*.md` daily log files exist | `openclaw` | `./memory/` (project root) | `~/.claude/projects/<project>/sessions/*.jsonl` | | `./MEMORY.md` exists in project root | `project-root` | `./` (project root, MEMORY.md + topic files) | `~/.claude/projects/<project>/sessions/*.jsonl` | | Nothing found | `native` (default) | `~/.claude/projects/<project>/memory/` | `~/.claude/projects/<project>/sessions/*.jsonl` |
**If no memory system is found, default to native Claude Code memory.** This is the standard and requires no extra setup - Claude Code creates the directory automatically when auto-memory is enabled.
Write the detected type to the config so dream knows where to look:
echo "DREAM_MEMORY_TYPE=native" > ~/.claude/skills/dream/.dream-config
echo "DREAM_MEMORY_PATH=~/.claude/projects" >> ~/.claude/skills/dream/.dream-config
Replace `native` with `openclaw` or `project-root` if that's what was detected. For `openclaw` or `project-root`, also set the path:
# 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
Step 2: Install the Stop hook
Add the dream trigger to your Claude Code settings:
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')
"**What this does:** When you exit any Claude Code session, the Stop hook checks if 24+ hours have passed since the last dream. If yes, it creates a `.dream-pending` flag file. On your next session start, Claude sees the flag and runs `/dream` as a background subagent.
Step 3: Install the session-start check
Add this to your global `~/.claude/CLAUDE.md` (or project 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.
Step 4: Make should-dream.sh executable
chmod +x ~/.claude/skills/dream/should-dream.sh
Step 5: Test it
Run a test dream to verify the full flow:
# Force the dream to trigger by creating the flag
touch ~/.claude/.dream-pending
Then tell Claude: "The .dream-pending flag exists. Run /dream now."
After it completes, verify:
- The flag file `~/.claude/.dream-pending` was deleted
- Memory files were reviewed and consolidated
- A `.last-dream` timestamp was written in the memory directory
- No relative dates remain in memory files
- MEMORY.md index is under 200 lines
Step 6: Clean up onboarding
Everything is working. Now delete this entire ONBOARDING section from this SKILL.md file (everything between `## ONBOARDING` and `## END ONBOARDING`). The skill is fully set up and will auto-trigger every 24 hours via the Stop hook.
END ONBOARDING
---
How It Works
Dream runs in 4 sequential phases. Execute them in order. Do not skip phases.
ORIENT --> GATHER SIGNAL --> CONSOLIDATE --> PRUNE & INDEX
Auto-trigger flow (native Claude Code hooks)
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
---
Phase 1: ORIENT
**Goal:*
Read more
name: dream description: "Memory consolidation skill for Claude Code. Scans session transcripts for corrections, decisions, preferences, and patterns, then merges findings into persistent memory files. Auto-triggers via native Stop hook every 24hrs. Inspired by how sleep consolidates human memory." tags: [memory, maintenance, consolidation, autonomous, hook]
Dream - Memory Consolidation for Claude Code
> Your AI agent dreams like you do. Consolidates memory while you sleep.
---
ONBOARDING (delete this section after setup is complete)
**Welcome! Follow these steps in order. After setup is verified, delete everything between `## ONBOARDING` and `## END ONBOARDING` from this file as the final step.**
Step 1: Detect memory system
Before anything else, detect which memory system is in use. Run these checks:
# 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"
**Based on what you detect, set DREAM_MEMORY_TYPE:**
| Detection | DREAM_MEMORY_TYPE | Memory location | Session transcripts | |-----------|-------------------|-----------------|-------------------| | `~/.claude/projects/*/memory/MEMORY.md` exists | `native` | `~/.claude/projects/<project>/memory/` | `~/.claude/projects/<project>/sessions/*.jsonl` | | `./memory/20*.md` daily log files exist | `openclaw` | `./memory/` (project root) | `~/.claude/projects/<project>/sessions/*.jsonl` | | `./MEMORY.md` exists in project root | `project-root` | `./` (project root, MEMORY.md + topic files) | `~/.claude/projects/<project>/sessions/*.jsonl` | | Nothing found | `native` (default) | `~/.claude/projects/<project>/memory/` | `~/.claude/projects/<project>/sessions/*.jsonl` |
**If no memory system is found, default to native Claude Code memory.** This is the standard and requires no extra setup - Claude Code creates the directory automatically when auto-memory is enabled.
Write the detected type to the config so dream knows where to look:
echo "DREAM_MEMORY_TYPE=native" > ~/.claude/skills/dream/.dream-config echo "DREAM_MEMORY_PATH=~/.claude/projects" >> ~/.claude/skills/dream/.dream-config
Replace `native` with `openclaw` or `project-root` if that's what was detected. For `openclaw` or `project-root`, also set the path:
# 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
Step 2: Install the Stop hook
Add the dream trigger to your Claude Code settings:
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')
"**What this does:** When you exit any Claude Code session, the Stop hook checks if 24+ hours have passed since the last dream. If yes, it creates a `.dream-pending` flag file. On your next session start, Claude sees the flag and runs `/dream` as a background subagent.
Step 3: Install the session-start check
Add this to your global `~/.claude/CLAUDE.md` (or project 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.
Step 4: Make should-dream.sh executable
chmod +x ~/.claude/skills/dream/should-dream.sh
Step 5: Test it
Run a test dream to verify the full flow:
# Force the dream to trigger by creating the flag touch ~/.claude/.dream-pending
Then tell Claude: "The .dream-pending flag exists. Run /dream now."
After it completes, verify:
- The flag file `~/.claude/.dream-pending` was deleted
- Memory files were reviewed and consolidated
- A `.last-dream` timestamp was written in the memory directory
- No relative dates remain in memory files
- MEMORY.md index is under 200 lines
Step 6: Clean up onboarding
Everything is working. Now delete this entire ONBOARDING section from this SKILL.md file (everything between `## ONBOARDING` and `## END ONBOARDING`). The skill is fully set up and will auto-trigger every 24 hours via the Stop hook.
END ONBOARDING
---
How It Works
Dream runs in 4 sequential phases. Execute them in order. Do not skip phases.
ORIENT --> GATHER SIGNAL --> CONSOLIDATE --> PRUNE & INDEX
Auto-trigger flow (native Claude Code hooks)
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
---
Phase 1: ORIENT
**Goal:*
Your AI agent dreams like you do. Consolidates memory while you sleep. Anthropic is building an auto-dream feature into Claude Code (currently unreleased). This skill replicates that functionality today - no feature flags, no waiting for rollout.

