consilium

Playbook для Claude (main session) как собрать параллельный экспертный консилиум под задачу. Активируется автоматически для medium/large задач согласно ~/.claude/CLAUDE.md классификации и триггеров из ~/.claude/triggers.md. Также доступен по команде /consilium. Инструкция: Claude сам вызывает Agent tool параллельно (3-7 ролей) с asymmetric context, запускает orthogonal verifiers (Fact-Checker с WebSearch, Visual QA через preview/chrome, Semantic Review через профильного SME, Critic), синтезирует вердикт 300 слов (решение + max 3 блокера + actions + confidence), логирует в ~/.claude/decisions/. Применяет Smart Routing per role (haiku/sonnet/opus), hard-filter для *_private.md перед spawn, veto hierarchy (Regulatory/Safety/Legal = hard veto).

Consilium — как собрать параллельный экспертный совет

Этот документ — инструкция для Claude в main session. Consilium не является отдельным агентом — это паттерн параллельного вызова Agent tool с правильным распределением контекста, верификации и синтеза вердикта.


🎯 Когда запускать

  1. Автоматически — если классификация по ~/.claude/CLAUDE.md = medium/large И хотя бы один триггер из ~/.claude/triggers.md сработал
  2. По команде/consilium [роли] от шефа
  3. По цепочке — master-agent skill инициирует consilium для medium+ фаз

НЕ запускать:

  • Trivial или small задачи (одна роль inline достаточно)
  • Hotfix bypass (слова «срочно/hotfix/прод/быстро чини»)
  • Задачи где шеф сказал /quick или /no-brigade

🗣️ Шаг 1 — Proactive Offer (если classification ≥medium)

Перед запуском обязательно предложить шефу:

Вижу [тип задачи] с [признаками: числа / клиент / юр-риск / UI].
Из памяти: [если project_*.md матчит — упомянуть].
Классификация: [medium / large].

Предлагаю консилиум (15-20 сек, параллельно):
  • [Роль 1] → [модель] — [зачем]
  • [Роль 2] → [модель] — [зачем]
  • ...
  • Fact-Checker → opus (WebSearch) — [что проверяет]
  • Critic → opus — adversarial

Fresh Data обязательно WebSearch: [список тем].

Запускаю? [y / n / custom]
  • y → Шаг 2 (spawn)
  • n → прямая работа, но Fresh Data и Arithmetic Self-Check всё равно применяются
  • custom → шеф диктует список ролей, применяю его

🔀 Шаг 2 — Asymmetric Context (критично!)

Групповое мышление (groupthink) — главная проблема 7 копий одного Claude. Чтобы роли дали РАЗНЫЕ ответы, каждая должна получить свой кусок контекста, а не одно ТЗ.

Правила распределения контекста

РольЧто ВИДИТЧто НЕ видит
Профильный SME (PV Eng, BESS, Legal...)Свой tech brief + область экспертизыМаркетинговые цели, draft текста
Copywriter / Content StrategistЦели, ЦА, tone of voice, SME brief (готовый)Юр-анализ, Security analysis
Fact-CheckerТолько числа/даты/normативы для проверки, без контекста задачиОстальное (чтобы объективно проверять)
CriticТолько outputs других ролей, БЕЗ ТЗ от шефаТЗ (чтобы вскрывать допущения бригады, а не оправдывать их)
LegalRegulatory docs + public claims из draftМаркетинговая стратегия, fin model
Sales Psychologist / CROЦА, pain points, воронкаTech specs, regulatory
Visual/UXBrand guidelines, ЦА, contentplanLegal, Finance

Как применять в Agent tool calls

При вызове Agent:

Agent({
  subagent_type: "general-purpose",
  description: "<роль>: <краткая задача>",
  prompt: "Ты — <роль>. У тебя есть ДОСТУП ТОЛЬКО К:
  <специфичный контекст>.
  
  Задача: <что проверить / сделать>.
  
  НЕ делай предположений о чём нет в твоём контексте.
  Формат вывода: <structured output: findings / concerns / confidence>.
  До N слов."
})

