with one click
dream
<одна строка>
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Menu
<одна строка>
Install with Codex or Claude Copy this prompt, paste it into Codex, Claude, or another assistant, and let it review the skill page and install it for you.
Based on SOC occupation classification
| name | dream |
| description | Режим сна Claude — РЕФЛЕКСИВНОЕ ЧТЕНИЕ памяти, заметок и проектов с консолидацией предложений и синтезом insights. **ТОЛЬКО ЧТЕНИЕ** — никаких изменений файлов кроме записи отчёта. Output — два файла: `DREAM-REPORT-<date>.md` (детальный audit trail с JSON-блоками для каждого proposal) и `DREAM-REPORT-<date>.html` (UI в браузере с чекбоксами для выбора что применить). Пользователь открывает HTML, выбирает галочками, нажимает Save → создаётся `DREAM-CHOICES-<date>.json`, потом запускает `wake` skill для применения. Auto mode («поспи сам», «автосон», «autodream») — независимый агент-валидатор проверяет proposals вместо юзера и сразу запускает wake; full auto («полный автосон», «поспи сам полностью») — валидатор решает всё включая delete/purge_trash, ничего не остаётся на ручное решение. Use whenever the user wants to "поспи", "сон", "режим сна", "dream", "поспи сам", "автосон", "autodream", "разберись с памятью", "пройдись по памяти", "обработай заметки", "консолидируй память", "audit memory", "consolidate memory", "reflect on", "что нового я узнал", "что забыл", "synthesize", "сделай выводы из". Reads memory directory + scattered notes in working folder + skims project READMEs/docs as context. Does NOT modify anything except writing the two report files. Расширенная версия autoDream из утечки Claude Code. |
Рефлексивный pass по памяти, заметкам, проектам. Адаптация autoDream из утечки Claude Code (services/autoDream/consolidationPrompt.ts):
wake (не этот)| Объект | Действие |
|---|---|
Memory dir текущего cwd (~/.claude/projects/<slug>/memory/) | Read only |
Memory dirs ВСЕХ проектов (~/.claude/projects/*/memory/) — если cross-project обзор полезен | Read only (опционально) |
Глобальный ~/.claude/CLAUDE.md — user instructions для всех cwd | Read only (обязательно — помогает dedup feedback'ов) |
Проектный <cwd>/CLAUDE.md если есть | Read only |
Заметки в cwd (*.md, *.txt в корне рабочей папки) | Read only |
| Проекты в cwd (подпапки с маркерами) | Read only (README + docs/) |
| JSONL транскрипты сессий | Narrow grep only (не читать целиком) |
Глобальный ~/.claude/skills/ каталог | List only (orientation, не Read контента) |
Staging satori (~/.claude/satori/staging/) + его state.db | Read only (если есть — Phase 2 п.7 Skill harvest) |
| Код, исходники, JSON dumps, логи | Не трогаем |
Единственная Write-операция: запись двух файлов отчёта в <cwd>/.
SKILL.md (этот файл) — workflow + safety rulesreferences/action_types.md — JSON contract для proposals (читай перед Phase 4)assets/template.html — HTML шаблон отчёта (используется build_report.py)assets/build_report.py — helper script: payload JSON → MD + HTML (используется в Phase 4)Memory dir: C:\Users\<user>\.claude\projects\<slug>\memory\
<slug> = Windows-style cwd с заменой : и / на -. Пример: cwd D:\Projects\TEMP\ → D:/Projects/TEMP (через pwd -W) → slug D--Projects-TEMP.
КРИТИЧНО: в Git Bash pwd возвращает Unix-mount (/d/Projects/TEMP) — не работает для slug. Нужен pwd -W для Windows-style.
Также для Python (build_report.py, broken-link check) пути должны быть Windows-style (C:/Users/...), не bash-mount (/c/Users/...). Python на Windows не понимает /c/.
Заводи две переменные пути:
# Bash-mount (для bash команд: ls/find/grep/cat и т.п.)
CWD_BASH=$(pwd) # /d/Projects/TEMP
CWD_WIN=$(pwd -W) # D:/Projects/TEMP
SLUG=$(echo "$CWD_WIN" | sed 's|[:/]|-|g') # D--Projects-TEMP
MEMORY_DIR_BASH="$HOME/.claude/projects/$SLUG/memory" # /c/Users/.../memory
MEMORY_DIR_WIN=$(cygpath -w "$MEMORY_DIR_BASH" | sed 's|\\|/|g') # C:/Users/.../memory
PROJECTS_DIR_BASH="$HOME/.claude/projects/$SLUG"
PROJECTS_DIR_WIN=$(cygpath -w "$PROJECTS_DIR_BASH" | sed 's|\\|/|g')
test -d "$MEMORY_DIR_BASH" && echo "OK $MEMORY_DIR_WIN" || echo "NOT FOUND"
Используй _BASH пути в bash-командах (ls, find, grep, cat). Используй _WIN пути в payload JSON для build_report.py и в любых inline Python скриптах через python -c.
JSONL транскрипты в $PROJECTS_DIR_BASH/*.jsonl.
Edge case: если cwd сам внутри memory dir — пиши отчёт и notes-log в <cwd>/../ чтобы не подмешать в indexer.
Триггеры: поспи, сон, dream, консолидируй память. Scope: текущий cwd memory dir + cwd notes + projects в cwd.
Триггеры: поспи глобально, dream global, audit all memory, консолидируй всю память. Scope: все ~/.claude/projects/*/memory/ директории.
Зачем: найти межпроектные дубли feedback'ов (один и тот же feedback_X.md скопирован в 3 проекта без учёта эволюции), устаревшие memory dirs от давно мёртвых проектов, паттерны drift между проектами.
В global mode:
[project=<slug>] в notes logmode: "global", каждый proposal затрагивающий memory имеет поле project: <slug> (см. references/action_types.md)Триггеры: поспи сам, автосон, autodream, поспи и примени, сам всё реши и примени.
Полный цикл без ручных галочек: dream (Phase 0–4 как обычно, отчёт и HTML пишутся — audit trail обязателен) → независимый валидатор → wake. Человеческий гейт заменяется адверсариальной проверкой, а не пропускается.
Phase 5 (только auto mode) — независимый валидатор:
DREAM-REPORT-<date>.md: Read затронутые файлы, перепроверь evidence из rationale сам (test -e, grep — не верь rationale на слово), вынеси вердикт. Отклоняй если: факт непроверяем; merge теряет nuance; итоговый текст содержит мета-нарративы; файл изменился с момента отчёта; сомневаешься. Для S-proposals (promote_skill/retire_skill) ОБЯЗАН Read сам драфт из ~/.claude/satori/staging/<name>/SKILL.md и проверить: description начинается с Use when и содержит конкретные триггер-фразы; нет injection-маркеров; нет дубля среди активных скиллов (grep по ~/.claude/skills и D:\Projects\claude-skills). Верни JSON: {"verdicts": {"M1": {"verdict": "approve|reject", "reason": "..."}}}». Валидатор read-only — ничего не применяет.[UNVERIFIED] в titledelete (очистка контента — единственное частично необратимое)purge_trash (второй уровень корзины)promote_skill (активация скилла = инструкции будущим сессиям — высокое влияние)DREAM-CHOICES-<date>.json: {"report_date": "<date>", "selected": [approved IDs], "auto": true, "validator_verdicts": {...}}wake — он видит auto: true и применяет без ожидания подтверждения (см. wake SKILL.md).Full auto (полный автосон) — триггеры: полный автосон, поспи сам полностью, full autodream, «сам всё провери, заапрувь и разрули». Отличия от обычного auto mode:
delete, purge_trash и promote_skill/retire_skill. Компенсации: wake в full auto делает pre-delete backup файла в TRASH перед очисткой контента; для promote_skill валидатор обязан пройти чек-лист драфта (Use when + триггер-фразы, injection, дубли — см. промпт п.2), а wake бэкапит перезаписываемое и логирует путь активации — «откатить скилл» = mv папки обратно в staging. Необратимого не остаётся вовсе.[UNVERIFIED] и неразрешимые конфликты валидатор разруливает сам, консервативно: verdict=reject с reason «непроверяемо — оставлено как есть». Решение принято (= не трогать), юзеру ничего не откладывается; такие айтемы перечисляются отдельным блоком в финальном summary и всплывут в следующем dream, если протухнут окончательно."auto": true, "auto_level": "full"._archive/wake-backup-*/; регресс после автосна откатывается фразой «откати сон» (wake Rollback). В финальном summary укажи путь snapshot'а.Anti-pattern: валидировать в той же сессии без Agent'а. Смысл гейта — независимый контекст, а не ещё один проход тем же взглядом.
Сначала lock против race condition. Если юзер запустит dream в двух терминалах одновременно — append'ы в notes log поедут, отчёт превратится в кашу. Inspired by autoDream's .consolidate-lock.
LOCK_DIR="$CWD_BASH/.dream-lock"
DATE_TODAY=$(date +%Y-%m-%d)
# Atomic mkdir = filesystem-level lock primitive
if mkdir "$LOCK_DIR" 2>/dev/null; then
echo $$ > "$LOCK_DIR/pid"
echo "$DATE_TODAY" > "$LOCK_DIR/date"
echo "LOCK acquired"
else
# Lock exists — check if stale (>1h old by mtime)
LOCK_AGE=$(( $(date +%s) - $(stat -c %Y "$LOCK_DIR" 2>/dev/null || stat -f %m "$LOCK_DIR") ))
if [ "$LOCK_AGE" -gt 3600 ]; then
echo "STALE LOCK (${LOCK_AGE}s old) — removing and re-acquiring"
rm -rf "$LOCK_DIR" && mkdir "$LOCK_DIR" && echo $$ > "$LOCK_DIR/pid"
else
echo "DREAM ALREADY RUNNING (lock age ${LOCK_AGE}s) — abort"
# Claude reads this and stops the workflow
exit 0
fi
fi
В финале Phase 4 (или при любой ошибке) — release: rm -rf "$LOCK_DIR". Если dream упал — следующий запуск через 1 час сам подберёт stale lock.
Это единственное rm разрешённое в dream — и только для собственного lock-каталога.
Дальше — notes log. Создай <cwd>/.dream-notes-<YYYY-MM-DD>.md через Write tool. Это append-only лог в который ты пишешь после каждого прочитанного файла. Без него Phase 3 reflect не сработает на больших корпусах: контекст растёт линейно, ранние reads забываются после compaction.
Шаблон notes log:
# Dream notes — <YYYY-MM-DD>
**Started:** <ISO timestamp>
## Inventory
- Memory: surveyed N files (will fill in Phase 1)
- Cwd notes: surveyed M
- Projects: surveyed P
## Per-file notes (filled during Phase 2 reading)
<один блок на каждый прочитанный файл>
## Cross-file observations (filled during Phase 3)
<patterns, drift, conflicts, mergeable, deletions>
Формат записи per-file (3-7 строк, не больше):
### <filename>
- **Type/age:** feedback / 30 days
- **Topic:** одна строка что про что
- **Key facts:** 1-3 bullets конкретного контента
- **Issues:** дубль с X / устарело / нечётко / конфликт с Y / null
- **Action hint:** keep / merge-with-X / soft_delete / shorten-in-MEMORY.md / null
После каждого Read'а memory/cwd/project README — append в notes log через Edit (Read existing → append → Write). Не пихай всё в context — лог это твоя долговременная память для этой сессии.
Цель — ОБОЙТИ ВСЁ. Cheap inventory + frontmatter scan для memory + recursive find для cwd. Не читать файлы полностью, только счётчики.
Веди в notes log: Surveyed (всё что узнал из ls/find/grep — это «обошёл») и Read (детально прочитал — обновляется в Phase 2).
# === MEMORY DIR — обойти ВСЁ (через frontmatter scan, не Read) ===
ls "$MEMORY_DIR_BASH"
ls "$MEMORY_DIR_BASH/TRASH/" 2>/dev/null
wc -l "$MEMORY_DIR_BASH/MEMORY.md" # лимит 200 строк / 25 KB
du -sh "$MEMORY_DIR_BASH"
# Frontmatter scan ВСЕХ memory файлов (cheap — только name/description/type строки)
# Без temp файлов и rm — один pipe прямо в output Bash'а
for f in "$MEMORY_DIR_BASH"/*.md; do
printf '=== %s (%s lines) ===\n' "$(basename "$f")" "$(wc -l < "$f")"
grep -E '^(name|description|type):' "$f" 2>/dev/null | head -3
done
# === GLOBAL MODE only — обойти ВСЕ memory dirs ===
# (пропусти если default mode — экономь turns)
for proj_dir in "$HOME/.claude/projects"/*/; do
proj_slug=$(basename "$proj_dir")
proj_mem="$proj_dir/memory"
test -d "$proj_mem" || continue
test "$proj_mem" = "$MEMORY_DIR_BASH" && continue # уже сканили выше
count=$(ls "$proj_mem"/*.md 2>/dev/null | wc -l)
age=$(stat -c '%Y' "$proj_mem" 2>/dev/null || stat -f '%m' "$proj_mem")
printf 'PROJECT %s: %d files, mtime=%s\n' "$proj_slug" "$count" "$age"
done | sort -k4 -rn | head -20 # 20 самых свежих проектов
# TRASH — возраст файлов (для D1 кандидатов на final delete)
find "$MEMORY_DIR_BASH/TRASH/" -name "*.md" -mtime +30 2>/dev/null
# === Относительные даты и point-in-time статусы (кандидаты на update) ===
grep -rnE "вчера|сегодня|завтра|на днях|недавно|сейчас|пока не|прошлой неделе|yesterday|today|last week|recently|currently|still running" "$MEMORY_DIR_BASH" --include="*.md" | grep -v "/TRASH/"
# === Orphan-файлы: есть на диске, нет хука в MEMORY.md (кандидаты на add_links) ===
for f in "$MEMORY_DIR_BASH"/*.md; do
b=$(basename "$f")
[ "$b" = "MEMORY.md" ] && continue
grep -q "$b" "$MEMORY_DIR_BASH/MEMORY.md" || echo "ORPHAN: $b"
done
# === CWD — рекурсивный обход notes (1 уровень глубины) ===
find "$CWD_BASH" -maxdepth 2 \( -name "*.md" -o -name "*.txt" \) -not -path "*/node_modules/*" -not -path "*/.git/*" -not -path "*/_archive/*" 2>/dev/null
# === CWD PROJECTS — обойти ВСЕ проекты (по маркерам) ===
for dir in "$CWD_BASH"/*/; do
if [ -d "$dir/.git" ] || [ -f "$dir/package.json" ] || [ -f "$dir/Cargo.toml" ] || [ -f "$dir/pyproject.toml" ] || [ -f "$dir/composer.json" ] || [ -f "$dir/go.mod" ] || [ -f "$dir/README.md" ]; then
mtime=$(stat -c '%Y' "$dir" 2>/dev/null || stat -f '%m' "$dir")
echo "PROJECT $mtime: $dir"
fi
done | sort -rn
Read MEMORY.md целиком — твой index, маленький. (Read counter += 1, Surveyed += число memory файлов из frontmatter scan + cwd notes найденные find'ом + проекты)
Цель: прочитать ВСЁ полное содержимое каждого файла в scope. Никаких лимитов "10-15 файлов". User в этом скилле явно запрашивает полное покрытие, контекст управляется через notes log (Phase 0).
TodoWrite для прогресса (рекомендуется при >30 файлов): создай TodoWrite список с одним пунктом на каждую группу:
Помечай in_progress перед группой, completed после. Юзер видит реальный прогресс в footer pill — на 100+ файлах это критично, иначе кажется что висишь.
После каждого Read'а — сразу Edit notes log (per-file блок 3-7 строк). Не пихай контент в context — лог это твоя долговременная память. Compaction может выкинуть ранние reads, но лог остаётся на диске.
Порядок чтения (читай ВСЁ в каждой группе):
MEMORY.md — целиком, лог: количество строк, broken links, длинные строки (>200 chars = утечка контента), дубли descriptions
Все memory files в порядке user → feedback → project → reference → handoff → other:
update proposal с конвертацией в абсолютную дату; якорь — mtime файла, не дата отчётаВсе cwd root .md/.txt — Read каждый, log
Cwd подпапки .md/.txt (recursive maxdepth 2, исключая .git/node_modules/_archive) — Read каждый, log
Все проекты в cwd — каждая подпапка с маркером (.git/package.json/Cargo.toml/pyproject.toml/composer.json/go.mod/README.md), без top-N лимита:
src/, node_modules/, vendor/, .next/, build/, dist/Транскрипты JSONL — narrow grep только под конкретные quotes из других файлов:
grep -rn "<narrow term>" "$PROJECTS_DIR_BASH/" --include="*.jsonl" | tail -50
Skill harvest (satori) — если существует ~/.claude/satori/staging/: Read каждый staging/*/SKILL.md (они маленькие) + телеметрия read-only: python -c по ~/.claude/satori/state.db (SELECT name,use_count,last_used,staged_ts,pinned_project FROM skill_usage). Для каждого драфта — proposal категории S (см. action_types.md): promote_skill (триггер внятный Use when..., содержимое проверяемо, дубля в активных скиллах нет — grep по ~/.claude/skills и D:\Projects\claude-skills) / retire_skill (протух >30д без использования, дубль активного, мусор) / keep. Evidence policy действует и здесь.
TRASH purge candidates — для каждого файла в memory/TRASH/ с mtime >30 дней (из find в Phase 1) собери список. В Phase 4 это станет proposal id=O1, action=purge_trash (см. references/action_types.md). Пропусти если TRASH пустой или нет старых файлов. Сохрани файлы которые юзер явно помечал как точки возврата (например MEMORY_backup_*) — упомяни в rationale что keep.
Лимита нет. Read EVERYTHING. Контекст-управление через notes log — не пропускай ни одного файла, не пропускай ни одной log-записи.
В отчёте укажи: Files reviewed: surveyed N total (memory: M, cwd notes: K, projects: P) / read in full: <count log entries>.
Сердце skill. Не просто consolidate — отрефлексируй:
Эту секцию показывай юзеру в чат сразу — это самое ценное.
Пометка «устарело» — это утверждение о мире, его надо проверить, а не почувствовать. Перед каждым proposal с delete/soft_delete/merge по причине устаревания:
test -e "<путь из записи>" # файл/папка ещё существует?
grep -rn --fixed-strings "<символ/флаг/команда>" # ещё встречается в проекте?
rationale обязательно: какая проверка выполнена и результат (test -e ветка feat-x → отсутствует).[UNVERIFIED], в rationale — что именно нельзя проверить. Это кандидат на подтверждение юзером, не решение.Используем helper script assets/build_report.py чтобы избежать escape-багов и multi-line python -c сложностей. Claude НЕ генерит MD/HTML руками — только готовит payload JSON.
Чёткий порядок шагов:
references/action_types.md — JSON contract для proposals{
"date": "2026-05-02",
"timestamp_iso": "2026-05-02T14:30:00Z",
"memory_dir": "C:/Users/user/.claude/projects/D--Projects-TEMP/memory",
"cwd": "D:/Projects/TEMP",
"files_count": "12 memory + 5 cwd notes + 3 project READMEs",
"insights": ["bullet 1", "bullet 2", ...],
"proposals": [
{
"id": "M1", "category": "memory", "action": "merge",
"title": "...", "rationale": "...",
...action-specific fields per action_types.md
},
...
],
"apply_order": [["M1", "M3"], ["N1", "N2"], ["I1", "I2"]]
}
<cwd>/.dream-payload-<date>.json (точка в начале — hidden, не зацепится wake поиском DREAM-CHOICES)SCRIPT="$CWD_BASH/.claude/skills/dream/assets/build_report.py"
test -f "$SCRIPT" || SCRIPT="$HOME/.claude/skills/dream/assets/build_report.py"
python "$SCRIPT" "$CWD_BASH/.dream-payload-<date>.json"
Скрипт пишет MD + HTML атомарно в cwd, валидирует payload, делает все escape для HTML/JSON.build_report.py сам делает:
html.escape для текста, json.dumps + </ → <\/ для inline-script)Если скрипт упал — read stderr, исправь payload, повтори. Не редактируй MD/HTML руками — это нарушит контракт с wake.
Payload файл .dream-payload-<date>.json остаётся в cwd как audit trail генерации (можно удалить вручную позже).
💤 Dream завершил. Insights: <3-5 bullets из Phase 3> Отчёт:
DREAM-REPORT-<date>.md(audit trail) +DREAM-REPORT-<date>.html(UI)Открыть HTML:
- Windows:
start D:\Projects\TEMP\DREAM-REPORT-<date>.html- Через preview tool в Claude Code (если доступен): я могу открыть сам, скажи "открой preview"
Дальше: отметь галочками → 💾 Save choices → скажи
wake(он найдёт JSON автоматически).
Опционально: если доступен mcp__Claude_Preview__preview_start — предложи запустить.
Разрешено:
Read, Grep, Glob — без ограниченийls, find (без -delete/-exec), grep, cat, head, tail, wc, du, stat, file, sort, uniq, cut, awk, sed (без -i), pwd, date, python (для запуска build_report.py), jqWrite / Edit — ТОЛЬКО четыре файла:
<cwd>/.dream-notes-<date>.md (append-only log, обновляется после каждого Read'а в Phase 2)<cwd>/.dream-payload-<date>.json (input для build_report.py)<cwd>/DREAM-REPORT-<date>.md (создаётся скриптом)<cwd>/DREAM-REPORT-<date>.html (создаётся скриптом)Запрещено:
Edit/Write в memory dir, проекты, заметки cwd (это работа wake skill)rm где угодно кроме <cwd>/.dream-lock/ (собственный lock-каталог skill'а — release в финале + stale recovery)mv, cp, chmod, redirect >/>>, tee, truncatefind -delete, find -exec rm/mvSplit на dream+wake существует именно потому что между «прочитать» и «изменить» обязательно осознанный выбор человеком галочками. Без этого — autoDream issue #38493 (hallucinated audit, factually unverified memories).
Файлы в memory dir имеют frontmatter (из memdir/memoryTypes.ts утечки):
---
name: <короткое имя темы>
description: <одна строка>
type: user | feedback | project | reference
---
<контент. Для feedback/project: rule/fact, потом **Why:** и **How to apply:**>
Что НЕ должно быть в memory (WHAT_NOT_TO_SAVE): code patterns, git history, debug solutions, дубли CLAUDE.md, ephemeral state. Кандидаты на removal (action=delete или soft_delete).
Output hygiene — запрет мета-нарративов. Итоговый текст записей в proposals (content_template, diff_preview, replacement-строки) не должен содержать: «юзер поправлял N раз», «выучено после ошибки», session ID, историю неудачных попыток, «дубль удалён / не повторяется здесь». Техническая причинность остаётся, если меняет будущее поведение:
Не использовать git add -A — зацепит несвязанные изменения юзера.Юзер трижды исправлял это, поэтому запомнить: не использовать git add -A.Рассуждения и история — в rationale отчёта, не в памяти.
MAX_ENTRYPOINT_LINES = 200, MAX_ENTRYPOINT_BYTES ≈ 25 000, каждая строка ≤ 150 chars.
Норматив хука в индексе: 80–150 символов. Хук отвечает на «когда открывать этот файл», а не пересказывает содержимое. Короче 80 — обычно бесполезен («см. файл»), длиннее 150 — утечка контента в индекс → proposal shorten_lines (детали остаются в recall-файле).
pwd без -W на Win11 Git Bash — даст /d/Projects/TEMP, slug посчитается неправильно (d-Projects-TEMP вместо D--Projects-TEMP), memory dir не найдётся/c/Users/...) — Python на Windows не понимает, нужны Windows-style (C:/Users/...) через cygpath -wtest -e/grep верификации (см. Evidence policy). Непроверяемое → [UNVERIFIED] в title.wakesimplify / code-reviewclaude-md-management:revise-claude-mdservices/autoDream/consolidationPrompt.ts (утечка v2.1.88)services/extractMemories/extractMemories.ts:171memdir/memoryTypes.tsmemdir/memdir.tsskills/bundled/remember.ts