mm-resume
Восстановить контекст в начале сессии или после /clear. Читает passport.md + dashboard + последнюю сессию + git status + (если есть GSD) полный контекст планирования (.planning/ для v1 или .gsd/ для v2 — STATE, ROADMAP, текущий phase CONTEXT/PLAN, HANDOFF.json). Выдаёт компактную
Install
npx skills add https://github.com/mworldorg/markdown-memory/tree/main/skills/mm-resume
claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mworldorg-markdown-memory@llmmart
git clone https://github.com/mworldorg/markdown-memory.git
The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole mworldorg/markdown-memory collection as a plugin from our marketplace. Git is the plain clone.
Skill manifest
mm-resume — Context Restore for Claude Code
Решает проблему: после /clear, exit && claude, или после паузы на день — нет контекста. Этот skill за один вызов читает все источники и говорит «где мы, что в работе, что брать следующим».
Это аналог git status, но для проекта в целом — не для рабочей копии, а для головы.
Когда вызывать
- В начале новой Claude Code сессии в проекте — первая команда
- После
/mm save→/clear— восстановить контекст в той же сессии - После недели паузы — догнать что вообще происходило
- Когда юзер пишет «где мы», «что у нас», «напомни» — сразу запускай, не переспрашивай
Конфиг
Загрузи mm-config.json по алгоритму из <repo>/docs/CONFIG-LOADING.md. Поддержка mm-config.local.json overlay обязательна.
Понадобятся:
paths.obsidian_projectspaths.obsidian_sessions(на случай старого формата без папки проекта)
Процесс
Шаг 0. Фоновый автоапдейт mm-системы (неблокирующий)
Выполни в фоновом режиме команду проверки обновлений:
- На macOS/Linux:
python3 $MM_REPO_ROOT/scripts/auto-update.py --background &(или используя путь~/.markdown-memory/scripts/auto-update.pyесли переменная не задана) - На Windows: запусти
pythonсо скриптомauto-update.py --backgroundв фоновом режиме (скрипт сам сделает Popen detached-процесс и мгновенно вернет управление).
Шаг 1. Определи проект (worktree-aware)
То же что в mm-init-project Phase 0:
- Если cwd внутри
.claude/worktrees/...— resolve до main repo через.gitфайл-указатель - Иначе — поднимись до корня (где
.git/,package.json,pyproject.toml, и т.п.) - Имя проекта = из
passport.mdfrontmatter (если есть) ИЛИ basename корневой папки
Если в проекте нет passport.md — скажи: Проект не инициализирован для mm. Запустить /mm new сначала? и остановись.
Шаг 2. Прочитай источники (параллельно если можно)
2a. Паспорт
<project_root>/passport.md— frontmatter, секция 8 (контекст промптов), секция 10 (текущее состояние)
2b. Obsidian-артефакты (Obsidian Knowledge Vault)
- Определи путь к хранилищу
<vault_root>(из секции## Obsidian Knowledge VaultвCLAUDE.md, либо дефолтная локальная папка.vault/, либо глобальная папка проекта<obsidian_projects>/<name>/). - Прочитай
<vault_root>/00-home/текущие приоритеты.md— извлеки текущие цели, WIP и следующие шаги. - Прочитай
<vault_root>/00-home/index.md— для понимания структуры доступных вknowledge/иatlas/заметок. <vault_root>/handoff.md(если есть) — последний snapshot для chat; обязательно вытащи секцию «Точка возврата» (следующий шаг + висящее: неотправленный промпт прошлой сессии, недоделанное, WIP).<vault_root>/sessions/— найди самый свежий .md по mtime; прочти секции «Что сделано», «Открытые вопросы», «Следующие шаги».- Если текущая задача пользователя касается конкретных интеграций, решений или архитектурных вопросов, найди релевантные заметки в
<vault_root>/knowledge/(или вatlas/) и предложи агенту прочитать их.
2c. Git-контекст
git rev-parse --show-toplevel
git branch --show-current
git status --short # сколько uncommitted
git log --oneline -5 # последние коммиты
git stash list 2>/dev/null # есть ли stash'ы
2d. GSD-контекст (dual-detection v1/v2/core)
Сначала определи версию:
<project_root>/.planning/существует:- Если
<project_root>/.planning/config.jsonсуществует → GSD Core - Иначе → GSD v1
- Если
<project_root>/.gsd/существует → GSD v2- Оба → используй
gsd_versionиз passport frontmatter; если нет — спроси. - Ничего нет → пропусти секцию.
Если GSD v1 или GSD Core (.planning/) — прочитай в этом порядке (приоритет ↓):
.planning/STATE.md— главное. Из него: текущий milestone, position (phase/step), последние решения, blockers..planning/HANDOFF.json(если существует) — самый свежий snapshot от/gsd-pause-work. Если его mtime > чем у последней mm-сессии — приоритет HANDOFF..planning/ROADMAP.md— список фаз с[x]/[~]/[ ]. Покажи позицию: фаза X из Y, прогресс milestone'а..planning/phases/<NN-current>/CONTEXT.md(если есть текущая фаза) — preferences и решения этой фазы. Это критично — покажет что мы решали в текущей фазе..planning/phases/<NN-current>/PLAN.md— что планировали. Извлеки список задач, посчитай completed/pending..planning/phases/<NN-current>/SUMMARY.md(если фаза завершена) — итог..planning/threads/(если есть) — активные темы для cross-session.
Если GSD v2 (.gsd/):
.gsd/STATE.md(rendered dashboard от gsd CLI) — главное..gsd/AGENTS.md— preferences для агентов (равноCONTEXT.mdv1)..gsd/gsd.db(SQLite) — опционально, если естьsqlite3в PATH. Используй абсолютный путь от<project_root>:
Парси вывод. Если sqlite3 недоступен — пропусти, сводка будет беднее но не сломается.sqlite3 "<project_root>/.gsd/gsd.db" "SELECT name, status FROM milestones WHERE active=1; SELECT name, status FROM slices WHERE milestone_id=(SELECT id FROM milestones WHERE active=1); SELECT title, status FROM tasks WHERE slice_id=(SELECT id FROM slices WHERE active=1) LIMIT 10;"
Это эквивалент /gsd-progress плюс часть /gsd-resume-work — встроено сюда, не нужно дёргать GSD-команды отдельно.
Не пиши в .planning/* или .gsd/* — только читай (там file-lock'и и охраняющие хуки).
2e. mm-система (smoke check)
Быстрая проверка:
~/.claude/skills/mm-bridgeсуществует и junction живой → ✅- Иначе — намекни запустить
/mm check
Не делай полный /mm-doctor — это лишнее на старте, юзер вызовет если нужно.
Шаг 3. Синтезируй сводку
Не просто вывали данные — синтезируй. Коротко, в одном экране. Веди той же формой, что и возвращение в claude.ai: ориентир по структуре плана (GSD-фаза или чек-лист открытых вопросов — что у проекта есть), затем «Точка возврата», затем один следующий конкретный шаг. Не плоский дамп коммитов.
Формат:
🚀 <project_name> — где мы
Стек: <язык> · <фреймворк> · <DB>
Ветка: <branch> | <N> uncommitted | <K> stash'ей
Последний коммит: <hash> "<subject>" (<X дней назад>)
📍 Сейчас в работе
<1-3 строки из текущие приоритеты.md (раздел WIP/Приоритеты) + если есть текущая GSD-фаза — она>
<Если GSD:>
🎯 GSD <v1|v2|core>: M<N> «<milestone_title>», фаза <X>/<Y> — «<phase_title>»
Статус: <X задач completed, Y pending, Z blocked>
Текущая фаза: <статус из STATE.md>
<Если есть HANDOFF.json свежее последней сессии:>
📌 HANDOFF (от /gsd-pause-work, <date>): <первый параграф what_next>
Решения текущей фазы (из CONTEXT.md): <топ-2 пункта>
Следующее: <next phase title или "execute current" или "verify">
📝 Последняя сессия (<date>)
Тема: <тема из имени файла>
Сделано: <первые 2 пункта>
Решения: <если были — 1 ключевое>
❓ Открытые вопросы (<всего N>)
1. <q1>
2. <q2>
3. <q3>
<если больше — «...ещё (N-3)»>
🐛 Известные баги (если есть)
• <bug1>
📌 Точка возврата (из handoff.md / последней сессии)
Следующий шаг: <один конкретный>
Висит: <неотправленный промпт прошлой сессии / недоделанное / WIP — если есть; иначе пропусти строку>
💡 Что брать следующим
<синтезируй из: GSD next phase ИЛИ первый open question ИЛИ последний "Следующий шаг" из сессии>
Аргумент: <почему именно это>
⚙️ Команды
/mm prompt "..." — собрать промпт для PowerShell-Клода (если ты сейчас в claude.ai)
/gsd-execute-phase N — выполнить текущую GSD-фазу (если применимо)
/mm save — закрыть сессию когда закончишь
/mm next — обновить handoff.md перед новым чатом claude.ai
Шаг 4. После сводки — жди
Не предлагай делать что-то конкретное автоматически. Юзер прочёл, решил, скажет.
Особые режимы
Если включена опция --quick (или юзер пишет «коротко»)
Выдай только:
<name> · <branch> · <N> uncommitted · последняя сессия <date>
Сейчас: <одна строка>
Дальше: <одна строка>
3 строки максимум. Для случая «я просто проверить вспомнить».
Если включена --verbose (или «подробно»)
Дополни:
- Полный список open questions (без обрезки)
- Полное «Сделано» из последней сессии (не первые 2)
- Список последних 3 сессий с темами
- Список фаз GSD с галочками
Edge cases
- Несколько проектов в моно-репо: в Discovery возьми проект ближе к cwd. Если cwd на корне — спроси какой.
- Свежий
/mm new, ещё нет сессий: пропусти секцию «Последняя сессия», в «Что брать следующим» предложи «заполнить секцию 8 паспорта». - GSD без активной фазы (между milestone'ами): «GSD: между фазами, последняя завершена N дней назад. /gsd-new-milestone?»
- Нет git вообще (просто папка с файлами): пропусти git-секцию.
- passport.md очень старый (
updated:> 60 дней назад): добавь предупреждение «Паспорт давно не обновлялся, может быть неточен. /mm new для refresh». - Уже Memory у Anthropic накопилась: не дублируй её. mm-resume — про актуальное (что сейчас, что вчера). Memory — про долгосрочное (как ты любишь работать).
Что НЕ делать
- Не запрашивать данные из чата если их можно прочитать из файлов.
- Не выводить полные тексты файлов — только выжимки.
- Не делать
git pull/git fetchбез явного запроса. - Не запускать сам
/gsd-progressкак отдельную команду — логика встроена сюда. - Не предлагать действие если не уверен что нужно — лучше промолчать чем советовать наугад.
- Не дублируй чек
/mm-doctor— для смок-теста достаточно одной junction-проверки.
Files (markdown-memory)
-
SKILL.md 14.6 KB
--- name: mm-resume version: 0.4.0 description: Восстановить контекст в начале сессии или после /clear. Читает passport.md + dashboard + последнюю сессию + git status + (если есть GSD) полный контекст планирования (.planning/ для v1 или .gsd/ для v2 — STATE, ROADMAP, текущий phase CONTEXT/PLAN, HANDOFF.json). Выдаёт компактную сводку «где мы». Use when user says "ну что у нас", "напомни где мы остановились", "вернулся", "возобновляю", "/mm resume", "/mm start", "/mm context", "что у нас по проекту", "где мы" в начале новой сессии Claude Code или после /clear. --- # mm-resume — Context Restore for Claude Code Решает проблему: после `/clear`, `exit && claude`, или после паузы на день — нет контекста. Этот skill за один вызов читает все источники и говорит «где мы, что в работе, что брать следующим». **Это аналог git status, но для проекта в целом** — не для рабочей копии, а для головы. ## Когда вызывать - В начале новой Claude Code сессии в проекте — первая команда - После `/mm save` → `/clear` — восстановить контекст в той же сессии - После недели паузы — догнать что вообще происходило - Когда юзер пишет «где мы», «что у нас», «напомни» — сразу запускай, не переспрашивай ## Конфиг Загрузи `mm-config.json` по алгоритму из `<repo>/docs/CONFIG-LOADING.md`. Поддержка `mm-config.local.json` overlay обязательна. Понадобятся: - `paths.obsidian_projects` - `paths.obsidian_sessions` (на случай старого формата без папки проекта) ## Процесс ### Шаг 0. Фоновый автоапдейт mm-системы (неблокирующий) Выполни в фоновом режиме команду проверки обновлений: - На macOS/Linux: `python3 $MM_REPO_ROOT/scripts/auto-update.py --background &` (или используя путь `~/.markdown-memory/scripts/auto-update.py` если переменная не задана) - На Windows: запусти `python` со скриптом `auto-update.py --background` в фоновом режиме (скрипт сам сделает Popen detached-процесс и мгновенно вернет управление). ### Шаг 1. Определи проект (worktree-aware) То же что в `mm-init-project` Phase 0: - Если cwd внутри `.claude/worktrees/...` — resolve до main repo через `.git` файл-указатель - Иначе — поднимись до корня (где `.git/`, `package.json`, `pyproject.toml`, и т.п.) - Имя проекта = из `passport.md` frontmatter (если есть) ИЛИ basename корневой папки Если в проекте **нет** `passport.md` — скажи: `Проект не инициализирован для mm. Запустить /mm new сначала?` и остановись. ### Шаг 2. Прочитай источники (параллельно если можно) #### 2a. Паспорт - `<project_root>/passport.md` — frontmatter, секция 8 (контекст промптов), секция 10 (текущее состояние) #### 2b. Obsidian-артефакты (Obsidian Knowledge Vault) - Определи путь к хранилищу `<vault_root>` (из секции `## Obsidian Knowledge Vault` в `CLAUDE.md`, либо дефолтная локальная папка `.vault/`, либо глобальная папка проекта `<obsidian_projects>/<name>/`). - Прочитай `<vault_root>/00-home/текущие приоритеты.md` — извлеки текущие цели, WIP и следующие шаги. - Прочитай `<vault_root>/00-home/index.md` — для понимания структуры доступных в `knowledge/` и `atlas/` заметок. - `<vault_root>/handoff.md` (если есть) — последний snapshot для chat; обязательно вытащи секцию «Точка возврата» (следующий шаг + висящее: неотправленный промпт прошлой сессии, недоделанное, WIP). - `<vault_root>/sessions/` — найди самый свежий .md по mtime; прочти секции «Что сделано», «Открытые вопросы», «Следующие шаги». - Если текущая задача пользователя касается конкретных интеграций, решений или архитектурных вопросов, найди релевантные заметки в `<vault_root>/knowledge/` (или в `atlas/`) и предложи агенту прочитать их. #### 2c. Git-контекст ```bash git rev-parse --show-toplevel git branch --show-current git status --short # сколько uncommitted git log --oneline -5 # последние коммиты git stash list 2>/dev/null # есть ли stash'ы ``` #### 2d. GSD-контекст (dual-detection v1/v2/core) Сначала определи версию: - `<project_root>/.planning/` существует: - Если `<project_root>/.planning/config.json` существует → **GSD Core** - Иначе → **GSD v1** - `<project_root>/.gsd/` существует → **GSD v2** - Оба → используй `gsd_version` из passport frontmatter; если нет — спроси. - Ничего нет → пропусти секцию. **Если GSD v1 или GSD Core (`.planning/`)** — прочитай в этом порядке (приоритет ↓): 1. **`.planning/STATE.md`** — главное. Из него: текущий milestone, position (phase/step), последние решения, blockers. 2. **`.planning/HANDOFF.json`** (если существует) — самый свежий snapshot от `/gsd-pause-work`. Если его mtime > чем у последней mm-сессии — приоритет HANDOFF. 3. **`.planning/ROADMAP.md`** — список фаз с `[x]/[~]/[ ]`. Покажи позицию: фаза X из Y, прогресс milestone'а. 4. **`.planning/phases/<NN-current>/CONTEXT.md`** (если есть текущая фаза) — preferences и решения этой фазы. Это критично — покажет что мы решали в текущей фазе. 5. **`.planning/phases/<NN-current>/PLAN.md`** — что планировали. Извлеки список задач, посчитай completed/pending. 6. **`.planning/phases/<NN-current>/SUMMARY.md`** (если фаза завершена) — итог. 7. **`.planning/threads/`** (если есть) — активные темы для cross-session. **Если GSD v2 (`.gsd/`)**: 1. **`.gsd/STATE.md`** (rendered dashboard от gsd CLI) — главное. 2. **`.gsd/AGENTS.md`** — preferences для агентов (равно `CONTEXT.md` v1). 3. **`.gsd/gsd.db`** (SQLite) — опционально, если есть `sqlite3` в PATH. Используй абсолютный путь от `<project_root>`: ```bash sqlite3 "<project_root>/.gsd/gsd.db" "SELECT name, status FROM milestones WHERE active=1; SELECT name, status FROM slices WHERE milestone_id=(SELECT id FROM milestones WHERE active=1); SELECT title, status FROM tasks WHERE slice_id=(SELECT id FROM slices WHERE active=1) LIMIT 10;" ``` Парси вывод. Если sqlite3 недоступен — пропусти, сводка будет беднее но не сломается. **Это эквивалент `/gsd-progress` плюс часть `/gsd-resume-work`** — встроено сюда, не нужно дёргать GSD-команды отдельно. **Не пиши в `.planning/*` или `.gsd/*`** — только читай (там file-lock'и и охраняющие хуки). #### 2e. mm-система (smoke check) Быстрая проверка: - `~/.claude/skills/mm-bridge` существует и junction живой → ✅ - Иначе — намекни запустить `/mm check` Не делай полный `/mm-doctor` — это лишнее на старте, юзер вызовет если нужно. ### Шаг 3. Синтезируй сводку Не просто вывали данные — **синтезируй**. Коротко, в одном экране. Веди той же формой, что и возвращение в claude.ai: **ориентир по структуре плана** (GSD-фаза или чек-лист открытых вопросов — что у проекта есть), затем **«Точка возврата»**, затем **один следующий конкретный шаг**. Не плоский дамп коммитов. Формат: ``` 🚀 <project_name> — где мы Стек: <язык> · <фреймворк> · <DB> Ветка: <branch> | <N> uncommitted | <K> stash'ей Последний коммит: <hash> "<subject>" (<X дней назад>) 📍 Сейчас в работе <1-3 строки из текущие приоритеты.md (раздел WIP/Приоритеты) + если есть текущая GSD-фаза — она> <Если GSD:> 🎯 GSD <v1|v2|core>: M<N> «<milestone_title>», фаза <X>/<Y> — «<phase_title>» Статус: <X задач completed, Y pending, Z blocked> Текущая фаза: <статус из STATE.md> <Если есть HANDOFF.json свежее последней сессии:> 📌 HANDOFF (от /gsd-pause-work, <date>): <первый параграф what_next> Решения текущей фазы (из CONTEXT.md): <топ-2 пункта> Следующее: <next phase title или "execute current" или "verify"> 📝 Последняя сессия (<date>) Тема: <тема из имени файла> Сделано: <первые 2 пункта> Решения: <если были — 1 ключевое> ❓ Открытые вопросы (<всего N>) 1. <q1> 2. <q2> 3. <q3> <если больше — «...ещё (N-3)»> 🐛 Известные баги (если есть) • <bug1> 📌 Точка возврата (из handoff.md / последней сессии) Следующий шаг: <один конкретный> Висит: <неотправленный промпт прошлой сессии / недоделанное / WIP — если есть; иначе пропусти строку> 💡 Что брать следующим <синтезируй из: GSD next phase ИЛИ первый open question ИЛИ последний "Следующий шаг" из сессии> Аргумент: <почему именно это> ⚙️ Команды /mm prompt "..." — собрать промпт для PowerShell-Клода (если ты сейчас в claude.ai) /gsd-execute-phase N — выполнить текущую GSD-фазу (если применимо) /mm save — закрыть сессию когда закончишь /mm next — обновить handoff.md перед новым чатом claude.ai ``` ### Шаг 4. После сводки — жди Не предлагай делать что-то конкретное автоматически. Юзер прочёл, решил, скажет. ## Особые режимы ### Если включена опция `--quick` (или юзер пишет «коротко») Выдай только: ``` <name> · <branch> · <N> uncommitted · последняя сессия <date> Сейчас: <одна строка> Дальше: <одна строка> ``` 3 строки максимум. Для случая «я просто проверить вспомнить». ### Если включена `--verbose` (или «подробно») Дополни: - Полный список open questions (без обрезки) - Полное «Сделано» из последней сессии (не первые 2) - Список последних 3 сессий с темами - Список фаз GSD с галочками ## Edge cases - **Несколько проектов в моно-репо**: в Discovery возьми проект ближе к cwd. Если cwd на корне — спроси какой. - **Свежий `/mm new`, ещё нет сессий**: пропусти секцию «Последняя сессия», в «Что брать следующим» предложи «заполнить секцию 8 паспорта». - **GSD без активной фазы** (между milestone'ами): «GSD: между фазами, последняя завершена N дней назад. /gsd-new-milestone?» - **Нет git вообще** (просто папка с файлами): пропусти git-секцию. - **passport.md очень старый** (`updated:` > 60 дней назад): добавь предупреждение «Паспорт давно не обновлялся, может быть неточен. /mm new для refresh». - **Уже Memory у Anthropic накопилась**: не дублируй её. mm-resume — про **актуальное** (что сейчас, что вчера). Memory — про **долгосрочное** (как ты любишь работать). ## Что НЕ делать - Не запрашивать данные из чата если их можно прочитать из файлов. - Не выводить полные тексты файлов — только выжимки. - Не делать `git pull` / `git fetch` без явного запроса. - Не запускать сам `/gsd-progress` как отдельную команду — логика встроена сюда. - Не предлагать действие если не уверен что нужно — лучше промолчать чем советовать наугад. - Не дублируй чек `/mm-doctor` — для смок-теста достаточно одной junction-проверки.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.