30 KiB
name, author, version, description
| name | author | version | description |
|---|---|---|---|
| workshop-promote-brainstorm | ours | 1.1.0 | Finalize a matured brainstorm buffer on the boss's desk (~/projects/.workshop/.brainstorm/): ask routing (workshop-meta → local .wiki/concepts/, domain → target project wiki via knowledge_ingest, skill → claude-skills skeleton), extract action-items into target .tasks, create pointers + review umbrella for impl tasks, archive the buffer. Location-agnostic: fires from ANY folder; all paths resolve to ~/projects/.workshop/ regardless of CWD. Triggers (user): «промоутни брейнсторм», «finalize <topic>», «выкати в вики», «promote <topic>». |
workshop-promote-brainstorm
Финализирует созревший брейнсторм-буфер на столе босса (~/projects/.workshop/). Три ветки маршрутизации:
Location-agnostic. Скил триггерится из любой папки — босс-штормы происходят где угодно, запись живёт на столе. Все относительные пути ниже (
.brainstorm/,.archive/,.wiki/,index.md) разрешаются относительно~/projects/.workshop/независимо от CWD; git-команды явно указывают-C ~/projects/.workshop.
- workshop-meta → локальный
.wiki/concepts/(методология самой зоны). - domain → глобал через
mcp__projects-meta__knowledge_ingestв~/projects/<proj>/.wiki/. - skill →
~/projects/claude-skills/skills/<name>/SKILL.md(только шапка + пустой каркас тела, локальный коммит без push/install/build-hermes).
Буфер уезжает в .archive/. Action-items уходят тасками в target-проект. Всегда, при любом маршруте, в воркшоп-вики остаётся summary-страница.
When to use
- «промоутни брейнсторм», «finalize », «выкати в вики», «promote ».
- Пользователь явно ссылается на
.workshop/.brainstorm/<topic>.mdкак на готовый к промоушену.
Inputs
- Путь
.brainstorm/<topic>.mdили просто<topic>. - Для skill-ветки дополнительно:
<name>нового скила (если не указан — спросить, предложить производное от topic).
Decision flow
.brainstorm/<topic>.md
│
▼
read + summarize (1–2 paragraphs)
│
▼
ask: workshop-meta or domain or skill?
│ │ │
│ ▼ ▼
│ ask: target proj ask: <name> + check
│ │ ~/projects/claude-skills/
│ ▼ skills/<name>/ NOT exists
│ knowledge_ingest │
│ │ ▼
│ │ dialog: description (trigger contract)
│ │ │
│ │ ▼
│ │ preview + confirm
│ │ │
│ │ ▼
▼ │ mkdir + Write SKILL.md
write to │ (header + empty 6-section skeleton)
.wiki/concepts │ │
│ │ ▼
│ │ git add + commit in claude-skills/
│ │ (local, no push, no install.sh, no build-hermes)
│ │ │
└──────────────┴──────────────┘
│
▼
parse action-items + (for skill: prepend 3 baselines)
│
▼
for each: mcp__projects-meta__tasks_create
│
▼
if domain && N≥1: tasks_create [<topic>-review] (blocked-by impl)
if skill: tasks_create [<name>-review] (blocked-by impl, behavioral smoke-test)
│
▼
Write .wiki/concepts/<topic>.md ← ВСЕГДА, любой маршрут
(summary: решения, куда промочено, задачи, ссылки)
│
▼
git -C ~/projects/.workshop mv .brainstorm/<topic>.md .archive/<date>-<topic>.md
│
▼
append to .wiki/log.md
Steps
-
Прочитать
.brainstorm/<topic>.md. Показать summary (≤2 абзаца). -
Спросить тип:
- workshop-meta — методология самой workshop-зоны: ретро дистилляции, паттерны, апгрейды скилов зоны.
- domain — доменное содержимое для какого-то целевого проекта.
- skill — методология общего назначения, оформляется как скил в
~/projects/claude-skills/.
-
Если domain:
- Спросить целевой проект (имя папки в
~/projects/). - Валидация: вызвать
mcp__projects-meta__meta_status, убедиться что проект известен; иначе — abort с сообщением «зарегистрируй проект через setup-projects-meta».
- Спросить целевой проект (имя папки в
-
Если skill:
- Спросить
<name>нового скила (если не указан) — валидный slug ([a-z0-9-]+). - Валидация:
~/projects/claude-skills/skills/<name>/НЕ должна существовать. Если существует — abort с сообщением «скил<name>уже существует, обновляйся обычным маршрутом вclaude-skills/, этот скил не для апдейтов». - Валидация:
~/projects/claude-skills/сам репозиторий существует. Если нет — abort с сообщением «клонируй claude-skills/ через update-claude-skills или вручную».
- Спросить
-
Парсинг action-items:
- regex по строкам вида
- [ ] ...,- [ ], секции после## Следующие шаги/## TODO/## Next steps/## Action items. - Показать список, дать редактировать/удалять/добавлять.
- Если 0 action-items — продолжить, не блокировать.
- regex по строкам вида
-
Промоушен контента:
-
workshop-meta:
Write→.wiki/concepts/<topic>.mdс frontmatter:--- date: <YYYY-MM-DD> source: .brainstorm/<topic>.md status: promoted type: workshop-meta ---Тело — содержимое буфера (можно слегка причесать заголовки, секции типа TODO убрать — они уже сепарированы в action-items).
-
domain:
mcp__projects-meta__knowledge_ingestс параметрами:project: <target>path: concepts/<topic>.md(внутри target wiki)content: <тело буфера с frontmatter>
Если
knowledge_ingestпадает → abort до tasks_create и доgit mv. Сообщить пользователю. -
skill: двухпроходной.
Проход первый (этот скил):
-
Диалог по
description— поведенческий контракт активации скила. Показать пользователю summary буфера и спросить:- На каких триггер-фразах скил должен активироваться? (минимум 2-3, лучше — пары русский/английский)
- Что скил делает в одном предложении?
- Когда скил не должен активироваться (антипаттерны)?
Из ответов собрать
descriptionстрокой ~200-400 символов в стиле существующих скилов (см.~/projects/claude-skills/skills/*/SKILL.mdдля примеров). -
Preview + confirm (обязательно):
Писать в: ~/projects/claude-skills/skills/<name>/SKILL.md Frontmatter: name=<name>, version=0.1.0, description=<...> Body: пустой каркас с заголовками When to use / Inputs / Steps / Failure modes / Side effects / What NOT to do Коммит: feat(skills): add <name> v0.1.0 (promoted from .workshop/.brainstorm/<topic>.md) Без: install.sh, push, build-hermes (это в созданных тасках) ОК? -
После confirm:
-
mkdir -p ~/projects/claude-skills/skills/<name>/ -
Writeфайла~/projects/claude-skills/skills/<name>/SKILL.md:--- name: <name> version: 0.1.0 description: <вписанный пользователем триггер-контракт> --- # <name> <одно-два предложения что скил делает — из диалога> ## When to use <пусто, дописывается во втором проходе> ## Inputs <пусто> ## Steps <пусто> ## Failure modes <пусто> ## Side effects <пусто> ## What NOT to do <пусто> -
В
~/projects/claude-skills/:git -C ~/projects/claude-skills add skills/<name>/SKILL.md && git -C ~/projects/claude-skills commit -m "feat(skills): add <name> v0.1.0 (promoted from ~/projects/.workshop/.brainstorm/<topic>.md)". -
STOP. Не запускать
install.sh. Не делатьgit push. Не правитьhermes/mapping.yaml. Это всё уйдёт тасками на шаге 7.
-
Проход второй — пользователь явно зовёт «доведём
<name>» в этой же или следующей сессии. Источник лежит в.archive/<date>-<topic>.md, тело каркаса дописывается глазами. Вне scope этого скила. -
-
-
Создание тасок:
-
domain (mandatory pre-impl) —
[<topic>-pointers]: первой создать таску, заполняющую.wiki/CLAUDE.mdDomain conventions у target-проекта пойнтерами на спецификацию. Без неё импл-таски будут подняты со stub'ом в Domain conventions, и следующий агент попадёт в дыру: densewhere_stoppedone-liner + пустой stub = угадывание порогов / таксономий / pipeline-этапов. Параметры:target_project: <target>slug: <topic>-pointersstatus: readydescription:шаблон нижеnext_action:готовый блок текста для копирования в.wiki/CLAUDE.md(шаблон ниже)
Description-шаблон:
Bootstrap-pointers для design <topic>. Pre-fills target's `.wiki/CLAUDE.md` Domain conventions ссылками на спецификацию. Дизайн не лежит в этом репо — только pointer-stub. Без этой таски следующий агент попадёт в дыру: where_stopped one-liner + пустой Domain conventions stub = угадывание порогов / таксономий / pipeline-этапов вместо чтения готовых решений. **Кто делает:** любой следующий агент в этом проекте. Это первая по приоритету таска промоушена — все остальные импл-таски ссылаются на pointers через .wiki/CLAUDE.md.Next-action шаблон (pre-filled, копировать дословно — подменив
<topic>и<YYYY-MM-DD>):В `.wiki/CLAUDE.md` секции "Domain conventions" вставить блок (или заменить дефолтный setup-wiki stub): ### Mandatory: read design context before implementation Before picking up any task in `.tasks/`, load the full design context. It does **not** live in this repo — only pointers do. Sources, in order: 1. **Global wiki design (canonical):** `mcp__projects-meta__knowledge_get` с `slug = "concepts/<topic>"`. Architecture decisions, contracts, scope. 2. **Brainstorm process trace (rationale):** `~/projects/.workshop/.archive/<YYYY-MM-DD>-<topic>.md`. Why each decision was made, what was rejected and why, anti-patterns. 3. **Local `overview.md`** — thin summary of (1), used as quick orientation only — never as the source of truth. Do **not** invent thresholds, taxonomies, container topology, or pipeline stages from task `where_stopped` lines alone — those are pointers, not specifications. --- Закоммитить: `wiki(claude): add design-context pointers for <topic>`.Конкретные значения, которые промоутер должен подставить заранее в текст next_action перед
tasks_create:<topic>— тема промоушена (тот же slug, что используется вconcepts/<topic>.mdи в.archive/<YYYY-MM-DD>-<topic>.md).<YYYY-MM-DD>— сегодняшняя дата (та же, что в шаге 9 архивации).
Если
tasks_createдля<topic>-pointersупала → abort до content-тасок и до review. Без pointers оставшиеся таски бесполезны: импл-агент будет угадывать. Сообщить пользователю, буфер оставить на месте. -
workshop-meta / domain (content): для каждого action-item:
mcp__projects-meta__tasks_createсproject: <target>(для domain) или сproject: <inferred>(для workshop-meta — спросить пользователя если неоднозначно).- Title — первая строка action-item; description — остальное.
-
skill: всегда добавляются три baseline-таски в
project: claude-skills:[<name>-install]— запуститьinstall.shв~/projects/claude-skills/, проверить что скил активируется в новой сессии, сделать/reload-plugins.[<name>-hermes-mapping]— добавить запись в~/projects/claude-skills/hermes/mapping.yaml. Режим:autoесли скил чисто стилевой / response-style,pendingесли скил трогает инструменты или окружение (требует отдельного аудита).[<name>-test-trigger]— прогнать триггер-фразы изdescriptionна тестовом буфере: убедиться что активируется на своих фразах И не активируется на 2-3 близких чужих (false-positive check).
Плюс content-таски из самого буфера (если были) — также в
project: claude-skills, slug-prefix<name>-. -
Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет.
-
Запомнить slug'и созданных импл-тасок для шага 8.
-
-
Review-чекпоинт. Создаётся всегда для skill-промоушена; для domain-промоушена — только если N≥1 импл-тасок; для workshop-meta или N=0 (domain) — skip с пометкой в логе.
-
domain (N≥1):
mcp__projects-meta__tasks_create:target_project: <target>slug: <topic>-reviewstatus: blockedblocker:«bootstrap: <topic>-pointers; impl-tasks: <номера #n через запятую>»— блокеры по номерам (номер = машинный ключ; слаги оставить в скобках для читаемости).description:шаблон ниже.next_action:«Дождаться 🟢 у всех blocker-тасок (включая<topic>-pointers— без него pointers в.wiki/CLAUDE.mdне залиты, и review будет читать stub). Прочитать спецификацию (см. путь в description). Для каждой импл-таски:git show <commit>, прогнать тесты в её scope'е, сверить с acceptance criteria. Findings → новые follow-up tasks черезmcp__projects-meta__tasks_create.»
Description-шаблон (domain):
Code-review checkpoint для брейнсторма <topic> (промоушен <YYYY-MM-DD>). **Спецификация:** <путь к промоушенному design-документу — concepts/<topic>.md в target-wiki>. **Pre-impl bootstrap:** `<topic>-pointers` (заполнил `.wiki/CLAUDE.md` Domain conventions — без него review бы читал stub). **Импл-таски (review против их acceptance criteria):** <номера #n из шага 7, слаги в скобках>. **Кто делает:** **не имплементер.** Следующая сессия в этом проекте (другая модель / другой день / другой агент) поднимает таску с чистым контекстом. «Я только что это написал» bias = главный риск. **Чек-лист ревью:** - Прочитать спецификацию (acceptance criteria каждой импл-таски). - `git log --oneline` shipped-коммитов (по slug или scope в commit-message). - Для каждой импл-таски: прогнать соответствующие тесты, реально проверить что они доходят до своих веток (не coverage-illusion). - Сверить дизайн-decisions со shipped-кодом (signature, params, error-paths, безопасность). - Findings — отдельные follow-up tasks (`<topic>-<gap>-fix` или подобное) через `tasks_create`. **Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. -
skill:
mcp__projects-meta__tasks_create:target_project: claude-skillsslug: <name>-reviewstatus: blockedblocker:«impl-tasks: <name>-install, <name>-hermes-mapping, <name>-test-trigger[, content-impls если были]»— номера#nиз шага 7 (слаги в скобках для читаемости).description:шаблон ниже.next_action:«Дождаться 🟢 у baseline-тасок. Прогнать поведенческий smoke-test (см. чек-лист в description). Findings → follow-up tasks черезtasks_create.»
Description-шаблон (skill):
Skill-review checkpoint для <name> (промоушен <YYYY-MM-DD>). **Источник дизайна:** .workshop/.archive/<YYYY-MM-DD>-<topic>.md. **Импл-таски:** <name>-install, <name>-hermes-mapping, <name>-test-trigger[, content-impls] — номера #n из шага 7. **Кто делает:** **не имплементер.** Другая сессия / другой день / другой агент. Identity-not-location: ревьюер работает в любой папке, где есть доступ к файлам (см. `.workshop/.wiki/concepts/workshop-architecture.md` §5.1). **Поведенческий smoke-test (это и есть acceptance):** - Скил активируется в чистой сессии на каждой триггер-фразе из `description` (русский И английский варианты). - Скил **не** активируется на 2-3 близких но не своих фразах из соседних доменов (false-positive check). - Каждый шаг секции `Steps` отрабатывает на тестовом буфере без ошибок. - `Failure modes` уводят в abort, не в частичный успех с грязным состоянием. - `What NOT to do` соответствует реальности — нет дыры между правилом и реализацией. Findings — обычные follow-up tasks (`<name>-<gap>-fix` или подобное) через `tasks_create` в `claude-skills`. **Закрытие:** только когда все findings зафайлены ИЛИ ревьюер подтвердил «нет findings» в close-note. **NB по семверу:** `version: 0.1.0` записан промоутером. Дальнейшие инкременты — ответственность владельца `claude-skills/`, **не** этого скила и не ревьюера. Если ревью требует правок — правит владелец, бампит он же. -
Если
tasks_createreview-таски упала — сообщить пользователю, продолжить к шагу 9 (архивация буфера). Review-таску можно создать вручную позже из.archive/<date>-<topic>.md.
-
-
Workshop-wiki summary (обязательно для всех маршрутов):
Write→.wiki/concepts/<topic>.mdс frontmatter:--- date: <YYYY-MM-DD> source: .brainstorm/<topic>.md → .archive/<YYYY-MM-DD>-<topic>.md status: promoted type: workshop-meta ---Содержание (≤60 строк):
- Что решили — ключевые решения раундов (не пересказ, а outcomes).
- Куда промочено — полный путь: target-wiki / claude-skills / local concepts.
- Задачи — перечень slug'ов, созданных в шаге 7.
- Ссылки — архив буфера + связанные концепты в workshop-вики + глобальная вики.
Для workshop-meta: summary — сокращение полного контента (который уже в
.wiki/concepts/<topic>.mdшага 6); если шаг 6 уже записал туда полный файл — шаг 9 его дополняет секцией «Куда промочено / Задачи» или пропускается (не дублировать).Затем обновить
index.md— добавить строку в нужную секцию.Если
Writeупал → сообщить, не блокировать архивацию (summary менее критична чем content-промоушен). -
Архивация:
git -C ~/projects/.workshop mv .brainstorm/<topic>.md .archive/<YYYY-MM-DD>-<topic>.mdТолько если шаги 6 и 7 прошли (или прошли с допустимым partial — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить.
-
Лог: дописать в
.wiki/log.md:<date> promoted <topic> → <destination> [created N tasks in <proj>]Для skill —
<destination>=claude-skills/skills/<name>/SKILL.md (skeleton). -
Финальный отчёт пользователю:
- Куда промочено (полный путь).
- Какие таски созданы (id, title, проект).
- Куда уехал исходник.
- Для skill: напомнить что нужен второй проход «доведём
<name>» для дописывания тела каркаса.
Failure modes
.brainstorm/<topic>.mdотсутствует → abort.mcp__projects-metaнедоступен → abort до записей.- Целевой проект (для domain) не найден в
meta_status→ abort. knowledge_ingestупал → abort доtasks_createиgit mv. Буфер остаётся.- domain:
tasks_createдля[<topic>-pointers]упал → abort до content-тасок и до review-таски. Без pointers оставшиеся таски бесполезны (агент будет угадывать). Сообщить пользователю; буфер оставить на месте для retry. tasks_createупал на N-й content-таске → продолжить остальные. Сообщить partial. Не делатьgit mvбез подтверждения пользователя.tasks_createупал на review-таске (шаг 8) → не блокировать; перейти к архивации, сообщить пользователю чтобы создал вручную из.archive/.- Skill:
~/projects/claude-skills/не существует → abort с сообщением «клонируй через update-claude-skills или вручную». - Skill:
~/projects/claude-skills/skills/<name>/уже существует → abort с сообщением «скил уже существует, обновляйся обычным маршрутом вclaude-skills/». - Skill: пользователь не подтвердил preview перед записью → abort, состояние не меняется.
- Skill: локальный
git commitвclaude-skills/упал (например, не настроен user.email) → файл остаётся, сообщить пользователю что коммит нужно сделать руками; не делатьgit mvбуфера до подтверждения.
Side effects
- Всегда (любой маршрут): создаёт summary-страницу
.wiki/concepts/<topic>.mdв.workshop/+ добавляет строку вindex.md. - workshop-meta: summary IS контент (шаг 6 записывает полное тело; шаг 9 дополняет секцию «задачи/ссылки» или пропускается если уже полный).
- domain: создаёт запись в target-wiki через MCP (
mcp__projects-meta__knowledge_ingest). - domain: создаёт также mandatory pre-impl таску
[<topic>-pointers]в target — pre-filled блок текста для.wiki/CLAUDE.mdDomain conventions (ссылки на global wiki slug + workshop archive trace + local overview.md). Без неё последующий импл-агент попадает в дыру: where_stopped one-liner + пустой Domain conventions stub. - skill: создаёт
~/projects/claude-skills/skills/<name>/SKILL.md— только шапка + пустой каркас. Локальный коммит вclaude-skills/. Без установки, push, или build-hermes — это всё в созданных baseline-тасках. - Создаёт N тасок в target
.tasks/через MCP. - Для domain (N≥1) или skill: создаёт зонтичную review-таску (status=blocked, blocker=impl-slugs; для domain — также включает
<topic>-pointers) в том же target. - Перемещает
.brainstorm/<topic>.md→.archive/<date>-<topic>.md. - Аппендит строку в
.wiki/log.md. - Семвер скилов: при target=skill промоутер записывает
version: 0.1.0в шапку. Дальнейшие инкременты — ответственность владельцаclaude-skills/, не этого скила. При попытке промоушена в существующий скил — abort (см. Failure modes).
What NOT to do
- Не писать доменное содержимое в локальный
.wiki/concepts/(правило #1 из.workshop/CLAUDE.md). Summary-страница шага 9 — это trace/навигация, не domain-контент. - Не пропускать шаг 9 (workshop-wiki summary) — именно так следующая сессия узнаёт что буфер был и куда ушёл.
- Не делать
git mvбуфера до успеха promotion+tasks. - Не удалять буфер вместо
git mv— теряется история. - Skill: не пытаться автоматически переформатировать тело буфера в каркас
Steps/Failure modes/etc. — это поведенческий контракт, не косметика. Каркас остаётся пустым; тело дописывается во втором проходе глазами. - Skill: не запускать
install.sh. Не делатьgit pushвclaude-skills/. Не правитьhermes/mapping.yaml. Не запускатьbuild-hermes.py. Это работа baseline-тасок, не промоутера. - Skill: не бампить
versionпосле первой записи (это работа владельцаclaude-skills/). - Skill: не промоутить в существующий скил (см. Failure modes — abort).
- Skill: не пропускать обязательный preview + confirm перед
Write— действие выходит за пределы мастерской, изменяет соседний репозиторий.