Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds the MEMORY.md index.

MITAuto-check: notes

Install Dream

skills CLI
$ npx skills add yonatangross/orchestkit --skill dream -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install yonatangross/orchestkit dream --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/yonatangross/orchestkit.git skills-src && mkdir -p .claude/skills && cp -r skills-src/src/skills/dream .claude/skills/dream && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
dream
GitHub stars
290
Token cost
~5.2k tokens
SKILL.md length
1,497 words
Files
5 (incl. scripts, references)
Skills in repo
108
Repo updated
First seen
Licence
MIT

At a glance

Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds the MEMORY.md index.

  • Works in 7 steps: Discover Memory Files → Detect Staleness → Detect Duplicates → …
  • Memory files accumulated over many sessions need cleanup
  • SKILL.md covers Argument Resolution, Overview, STEP 1: Discover Memory Files and STEP 2: Detect Staleness, plus 9 more sections
  • Runs JavaScript scripts from its folder

What it does

Dream is an agent skill from yonatangross/orchestkit. Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds the MEMORY.md index. Use when memory files accumulated over many sessions need cleanup. New decisions get stored by remember; searches run through memory; internals live in memory-fabric.

Its SKILL.md is about 5.2k tokens, which your agent loads only when the skill is triggered. The skill folder holds 6 other files, including scripts and reference files (for example `references/housekeeping.md`, `references/index-budget.md` and `references/safe-deletes.md`). Compatibility notes: Claude Code 2.1.277+

The repository describes itself as: The Complete AI Development Toolkit for Claude Code. 106 skills, 36 agents, 171 hooks. Install ork for stable (v9.x), or ork-alpha for the v10 line, which ships daily. The licence is MIT.

When your agent uses it

  • Memory files accumulated over many sessions need cleanup

Example prompts

  • “/dream”

