mm-update
Самообновление mm-системы из удалённого репозитория. mm раздаётся через git clone + register-skills (не npm), поэтому update = git pull свежего mm из origin/main + повторный register-skills + notice о перезапуске Claude Code. Use when user says "обнови mm", "обнови систему", "/mm
Install
npx skills add https://github.com/mworldorg/markdown-memory/tree/main/skills/mm-update
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-update — Self-Update from Git Remote
Обновляет mm-систему до свежей версии из origin/main. mm установлен как git-клон с junction'ами в ~/.claude/skills/ — поэтому обновление это git pull репозитория + повторный прогон register-skills, а не пакетный менеджер.
Ничего не сливает и не ребейзит автоматически. При любом расхождении или ошибке --ff-only — стоп с инструкцией разрулить вручную.
Ручной интерактивный аналог фонового
scripts/auto-update.py(ff-only, дёргается изmm-resume); git-поток общий — отличие в том, что здесь показывается changelog и спрашивается подтверждение.
Где работать
Корень репозитория mm:
$env:MM_REPO_ROOTесли задан;- иначе текущая рабочая директория (
cwd).
Все git-команды и register-skills выполняй из этого корня.
Процесс
0. Guard: это вообще git-репо?
Проверь, что в корне репо (см. «Где работать») есть .git:
Test-Path (Join-Path $repoRoot ".git")
Если .git нет — mm установлен не как git-репо (например, распакован из tarball). Стоп:
❌ mm установлен не как git-репозиторий — обновлять через git нечем.
Обнови через `npx markdown-memory update` или переустанови mm.
Не продолжай. (По смыслу как auto-update.py: «Not a git repository. Skipping update».)
1. Забрать состояние remote
git fetch origin main
Если git fetch упал (нет сети / нет доступа к origin) — стоп: ⚠️ Не удалось связаться с origin. Проверь сеть и доступ к github.com/mworldorg/markdown-memory. Не продолжай.
2. Сравнить версии
- Локальная версия: поле
versionизconfig/mm-config.json(читай файл напрямую). - Удалённая версия:
распарси JSON, возьмиgit show origin/main:config/mm-config.jsonversion.
Это поле — единый источник версии системы (repo-wide release). Per-skill version: в каждом SKILL.md гранулярны и здесь не сравниваются.
3. Определить расхождение ветки
git rev-list --left-right --count HEAD...origin/main
Вывод — два числа через таб: первое = ahead (коммиты, которые есть локально, но нет в origin/main), второе = behind (коммиты, которые есть в origin/main, но нет локально). Не перепутай порядок.
4. Развилка по (ahead, behind)
| Состояние | Что делать |
|---|---|
behind=0, ahead=0 |
✅ Уже синхронизировано с origin/main (версия X). Обновлять нечего. → выход |
behind=0, ahead>0 |
ℹ️ Локаль впереди origin/main на N коммит(ов) — машина разработчика или есть незапушенное. Обновлять нечего. → выход |
behind>0, ahead=0 |
Показать локаль X → remote Y + changelog (см. ниже), спросить y/n, при y → git pull --ff-only |
behind>0, ahead>0 |
⚠️ Ветки разошлись (N локальных / M удалённых). Авто-обновление отменено — разрули вручную. → выход, без pull |
Changelog (только для случая behind>0, ahead=0):
git log --oneline HEAD..origin/main
Покажи список как есть. Никакого CHANGELOG.md — changelog это git-лог между HEAD и origin/main.
Формат запроса подтверждения:
Доступно обновление mm: версия X → Y
Новые коммиты (N):
<hash> <subject>
...
Подтянуть (git pull --ff-only)? (y/n)
При n — стоп: Обновление отменено.
5. Pull (только при подтверждённом behind>0, ahead=0)
git pull --ff-only origin main
Если --ff-only упал (обычно из-за локальных незакоммиченных правок или непушенных дивергентных коммитов):
- Стоп:
❌ git pull --ff-only не прошёл. Вероятно есть локальные правки в репо mm. Закоммить/стэшни их и повтори /mm update, либо разрули вручную. - Никогда не делай авто-
mergeилиrebaseчтобы «починить» это. Останавливайся и отдавай решение пользователю.
6. Переджанкшенить скиллы
После успешного pull прогони регистрацию (pull мог добавить/переименовать скиллы):
.\scripts\register-skills.ps1
(На macOS/Linux — python3 scripts/register-skills.py.)
Покажи вывод скрипта.
7. Финал
✅ Обновлено до версии Y.
Перезапусти Claude Code, чтобы подхватить обновлённые скиллы.
Скиллы загружаются на старте сессии — без рестарта новые/изменённые скиллы не активируются.
Ограничения
- Не трогать
config.version. Обновление это потребление релиза, не выпуск. Версию проставляет мейнтейнер при релизе, не этот скилл. - Вендоренные скиллы (
vendor/) не обновляются отдельной логикой.git pullтянет их вместе со всем репо — это нормально. Перевендоринг (обновление до новой upstream-версии ECC и т.п.) — ручная работа мейнтейнера, не часть/mm update. - Никогда не делать авто-
merge/rebase: ни при расхождении веток (ahead>0 && behind>0), ни при падении--ff-only. mm-config.local.jsonи_generated/— gitignored,git pullих не трогает. Отдельной защиты добавлять не нужно.- Только
origin/main. Других веток/ремоутов скилл не рассматривает.
Финальный отчёт (пример)
🔄 mm-update
Repo root: <path> (из MM_REPO_ROOT | cwd)
fetch origin main: ✅
Версия: локаль 0.6.0 → remote 0.7.0
Состояние: behind 4, ahead 0
Новые коммиты:
a1b2c3d feat: ...
...
git pull --ff-only: ✅ (4 коммита подтянуто)
register-skills.ps1: ✅ (N junction'ов)
Перезапусти Claude Code, чтобы подхватить обновлённые скиллы.
Edge cases
- Нет
$env:MM_REPO_ROOTи cwd не репо mm —git fetchне найдёт origin/упадёт; сообщи, что запускать надо из корня репо mm или задатьMM_REPO_ROOT. - Detached HEAD —
HEAD...origin/mainотработает, но pull в detached не имеет смысла; предупреди и не делай pull. - Нет интернета —
git fetchупадёт на шаге 1, дальше не идём (см. шаг 1). - Запуск из worktree — git-команды отрабатывают в контексте worktree; если worktree указывает на тот же origin/main — ок. Иначе предупреди.
Что НЕ делать
- Не делать авто-merge/rebase ни при каких обстоятельствах.
- Не править
config.versionи любые файлы — толькоgit pullиregister-skills. - Не пушить, не коммитить, не стэшить за пользователя.
- Не молчать при ошибке — всегда показывай конкретную причину и команду фикса.
- Не обновлять с других веток/ремоутов кроме
origin/main.
Files (markdown-memory)
-
SKILL.md 9.4 KB
--- name: mm-update version: 0.1.0 description: Самообновление mm-системы из удалённого репозитория. mm раздаётся через git clone + register-skills (не npm), поэтому update = git pull свежего mm из origin/main + повторный register-skills + notice о перезапуске Claude Code. Use when user says "обнови mm", "обнови систему", "/mm update", "update mm", "подтяни свежий mm", "проверь обновления mm". --- # mm-update — Self-Update from Git Remote Обновляет mm-систему до свежей версии из `origin/main`. mm установлен как git-клон с junction'ами в `~/.claude/skills/` — поэтому обновление это `git pull` репозитория + повторный прогон `register-skills`, а не пакетный менеджер. Ничего не сливает и не ребейзит автоматически. При любом расхождении или ошибке `--ff-only` — стоп с инструкцией разрулить вручную. > Ручной интерактивный аналог фонового `scripts/auto-update.py` (ff-only, дёргается из `mm-resume`); git-поток общий — отличие в том, что здесь показывается changelog и спрашивается подтверждение. ## Где работать Корень репозитория mm: - `$env:MM_REPO_ROOT` если задан; - иначе текущая рабочая директория (`cwd`). Все git-команды и `register-skills` выполняй из этого корня. ## Процесс ### 0. Guard: это вообще git-репо? Проверь, что в корне репо (см. «Где работать») есть `.git`: ```powershell Test-Path (Join-Path $repoRoot ".git") ``` Если `.git` нет — mm установлен не как git-репо (например, распакован из tarball). Стоп: ``` ❌ mm установлен не как git-репозиторий — обновлять через git нечем. Обнови через `npx markdown-memory update` или переустанови mm. ``` Не продолжай. (По смыслу как `auto-update.py`: «Not a git repository. Skipping update».) ### 1. Забрать состояние remote ```powershell git fetch origin main ``` Если `git fetch` упал (нет сети / нет доступа к origin) — стоп: `⚠️ Не удалось связаться с origin. Проверь сеть и доступ к github.com/mworldorg/markdown-memory.` Не продолжай. ### 2. Сравнить версии - **Локальная версия:** поле `version` из `config/mm-config.json` (читай файл напрямую). - **Удалённая версия:** ```powershell git show origin/main:config/mm-config.json ``` распарси JSON, возьми `version`. Это поле — единый источник версии системы (repo-wide release). Per-skill `version:` в каждом `SKILL.md` гранулярны и здесь не сравниваются. ### 3. Определить расхождение ветки ```powershell git rev-list --left-right --count HEAD...origin/main ``` Вывод — два числа через таб: **первое = ahead** (коммиты, которые есть локально, но нет в origin/main), **второе = behind** (коммиты, которые есть в origin/main, но нет локально). Не перепутай порядок. ### 4. Развилка по (ahead, behind) | Состояние | Что делать | |---|---| | `behind=0, ahead=0` | `✅ Уже синхронизировано с origin/main (версия X). Обновлять нечего.` → выход | | `behind=0, ahead>0` | `ℹ️ Локаль впереди origin/main на N коммит(ов) — машина разработчика или есть незапушенное. Обновлять нечего.` → выход | | `behind>0, ahead=0` | Показать `локаль X → remote Y` + changelog (см. ниже), спросить `y/n`, при `y` → `git pull --ff-only` | | `behind>0, ahead>0` | `⚠️ Ветки разошлись (N локальных / M удалённых). Авто-обновление отменено — разрули вручную.` → выход, **без pull** | **Changelog** (только для случая `behind>0, ahead=0`): ```powershell git log --oneline HEAD..origin/main ``` Покажи список как есть. Никакого `CHANGELOG.md` — changelog это git-лог между HEAD и origin/main. Формат запроса подтверждения: ``` Доступно обновление mm: версия X → Y Новые коммиты (N): <hash> <subject> ... Подтянуть (git pull --ff-only)? (y/n) ``` При `n` — стоп: `Обновление отменено.` ### 5. Pull (только при подтверждённом `behind>0, ahead=0`) ```powershell git pull --ff-only origin main ``` Если `--ff-only` упал (обычно из-за локальных незакоммиченных правок или непушенных дивергентных коммитов): - Стоп: `❌ git pull --ff-only не прошёл. Вероятно есть локальные правки в репо mm. Закоммить/стэшни их и повтори /mm update, либо разрули вручную.` - **Никогда** не делай авто-`merge` или `rebase` чтобы «починить» это. Останавливайся и отдавай решение пользователю. ### 6. Переджанкшенить скиллы После успешного pull прогони регистрацию (pull мог добавить/переименовать скиллы): ```powershell .\scripts\register-skills.ps1 ``` (На macOS/Linux — `python3 scripts/register-skills.py`.) Покажи вывод скрипта. ### 7. Финал ``` ✅ Обновлено до версии Y. Перезапусти Claude Code, чтобы подхватить обновлённые скиллы. ``` Скиллы загружаются на старте сессии — без рестарта новые/изменённые скиллы не активируются. ## Ограничения - **Не трогать `config.version`.** Обновление это потребление релиза, не выпуск. Версию проставляет мейнтейнер при релизе, не этот скилл. - **Вендоренные скиллы (`vendor/`) не обновляются отдельной логикой.** `git pull` тянет их вместе со всем репо — это нормально. Перевендоринг (обновление до новой upstream-версии ECC и т.п.) — ручная работа мейнтейнера, не часть `/mm update`. - **Никогда** не делать авто-`merge`/`rebase`: ни при расхождении веток (`ahead>0 && behind>0`), ни при падении `--ff-only`. - `mm-config.local.json` и `_generated/` — gitignored, `git pull` их не трогает. Отдельной защиты добавлять не нужно. - Только `origin/main`. Других веток/ремоутов скилл не рассматривает. ## Финальный отчёт (пример) ``` 🔄 mm-update Repo root: <path> (из MM_REPO_ROOT | cwd) fetch origin main: ✅ Версия: локаль 0.6.0 → remote 0.7.0 Состояние: behind 4, ahead 0 Новые коммиты: a1b2c3d feat: ... ... git pull --ff-only: ✅ (4 коммита подтянуто) register-skills.ps1: ✅ (N junction'ов) Перезапусти Claude Code, чтобы подхватить обновлённые скиллы. ``` ## Edge cases - **Нет `$env:MM_REPO_ROOT` и cwd не репо mm** — `git fetch` не найдёт origin/упадёт; сообщи, что запускать надо из корня репо mm или задать `MM_REPO_ROOT`. - **Detached HEAD** — `HEAD...origin/main` отработает, но pull в detached не имеет смысла; предупреди и не делай pull. - **Нет интернета** — `git fetch` упадёт на шаге 1, дальше не идём (см. шаг 1). - **Запуск из worktree** — git-команды отрабатывают в контексте worktree; если worktree указывает на тот же origin/main — ок. Иначе предупреди. ## Что НЕ делать - Не делать авто-merge/rebase ни при каких обстоятельствах. - Не править `config.version` и любые файлы — только `git pull` и `register-skills`. - Не пушить, не коммитить, не стэшить за пользователя. - Не молчать при ошибке — всегда показывай конкретную причину и команду фикса. - Не обновлять с других веток/ремоутов кроме `origin/main`.
Comments (0)
Sign in to join the conversation.
Reviews (0)
No reviews yet.
No comments yet.