Claude Skill

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

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download mworldorg-markdown-memory-skills_mm-update-6de01f3.zip · 3 KB
Part of mworldorg/markdown-memory — 17 skills

Install

skills CLI npx skills add https://github.com/mworldorg/markdown-memory/tree/main/skills/mm-update
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install mworldorg-markdown-memory@llmmart
Git 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 (читай файл напрямую).
  • Удалённая версия:
    git show origin/main:config/mm-config.json
    
    распарси JSON, возьми version.

Это поле — единый источник версии системы (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.

No comments yet.

Reviews (0)

No reviews yet.

Related