🛡️ Шаг 3 — Hard filter для private data (ПЕРЕД spawn)

Критично для NDA-защиты.

Перед каждым spawn Agent:

  1. grep -l "DO NOT SHARE" во всех memory файлах которые собираешься включить в контекст
  2. Файлы с именем *_private.md или с этим маркером — ИСКЛЮЧИТЬ из prompt для Agent
  3. Если задача требует их содержание (например, использовать реальный CAPEX для finance) — sanitize: заменить конкретные имена/локации на placeholders ({CLIENT_A}, {LOCATION_X})
  4. Audit: логировать в decisions/<task>/sanitization.log что именно было маскировано

Пример санитизации

Original: "Рассчитай окупность для 5МВт+BESS в [NDA локация X] с CAPEX $X"
Sanitized для spawn: "Рассчитай окупность для 5МВт+BESS с CAPEX {ESTIMATED}"

Финальный ответ Claude потом сам подставляет реальные числа из private memory в вердикт шефу — но не в spawn'ы.


🚦 Шаг 4 — Smart Routing per role

Правило из feedback_smart_routing.md:

УровеньМодельПрименение
L1haikuTrigger Match, Domain Detection, простой Fact-Check (версии, даты), Readability, Console Auditor
L2 (default)sonnetCopywriter, SME standard tasks, Visual QA, UX Flow Tester, Performance, Responsive Verifier
L3opusCritic, Auditor, Architect, Legal, Sales Psychologist, Finance Engineer, Regulatory (сложные), Semantic Review (финальное суждение), Fact-Checker сложных чисел

Объявление перед каждым spawn

Перед вызовом Agentодна строка:

⚡ [роль] → [модель] — [почему этот уровень]

Пример:

⚡ BESS Engineer → sonnet — standard SME brief
⚡ Critic → opus — adversarial проверка
⚡ Fact-Checker → opus — сложные LCOS + PPA

Auto-escalate при provalе

  • haiku дал поверхностный ответ → sonnet с пометкой ⚠️ haiku не потянул, повышаю
  • sonnet не справился → opus

⚙️ Шаг 5 — Tool gating matrix

РольРазрешённые tools
Fact-CheckerWebSearch, WebFetch, Read (только для задачи)
CriticНикаких tools — только reasoning (чтобы вынужденно думать, а не гуглить оправдания)
Profile SME (PV, BESS, Legal...)Read, Grep (локальные файлы)
Visual QAmcp__Claude_Preview__*, mcp__Claude_in_Chrome__*
Performance Testerpreview_network, preview_eval
UX Flow TesterFull Claude in Chrome (click, fill, navigate)
Console Auditorpreview_console_logs, preview_network
Copywriter / Content / EditorRead (для примеров и brand voice), без web
ArchitectRead, Glob, Grep
LegalRead (только private memory через hard-filter), WebSearch (для свежих постанов)
Regulatory ExpertWebSearch (ОБЯЗАТЕЛЬНО — тарифи/постанови часто меняются), Read
Finance Engineer (complex)WebSearch (для курсов, ставок), Read

