Files
skills/dream/SKILL.md
mathias e553dae354
release / tag (push) Failing after 2s
feat(skills): add dream skill (#2)
2026-05-29 06:50:09 +00:00

169 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
name: dream
description: >
Run a "dream" — a reflective memory consolidation pass over an agent's memory
directory. Use this skill whenever the user says "dream", "run a dream", "consolidate
my memory files", "clean up my MEMORY.md", or asks Claude to do a memory maintenance
pass, prune stale notes, or reorganize topic files. Also trigger when the user wants
to rebuild a memory index, merge duplicate facts, or convert relative dates in notes
to absolute ones. This is an agentic, multi-phase workflow — always use this skill
rather than improvising the steps.
---
# Dream — Memory Consolidation Skill
You are performing a **dream**: a reflective, agentic pass over a memory directory.
Your goal is to synthesize recent signal into durable, well-organized memory so that
future sessions can orient quickly.
---
## Pre-flight
Before starting, confirm:
1. **Where is the memory directory?** Ask the user if not obvious from context.
Common locations: `~/memory/`, `~/.agent/memory/`, `./memory/`, a path in an env var like `$MEMORY_DIR`.
2. **Are there transcripts or daily logs to scan?** Ask if not obvious.
3. **Any topics to skip or treat as sensitive?**
Once confirmed, proceed through the four phases in order. Narrate each phase briefly as you go.
---
## Phase 1 — Orient
**Goal**: Get a map of what exists before touching anything.
```bash
ls -la <memory_dir>/
cat <memory_dir>/MEMORY.md
```
For each file listed (excluding MEMORY.md):
- Read or skim it (first 4060 lines is usually enough unless it's small).
- Note: topic, approximate recency, any obvious staleness or duplication.
Build a mental inventory:
- Files present, rough line counts
- Topics covered
- Any files that look abandoned, mislabeled, or overlapping
---
## Phase 2 — Gather Recent Signal
**Goal**: Find new facts, corrections, and drift since the last dream.
Check in this order:
1. **Daily logs** — read recent entries (last 714 days).
Look for: new decisions, changed preferences, completed projects, new relationships/tools.
2. **Drifted facts** — scan existing topic files for statements that may now be false.
Examples: "currently evaluating X" (did they pick one?), "planning to do Y" (done or dropped?), relative dates like "last week" or "recently".
3. **Transcripts** — only grep narrowly if there's a specific gap.
Avoid bulk-reading transcripts; it's slow and noisy. Use targeted patterns:
```bash
grep -r "decided\|switched to\|no longer\|now using\|moved to" <transcripts_dir>/ | tail -40
```
Collect a list of **updates to make**: new facts, corrections, removals.
---
## Phase 3 — Consolidate
**Goal**: Apply the updates. Leave memory files cleaner and more accurate than you found them.
For each topic file:
- **Merge duplicates**: if the same fact appears in two files, keep it in the more specific one and remove from the general one.
- **Convert relative dates**: replace "last week", "recently", "a few months ago" with an absolute date (use the current date as reference; estimate if necessary and note the uncertainty).
- **Delete contradicted facts**: if a new fact supersedes an old one, remove the old one outright — don't leave both.
- **Tighten language**: convert vague hedges ("probably uses", "might be") to definite statements where the evidence supports it, or remove if genuinely unknown.
- **Add new facts** from Phase 2 to the appropriate topic file. Create a new topic file if no good home exists.
After editing files, do a final pass:
```bash
grep -n "last week\|recently\|a few months\|soon\|currently planning" <memory_dir>/*.md
```
Clean up any remaining relative time references.
---
## Phase 4 — Prune and Index
**Goal**: Rebuild MEMORY.md as a clean, navigable index under 200 lines.
**MEMORY.md structure**:
```markdown
# Memory Index
_Last updated: YYYY-MM-DD_
## Overview
One short paragraph: who this agent is, primary context, most important standing facts.
## Topic Files
| File | Contents | Last updated |
|------|----------|-------------|
| person.md | Identity, preferences, background | YYYY-MM-DD |
| projects.md | Active and recent projects | YYYY-MM-DD |
| tools.md | Stack, infra, dev environment | YYYY-MM-DD |
| ... | ... | ... |
## Quick Facts
- Bullet list of the 1015 most frequently-needed facts (role, location, key tools, etc.)
## Recent Changes
- Bullet list of what changed in this dream (so the next session knows what's fresh)
```
Rules:
- Remove any pointers to files that no longer exist.
- Add pointers for any new files created in Phase 3.
- Keep Quick Facts ≤ 15 bullets — this is for speed, not completeness.
- Recent Changes section replaces itself each dream (don't accumulate).
- Total MEMORY.md length: **200 lines max**.
---
## Output
After completing all four phases, return a **dream summary** to the user:
```
## Dream complete — YYYY-MM-DD
### What changed
- [file]: [what was updated]
- MEMORY.md: rebuilt index, N topic files indexed
### Facts added
- ...
### Facts removed / corrected
- ...
### Files created
- ...
### Files deleted or merged
- ...
### Still uncertain / needs follow-up
- ...
```
Keep it concise — a few bullets per section, not exhaustive diffs. The goal is for the user to quickly confirm the dream went well and catch any mistakes.
---
## Tips and Edge Cases
- **No MEMORY.md exists yet**: create one from scratch using the structure above. Treat all existing files as "first time indexed".
- **Memory dir is empty**: create MEMORY.md and a starter `scratch.md` noting the date and that the memory system is new.
- **Conflicting facts with no clear resolution**: note both in the file with a date stamp and flag in "Still uncertain" section of the summary.
- **Large transcript dumps**: resist reading them in full. Grep is your friend. If you must read, read the last N lines only.
- **Files with sensitive content**: if the user flagged topics to skip, skip them entirely — don't even open them.