$npx -y skills add mworldorg/markdown-memory --skill mm-handoffГенерирует handoff.md — компактную сводку для нового чата claude.ai когда контекст текущего заполнился. Включает 15-категорийный Session Guide (вдохновлено context-mode), выжимку последних сессий, текущее состояние, открытые вопросы, и (если есть GSD) — current phase + last 3 SUM
| 1 | # mm-handoff — Snapshot for Next claude.ai Chat |
| 2 | |
| 3 | Решает проблему: контекст в чате claude.ai заполнен. Дополняет Anthropic Memory структурированным компактным snapshot'ом, который загружается в Project Knowledge. |
| 4 | |
| 5 | **Memory vs Handoff:** Memory (Anthropic, авто) хранит долгосрочные факты о тебе и проекте. Handoff (этот skill, ручной) — свежий контекст за 1-2 недели: что сделано, что в работе, что открыто. Не конкурируют — дополняют. |
| 6 | |
| 7 | ## Когда вызывать |
| 8 | |
| 9 | - **Автоматически** — из `/mm-save-session` (шаг 5.6) при каждом закрытии сессии, чтобы handoff.md в Project Knowledge claude.ai всегда был свежим. Это основной путь, руками дёргать не надо. |
| 10 | - **Вручную** (`/mm-handoff` или `/mm next`) — когда контекст текущего чата забился, а сессию закрывать рано: обновить handoff, не закрывая сессию. |
| 11 | - Перед стартом нового чата в claude.ai по тому же проекту |
| 12 | - В конце большой вехи (после серии сессий) |
| 13 | - Перед паузой на несколько дней — чтобы вернуться без раскачки |
| 14 | |
| 15 | > Скелет handoff.md создаётся ещё на `/mm-init-project`; первый же `/mm-save-session` заменяет его полноценной версией через этот skill. |
| 16 | |
| 17 | ## Конфиг |
| 18 | |
| 19 | Загрузи `mm-config.json` по алгоритму из `<repo>/docs/CONFIG-LOADING.md`. Поддержка `mm-config.local.json` overlay обязательна. |
| 20 | |
| 21 | Понадобятся: |
| 22 | - `paths.obsidian_projects` |
| 23 | - `paths.obsidian_sessions` |
| 24 | - `paths.obsidian_index` (INDEX.md) |
| 25 | |
| 26 | ## Процесс |
| 27 | |
| 28 | ### Шаг 1. Определи проект и хранилище Vault |
| 29 | |
| 30 | - Прочитай `passport.md` в текущей `cwd`. Если нет — спроси: «Для какого проекта handoff? Дай путь.» или «Запустить /mm-init-project сначала?» |
| 31 | - Из паспорта возьми: имя, тип, путь. |
| 32 | - Определи путь базы знаний `<vault_root>` (определяй по единому алгоритму: (1) из секции `## Obsidian Knowledge Vault` в `CLAUDE.md` со строкой `Хранилище знаний: <путь>`, если она есть; (2) локальная папка `.vault/` в корне проекта; (3) глобальная папка проекта `<obsidian_projects>/<name>/` из конфига). |
| 33 | |
| 34 | ### Шаг 2. Собери сводку последних сессий — index-first, тела лениво |
| 35 | |
| 36 | > **Progressive disclosure (достройка существующей 3-слойной структуры mm, не новый механизм).** Индекс однострочников уже есть — не вычитывай полные тела сессий ради «Что сделано». Раньше handoff читал 3-5 ПОЛНЫХ тел при каждом вызове; теперь основной источник — дешёвый индекс, а тела открываются лениво. Цель — экономия контекста на «толстых» проектах. |
| 37 | |
| 38 | Определи окно: сессии этого проекта за последние 14 дней (по дате в имени файла `YYYY-MM-DD-HHMM-slug` или mtime). |
| 39 | |
| 40 | 1. **Индекс-слой (дёшево, основной источник для «Что сделано за период»):** |
| 41 | - Прочитай `<vault_root>/00-home/index.md` И/ИЛИ `<obsidian_index>` (INDEX.md), отфильтровав строки по этому проекту за окно. |
| 42 | - Каждая строка индекса — готовый однострочник сессии (формат `- <дата> · **<project>** · [[Sessions/<id>|<тема/что сделано>]]` или аналогичный). |
| 43 | - **Парсинг ссылки сессии**: Парсер должен принимать любые форматы ссылок: `[[Sessions/<id>]]`, `[[sessions/<id>]]`, а также полные или относительные пути вроде `[[Projects/<name>/sessions/<id>]]` или `[[../Projects/<name>/sessions/<id>]]`. Всегда бери **`<id>` из самого хвоста пути** (имя файла без расширения). ID сессии = `<id>`. |
| 44 | - «Что сделано за период» собирай **из этих однострочников**, БЕЗ открытия тел. |
| 45 | |
| 46 | 2. **Тело `sessions/<id>.md` (или по пути из ссылки) открывай ЛЕНИВО — точечно по ID, не все подряд — только когда:** |
| 47 | - это **топ-1 самая свежая** сессия (нужны её «Ключевые решения» и «Открытые вопросы» дословно — см. п.3), ИЛИ |
| 48 | - однострочника индекса **недостаточно** для внятного пункта (пустой / обрезанный / сессии нет в индексе), ИЛИ |
| 49 | - пользователь явно просит детали по конкретному ID/теме. |
| 50 | |
| 51 | 3. **«Ключевые решения» и «Открытые вопросы» — ВСЕГДА полностью, не прятать в индекс:** |
| 52 | - Источник: тело **топ-1 свежей** сессии (её читаем всегда) + `<vault_root>/00-home/текущие приоритеты.md` + passport §10. |
| 53 | - Если важное решение/вопрос виден в однострочнике более старой сессии — **открой её тело**, чтобы не потерять. Детали не теряем — только откладываем чтение; тело остаётся каноном и подтягивается по ID/`[[ссылке]]`. |
| 54 | |
| 55 | 4. **No-op на мелких/молодых проектах:** если сессий **< 3** ИЛИ однострочники по сути равны телам (очень короткие сессии) — ленивость не даёт выигрыша, читай тела как раньше. Не усложняй там, где экономии нет. |
| 56 | |
| 57 | 5. **Fallback (мягкая деградация и защита от сбоев):** |
| 58 | - Старые сессии без чистого однострочника в индексе → прочитай тело. Никогда не пад |