🐛 Bug fix 2026-04-19 (Gate #3 learning)

В первом живом тесте (SES 500кВт ROI) Regulatory Expert был spawned без WebSearch в env — дал confidence 55% с дисклеймером «без онлайн-верифікації». Fact-Checker частично компенсировал. Правило: при spawn Regulatory Expert (и Finance Engineer для сложных задач) всегда передавать WebSearch в tools. Для general-purpose subagent это автоматически доступно, но нужно явно упомянуть в prompt: «Используй WebSearch для актуализации данных — данные меняются».

Правило: если роль в своём prompt просит tool которого нет в списке — отказать и сказать «не твоя зона».


🔄 Шаг 6 — Параллельный spawn (несколько Agent tool calls в одном message)

Claude в main session формирует один message с множественными Agent tool_use блоками — они выполняются параллельно.

Пример — задача «страница про BESS»

⚡ BESS Engineer → sonnet — tech specs
⚡ Regulatory → opus — актуальная нормативка/тарифы
⚡ Copywriter → sonnet — текст на базе tech brief
⚡ Fact-Checker → opus — WebSearch LCOS/spread/PPA
⚡ Visual/UX Designer → sonnet — структура страницы
⚡ Legal → opus — гарантії/обещания
⚡ Critic → opus — adversarial (видит outputs, НЕ видит ТЗ)

7 параллельных Agent tool calls в одном message → все стартуют одновременно → ~15-30 сек суммарно (скорость самого медленного).


🔍 Шаг 7 — Visual Verify Protocol (для UI задач)

Запускается ПОСЛЕ реализации. Отдельный Agent spawn с preview/chrome tools.

Шаги Visual QA Agent

1. preview_start (или navigate в Chrome) → целевая страница
2. preview_resize 375×812 (iPhone SE)
   ├─ preview_screenshot → decisions/<task>/screenshots/mobile.png
   └─ preview_eval: document.querySelectorAll + computed styles
3. preview_resize 768×1024 (tablet)
   └─ screenshot → tablet.png
4. preview_resize 1440×900 (desktop)
   └─ screenshot → desktop.png
5. preview_console_logs → errors
6. preview_network → WebP грузится? lazy loading? большие bundle?
7. preview_eval contrast measurement для ключевых текстовых элементов

Вердикт Visual QA (формат)

🖼️ VISUAL VERIFY
✓/⚠️/❌ Desktop 1440: [детали]
✓/⚠️/❌ Tablet 768: [детали]
✓/⚠️/❌ Mobile 375: [детали]
Contrast: [ratio] (WCAG AA требует ≥4.5)
Console: [errors count]
Network: [WebP/lazy/bundle size]
Screenshots: decisions/<task>/screenshots/

Computer Use Agent (апрель 2026 апдейт)

Если доступен Claude Computer Use Agent (Pro/Max подписка) — использовать ЕГО вместо Chrome MCP. Более мощный. Chrome MCP как fallback.


📖 Шаг 8 — Semantic Review Protocol (универсальный для любого домена)

Запускается для любого текста с предметной темой. Работает как dual-round debate:

Round 1 — Brief + Write (параллельно с asymmetric context)

  • SME даёт tech_brief.md с definitions + допустимыми метафорами + red flags
  • Copywriter пишет текст на базе brief

Round 2 — SME reviews Copywriter's text (sequential)

  • SME читает финальный текст
  • Маркирует каждое tech-утверждение: ✓ точно / ⚠️ упрощено но OK / 🔴 искажено

Round 3 — Revise

  • Copywriter исправляет по комментариям
  • Exit condition: SME approve ИЛИ 2 итерации → escalate шефу

Domain Detection (перед Round 1)

Если тема не в активном ядре (10 ролей) — сгенерировать SME через role-generator skill:

Примеры Domain Detection:
  "BESS" → Battery Storage Engineer
  "коронки стоматология" → Dental Prosthodontist
  "ФОП налоги" → Tax Lawyer UA
  "фитнес программа" → Sports Medicine Doctor
  "лазерная эпиляция" → Dermatologist + Cosmetologist

Veto SME

  • SME имеет hard veto на технические термины (они или верные, или нет)
  • Для метафор — advisory (может предложить better alternative)

⚖️ Шаг 9 — Veto Hierarchy и Exit-критерии

Hard veto (блокируют merge вердикта)

  • Regulatory (standards/regulators/GDPR) — нарушение нормы → STOP
  • Safety (ПУЕ/ДБН/медицина) — угроза жизни/оборудованию → STOP
  • Legal (юр-риски) — потенциал иска → STOP
  • SME на tech терминах — неверный термин = неверный контент

Advisory veto (поднимают red flag, но не блокируют)

  • Critic — до 3 блокеров максимум (exit-критерий!)
  • Auditor — финальный вердикт (может blocked, может pass-with-notes)
  • QA — тесты red → требуют fix, но не навечно

Max 3 блокера правило (exit-критерий)

Critic/Auditor обязан выделить максимум 3 критичных блокера. Остальное → backlog. Причина: «любой cap теряет информацию, но без cap — бесконечный цикл правок». Если реально >3 критичных — это signal что задача не готова к реализации, нужен rework scope.

Tie-breaker между ролями

КонфликтПравило
Legal vs CRO (публичный контент)Legal > CRO
CRO vs Legal (внутренний инструмент)CRO > Legal
Cost vs Qualityшеф решает
SME vs Copywriter на терминеSME wins (hard veto)
SME vs Copywriter на метафореCopywriter может не согласиться (advisory)
Critic vs все остальныеCritic блокирует ТОЛЬКО для Regulatory/Safety/Legal; иначе advisory
Regulatory vs SafetySafety > Regulatory (жизнь важнее нормы)

Если нет правила → эскалация шефу с формулировкой «нет консенсуса, реши».


🔄 Шаг 10 — Error paths

Spawn fail (timeout или API error)

  • Timeout 15s → degrade to single-Critic inline
  • Log в decisions/<task>/fail.log
  • Шефу: «консилиум упал, работаю в режиме single-Critic inline, ок?»

Recursion cap

  • Depth = 1. Sub-agent внутри консилиума НЕ может spawn sub-sub-agent.
  • Если Architect хочет расширить — эскалирует наверх через «нужна роль X», orchestrator (main Claude) решает.

TTL вердикта

  • 24 часа для tech задач (код, config, UI)
  • 7 дней для strategic (маршруты, архитектура, финмодели — кроме regulatory)
  • 1 час для regulatory-sensitive (быстро меняющаяся нормативка)
  • Если возврат к работе после TTL → короткий re-validate (1-2 роли «что изменилось?»)

Interrupt mid-work

  • Шеф пишет «стоп» → Claude:
    1. Сохранить partial artifact → decisions/<task>/draft_interrupted_<ts>.md
    2. Показать что успел
    3. Спросить: «откатить полностью / доработать на базе / с нуля?»

Hotfix bypass

  • Слова в запросе: срочно|hotfix|прод\s*(леж|упа|крэш)|critical|быстро\s*чини|аврал
  • → force-class = trivial, skip Proactive Offer, skip консилиум
  • НО: inline Critic ПОСЛЕ фикса + Fresh Data остаются

Stale вердикт (ре-validate)

  • После TTL — не полный консилиум, а 1-2 роли (обычно Fact-Checker + Critic):
    • «Что изменилось в Regulatory за последнюю неделю?»
    • «Actual цены/курс/нормы ещё верны?»

📝 Шаг 11 — Синтез вердикта (300 слов, жёсткий формат)

После сбора ответов всех ролей + verifiers → Claude в main session синтезирует:

# CONSILIUM VERDICT: <краткое название задачи>
**Дата:** <date-time>
**Класс:** medium / large
**Ролей в бригаде:** N
**Длительность:** <сек>

## 🎯 РЕШЕНИЕ
<Конкретное решение / путь вперёд. 2-4 предложения. Что делать.>

## 📊 КЛЮЧЕВЫЕ ФАКТЫ
- <Fact 1 с source: WebSearch / private memory / расчёт>
- <Fact 2>
- <...>

## 🔴 БЛОКЕРЫ (max 3)
🔴 B1: <критичное что блокирует — с hard-veto источником>
🟡 B2: <важное требует внимания>
🟡 B3: <то же>

## ⚡ ACTIONS (что делать сейчас)
1. <конкретное действие>
2. <конкретное действие>
3. <конкретное действие>

## 🎯 CONFIDENCE: <N>%
- Grounded: <сколько claims с citation>
- Verified by: <кем orthogonal проверялось>
- Disagreement score: <std по ответам ролей>

## 📋 BACKLOG (не блокирует, для будущего)
- <nice-to-have 1>
- <nice-to-have 2>

## 📎 АРТЕФАКТЫ
- Screenshots: decisions/<task>/screenshots/
- WebSearch logs: decisions/<task>/websearch.log
- Role outputs raw: decisions/<task>/roles/

Hard limit: 300-400 слов в вердикте. Детали — в артефактах.


💾 Шаг 12 — Логирование в ~/.claude/decisions/

После каждого консилиума:

~/.claude/decisions/
├── INDEX.md                    ← searchable index (добавить строку)
└── YYYY-MM-DD_<slug>/
    ├── verdict.md              ← синтез выше
    ├── metrics.json            ← длительность, роли, confidence, cost
    ├── roles/
    │   ├── bess_engineer.md
    │   ├── regulatory.md
    │   ├── fact_checker.md
    │   └── critic.md
    ├── websearch.log           ← что искалось через WebSearch
    ├── sanitization.log        ← что маскировалось из private data
    └── screenshots/            ← Visual QA артефакты (если UI)

INDEX.md формат (для searchability)

| Date | Task | Class | Verdict | Confidence | Artifacts |
|------|------|-------|---------|-----------|-----------|
| 2026-04-19 | BESS page | medium | 🟢 | 87% | [link](2026-04-19_bess-page/) |

Через 3 месяца Claude или шеф могут grep «что решили про BESS окупность» и найти прецедент.


🎬 Пример полного flow (Нордкап маршрут)

1. Шеф: "составь маршрут Одесса-Нордкап на байках"
2. Claude: Task Intake → medium/large → Proactive Offer (11 ролей)
3. Шеф: "y"
4. Claude main session spawn параллельно (1 message, 11 Agent calls):
   ⚡ Travel Route Planner → opus
   ⚡ Africa Twin Specialist → sonnet
   ⚡ Customs Specialist → sonnet
   ⚡ Weather Advisor → sonnet
   ⚡ Insurance Specialist → sonnet
   ⚡ Accommodation Planner → sonnet
   ⚡ Finance Engineer → opus
   ⚡ Safety Advisor → sonnet
   ⚡ Fact-Checker → opus (WebSearch: визи 2026, паромы, курси)
   ⚡ Critic → opus (видит ТОЛЬКО outputs, без ТЗ — adversarial)
   ⚡ Travel Writer SME → opus (Semantic Review если финальный текст)
5. 20 секунд параллельно
6. Synthesize vердикт (300 слов, макс 3 блокера, confidence 78%)
7. Log → decisions/2026-04-19_nordkap-route/
8. Шефу: вердикт + гейт «идём в Phase 2 полный пакет?»

🧪 Калибровка

После каждых 10 консилиумов — review в decisions/INDEX.md:

  • Какая acceptance rate Proactive Offer (y/n)?
  • В каких типах задач Critic постоянно говорит «нечего добавить» → убрать его оттуда
  • В каких задачах всплывают недостающие роли → добавить в active brigade или triggers.md
  • Cost trend

Weekly digest (воскресенье) — отдельный playbook.


🔗 Связанные skills и файлы

  • ~/.claude/CLAUDE.md — классификация, kill-switch, правила глобальные
  • ~/.claude/triggers.md — regex → роли
  • ~/.claude/skills/master-agent/SKILL.md — оркестрация (использует consilium как tool)
  • ~/.claude/skills/role-generator/SKILL.md — генератор SME on-demand
  • ~/.claude/skills/smart/SKILL.md — Smart Routing L1/L2/L3
  • ~/.claude/decisions/ — история всех вердиктов
  • ~/.claude/projects/*/memory/MEMORY.md — контекст задач

Версия: v2.5 (Apr 2026) Автор: Master Agent + 10-agent мета-консилиум Изменения: через git в ~/.claude/.git