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 с правильным распределением контекста, верификации и синтеза вердикта.
🎯 Когда запускать
- Автоматически — если классификация по
~/.claude/CLAUDE.md= medium/large И хотя бы один триггер из~/.claude/triggers.mdсработал - По команде —
/consilium [роли]от шефа - По цепочке — 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 других ролей, БЕЗ ТЗ от шефа | ТЗ (чтобы вскрывать допущения бригады, а не оправдывать их) |
| Legal | Regulatory docs + public claims из draft | Маркетинговая стратегия, fin model |
| Sales Psychologist / CRO | ЦА, pain points, воронка | Tech specs, regulatory |
| Visual/UX | Brand guidelines, ЦА, contentplan | Legal, 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:
grep -l "DO NOT SHARE"во всех memory файлах которые собираешься включить в контекст- Файлы с именем
*_private.mdили с этим маркером — ИСКЛЮЧИТЬ из prompt для Agent - Если задача требует их содержание (например, использовать реальный CAPEX для finance) — sanitize: заменить конкретные имена/локации на placeholders (
{CLIENT_A},{LOCATION_X}) - 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:
| Уровень | Модель | Применение |
|---|---|---|
| L1 | haiku | Trigger Match, Domain Detection, простой Fact-Check (версии, даты), Readability, Console Auditor |
| L2 (default) | sonnet | Copywriter, SME standard tasks, Visual QA, UX Flow Tester, Performance, Responsive Verifier |
| L3 | opus | Critic, 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-Checker | WebSearch, WebFetch, Read (только для задачи) |
| Critic | Никаких tools — только reasoning (чтобы вынужденно думать, а не гуглить оправдания) |
| Profile SME (PV, BESS, Legal...) | Read, Grep (локальные файлы) |
| Visual QA | mcp__Claude_Preview__*, mcp__Claude_in_Chrome__* |
| Performance Tester | preview_network, preview_eval |
| UX Flow Tester | Full Claude in Chrome (click, fill, navigate) |
| Console Auditor | preview_console_logs, preview_network |
| Copywriter / Content / Editor | Read (для примеров и brand voice), без web |
| Architect | Read, Glob, Grep |
| Legal | Read (только private memory через hard-filter), WebSearch (для свежих постанов) |
| Regulatory Expert | WebSearch (ОБЯЗАТЕЛЬНО — тарифи/постанови часто меняются), 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 Safety | Safety > 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:
- Сохранить partial artifact →
decisions/<task>/draft_interrupted_<ts>.md - Показать что успел
- Спросить: «откатить полностью / доработать на базе / с нуля?»
- Сохранить partial artifact →
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