From f30dc400c99df08ab53bc5e4c5d4784679df33c0 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Mon, 3 Aug 2026 20:52:48 +0300 Subject: [PATCH] =?UTF-8?q?README:=20=D1=83=D1=81=D1=82=D0=B0=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BA=D0=B0=20=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC=D0=B0=D0=BD?= =?UTF-8?q?=D0=B4=D0=B0=D0=BC=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D1=82=D0=B5?= =?UTF-8?q?=D1=80=D0=BC=D0=B8=D0=BD=D0=B0=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Обновление вынесено отдельным разделом, потому что главное в нём — шагов два, и первого мало: marketplace update тянет git-клон, а снимки плагинов лежат в ~/.claude/plugins/cache/<маркетплейс>/<плагин>/<версия>/ и двигаются только plugin update. Один шаг без второго выглядит как «обновил, а ничего не изменилось». Проверено на этой машине, а не выведено из документации: - cd в проект обязателен — вызов двигает одну запись реестра; av-dev-git стоит в шести проектах, вызов из dev-skills поднял версию ровно в одном, и не в том, откуда звали; - plugin update идемпотентен: на свежем плагине говорит already at the latest version; - сниппет со списком установленного скопирован из README и выполнен через bash — работает как написано; - версия реестра это первые 12 знаков хеша коммита, поэтому в тексте git rev-parse HEAD | cut -c1-12, а не git log --oneline. У install и marketplace add умолчание scope — user, и без --scope project плагин уедет не туда, куда указывает settings.json проекта; сказано в самих командах. Абзац про снос проектных копий вернулся под «Подключение»: он про установку. Co-Authored-By: Claude Opus 5 (1M context) --- README.md | 75 ++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 63 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index da27e58..1a25bdd 100644 --- a/README.md +++ b/README.md @@ -97,16 +97,23 @@ openspec/ ## Подключение Плагин подключается **на уровне проекта**, чтобы был активен у всех, кто -открывает репозиторий: +открывает репозиторий. Из терминала, в каталоге проекта: -``` -/plugin marketplace add https://git.vakhrushev.me/av/dev-skills.git --scope project -/plugin install av-dev-pm@av-dev-skills --scope project -/plugin install av-dev-pipeline@av-dev-skills --scope project -/plugin install av-dev-git@av-dev-skills --scope project +```bash +cd /path/to/project + +# маркетплейс: один раз на проект. --scope project кладёт его +# в extraKnownMarketplaces этого репозитория (см. ниже), без флага — в user +claude plugin marketplace add https://git.vakhrushev.me/av/dev-skills.git --scope project + +# плагины: scope обязателен, умолчание у команды — user, а нам нужен project +claude plugin install av-dev-pm@av-dev-skills --scope project +claude plugin install av-dev-pipeline@av-dev-skills --scope project +claude plugin install av-dev-git@av-dev-skills --scope project ``` -…или те же команды из терминала через `claude plugin …`. Обе формы дописывают в +Те же команды изнутри Claude Code — со слешем: `/plugin marketplace add …`, +`/plugin install … --scope project`. Обе формы дописывают в `.claude/settings.json` проекта то, что можно внести и руками: ```json @@ -124,17 +131,61 @@ openspec/ } ``` -**Маркетплейс — git-клон удалённого репозитория, и он обновляется явно:** -`claude plugin marketplace update av-dev-skills`. Локальные коммиты, не -отправленные на origin, до него не доедут — это уже однажды выглядело как -«плагин не работает». - **При установке в проект, где лежали проектные копии** скиллов и агентов (`.claude/skills/` — голые `task-pipeline`, `review-pipeline`, `task-batch` и с префиксом проекта `<проект>-task-pipeline`, `.claude/agents/<проект>-review-*.md`) — снеси их. Две копии одного скилла расходятся, и побеждает та, что короче названа. +## Обновление + +**Обновление — два шага, и первого мало.** `marketplace update` тянет git-клон +маркетплейса, но снимки плагинов лежат отдельно, в +`~/.claude/plugins/cache/av-dev-skills/<плагин>/<версия>/`, и обновляются только +командой `plugin update`. Один шаг без второго выглядит как «обновил, а ничего не +изменилось» — так и было в первый раз. + +```bash +# 0. отправить свои коммиты: до клона доезжает только то, что на origin +git -C /path/to/dev-skills push origin master + +# 1. клон маркетплейса +claude plugin marketplace update av-dev-skills + +# 2. снимки плагинов — из каталога проекта, где они установлены +cd /path/to/project +claude plugin update av-dev-pm@av-dev-skills --scope project +claude plugin update av-dev-pipeline@av-dev-skills --scope project +claude plugin update av-dev-git@av-dev-skills --scope project +``` + +**`cd` в проект обязателен, и это не педантизм.** Команда правит запись реестра, а +записей столько, во скольких проектах плагин установлен; за вызов двигается +**одна**. Запущенная не из проекта, она обновит какую-то из них — наблюдалось: +`av-dev-git` стоял в шести проектах, один вызов поднял версию ровно в одном, и не +в том, из которого звали. Проекты обновляются поштучно. + +Что стоит и какой версии — одной командой: + +```bash +python3 - <<'EOF' +import json, pathlib +d = json.loads(pathlib.Path.home().joinpath(".claude/plugins/installed_plugins.json").read_text()) +for name, entries in sorted(d["plugins"].items()): + if "av-dev" not in name: + continue + for e in entries: + print(f"{e['version']:14} {name:30} {e.get('projectPath', e.get('scope', ''))}") +EOF +``` + +Версия — первые 12 знаков хеша коммита этого репозитория, так что сверяется +глазами с `git rev-parse HEAD | cut -c1-12`. Команда идемпотентна: на уже свежем +плагине скажет `already at the latest version`. + +**Изменения применяются после перезапуска Claude Code** — работающая сессия +держит скиллы в контексте и про новый снимок не знает. + ## Структура репозитория ```