$npx -y skills add mworldorg/markdown-memory --skill mm-focusStage-scoped reload файлов текущего GSD-этапа в свежий контекст ПОСЛЕ ручного /clear, mid-phase. Не сводка «где мы» (это /mm resume), а ЗАГРУЗКА самих рабочих файлов этапа (STATE + CONTEXT/PLAN/SUMMARY по статусу), чтобы сразу продолжать работу. Только для GSD-проектов. Read-only
| 1 | # mm-focus — Stage-Scoped Reload after /clear |
| 2 | |
| 3 | Решает узкую проблему: ты сделал ручной `/clear` посреди GSD-фазы, контекст пуст, и нужно **снова втянуть в контекст рабочие файлы именно текущего этапа** — не сводку, а сами файлы, чтобы продолжить работу с того же места. |
| 4 | |
| 5 | **Отличие от `/mm resume`:** resume даёт компактную СВОДКУ «где мы» (passport + git + last session + выжимки). mm-focus НИЧЕГО не пересказывает — он **загружает полное содержимое** минимального scoped-набора файлов текущего этапа в контекст и выдаёт одну строку-ориентир. Это не дубль resume. |
| 6 | |
| 7 | **Когда вызывать:** |
| 8 | - ПОСЛЕ ручного `/clear`, mid-phase, когда работа над фазой не закончена. |
| 9 | - Когда нужно «вернуть в голову» файлы текущего этапа, не читая весь проект. |
| 10 | - Цикл: GSD-этап в работе → `/clear` → `/mm-focus` → продолжаешь. |
| 11 | |
| 12 | **Чего скилл НЕ делает:** |
| 13 | - НЕ выполняет `/clear` сам — это клиентская операция, недоступная из скилла. Скилл рассчитан на запуск ПОСЛЕ ручного `/clear`. |
| 14 | - НЕ пишет ничего — ни в `.planning/*`, ни в `.gsd/*`, ни куда-либо ещё (там file-lock'и/хуки). Только чтение. |
| 15 | - НЕ делает resume-стиль дамп — только scoped-набор этапа. |
| 16 | - Не для не-GSD проектов — там используй `/mm resume`. |
| 17 | |
| 18 | ## Процесс |
| 19 | |
| 20 | ### Шаг 1. Определи проект (worktree-aware) |
| 21 | |
| 22 | То же, что в `mm-resume` Шаг 1: |
| 23 | - Если cwd внутри `.claude/worktrees/...` — resolve до main repo через `.git` файл-указатель. |
| 24 | - Иначе — поднимись до корня (где `.git/`, `package.json`, `pyproject.toml`, и т.п.). |
| 25 | - Имя проекта = из `passport.md` frontmatter (если есть) ИЛИ basename корневой папки. |
| 26 | |
| 27 | Если **нет** `passport.md` ИЛИ проект не под GSD (см. Шаг 2 — ни `.planning/`, ни `.gsd/`) — скажи: |
| 28 | `GSD-фаз тут нет, используй /mm resume.` и остановись. |
| 29 | |
| 30 | ### Шаг 2. Dual-detection GSD (v1/core/v2) — как в mm-resume |
| 31 | |
| 32 | Определи версию: |
| 33 | - `<project_root>/.planning/` существует: |
| 34 | - есть `<project_root>/.planning/config.json` → **GSD Core** |
| 35 | - иначе → **GSD v1** |
| 36 | - `<project_root>/.gsd/` существует → **GSD v2** |
| 37 | - Оба → возьми `gsd_version` из passport frontmatter; если нет — спроси. |
| 38 | - Ничего нет → остановись с подсказкой `/mm resume` (см. Шаг 1). |
| 39 | |
| 40 | ### Шаг 3. Определи текущую фазу и ЭТАП |
| 41 | |
| 42 | **GSD v1 / Core (`.planning/`):** |
| 43 | 1. Прочитай `.planning/STATE.md` — оттуда текущий milestone и position (номер/имя текущей фазы). |
| 44 | 2. Найди папку текущей фазы `.planning/phases/<NN-current>/`. |
| 45 | 3. Определи ЭТАП по статусу фазы в STATE.md (`draft`/`discussed`/`planned`/`in-progress`/`verified`/`complete`) И по наличию артефактов — артефакты приоритетнее, если расходятся: |
| 46 | - нет `CONTEXT.md` → **Discuss** |
| 47 | - есть `CONTEXT.md`, нет `PLAN.md` → **Plan** |
| 48 | - есть `PLAN.md`, нет `SUMMARY.md` → **Execute** |
| 49 | - есть `SUMMARY.md` ИЛИ статус `verified`/`complete` → **Verify** |
| 50 | |
| 51 | **GSD v2 (`.gsd/`):** этапная модель в файлах слабее — определи позицию из `.gsd/STATE.md` (rendered dashboard) и, если доступен `sqlite3`, из `gsd.db` (активный slice/tasks). Per-phase `PLAN.md`/`SUMMARY.md` может не быть — грузи что есть (см. Шаг 4). |
| 52 | |
| 53 | ### Шаг 4. Прочитай scoped-набор (ЗАГРУЗИ ПОЛНОЕ содержимое в контекст, НЕ пересказывай) |
| 54 | |
| 55 | Цель шага — чтобы файлы оказались в контексте целиком. Читай их Read-инструментом полностью. Не выжимай, не суммируй. |
| 56 | |
| 57 | **GSD v1 / Core (`.planning/`):** |
| 58 | - **Всегда:** `STATE.md` + `HANDOFF.json` (если есть). |
| 59 | - **Discuss** → `+` строка текущей фазы из `ROADMAP.md` `+` `PROJECT.md` (vision/scope; если файл большой — раздел целей/scope или первые ~40 строк) `+` `CONTEXT.md` (если уже есть). |
| 60 | - **Plan** → `+` `CONTEXT.md` `+` `PLAN.md` (если уже частично есть). |
| 61 | - **Execute** → `+` `PLAN.md` `+` `CONTEXT.md`. |
| 62 | - **Verify** → `+` `PLAN.md` `+` `SUMMARY.md`. |
| 63 | |
| 64 | Все per-phase файлы — из `.planning/phases/<NN-current>/`. |
| 65 | |
| 66 | **GSD v2 (`.gsd/`):** |
| 67 | - **Всегда:** `.gsd/STATE.md` + `.gsd/AGENTS.md` (≈ CONTEXT). |
| 68 | - Задачи текущего slice из `.gsd/gsd.db` через `sqlite3`, если он в PATH: |
| 69 | ```bash |
| 70 | sqlite3 "<project_root>/.gsd/gsd.db" "SELECT title, status FROM tasks WHERE slice_id=(SELECT id FROM slices WHERE active=1) LIMIT 20;" |
| 71 | ``` |
| 72 | Если `sqlite3` недоступен — пропусти, набор беднее но не падает. |
| 73 | - Per-phase `PLAN.md`/`SUMMARY.md` в v2 может не быть — грузи только то, что реально существует. |
| 74 | |
| 75 | ### Шаг 5. Вывод — МИНИМАЛЬНЫЙ |
| 76 | |
| 77 | Это не resume-сводка. Суть в том, что файлы уже в контексте. Выдай только: |
| 78 | |
| 79 | ``` |
| 80 | 📍 Фаза <NN> «<title>» · этап <Discuss|Plan|Execute|Verify> · загружено: <file1>, <file2>, ... |
| 81 | ``` |
| 82 | |
| 83 | И, если в `HANDOFF.json` есть «Точка возврата» / `what_next` — добавь её ОДНОЙ строкой: |
| 84 | |
| 85 | ``` |
| 86 | ↩️ Точка возврата: <следующий конк |