Requirements

  • Python 3
  • Node.js
  • Compatibility (from SKILL.md): Claude Code 2.1.277+
  • Pre-approved tools (allowed-tools): Read, Write, Edit, Glob, Grep, Bash, mcp__memory__search_nodes, mcp__memory__open_nodes, mcp__memory__read_graph

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Discover Memory Files
  2. Detect Staleness
  3. Detect Duplicates
  4. Resolve Contradictions
  5. Execute Changes (or Dry Run)
  6. Report
  7. Cross-Repo Promotion Candidates (#3295)

What it can do on your machine

Read from SKILL.md and the folder at commit 02bbf9a. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Edit
    • Glob
    • Grep
    • Bash
    • mcp__memory__search_nodes
    • mcp__memory__open_nodes
    • mcp__memory__read_graph

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (JavaScript), which the agent can run.

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

  • Compatibility

    Claude Code 2.1.277+

    From compatibility in the SKILL.md frontmatter.

Context cost

Dream loads about 5.2k tokens when it runs, and up to ~7.5k if it reads all its reference files. Until then it costs about 75 tokens; SKILL.md has 1,497 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~75
When it runs · the whole SKILL.md, loaded when a task matches
~5.2k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~7.5k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Write, Edit, Glob, Grep, Bash, mcp__memory__search_nodes, mcp__memory__open_nodes, mcp__memory

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from yonatangross/orchestkit at commit 02bbf9a, republished under its MIT licence (© yonatangross). 1,497 words, ~5,203 tokens.

Download SKILL.mdSave it as .claude/skills/dream/SKILL.md (or your agent's skills folder). This skill also uses 4 other files; get the full folder from GitHub.
name
dream
description
Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds the MEMORY.md index. Use when memory files accumulated over many sessions need cleanup. New decisions get stored by remember; searches run through memory; internals live in memory-fabric.
allowed-tools
Read, Write, Edit, Glob, Grep, Bash, mcp__memory__search_nodes, mcp__memory__open_nodes, mcp__memory__read_graph
compatibility
Claude Code 2.1.277+
license
MIT
argument-hint
[--dry-run]
user-invocable
true
context
inherit
effort
low
model
sonnet
triggers.keywords
dream, consolidate, clean memory, prune memory, memory cleanup, stale memories, merge memories, memory maintenance, tidy memory, stale memory entries, memory…
triggers.examples
consolidate my memory files, clean up stale memory entries, run dream to prune old memories
triggers.anti-triggers
remember, save, store, search, recall, load context, implement, explore
metadata.version
1.1.0

Dream - Memory Consolidation

Deterministic memory maintenance: detect stale entries, merge duplicates, resolve contradictions, rebuild the MEMORY.md index. All pruning decisions are based on verifiable checks (file exists? function exists? duplicate content?), not LLM judgment.

Argument Resolution

python
DRY_RUN = "--dry-run" in "$ARGUMENTS"  # Preview changes without writing

Overview

Memory files accumulate across sessions. Over time they develop problems:

  • Stale references — memories pointing to files, functions, or classes that no longer exist
  • Duplicates — multiple memories covering the same topic with overlapping content
  • Contradictions — newer memories superseding older ones without cleanup
  • Index drift — MEMORY.md index out of sync with actual memory files

This skill fixes all four problems using deterministic checks only.

Finish line. Done means: MEMORY.md is rebuilt from the surviving files and passes the STEP 5.5 verify, the STEP 6 report is printed, and STEPs 7 to 9 have each run or printed a one-line skip reason.

Budget: one read pass over the discovered memory files (STEP 1), one MEMORY.md rewrite (STEP 5) plus the STEP 5.5 trailer rewrite when the index is over budget, and no subagents (every check is deterministic); stop and report at the finish line or the first cap, whichever comes first.

Cadence (CC 2.1.142+): Reactive compaction now sizes its first summarize attempt to the actual overflow, so long sessions stall mid-turn far less often. The "run nightly" cadence can relax toward "run when memory files accumulate" — consolidation is no longer needed to head off compaction inefficiency.


STEP 1: Discover Memory Files

python
# Find the memory directory (agent-specific or project-level)
# Agent memory lives in: .claude/agent-memory/<agent-id>/
# Project memory lives in: .claude/projects/<hash>/memory/
# Also check: .claude/memory/

memory_dirs = []
Glob(pattern=".claude/agent-memory/*/MEMORY.md")
Glob(pattern=".claude/projects/*/memory/MEMORY.md")
Glob(pattern=".claude/memory/MEMORY.md")

# For each discovered MEMORY.md, glob all *.md files in that directory
for dir in memory_dirs:
    Glob(pattern=f"{dir}/../*.md")  # All memory files alongside MEMORY.md

Read every discovered memory file. Parse frontmatter (name, description, type) and body content. Build an in-memory inventory:

inventory = [{
    "path": "/abs/path/to/file.md",
    "name": frontmatter.name,
    "type": frontmatter.type,  # user, feedback, project, reference
    "description": frontmatter.description,
    "body": body_text,
    "file_refs": [],      # extracted file paths
    "symbol_refs": [],    # extracted function/class names
    "topics": [],         # key phrases for duplicate detection
}]

STEP 2: Detect Staleness

For each memory file, extract references and verify they still exist.

2a: File Path References

Extract paths that look like file references (patterns: paths with / and file extensions, backtick-wrapped paths):

python
# Regex-like extraction from body text:
# - Paths containing / with common extensions: .py, .ts, .tsx, .js, .json, .md, .yaml, .yml, .sh
# - Backtick-wrapped paths: `src/something/file.ts`
# - Quoted paths in frontmatter descriptions

Classify each ref's SCOPE before verifying it. Glob only sees the current repo, so a path that lives anywhere else can never match and would otherwise be scored as missing. A memory about ~/.claude hooks, a homebrew cask, a cmux config, or another repo is not stale just because this repo does not contain it.

python
def scope(ref):
    # Anything rooted outside the working repo is UNVERIFIABLE, not missing.
    if ref.startswith(("~", "/", "$")):          return "UNVERIFIABLE"
    if ref.startswith(("http://", "https://")):  return "UNVERIFIABLE"
    if re.match(r'^[A-Za-z0-9_.-]+/', ref) and not (REPO / ref.split("/")[0]).exists():
        return "UNVERIFIABLE"   # first segment is not a real top-level dir here
    return "REPO_RELATIVE"

verifiable = [r for r in file_refs if scope(r) == "REPO_RELATIVE"]
external   = [r for r in file_refs if scope(r) == "UNVERIFIABLE"]

missing = []
for ref in verifiable:
    Glob(pattern=ref)
    # If no match → missing.append(ref)

The staleness ratio is computed over verifiable ONLY. external refs are recorded for the report and never counted toward pruning. A memory with zero verifiable refs is EVERGREEN no matter how many external paths it names.

2b: Symbol References

Extract function/class names (patterns: function_name(), ClassName, def function_name):

python
for symbol in symbol_refs:
    Grep(pattern=symbol, path=".", output_mode="files_with_matches", head_limit=1)
    # If no match → mark as STALE_SYMBOL_REF
2c: Staleness Classification
FindingClassificationAction
Zero VERIFIABLE refs (none, or all UNVERIFIABLE)EVERGREENKeep
All verifiable refs valid, all symbols foundFRESHKeep
Some verifiable refs missingPARTIALLY_STALEFlag for review
All verifiable refs missing AND all symbols missingFULLY_STALEPrune candidate

Only memories classified as FULLY_STALE are auto-pruned. PARTIALLY_STALE memories are reported but kept — the user decides.

2d: Prune guards — checked AFTER classification, before any delete

FULLY_STALE is necessary but not sufficient to delete. Every guard below downgrades to PARTIALLY_STALE (kept + flagged). These exist because memory files are not in git: a wrong delete is silent and unrecoverable, so the asymmetry always favours keeping.

python
GUARD_DAYS = 14

for m in list(fully_stale_files):
    reason = None
    # 1. Preferences do not decay because a path moved.
    if m["type"] == "user":
        reason = "type:user is never auto-pruned"
    # 2. A feedback/reference memory carries a LESSON; the file paths in it are
    #    illustrations, not a manifest. Its worth does not expire when an
    #    illustrative path moves, and ref-extraction is lossy anyway (it catches
    #    `file.ts` but misses `file.ts:186` and `functionName()`). Only project
    #    memories — which track live work against concrete files — are eligible
    #    to go fully stale on ref death.
    elif m["type"] in ("feedback", "reference"):
        reason = f"type:{m['type']} value is the lesson, not its file refs"
    # 3. Recently written memories describe the present, whatever their refs say.
    elif (now - m["mtime"]) < GUARD_DAYS * 86400:
        reason = f"modified within {GUARD_DAYS}d"
    # 4. A memory that exists to prevent a regression must outlive the code it cites.
    elif re.search(r'\b(do not|don\'t|never|avoid)\b', m["body"], re.I):
        reason = "carries a do-not/never directive"
    if reason:
        m["classification"] = "PARTIALLY_STALE"
        m["kept_reason"] = f"prune-guard: {reason}"
        fully_stale_files.remove(m)
        partially_stale_files.append(m)

Guard 3 is the subtle one. reference_cmux_scroll_blank_research said "RESOLVED; do NOT re-suggest tui:fullscreen on cmux" and every path it cited had moved. Deleting it reintroduces exactly the regression it was written to prevent. A memory whose value is a prohibition is at its most useful precisely when the original code is gone.

STEP 2.5: Consult-gate (#2351) — never prune a memory that's still being used

Closing the VERIFY loop: a deletion must survive the question "was this actually consulted?". A memory whose external refs all vanished (FULLY_STALE) but that the agent keeps looking up is still load-bearing — its refs are stale, its knowledge is live. So before pruning, read .claude/logs/memory-consult.jsonl (written by memory-validator on every mcp__memory__search_nodes/open_nodes/read_graph) and downgrade any recently-consulted FULLY_STALE memory to PARTIALLY_STALE (kept + flagged, not auto-deleted).

python
import json, time
from pathlib import Path

def recently_consulted_terms(days=14):
    log = Path(".claude/logs/memory-consult.jsonl")
    if not log.exists():
        return set()
    cutoff = time.time() - days * 86400
    terms = set()
    for line in log.read_text().splitlines():
        try:
            e = json.loads(line)
        except ValueError:
            continue  # best-effort: skip malformed lines
        # open_nodes carries exact entity names; search carries a query string
        terms.update(n.lower() for n in e.get("names", []))
        if e.get("query"):
            terms.update(w.lower() for w in e["query"].split() if len(w) > 2)
    return terms

consulted = recently_consulted_terms()
for m in list(fully_stale_files):
    slug = Path(m["path"]).stem.lower()
    name = (m.get("name") or "").lower()
    if name in consulted or any(c in slug or slug in c for c in consulted):
        m["classification"] = "PARTIALLY_STALE"
        m["kept_reason"] = "consult-gate: looked up in the last 14 days (#2351)"
        fully_stale_files.remove(m)
        partially_stale_files.append(m)

This is conservative by design — fuzzy term matching errs toward keeping a maybe-consulted memory rather than deleting a live one. The Step 6 report records each consult-gated keep (the "did it matter?" audit the loop was missing). If the log is absent (consult instrumentation not yet exercised), the gate is a no-op and pruning proceeds as before.


STEP 3: Detect Duplicates

Compare memories pairwise within the same directory. Two memories are duplicates when:

  1. Same type (both feedback, both project, etc.)
  2. Overlapping topic — 60%+ of significant words (excluding stopwords) appear in both bodies
  3. Same subject — name or description fields reference the same concept
python
stopwords = {"the", "a", "an", "is", "are", "was", "were", "be", "been",
             "have", "has", "had", "do", "does", "did", "will", "would",
             "could", "should", "may", "might", "can", "shall", "to", "of",
             "in", "for", "on", "with", "at", "by", "from", "as", "into",
             "through", "during", "before", "after", "this", "that", "it",
             "not", "no", "but", "or", "and", "if", "then", "than", "so"}

def significant_words(text):
    words = set(text.lower().split()) - stopwords
    return {w for w in words if len(w) > 2}

def overlap_ratio(words_a, words_b):
    if not words_a or not words_b:
        return 0.0
    intersection = words_a & words_b
    smaller = min(len(words_a), len(words_b))
    return len(intersection) / smaller if smaller > 0 else 0.0

# For each pair with same type:
#   if overlap_ratio >= 0.6 → DUPLICATE pair
#   Keep the NEWER file (by filesystem mtime), prune the older

STEP 4: Resolve Contradictions

Contradictions occur when two memories of the same type make opposing claims about the same subject. Detection:

  1. Same type + same topic (overlap >= 0.4 but < 0.6 — related but not duplicate)
  2. Negation signals — one body contains negation of the other's assertion:
    • "do X" vs "do not X" / "don't X" / "never X"
    • "use X" vs "avoid X" / "stop using X"
    • "prefer X" vs "prefer Y" (for same decision domain)
python
negation_pairs = [
    ("do ", "do not "), ("do ", "don't "),
    ("use ", "avoid "), ("use ", "stop using "),
    ("prefer ", "don't prefer "), ("always ", "never "),
]

# For each pair flagged as contradictory:
#   Keep the NEWER file (more recent decision supersedes)
#   Prune the older file

STEP 5: Execute Changes (or Dry Run)

Dry Run Mode (--dry-run)

If --dry-run flag is present, skip all writes. Output the full report (Step 6) with [DRY RUN] prefix and list what WOULD be changed:

[DRY RUN] Would delete: .claude/agent-memory/foo/stale_old_path.md (FULLY_STALE)
[DRY RUN] Would delete: .claude/agent-memory/foo/duplicate_auth.md (DUPLICATE of auth_patterns.md)
[DRY RUN] Would delete: .claude/agent-memory/foo/old_preference.md (CONTRADICTED by new_preference.md)
[DRY RUN] Would rebuild: .claude/agent-memory/foo/MEMORY.md (3 entries removed, 12 remaining)
Live Mode
python
# Move, never rm: memory files are not in git (see references/safe-deletes.md)
trash = f"{memory_dir}/.trash/{date.today().isoformat()}"
Bash(command=f"mkdir -p '{trash}'")

# 1. FULLY_STALE files, 2. DUPLICATE (older), 3. CONTRADICTED (older)
to_remove = [s["path"] for s in fully_stale_files]
to_remove += [d["older"]["path"] for d in duplicate_pairs]
to_remove += [c["older"]["path"] for c in contradiction_pairs]
for path in to_remove:
    Bash(command=f"mv '{path}' '{trash}/'")

# 4. Rebuild MEMORY.md index from surviving files (exclude .trash/ from the walk)
Show full SKILL.md (662 more words)Show less
Rebuild MEMORY.md

Read all surviving .md files (excluding MEMORY.md itself). Generate the index:

markdown
# <Directory Name> Memory

- [Name](filename.md) -- one-line description from frontmatter

Rules for the rebuilt index:

  • One line per memory file, sorted alphabetically by filename
  • The binding constraint is BYTES, not lines. MEMORY.md is loaded every session and stops loading past the read limit (~24 KB), at which point the whole index silently degrades. Line count is a proxy that misses this: a 151-entry index at a 147-char mean is 22.5 KB and nearly dead, while the same 151 entries at 112 chars is 16.2 KB and healthy.
  • Target ≤ 17 KB total. Derive the per-line budget rather than hardcoding it: budget_chars = (17 * 1024 - non_entry_overhead) / entry_count
  • If the rebuild exceeds the target, trim hooks to the derived budget before dropping any entry. Truncate at a word boundary and keep the leading clause (it carries the discriminating detail).
  • The 1:1 invariant is two-file (#3741). Every memory file is indexed exactly once across MEMORY.md and MEMORY-ARCHIVE.md: indexed(MEMORY.md) + indexed(MEMORY-ARCHIVE.md) == files_on_disk, the two sets are disjoint, every link target exists with its exact-case name, and MEMORY.md carries exactly one trailer line (> N memory files ...) that links MEMORY-ARCHIVE.md. Exclude MEMORY*.md, .MEMORY.md.prev, .trash/ and _backup/ from files_on_disk. A single-file check (indexed == files_on_disk) flags every archived entry as missing and is wrong once an archive exists.
  • Only if trimming to ~90 chars still overflows should you warn the user. Never auto-delete a memory to fit the index; the index is a pointer table, and shrinking it is a formatting problem, not a retention one.
python
# Write the rebuilt MEMORY.md. Copy to .MEMORY.md.prev FIRST: this one write
# replaces every memory's pointer, so a bad index degrades sessions silently.
Write(path="<memory_dir>/MEMORY.md", content=rebuilt_index)
STEP 5.5: Index budget (report, then demote by rule)

Consistency (1:1 with the files) and budget (bytes a session can afford) are different questions; the rebuild answers only the first. The budget pass is a script, so the report is the same whoever runs it. Read-only by default; --apply only after the user accepts the moves (batch when > 3):

python
Bash(command=f"node ${{CLAUDE_PLUGIN_ROOT}}/skills/dream/scripts/index-budget.mjs '{memory_dir}' --json")
# bytes vs ceiling (ORK_CONTEXT_FILE_BUDGET_BYTES, else 17,408 B), per-section sizes, long entries,
# the two-file invariant, and moves proposed BY RULE (oldest first). Add --apply to rotate
# .MEMORY.md.prev, move the lines to MEMORY-ARCHIVE.md, rewrite the trailer, re-verify (exit 1 on failure).

Rule, never-move set, exhausted-candidates fallback: Read("references/index-budget.md").


STEP 6: Report

Output a summary table after consolidation:

## Dream Consolidation Report

| Metric | Count |
|--------|-------|
| Memory directories scanned | N |
| Total memory files scanned | N |
| Stale entries pruned | N |
| Duplicates merged | N |
| Contradictions resolved | N |
| Partially stale (kept, flagged) | N |
| Evergreen (no external refs) | N |
| Surviving memories | N |
| MEMORY.md indexes rebuilt | N |
| Promotion candidates (2+ repos, STEP 9) | N |

### Changes Made

| File | Action | Reason |
|------|--------|--------|
| `path/to/file.md` | DELETED | Fully stale: all referenced files removed |
| `path/to/old.md` | DELETED | Duplicate of `path/to/new.md` |
| `path/to/outdated.md` | DELETED | Contradicted by `path/to/current.md` |

### Flagged for Review (PARTIALLY_STALE)

| File | Missing References |
|------|-------------------|
| `path/to/file.md` | `src/old/path.ts` no longer exists |

If --dry-run, prefix the entire report with:

[DRY RUN] No files were modified. Run without --dry-run to apply changes.

Error Handling

ConditionResponse
No memory directories foundReport "No memory directories found" and exit
No memory files in directoryReport "Directory empty, nothing to consolidate"
All memories are FRESHReport "All N memories are current, nothing to prune"
MEMORY.md still exceeds the byte ceiling after rebuild and demotionWarn user, list the remaining candidates, never auto-truncate
File deletion failsReport error, continue with remaining files
Memory file has no frontmatterTreat as EVERGREEN (cannot verify refs without metadata)

STEPs 7-8: Housekeeping

After STEP 6: Read("references/housekeeping.md") for STEP 7 (orphaned plugin prune offer) and STEP 8 (stale project state hint, preview only, never purge).


STEP 9: Cross-Repo Promotion Candidates (#3295)

A memory pattern that shows up in 2+ projects is a capability that outgrew its repo. While consolidating, detect these deterministically and offer promotion -- dream never moves content itself, so this step stays safe when dream is model-invoked.

bash
# For each memory file touched in this run, derive a topic key: the filename slug minus
# scope words (dates, project names). Then look for the same key in OTHER projects'
# memory indexes (index lines are "- [Title](file.md) -- hook"):
grep -l -i "<topic-key>" ~/.claude/projects/*/memory/MEMORY.md \
  | grep -v "<current-project-dir>"
  • 2+ distinct projects match -> the memory is a promotion candidate.
  • Deterministic only: match on normalized slug/title tokens, never on semantic judgment.
  • False positives are cheap (the user declines); silent misses are the failure mode this step exists for -- the same infra lesson re-learned per repo, N times, with nothing watching.

Interactive runs: AskUserQuestion per candidate (batch when more than 3):

  • "Promote to a shared plugin" -- org-specific patterns go to the org's private plugin, generic ones to a public plugin; dream only opens the door, the user routes.
  • "Keep local" -- legitimately repo-specific overlap.
  • "Stop suggesting this one" -- append promotion: declined to the memory's frontmatter metadata so future runs skip it.

Non-interactive / dry runs: list candidates in the Dream Consolidation Report under Promotion candidates: with the matching project paths. No prompt, no mutation.


When NOT to Use

  • To store new decisions -- use remember
  • To search past decisions -- use memory search
  • To load context at session start -- use memory load
  • After fewer than 5 sessions -- memory files are unlikely to have accumulated enough staleness

  • ork:remember -- Store decisions and patterns (write-side)
  • ork:memory -- Search, load, sync, visualize (read-side)

© yonatangross, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 4 other files (scripts, references) in src/skills/dream of yonatangross/orchestkit.

  • SKILL.md
  • references/housekeeping.md
  • references/index-budget.md
  • references/safe-deletes.md
  • scripts/index-budget.mjs

Open the folder on GitHubat commit 02bbf9a

Compare with similar skills

Dream next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Dream compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Dream this skillyonatangross/orchestkit290—~5.2kAutomated safety check: NotesMIT
Consolidate Memoryasgeirtj/system_prompts_leaks69k—~492Automated safety check: PassCC0-1.0
Merge Main To Nightlydotnet/dotnet-docker4.9k—~249Automated safety check: PassMIT
Mergeremotion-dev/remotion63k—~508Automated safety check: PassCustom licence
Mergewithastro/astro63k—~153Automated safety check: PassCustom licence
Merge Upsymfony/symfony31k—~4kAutomated safety check: PassMIT

Similar skills

  • Consolidate Memory

    asgeirtj/system_prompts_leaks

    Reflective pass over your memory files — merge duplicates, fix stale facts, prune the index.

    69k GitHub stars~492 tokensUpdated yesterday
    AI & LLM EngineeringAuto-check passed
  • Merge Main To Nightly

    dotnet/dotnet-docker

    Official

    Create a PR to merge main into the nightly branch after a .NET containers release.

    4.9k GitHub stars~249 tokensUpdated today
    DevOps & CloudAuto-check passed
  • Merge

    remotion-dev/remotion

    Official

    Wait for a Remotion pull request to become mergeable, handle merge conflicts, distinguish genuine CI failures from flakes, rerun flaky checks through the flake skill, and merge the PR.

    63k GitHub stars~508 tokensUpdated today
    DevelopmentAuto-check passed
  • Merge

    withastro/astro

    Official

    Handle main-to-next merge tasks including conflict resolution, changeset cleanup, and CI fix-ups.

    63k GitHub stars~153 tokensUpdated today
    Auto-check passed
  • Merge Up

    symfony/symfony

    Cascade-merge maintained Symfony branches from oldest to newest (e.g.

    31k GitHub stars~4k tokensUpdated today
    DevelopmentAuto-check passed
  • Merge

    alirezarezvani/claude-skills

    Merge the winning agent's branch into base, archive losers, and clean up worktrees.

    28k GitHub stars~587 tokensUpdated 1 mo ago
    DevelopmentAuto-check passed

More from yonatangross/orchestkit

All 108 skills in this repo
  • API Design

    yonatangross/orchestkit

    API contract design for REST and GraphQL, covering resource shape, URL and header versioning with deprecation windows, RFC 9457 Problem Details error handling, and OpenAPI specs.

    290 GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Architecture Decision Record

    yonatangross/orchestkit

    ADR templates in the Nygard format with context, decision, consequences, and alternatives.

    290 GitHub stars~2k tokensUpdated today
    Auto-check passed
  • Audit Full

    yonatangross/orchestkit

    Single-pass codebase analysis leveraging a 1M-token context window for comprehensive security scanning, architecture review, and dependency auditing.

    290 GitHub stars~3.5k tokensUpdated today
    Auto-check: notes
  • Code Review Playbook

    yonatangross/orchestkit

    Structured review processes, conventional comments, language-specific checklists, and feedback templates.

    290 GitHub stars~2.2k tokensUpdated today
    Auto-check passed
  • Create PR

    yonatangross/orchestkit

    Creates GitHub pull requests with pre-flight validation, conventional title formatting, and structured summary generation.

    290 GitHub stars~4.5k tokensUpdated today
    Auto-check: notes
  • Explore

    yonatangross/orchestkit

    Multi-angle codebase exploration spawning 3-5 parallel agents for code structure, data flow, architecture patterns, and health assessment.

    290 GitHub stars~3.9k tokensUpdated today
    Auto-check: notes

Questions about Dream

What does Dream do?

Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds the MEMORY.md index. Dream is an agent skill from yonatangross/orchestkit.md index.

When should I use Dream?

Dream fits situations like: memory files accumulated over many sessions need cleanup.

How do I install Dream in Claude Code?

Run `npx skills add yonatangross/orchestkit --skill dream -a claude-code`. Or copy the skill folder (src/skills/dream in yonatangross/orchestkit) into .claude/skills/dream in your project. Claude Code loads it when a task matches its description.

How do I install Dream in Codex?

Run `npx skills add yonatangross/orchestkit --skill dream -a codex`. Or copy the skill folder (src/skills/dream in yonatangross/orchestkit) into .agents/skills/dream in your project. Codex loads it when a task matches its description.

Can I use Dream in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add yonatangross/orchestkit --skill dream -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/dream, .gemini/skills/dream, .github/skills/dream and .opencode/skills/dream in your project.

What does Dream need to run?

Going by SKILL.md and its folder, Dream needs JavaScript for the scripts in its folder. Our summary lists: Python 3; Node.js. Its frontmatter pre-approves these tools: Read, Write, Edit, Glob, Grep, Bash, mcp__memory__search_nodes, mcp__memory__open_nodes, mcp__memory__read_graph. Compatibility (from SKILL.md): Claude Code 2.1.277+.

Does Dream access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Dream safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Dream use?

Dream is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Dream use?

About 5.2k tokens (SKILL.md is roughly 21k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.3k tokens, read only when the agent opens those files.

What are the alternatives to Dream?

Skills that share tags, products or a category with Dream: Consolidate Memory (asgeirtj/system_prompts_leaks, 69k stars), Merge Main To Nightly (dotnet/dotnet-docker, 4.9k stars), Merge (remotion-dev/remotion, 63k stars) and Merge (withastro/astro, 63k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Dream?

yonatangross (a GitHub user) maintains it in yonatangross/orchestkit, which has 290 GitHub stars. The repository holds 108 skills in this directory. The repository was last updated on October 9, 2026.

Source: yonatangross/orchestkit on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.