ork-assess
Assess a code change, design, architecture, workflow, or competing options against explicit criteria and evidence. Use when a…
Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds MEMORY.md. Use when memory needs cleanup. To store use remember; to search use memory.
Claude Code
$ npx -y skills add yonatangross/orchestkit --skill dream --agent claude-code
Codex
$ npx skills add yonatangross/orchestkit --skill dream -a codex -y
Cursor
$ npx skills add yonatangross/orchestkit --skill dream -a cursor -y
Gemini CLI
$ npx skills add yonatangross/orchestkit --skill dream -a gemini-cli -y
GitHub Copilot
$ npx skills add yonatangross/orchestkit --skill dream -a github-copilot -y
OpenCode
$ npx skills add yonatangross/orchestkit --skill dream -a opencode -y
Windsurf
$ npx skills add yonatangross/orchestkit --skill dream -a windsurf -y
name: dream
license: MIT
compatibility: "Claude Code 2.1.277+"
description: "Nightly memory consolidation: prunes stale entries, merges duplicates, resolves contradictions, rebuilds MEMORY.md. Use when memory needs cleanup. To store use remember; to search use memory."
argument-hint: "[--dry-run]"
user-invocable: true
allowed-tools: "Read Write Edit Glob Grep Bash mcp__memory__search_nodes mcp__memory__open_nodes mcp__memory__read_graph"
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 files", "prune memories"]
examples:
- "consolidate my memory files"
- "clean up stale memory entries"
- "run dream to prune old memories"
anti-triggers: [remember, save, store, search, recall, "load context", implement, explore]
metadata:
version: "1.1.0"
author: "OrchestKit"
complexity: "medium"
tags: "memory, maintenance, 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.
DRY_RUN = "--dry-run" in "$ARGUMENTS" # Preview changes without writing
Memory files accumulate across sessions. Over time they develop problems:
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.
---
# 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.mdRead 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
}]---
For each memory file, extract references and verify they still exist.
Extract paths that look like file references (patterns: paths with `/` and file extensions, backtick-wrapped paths):
# 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.
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.
Extract function/class names (patterns: `function_name()`, `ClassName`, `def function_name`):
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| Finding | Classification | Action | |---------|---------------|-----
The Complete AI Development Toolkit for Claude Code. 115 skills, 36 agents, 163 hooks. Install `ork` for stable (v10.x).
Assess a code change, design, architecture, workflow, or competing options against explicit criteria and evidence. Use when a…
Compare plausible implementation, architecture, product, or operational approaches before committing to one. Use when a request…
Map an unfamiliar codebase, feature, architecture, data flow, or operational path with file-backed evidence. Use when a request…
Render an answer inline as compact ASCII or box-drawing art with semantic status icons. Use for status, inventories, budgets,…
Make an approved, scoped change and prove the affected behavior. Use when a request asks to implement, build, add, or land a…
Review a pull request or branch for correctness, regressions, security, operational risk, and missing evidence. Use when a…
You MUST use this before any creative work - creating features, building components, adding functionality, modifying behavior, or…
Ask which skill or flow fits your situation. A router over the skills in this repo.