Самообновление 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".
Scanned 8/31/2026
Install to Claude Code
npx -y skills add mworldorg/markdown-memory --skill mm-update --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Mm Update?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/mworldorg-mm-update)More formats (shields.io, HTML) on the badges page.
---
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`.
Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!