12-task plan across 3 phases (bootstrap → skills → e2e validation). Pairs
with spec at .brainstorm/meeting-room-redesign.md (commit 243c045). Both
files archive together in Task 11 after self-promotion.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
52 KiB
Meeting-Room Redesign Implementation Plan
For agentic workers: REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (
- [ ]) syntax for tracking.
Goal: Превратить .meeting-room/ из плоской транзитной зоны в Karpathy-style workspace с локальной .wiki/ для room-meta, тремя локальными скилами (promote-brainstorm, start-meeting, register-persona) и связкой с глобальной wiki/tasks через projects-meta.
Architecture: Реализуем строго по spec'у .brainstorm/meeting-room-redesign.md (вариант B + миграция 1 + lifecycle C+ii). Сначала каркас (структура .wiki/ + корневой CLAUDE.md + миграция существующих папок), потом три скила, в конце — два self-promotion прогона: modulair-rag.md и сам spec этого редизайна, чтобы провалидировать систему на её же артефактах.
Tech Stack: Markdown (Karpathy LLM Wiki), YAML (frontmatter и config.yaml), Claude Code skills (.claude/skills/<name>/SKILL.md), MCP projects-meta для cross-project ingest и tasks_create, git с master-only.
Spec reference: .brainstorm/meeting-room-redesign.md (commit 243c045).
File Structure
Создаются:
| Путь | Назначение |
|---|---|
CLAUDE.md |
Корневой контракт работы в комнате (semантика, триггеры скилов, override discipline) |
.wiki/CLAUDE.md |
Karpathy-схема локальной вики, frontmatter-требования |
.wiki/index.md |
Навигация |
.wiki/overview.md |
High-level описание комнаты |
.wiki/log.md |
Append-only хронологический лог: meetings, promotions, persona changes |
.wiki/raw/README.md |
Описание raw-зоны |
.wiki/raw/research/.gitkeep |
Пустой каталог под clippings |
.wiki/raw/transcripts/.gitkeep |
Пустой каталог под транскрипты совещаний |
.wiki/entities/persons/.gitkeep |
Пустой каталог (заполнится Task 9) |
.wiki/entities/projects/.gitkeep |
Пустой каталог |
.wiki/concepts/.gitkeep |
Пустой каталог (заполнится Tasks 11–12) |
.wiki/packages/.gitkeep |
Пустой каталог |
.wiki/sources/.gitkeep |
Пустой каталог |
.claude/skills/meeting-room-register-persona/SKILL.md |
Скил v1 #3 |
.claude/skills/meeting-room-start-meeting/SKILL.md |
Скил v1 #2 |
.claude/skills/meeting-room-promote-brainstorm/SKILL.md |
Скил v1 #1 |
Перемещаются (git mv):
| Откуда | Куда |
|---|---|
source/2026-05-03-modulair.md |
.wiki/raw/research/2026-05-03-modulair.md |
source/2026-05-03-code-review.md |
.wiki/raw/research/2026-05-03-code-review.md |
Удаляются (опустевшие после миграции):
| Путь | Причина |
|---|---|
source/ |
Опустошён, заменён на .wiki/raw/research/ |
sessions/ |
Был пуст, заменён на .wiki/raw/transcripts/ |
Изменяются:
| Путь | Что меняется |
|---|---|
README.md |
Удалить правило «❌ NO .wiki внутри», добавить ссылки на CLAUDE.md, .wiki/index.md и три скила |
Создаются скилами в Phase 3 (а не плановыми тасками):
| Путь | Создатель |
|---|---|
.wiki/entities/persons/{analyst,idea_generator,moderator,skeptic}.md |
Task 9 — register-persona ×4 |
.wiki/concepts/modulair-rag-brainstorm-trace.md |
Task 11 — promote-brainstorm |
.archive/2026-05-05-modulair-rag.md |
Task 11 — promote-brainstorm |
.wiki/concepts/meeting-room-architecture.md |
Task 12 — promote-brainstorm |
.archive/2026-05-05-meeting-room-redesign.md |
Task 12 — promote-brainstorm (плюс meeting-room-redesign-plan.md) |
Phase 1: Bootstrap structure
Task 1: Initialize .wiki/ Karpathy skeleton
Files:
-
Create:
.wiki/CLAUDE.md -
Create:
.wiki/index.md -
Create:
.wiki/overview.md -
Create:
.wiki/log.md -
Create:
.wiki/raw/README.md -
Create:
.wiki/raw/research/.gitkeep -
Create:
.wiki/raw/transcripts/.gitkeep -
Create:
.wiki/entities/persons/.gitkeep -
Create:
.wiki/entities/projects/.gitkeep -
Create:
.wiki/concepts/.gitkeep -
Create:
.wiki/packages/.gitkeep -
Create:
.wiki/sources/.gitkeep -
Step 1: Create directory tree with
.gitkeepplaceholders
cd C:/Users/vitya/projects/.meeting-room
mkdir -p .wiki/raw/research .wiki/raw/transcripts \
.wiki/entities/persons .wiki/entities/projects \
.wiki/concepts .wiki/packages .wiki/sources
touch .wiki/raw/research/.gitkeep .wiki/raw/transcripts/.gitkeep \
.wiki/entities/persons/.gitkeep .wiki/entities/projects/.gitkeep \
.wiki/concepts/.gitkeep .wiki/packages/.gitkeep .wiki/sources/.gitkeep
- Step 2: Write
.wiki/CLAUDE.md(схема вики, meeting-room-специфика)
# .wiki — Schema (room-meta only)
Эта `.wiki/` — локальная и узко-доменная: **только знание о том, как работает meeting-room**. Доменное содержимое из совещаний промочивается в глобальную вики через `mcp__projects-meta__knowledge_ingest`, не сюда.
## Layout (Karpathy LLM Wiki canonical)
- `index.md` — навигация
- `overview.md` — что такое meeting-room на одной странице
- `log.md` — append-only хронологический лог: `<YYYY-MM-DD> <event-type> <topic> [details]`
- `raw/research/<date>-<topic>.md` — внешние clippings, immutable
- `raw/transcripts/<date>-<topic>.md` — транскрипты совещаний, immutable
- `entities/persons/<role-id>.md` — карточки persona (генерируются скилом `meeting-room-register-persona` из `config/config.yaml`)
- `entities/projects/<proj>.md` — pointer-карточки целевых проектов
- `concepts/<topic>.md` — room-meta: методология, ретроспективы, паттерны фасилитации
- `packages/<tool>.md` — инструменты комнаты (runner, framework, schema)
- `sources/<title>.md` — внешняя литература
## Frontmatter requirements
**`entities/persons/<role-id>.md`:**
```yaml
---
role-id: analyst
model: glm-5.1
provider: ollama_cloud
source: config/config.yaml
---
raw/research/<date>-<topic>.md:
---
date: 2026-05-03
source: <URL>
topic: <topic>
---
raw/transcripts/<date>-<topic>.md:
---
date: 2026-05-03
scenario: scenarios/<topic>.md
participants: [moderator, skeptic, idea_generator, analyst]
problem: <one-line>
---
concepts/<topic>.md:
---
date: 2026-05-05
source: .brainstorm/<topic>.md
status: promoted
type: room-meta
---
Hard rules
- Никакого доменного содержимого в
concepts/. Если контент пригодился бы в чужом проекте — он не room-meta, а domain →mcp__projects-meta__knowledge_ingestв целевой проект. raw/immutable: append-only, не редактируем после фиксации.entities/persons/пишет только скилmeeting-room-register-persona. Source-of-truth —config/config.yaml.log.mdappend-only, формат строки:<YYYY-MM-DD> <event> <topic> [details]. Никаких удалений.
- [ ] **Step 3: Write `.wiki/index.md`**
```markdown
# Meeting-Room Wiki — index
> Knowledge about how this meeting-room itself works. Domain content lives in `~/projects/.wiki/`.
## Navigation
- [Overview](overview.md) — что такое meeting-room
- [Log](log.md) — хронология встреч, промоушенов, изменений persona
- [Schema](CLAUDE.md) — раскладка и frontmatter-требования
## Sections
- [Personas](entities/persons/) — карточки ролей (генерируются из `config/config.yaml`)
- [Projects](entities/projects/) — pointer-карточки целевых проектов
- [Concepts](concepts/) — методология, ретро, паттерны
- [Raw research](raw/research/) — clippings и внешние транскрипты
- [Raw transcripts](raw/transcripts/) — транскрипты совещаний
- [Packages](packages/) — инструменты комнаты
- [Sources](sources/) — внешняя литература
- Step 4: Write
.wiki/overview.md
# Meeting-Room — overview
`.meeting-room/` — кросс-проектное рабочее пространство для брейнштормов и круглых столов. Не код-проект.
## Зачем
Место, где агенты из разных проектов пересекаются ради задач, которые не помещаются в один backlog. Брейнсторм-зона: артефакты вызревают здесь и потом промочиваются — либо в локальный `.wiki/concepts/` (если это знание про саму комнату), либо в глобальную вики и `.tasks/` целевого проекта (если доменное).
## Что внутри
- `scenarios/` — frontmatter-сценарии для запуска multi-agent совещания
- `config/config.yaml` — реестр persona (рантайм-конфиг)
- `.brainstorm/` — рабочий буфер: черновики, single-agent capture
- `.archive/` — буфер после промоушена
- `.wiki/` — Karpathy-style room-meta wiki (этот раздел)
## Как пользоваться
См. корневой `CLAUDE.md` — там семантика и триггер-фразы скилов.
- Step 5: Write
.wiki/log.md
# Log
Append-only. Format: `<YYYY-MM-DD> <event> <topic> [details]`.
Events: `started`, `promoted`, `registered`, `archived`.
---
2026-05-05 bootstrapped meeting-room redesign (initial .wiki/ skeleton)
- Step 6: Write
.wiki/raw/README.md
# raw/
Immutable, append-only. Никаких редактур после фиксации.
- `research/` — внешние clippings, pre-loaded материалы перед совещанием.
- `transcripts/` — транскрипты прошедших совещаний.
При промоушене `concepts/<topic>.md` ссылается сюда через frontmatter `source:`.
- Step 7: Verify structure
cd C:/Users/vitya/projects/.meeting-room
ls -la .wiki/
ls -la .wiki/raw/ .wiki/entities/ .wiki/concepts/ .wiki/packages/ .wiki/sources/
Expected: семь подпапок (raw/, entities/, concepts/, packages/, sources/) + четыре файла (CLAUDE.md, index.md, overview.md, log.md).
- Step 8: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .wiki/
git commit -m "$(cat <<'EOF'
Add .wiki/ Karpathy skeleton
Local room-meta wiki: index, overview, log, schema (CLAUDE.md), and empty
raw/entities/concepts/packages/sources subtrees with .gitkeep placeholders.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 2: Write root CLAUDE.md
Files:
-
Create:
CLAUDE.md -
Step 1: Write
CLAUDE.md
# .meeting-room — workspace contract
`.meeting-room/` — brainstorm-зона для кросс-проектных совещаний. **Не код-проект.**
## Семантика артефактов
| Папка | Что |
|---|---|
| `scenarios/` | runtime: сценарии запуска multi-agent совещания (frontmatter: `name`, `participants`, `problem`, `max_rounds`) |
| `config/config.yaml` | runtime: реестр persona (single source of truth) |
| `.brainstorm/<topic>.md` | рабочий буфер до промоушена |
| `.archive/<date>-<topic>.md` | post-promotion: исходник из `.brainstorm/` |
| `.wiki/raw/research/` | immutable: внешние clippings (бывший `source/`) |
| `.wiki/raw/transcripts/` | immutable: транскрипты совещаний (бывший `sessions/`) |
| `.wiki/entities/persons/` | карточки persona, генерируются из `config.yaml` |
| `.wiki/concepts/` | room-meta: методология, ретро, паттерны |
**Перед предложением tooling/архитектуры — прочитать `.wiki/raw/research/` для текущего топика.** Это закрепляет урок из `feedback_read_source_transcripts.md` (память).
## Жёсткие правила
1. **Доменное содержимое никогда не оседает в локальном `.wiki/`** — всегда в глобал через `mcp__projects-meta__knowledge_ingest` в `~/projects/<proj>/.wiki/`.
2. **Локальный `.wiki/concepts/` — только room-meta** (про саму комнату).
3. **Локальные `.tasks/` не создавать** — экшены идут в `.tasks/` целевого проекта через `mcp__projects-meta__tasks_create`.
4. **`entities/persons/` пишет только скил `meeting-room-register-persona`.** SoT — `config/config.yaml`.
## Триггеры скилов v1
| Скил | Триггер-фразы |
|---|---|
| `meeting-room-promote-brainstorm` | «промоутни брейнсторм», «finalize `<topic>`», «выкати в вики», «promote `<topic>`» |
| `meeting-room-start-meeting` | «запусти совещание `<topic>`», «start meeting `<scenario>`», «новое совещание `<topic>`» |
| `meeting-room-register-persona` | «добавь персону», «новый агент в комнату», «register persona `<role>`» |
## Override `project-discipline`
В этой комнате применяются:
- ✅ master-only (никаких feature-веток)
- ✅ commit freely / push by permission
**Не применяются:**
- ❌ semver-bump — нет versioned-артефактов (`SKILL.md` без version в frontmatter, нет `package.json`/`pyproject.toml`)
- ❌ локальный `.tasks/` — запрещён правилом §3 выше
## Persona registry
SoT — `config/config.yaml`. Карточки `.wiki/entities/persons/<role-id>.md` — производные. Ручные правки разрешены **только** в `config.yaml`. Регенерация карточки — снова `meeting-room-register-persona <role-id>`.
## Pointers
- Schema локальной вики: `.wiki/CLAUDE.md`
- Текущий redesign-spec (до self-promotion): `.brainstorm/meeting-room-redesign.md`
- После self-promotion: `.wiki/concepts/meeting-room-architecture.md`
- Step 2: Verify
cd C:/Users/vitya/projects/.meeting-room
test -f CLAUDE.md && wc -l CLAUDE.md
Expected: CLAUDE.md существует, ~50 строк.
- Step 3: Commit
cd C:/Users/vitya/projects/.meeting-room
git add CLAUDE.md
git commit -m "$(cat <<'EOF'
Add root CLAUDE.md (workspace contract)
Codifies B+1+C+ii: domain content always to global via projects-meta, local
.wiki/ is room-meta only, no local .tasks. Lists v1 skill triggers and
project-discipline overrides (semver and local-tasks both N/A here).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 3: Migrate source/ → .wiki/raw/research/
Files:
-
Move:
source/2026-05-03-modulair.md→.wiki/raw/research/2026-05-03-modulair.md -
Move:
source/2026-05-03-code-review.md→.wiki/raw/research/2026-05-03-code-review.md -
Delete:
source/(опустевший) -
Delete:
sessions/(был пуст) -
Step 1: Stage source/ first (currently untracked → нужно сначала git add)
cd C:/Users/vitya/projects/.meeting-room
git add source/2026-05-03-modulair.md source/2026-05-03-code-review.md
git status --short
Expected: оба файла отображаются как A (staged for add).
- Step 2: Commit them in source/ first (чтобы git mv был чистым переносом, а не add+remove)
cd C:/Users/vitya/projects/.meeting-room
git commit -m "$(cat <<'EOF'
Track existing source/ research clippings
Pre-migration commit so the next 'git mv' to .wiki/raw/research/ shows as a
rename, not delete+add.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
- Step 3: Move both files
cd C:/Users/vitya/projects/.meeting-room
git mv source/2026-05-03-modulair.md .wiki/raw/research/2026-05-03-modulair.md
git mv source/2026-05-03-code-review.md .wiki/raw/research/2026-05-03-code-review.md
git status --short
Expected: два R (renames), source/ опустеет.
- Step 4: Remove empty source/ and sessions/ directories
cd C:/Users/vitya/projects/.meeting-room
rmdir source sessions
ls -la | grep -E "^d.*(source|sessions)" || echo "removed"
Expected: removed.
- Step 5: Commit migration
cd C:/Users/vitya/projects/.meeting-room
git commit -m "$(cat <<'EOF'
Migrate source/ to .wiki/raw/research/ and drop empty sessions/
Per redesign §3, all immutable raw material lives under .wiki/raw/. research/
holds pre-meeting clippings (was source/). transcripts/ will hold meeting
transcripts (sessions/ removed; was always empty).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
- Step 6: Verify
cd C:/Users/vitya/projects/.meeting-room
ls .wiki/raw/research/
test ! -d source && test ! -d sessions && echo "ok"
Expected: два markdown-файла внутри .wiki/raw/research/, source/ и sessions/ отсутствуют.
Task 4: Update README.md
Files:
-
Modify:
README.md -
Step 1: Rewrite
README.md
# .meeting-room — Shared Workspace
> Кросс-проектные брейнстормы и круглые столы агентов. Brainstorm-зона: room-meta лежит локально в `.wiki/`, доменное промочивается в глобальную вики и `.tasks/` целевого проекта через `projects-meta`.
## Quickstart
- Прочитать `CLAUDE.md` — workspace contract (семантика, правила, триггеры скилов).
- Прочитать `.wiki/index.md` — навигация по локальной вики.
- Сценарии для multi-agent совещаний — в `scenarios/`.
- Реестр persona — в `config/config.yaml` (карточки в `.wiki/entities/persons/` генерируются скилом).
## Skills v1
- `meeting-room-promote-brainstorm` — `.brainstorm/<topic>.md` → либо локальный `.wiki/concepts/`, либо глобальная вики; action-items → `.tasks/` целевого проекта; исходник → `.archive/`.
- `meeting-room-start-meeting` — валидирует `scenarios/<topic>.md`, заводит skeleton-транскрипт и буфер.
- `meeting-room-register-persona` — добавляет роль в `config.yaml` и генерирует карточку в `.wiki/entities/persons/`.
## Folder map
.meeting-room/ ├── CLAUDE.md ← workspace contract ├── README.md ← этот файл ├── .wiki/ ← Karpathy room-meta wiki ├── scenarios/ ← runtime: сценарии запуска ├── config/ ← runtime: реестр persona ├── .brainstorm/ ← рабочий буфер ├── .archive/ ← post-promotion └── .claude/skills/ ← локальные скилы
## Persona Registry
Твой доверенный агент для `.brainstorm/`:
- **Role:** Chief Strategy Officer (CSO)
- **Job:** Обстучать идеи перед линейной реализацией.
- Step 2: Verify
cd C:/Users/vitya/projects/.meeting-room
grep -F "❌ NO" README.md && echo "FAIL: still has obsolete rule" || echo "ok: obsolete rule removed"
grep -F ".wiki/" README.md | head -3
Expected: ok: obsolete rule removed, плюс минимум 3 ссылки на .wiki/.
- Step 3: Commit
cd C:/Users/vitya/projects/.meeting-room
git add README.md
git commit -m "$(cat <<'EOF'
Update README for redesign
Drop obsolete '❌ NO .wiki/.tasks внутри' rule (we now have local .wiki/ for
room-meta per spec). Point readers at CLAUDE.md and .wiki/index.md, list
v1 skills, redraw folder map.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Phase 2: Skills
Task 5: Skill meeting-room-register-persona
Files:
-
Create:
.claude/skills/meeting-room-register-persona/SKILL.md -
Step 1: Write
SKILL.md
---
name: meeting-room-register-persona
description: Use when user says "добавь персону", "новый агент в комнату", "register persona <role>", or wants to register a new persona for multi-agent meetings in .meeting-room. Updates config/config.yaml (single source of truth) AND generates .wiki/entities/persons/<role-id>.md. Only this skill writes to entities/persons/.
---
# meeting-room-register-persona
Регистрирует новую persona-роль в meeting-room: пишет в `config/config.yaml` (рантайм SoT) и генерирует карточку в `.wiki/entities/persons/<role-id>.md`.
## When to use
- Пользователь говорит «добавь персону», «новый агент в комнату», «register persona <role>».
- Пользователь вручную поправил `config/config.yaml` и хочет регенерировать карточку — тоже сюда.
## Inputs (collect interactively)
| Поле | Тип | Пример |
|---|---|---|
| `role-id` | snake_case, уникален в `config.yaml#roles` | `analyst` |
| `name` | display name | `Analyst` |
| `model` | строка | `glm-5.1` |
| `provider` | ключ из `config.yaml#providers` | `ollama_cloud` |
| `temperature` | число 0–1.5 | `0.5` |
| `tools` | строка-категория | `discussion` / `web` / `none` |
| `system_prompt` | многострочный текст | … |
Если данные уже есть в `config.yaml` (регенерация карточки) — не спрашивать, читать оттуда.
## Steps
1. **Прочитать `config/config.yaml`.** Если `roles.<role-id>` уже существует:
- Если поля совпадают со словами пользователя — это регенерация, идти к шагу 4.
- Иначе спросить: **overwrite** / **abort** / **новый id**.
2. **Записать в `config.yaml`** под ключом `roles.<role-id>` со всеми полями.
- Использовать YAML-парсер с round-trip (`ruamel.yaml` для Python, или ручной insert по структуре). **Не** перезаписывать файл `yaml.dump`-ом без round-trip — порвёт комментарии и порядок ключей.
3. **Сгенерировать `.wiki/entities/persons/<role-id>.md`:**
```markdown
---
role-id: <role-id>
model: <model>
provider: <provider>
source: config/config.yaml
---
# <name>
**Model:** <model> (<provider>), temperature <temperature>
**Tools:** <tools>
## System prompt
<первые 500 символов system_prompt>...
## Source of truth
Полное определение — в `config/config.yaml#roles.<role-id>`. Эта карточка генерируется скилом `meeting-room-register-persona`; не редактировать вручную.
-
Дописать в
.wiki/log.md:<YYYY-MM-DD> registered <role-id> -
Сообщить пользователю созданные/обновлённые пути.
Failure modes
config/config.yamlотсутствует или невалидный YAML → abort, перечислить ошибки парсинга.- Конфликт
role-idбез выбора пользователя → abort. - Запись в
config.yamlупала → abort до записи карточки (single-direction failure).
Side effects
- Изменяет
config/config.yaml. - Создаёт/обновляет
.wiki/entities/persons/<role-id>.md. - Аппендит строку в
.wiki/log.md.
What NOT to do
- Не пиши в
entities/persons/ничего, кроме как через эту последовательность. - Не редактируй
config.yamlбез round-trip парсера. - Не удаляй существующие роли без явной команды пользователя.
- [ ] **Step 2: Verify SKILL.md frontmatter**
```bash
cd C:/Users/vitya/projects/.meeting-room
head -5 .claude/skills/meeting-room-register-persona/SKILL.md
Expected: ---, name: meeting-room-register-persona, description: Use when user says ..., ---.
- Step 3: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .claude/skills/meeting-room-register-persona/SKILL.md
git commit -m "$(cat <<'EOF'
Add skill: meeting-room-register-persona
Registers a persona in config/config.yaml (SoT) and generates the
.wiki/entities/persons/<role-id>.md card. Round-trip YAML edit, append-only
log. Only writer of entities/persons/.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 6: Skill meeting-room-start-meeting
Files:
-
Create:
.claude/skills/meeting-room-start-meeting/SKILL.md -
Step 1: Write
SKILL.md
---
name: meeting-room-start-meeting
description: Use when user says "запусти совещание <topic>", "start meeting <scenario>", "новое совещание <topic>", or wants to begin a multi-agent meeting from a scenarios/<topic>.md file in .meeting-room. Validates scenario frontmatter, creates skeleton transcript at .wiki/raw/transcripts/<date>-<topic>.md, opens working buffer at .brainstorm/<topic>.md, logs to .wiki/log.md.
---
# meeting-room-start-meeting
Запускает совещание из `scenarios/<topic>.md`: валидирует frontmatter, создаёт skeleton-транскрипт в `.wiki/raw/transcripts/`, заводит рабочий буфер в `.brainstorm/`, логирует в `.wiki/log.md`.
## When to use
- Пользователь говорит «запусти совещание <topic>», «start meeting <scenario>», «новое совещание <topic>».
- Пользователь указал scenario-файл и хочет подготовить артефакты под него.
## Inputs
- Путь `scenarios/<topic>.md` или просто `<topic>` (тогда искать `scenarios/<topic>.md`).
## Steps
1. **Прочитать `scenarios/<topic>.md`.** Распарсить YAML frontmatter.
2. **Валидация:**
- `name`, `problem` непустые;
- `participants` — список, все элементы существуют как ключи `roles.*` в `config/config.yaml`;
- `max_rounds` — целое (если присутствует).
- При ошибке — перечислить, не создавать ничего.
3. **Сегодняшняя дата** → `<date> = YYYY-MM-DD` (UTC локального компа).
4. **Создать `.wiki/raw/transcripts/<date>-<topic>.md`** (skeleton):
```markdown
---
date: <date>
scenario: scenarios/<topic>.md
participants: [<participant1>, <participant2>, ...]
problem: |
<первая строка problem из scenario>
---
# <name> — transcript <date>
<!-- runner будет дописывать сюда. Append-only после первой записи. -->
-
Создать
.brainstorm/<topic>.md(если ещё нет):# <name> — working buffer - **Scenario:** [scenarios/<topic>.md](../scenarios/<topic>.md) - **Transcript:** [.wiki/raw/transcripts/<date>-<topic>.md](../.wiki/raw/transcripts/<date>-<topic>.md) - **Started:** <date> ## Заметки <!-- здесь черновик. Промочится скилом meeting-room-promote-brainstorm. -->Если файл уже существует — спросить: append-skip, overwrite, abort.
-
Дописать в
.wiki/log.md:<date> started <topic> ([<participants comma-sep>]) -
Вернуть пользователю: созданные пути и подсказку — как запустить runner (на сегодня запуск runner'а вне scope, скил готовит только артефакты).
Failure modes
scenarios/<topic>.mdотсутствует → abort.- Frontmatter невалидный → перечислить ошибки, ничего не создавать.
- Participant отсутствует в
config/config.yaml#roles→ abort с указанием отсутствующих ролей. .brainstorm/<topic>.mdуже есть и пользователь выбрал abort → exit без записи вraw/transcripts/.
Side effects
- Создаёт
.wiki/raw/transcripts/<date>-<topic>.md. - Создаёт
.brainstorm/<topic>.md(или модифицирует с разрешения). - Аппендит строку в
.wiki/log.md.
What NOT to do
- Не запускать runner — это вне scope скила.
- Не редактировать
scenarios/<topic>.md. - Не пытаться угадать
participantsесли их нет вconfig.yaml.
- [ ] **Step 2: Verify**
```bash
cd C:/Users/vitya/projects/.meeting-room
head -5 .claude/skills/meeting-room-start-meeting/SKILL.md
Expected: frontmatter с name: meeting-room-start-meeting.
- Step 3: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .claude/skills/meeting-room-start-meeting/SKILL.md
git commit -m "$(cat <<'EOF'
Add skill: meeting-room-start-meeting
Validates scenarios/<topic>.md frontmatter against config.yaml roles, creates
skeleton transcript and working buffer, appends to log. Runner invocation is
out of scope (skill prepares artifacts only).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 7: Skill meeting-room-promote-brainstorm
Files:
-
Create:
.claude/skills/meeting-room-promote-brainstorm/SKILL.md -
Step 1: Write
SKILL.md
---
name: meeting-room-promote-brainstorm
description: Use when user says "промоутни брейнсторм", "finalize <topic>", "выкати в вики", "promote <topic>", or wants to finalize a .brainstorm/<topic>.md buffer. Asks routing (room-meta vs domain), writes to local .wiki/concepts/ OR ingests into target project's wiki via mcp__projects-meta__knowledge_ingest, extracts action-items into target project's .tasks via mcp__projects-meta__tasks_create, archives buffer to .archive/<date>-<topic>.md.
---
# meeting-room-promote-brainstorm
Финализирует созревший брейнсторм-буфер. По правилу C+ii из spec'а: room-meta → локальный `.wiki/concepts/`, domain → глобал через `projects-meta`; буфер уезжает в `.archive/`.
## When to use
- «промоутни брейнсторм», «finalize <topic>», «выкати в вики», «promote <topic>».
- Пользователь явно ссылается на `.brainstorm/<topic>.md` как на готовый к промоушену.
## Inputs
- Путь `.brainstorm/<topic>.md` или просто `<topic>`.
## Decision flow
.brainstorm/.md │ ▼ read + summarize (1–2 paragraphs) │ ▼ ask: room-meta or domain? │ │ │ ▼ │ ask: target project (validate ~/projects// exists) │ │ ▼ ▼ write to ingest via .wiki/concepts mcp__projects-meta__knowledge_ingest │ │ └──────┬───────┘ ▼ parse action-items, show, allow edit │ ▼ for each: mcp__projects-meta__tasks_create │ ▼ git mv .brainstorm/.md .archive/-.md │ ▼ append to .wiki/log.md
## Steps
1. **Прочитать `.brainstorm/<topic>.md`.** Показать summary (≤2 абзаца).
2. **Спросить тип:** room-meta (методология самой комнаты) или domain (доменное содержимое для какого-то целевого проекта)?
3. **Если domain:**
- Спросить целевой проект (имя папки в `~/projects/`).
- Валидация: вызвать `mcp__projects-meta__meta_status`, убедиться что проект известен; иначе — abort с сообщением «зарегистрируй проект через setup-projects-meta».
4. **Парсинг action-items:**
- regex по строкам вида `- [ ] ...`, `- [ ]`, секции после `## Следующие шаги`/`## TODO`/`## Next steps`/`## Action items`.
- Показать список, дать редактировать/удалять/добавлять.
- Если 0 action-items — продолжить, не блокировать.
5. **Промоушен контента:**
- **room-meta:** `Write` → `.wiki/concepts/<topic>.md` с frontmatter:
```yaml
---
date: <YYYY-MM-DD>
source: .brainstorm/<topic>.md
status: promoted
type: room-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`. Сообщить пользователю.
6. **Создание тасок:** для каждого action-item:
- `mcp__projects-meta__tasks_create` с `project: <target>` (для domain) или с `project: <inferred-from-buffer>` (для room-meta это может быть `meeting-room` или конкретный проект упомянутый в action-item — спросить пользователя если неоднозначно).
- Title — первая строка action-item; description — остальное.
- Если N-я таска упала — продолжить остальные, в конце сообщить какие созданы / какие нет.
7. **Архивация:**
```bash
git mv .brainstorm/<topic>.md .archive/<YYYY-MM-DD>-<topic>.md
Только если шаги 5 и 6 прошли (или прошли с допустимым partial — пользователь подтвердил). Иначе — оставить буфер на месте, чтобы можно было ретраиить.
-
Лог: дописать в
.wiki/log.md:<date> promoted <topic> → <destination> [created N tasks in <proj>] -
Финальный отчёт пользователю:
- Куда промочено (полный путь).
- Какие таски созданы (id, title, проект).
- Куда уехал исходник.
Failure modes
.brainstorm/<topic>.mdотсутствует → abort.mcp__projects-metaнедоступен → abort до записей.- Целевой проект (для domain) не найден в
meta_status→ abort. knowledge_ingestупал → abort доtasks_createиgit mv. Буфер остаётся.tasks_createупал на N-й таске → продолжить остальные. Сообщить partial. Не делатьgit mvбез подтверждения пользователя.
Side effects
- room-meta: создаёт
.wiki/concepts/<topic>.md. - domain: создаёт запись в target wiki через MCP.
- Создаёт N тасок в target
.tasks/через MCP. - Перемещает
.brainstorm/<topic>.md→.archive/<date>-<topic>.md. - Аппендит строку в
.wiki/log.md.
What NOT to do
- Не писать доменное содержимое в локальный
.wiki/concepts/(правило #1 из rootCLAUDE.md). - Не создавать локальный
.tasks/(правило #3). - Не делать
git mvбуфера до успеха ingest+tasks. - Не удалять буфер вместо
git mv— теряется история.
- [ ] **Step 2: Verify**
```bash
cd C:/Users/vitya/projects/.meeting-room
head -5 .claude/skills/meeting-room-promote-brainstorm/SKILL.md
grep -c "mcp__projects-meta" .claude/skills/meeting-room-promote-brainstorm/SKILL.md
Expected: frontmatter; ≥3 упоминания mcp__projects-meta.
- Step 3: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .claude/skills/meeting-room-promote-brainstorm/SKILL.md
git commit -m "$(cat <<'EOF'
Add skill: meeting-room-promote-brainstorm
Closes the lifecycle loop: routes .brainstorm/<topic>.md to either local
.wiki/concepts/ (room-meta) or global wiki via projects-meta (domain),
extracts action-items into target project's .tasks, archives buffer.
Atomic-ish ordering: ingest → tasks → mv. Failure leaves buffer for retry.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Phase 3: End-to-end validation
Task 8: Generate persona cards via register-persona ×4
Files:
-
Create:
.wiki/entities/persons/analyst.md -
Create:
.wiki/entities/persons/idea_generator.md -
Create:
.wiki/entities/persons/moderator.md -
Create:
.wiki/entities/persons/skeptic.md -
Modify:
.wiki/log.md(append 4 entries) -
Step 1: Invoke skill for
analyst
В сессии: «register persona analyst» (или эквивалент). Скил прочитает существующее roles.analyst в config/config.yaml, спросит подтверждение и сгенерирует карточку.
Expected file .wiki/entities/persons/analyst.md со frontmatter:
-
role-id: analyst -
model: glm-5.1 -
provider: ollama_cloud -
source: config/config.yaml -
Step 2: Invoke skill for
idea_generator
«register persona idea_generator». Expected:
-
model: deepseek-v4-flash -
provider: ollama_cloud -
Step 3: Invoke skill for
moderator
«register persona moderator». Expected:
-
model: glm-5.1 -
provider: ollama_cloud -
Step 4: Invoke skill for
skeptic
«register persona skeptic». Expected:
-
model: qwen3.5:397b -
provider: ollama_cloud -
Step 5: Verify
cd C:/Users/vitya/projects/.meeting-room
ls .wiki/entities/persons/ | grep -v gitkeep
tail -5 .wiki/log.md
Expected: четыре .md-файла. В log.md — четыре строки <date> registered <role-id>.
- Step 6: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .wiki/entities/persons/ .wiki/log.md config/
git commit -m "$(cat <<'EOF'
Generate persona cards from config.yaml (analyst/idea_generator/moderator/skeptic)
First end-to-end exercise of meeting-room-register-persona. Cards link back
to config/config.yaml as SoT.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 9: Smoke-test start-meeting on existing scenarios/modulair.md
Files (created/modified by skill):
- Create:
.wiki/raw/transcripts/<today>-modulair.md(skeleton — затем удалим, т.к. этот scenario — артефакт прошлого, не текущая встреча) - (НЕ модифицируем
.brainstorm/modulair-rag.md— он будет обработан в Task 10)
Цель: проверить, что валидатор frontmatter работает на реальном сценарии и skeleton-файл генерируется в правильном формате. Это smoke-test, не запуск настоящей встречи.
- Step 1: Запустить
meeting-room-start-meetingнаscenarios/modulair.md
В сессии: «start meeting scenarios/modulair.md».
Expected:
-
Frontmatter валидный (4 participants, problem непустой, max_rounds=6).
-
Создан
.wiki/raw/transcripts/<today>-modulair.md. -
Скил не должен пытаться создать
.brainstorm/modulair.mdoverwriting.brainstorm/modulair-rag.md— другой topic-name. Если скил предложит создать.brainstorm/modulair.md— отказаться (smoke-test only) либо принять (он просто будет shell-файл). -
Step 2: Удалить smoke-test артефакты
cd C:/Users/vitya/projects/.meeting-room
rm -f .wiki/raw/transcripts/*-modulair.md
rm -f .brainstorm/modulair.md # если был создан
# log.md строку оставить — append-only
- Step 3: Verify
cd C:/Users/vitya/projects/.meeting-room
ls .wiki/raw/transcripts/ | grep -v gitkeep || echo "empty (ok)"
ls .brainstorm/ | grep -F modulair.md && echo "FAIL: leftover" || echo "ok"
tail -3 .wiki/log.md
Expected: transcripts/ пуст (только .gitkeep), .brainstorm/modulair.md отсутствует, в log.md одна запись started modulair.
- Step 4: Commit (только log)
cd C:/Users/vitya/projects/.meeting-room
git add .wiki/log.md
git commit -m "$(cat <<'EOF'
Smoke-test meeting-room-start-meeting on scenarios/modulair.md
Validates frontmatter parser and skeleton generation. Transcript skeleton
removed afterward — this scenario was a past artifact, not a live meeting.
Log entry kept (append-only).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 10: First real promote-brainstorm — modulair-rag.md
Files (created/moved by skill):
- Create:
.wiki/concepts/modulair-rag-brainstorm-trace.md - Move:
.brainstorm/modulair-rag.md→.archive/2026-05-05-modulair-rag.md - Modify:
.wiki/log.md(append)
Контекст: доменный design уже промочен в ~/projects/.wiki/concepts/modulair-rag-design.md (упомянуто в шапке самого файла). То, что осталось — process trace: «как развивался брейнсторм, какие развилки выбрали, что отвергнуто и почему». Это room-meta.
- Step 1: Stage
.brainstorm/modulair-rag.md(currently untracked)
cd C:/Users/vitya/projects/.meeting-room
git add .brainstorm/modulair-rag.md
git commit -m "$(cat <<'EOF'
Track existing modulair-rag brainstorm capture
Pre-promotion commit so the next 'git mv' to .archive/ shows as a rename.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
- Step 2: Запустить
meeting-room-promote-brainstormна.brainstorm/modulair-rag.md
В сессии: «промоутни брейнсторм modulair-rag».
Ответы пользователя:
-
Тип: room-meta (process trace, не доменное).
-
Имя файла промо:
modulair-rag-brainstorm-trace.md(предлагается; если скил иначе — поправить). -
Action-items: те, что уже в §«Следующие шаги» исходника (3 пункта). Из них:
- «Брейнсторм per остальным 5 sub-projects» — таска в проект
meeting-room(или явно отказаться, еслиmeeting-roomещё не зарегистрирован вprojects-meta). - «Поднять структуру modulair-rag» — таска в проект
modulair-rag, если он зарегистрирован, иначе пропустить. - «Заведение golden-set» — таска в проект
modulair-rag.
Если ни один из проектов не виден
projects-meta— пропустить tasks_create целиком, продолжить только промоушен контента. - «Брейнсторм per остальным 5 sub-projects» — таска в проект
-
Step 3: Verify side effects
cd C:/Users/vitya/projects/.meeting-room
test -f .wiki/concepts/modulair-rag-brainstorm-trace.md && echo "concept ok"
test -f .archive/2026-05-05-modulair-rag.md && echo "archive ok"
test ! -f .brainstorm/modulair-rag.md && echo "buffer cleared"
tail -3 .wiki/log.md
Expected: concept ok, archive ok, buffer cleared, последняя запись лога — 2026-05-05 promoted modulair-rag → .wiki/concepts/modulair-rag-brainstorm-trace.md ....
- Step 4: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .wiki/concepts/modulair-rag-brainstorm-trace.md \
.archive/ \
.wiki/log.md
git status --short # must show .brainstorm/modulair-rag.md as 'D' or part of rename
git commit -m "$(cat <<'EOF'
Promote modulair-rag brainstorm trace to .wiki/concepts/
First real run of meeting-room-promote-brainstorm. Process trace classified
as room-meta (domain design already lives in ~/projects/.wiki/). Buffer
archived as 2026-05-05-modulair-rag.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 11: Self-promotion — meeting-room-redesign.md + meeting-room-redesign-plan.md
Files (created/moved by skill):
-
Create:
.wiki/concepts/meeting-room-architecture.md(промо spec'а; план реализации в него либо вшивается приложением, либо архивируется отдельно) -
Move:
.brainstorm/meeting-room-redesign.md→.archive/2026-05-05-meeting-room-redesign.md -
Move:
.brainstorm/meeting-room-redesign-plan.md→.archive/2026-05-05-meeting-room-redesign-plan.md -
Modify:
.wiki/log.md(append) -
Step 1: Запустить
meeting-room-promote-brainstormна.brainstorm/meeting-room-redesign.md
В сессии: «промоутни брейнсторм meeting-room-redesign».
Ответы пользователя:
-
Тип: room-meta.
-
Имя файла промо:
meeting-room-architecture.md. -
Action-items: пусто (план уже исполнен — это тоже сигнал, что промоушен закрывает цикл). Если скил предложит — отвергнуть.
-
Step 2: Архивировать план отдельно
meeting-room-redesign-plan.md — это implementation plan, не methodology spec. Не нужно его повторно ингестить в concepts/. Просто переместить в .archive/:
cd C:/Users/vitya/projects/.meeting-room
git mv .brainstorm/meeting-room-redesign-plan.md .archive/2026-05-05-meeting-room-redesign-plan.md
- Step 3: Verify
cd C:/Users/vitya/projects/.meeting-room
test -f .wiki/concepts/meeting-room-architecture.md && echo "concept ok"
test -f .archive/2026-05-05-meeting-room-redesign.md && echo "spec archived"
test -f .archive/2026-05-05-meeting-room-redesign-plan.md && echo "plan archived"
ls .brainstorm/ | grep -v gitkeep | wc -l
Expected: первые три проверки — ok; в .brainstorm/ остались только .gitkeep или вообще ноль файлов (буфер чист).
- Step 4: Commit
cd C:/Users/vitya/projects/.meeting-room
git add .wiki/concepts/meeting-room-architecture.md .archive/ .wiki/log.md .brainstorm/
git commit -m "$(cat <<'EOF'
Self-promote redesign spec; archive implementation plan
Final closure: redesign spec lives at .wiki/concepts/meeting-room-architecture.md;
both spec and plan archived under .archive/2026-05-05-*. Buffer .brainstorm/
back to empty. System bootstrapped on its own artifacts.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EOF
)"
Task 12: Final state validation
- Step 1: Folder layout matches spec §3
cd C:/Users/vitya/projects/.meeting-room
tree -L 3 -a -I '.git|.gitkeep' || ls -laR .wiki .claude/skills
Expected: видна иерархия из spec §3, без source/, без sessions/, с .wiki/concepts/ содержащим 2 файла (modulair-rag-brainstorm-trace.md, meeting-room-architecture.md), с .wiki/entities/persons/ содержащим 4 карточки, с .archive/ содержащим 3 файла.
- Step 2: All commits clean, на master, не запушены
cd C:/Users/vitya/projects/.meeting-room
git status
git log --oneline -20
git rev-list --count origin/master..HEAD 2>/dev/null || echo "no upstream tracking — ok per project-discipline"
Expected: working tree clean; все коммиты на master; ветка опережает origin (если upstream есть) — не пушим без явного разрешения.
- Step 3: Skills загружены и видны
В сессии Claude Code сделать /skills или эквивалент. Expected: три скила meeting-room-* видны.
- Step 4: Memory todo может быть закрыт
Открытый todo project_extend_discipline_for_meeting_room.md в MEMORY.md — корневой CLAUDE.md теперь явно overrides project-discipline для этой комнаты. Memory можно обновить статусом «закрыт через локальный CLAUDE.md». Это вне scope plan'а — пометить пользователю.
Self-Review
Spec coverage:
- §3 (Целевая структура) → Tasks 1, 3.
- §4 (Lifecycle) → описывается, реализуется через скилы Tasks 5–7.
- §5.1 (
promote-brainstorm) → Task 7 (write), Tasks 10–11 (test). - §5.2 (
start-meeting) → Task 6 (write), Task 9 (smoke-test). - §5.3 (
register-persona) → Task 5 (write), Task 8 (test ×4). - §6 (root
CLAUDE.md) → Task 2. - §7 (
.wiki/CLAUDE.md) → Task 1, Step 2. - §8.1 (миграция папок) → Tasks 3, 4.
- §8.2 (
modulair-rag.md) → Task 10. - §8.3 (self-promotion spec) → Task 11.
- §9 (открытые вопросы) — informational, не требует таски.
Покрытие полное.
Placeholder scan: В планe нет TBD/TODO/«implement later». Каждый шаг содержит либо конкретный код/файл, либо проверяемую команду, либо явные ответы для интерактивного скила.
Type consistency:
role-id(snake_case) используется единообразно во всех скилах и frontmatter.- Имена скилов:
meeting-room-{promote-brainstorm,start-meeting,register-persona}— везде с дефисом, без двоеточия (двоеточие — это plugin-namespace, не для project-skill). <date>форматYYYY-MM-DDединый.mcp__projects-meta__{knowledge_ingest,tasks_create,meta_status}— единое написание.
Проблем не найдено.