Files
wiki/tasks/multi-agent/proposal_v1/04_agents_roles.md
2026-05-15 00:50:01 +03:00

28 KiB
Raw Blame History

04. Роли агентов

Назначение: описать каждого агента — его зону ответственности, входы, выходы, инструменты MCP, выбор LLM, что он обязан делать и чего не имеет права делать.


Простым языком

Каждый агент — узкий специалист. Аналитик никогда не пишет код. Разработчик никогда не правит ТЗ. Ревьюер никогда не сам себе одобряет PR. Это сделано не из бюрократии, а потому что так получается дешевле и качественнее: каждый агент имеет минимальный, точный набор инструментов и контекста, и его легко проверить.

Аналогия: на типографии нет одного человека, который и верстает, и красит, и ОТК делает. Каждая операция — отдельный участок с собственным мастером и своим набором инструментов.

Семь агентов:

  1. Analyst — читает запрос, пишет ТЗ.
  2. Architect — решает «как впишется в систему», пишет ADR.
  3. Designer — макеты UI/UX (если фича UI-овая).
  4. Developer — пишет код и unit-тесты.
  5. Reviewer — проверяет код.
  6. Tester — запускает все тесты, включая UI.
  7. Deployer — деплоит и убеждается, что не сломалось.

Плюс Orchestrator — это не LLM, а скрипт-диспетчер, который слушает Plane и Git и запускает нужного агента в нужный момент.


Общая таблица ролей

Агент LLM Когда срабатывает Главный артефакт Запрещено
Analyst Sonnet 4.6 / Qwen 3.6+ Подзадача «Анализ» в pending BRD, ТЗ, AC, Test Plan трогать код, файлы архитектуры
Architect Opus 4.7 QG-1 зелёный ADR, обновление C4 трогать код, ТЗ, дизайн
Designer Opus 4.7 + Figma MCP QG-2 зелёный, ui_affected: true mockups, states, a11y трогать код, ТЗ, ADR
Developer Sonnet 4.6 / GLM-5.1 QG-3 зелёный (или QG-2 если без UI) код + тесты + миграции + PR трогать ТЗ, ADR, дизайн
Reviewer Opus 4.7 QG-4 зелёный review report + комментарии в PR писать код, мержить, апрувить свой PR
Tester Sonnet 4.6 / Qwen 3.6+ QG-5 зелёный test report + отчёт о багах писать продакшн-код
Deployer Sonnet 4.6 QG-6 зелёный deploy log + tag трогать код, тесты
Orchestrator n/a (скрипт) webhook'и Plane/Git смены статусов, запуск агентов принимать содержательные решения

1. Agent: Analyst

Имя в Openclaw: analyst LLM: Sonnet 4.6 (по умолчанию). Альтернатива для удешевления: Qwen 3.6+. Цена/задача (порядок): $0.301.50.

Зона ответственности

  • Понять, что хочет заказчик.
  • Превратить расплывчатое описание в формальные документы: BRD, ТЗ, Acceptance Criteria, Test Plan.
  • Активно задавать уточняющие вопросы — лучше переспросить, чем угадать.
  • Проверить на конфликты с другими активными задачами.

Вход

  • docs/work-items/<id>/00-business-request.md
  • CLAUDE.md проекта
  • docs/architecture/README.md
  • docs/work-items/ — список других активных задач (через find + frontmatter status)

Выход

  • docs/work-items/<id>/01-brd.md
  • docs/work-items/<id>/02-trz.md
  • docs/work-items/<id>/03-acceptance-criteria.md
  • docs/work-items/<id>/04-test-plan.yaml
  • (опционально) docs/work-items/<id>/05-customer-journey.md

Инструменты (MCP)

  • Plane MCP — читать Work Item, добавлять комментарии, менять статус подзадачи.
  • Filesystem — Read/Write/Edit в docs/work-items/<id>/.
  • Git — только git status, git log, git diff. Без commit прав. Commits делает CI после lint-проверок.

Что обязан

  • При неоднозначности — создать 01-questions.md со списком вопросов и пометить статус needs-clarification в Plane. Дальше не идти.
  • В 04-test-plan.yaml включить тест-кейсы всех типов, релевантных задаче (unit / integration / e2e / visual / a11y / perf).
  • Указать ui_affected: true|false в 02-trz.md.
  • Запросить approve у стейкхолдера через комментарий в Plane.

Что запрещено

  • Писать код или править архитектурные диаграммы.
  • Решать, как будет реализовано (это работа Architect).
  • Снижать формальность ТЗ ради скорости («тут и так понятно»).
  • Передавать задачу дальше без :approved: от стейкхолдера.

Эскалация

  • Если на 3-й итерации :approved: нет — пинг в Plane: «требуется встреча со стейкхолдером».
  • Если задача оказалась шире, чем выглядела — предложить декомпозицию: создать дочерние Work Item'ы и пометить текущую decomposition.

2. Agent: Architect

Имя в Openclaw: architect LLM: Opus 4.7 (важно: ошибка архитектора стоит дороже, экономить опасно). Цена/задача (порядок): $1.004.00.

Зона ответственности

  • Решить, как новая фича впишется в существующую систему.
  • Зафиксировать архитектурные решения как ADR.
  • Обновить диаграммы C4, если меняется состав компонентов.
  • Сформулировать требования к инфраструктуре, данным, UI.
  • Найти возможности переиспользования существующих компонентов и явно указать их.

Вход

  • Все артефакты этапа Анализа (BRD, ТЗ, AC, Test Plan).
  • docs/architecture/ — текущая архитектура (полностью).
  • docs/architecture/adr/ — существующие глобальные ADR.
  • docs/work-items/*/06-adr/ — ADR других задач (для контекста).
  • CLAUDE.md, Dockerfile, docker-compose.yml, migrations/ — фактическая инфраструктура.

Выход

  • docs/work-items/<id>/06-adr/adr-NNNN-*.md (один или несколько)
  • обновлённые docs/architecture/c4-*.mmd (если применимо)
  • docs/work-items/<id>/07-infra-requirements.md
  • docs/work-items/<id>/08-data-requirements.md
  • docs/work-items/<id>/09-ui-requirements.md (если ui_affected: true)
  • docs/work-items/<id>/10-tech-risks.md

Инструменты (MCP)

  • Plane MCP — читать ТЗ, комментарии, менять статус подзадачи.
  • Filesystem — Read везде, Write только в docs/.
  • Mermaid renderer (через CLI) — проверить, что диаграмма рендерится.
  • Git — read-only.

Что обязан

  • Каждое решение → отдельный ADR (даже маленькое — лучше много маленьких, чем один большой).
  • Явно перечислить альтернативы и почему отвергнуты.
  • Обновить superseded_by у заменённых ADR.
  • Покрыть каждое требование из ТЗ либо ADR, либо явной пометкой «не требует решения».
  • Если решение влияет на data — обновить docs/architecture/data-model.mmd и пометить миграцию как обязательную в 08-data-requirements.md.
  • Если решение конфликтует с ТЗ — вернуть в Анализ с конкретным комментарием.

Что запрещено

  • Писать код или править ТЗ напрямую.
  • Создавать новый компонент, если уже есть существующий, выполняющий то же.
  • Принимать решения «на ходу» в комментариях PR — все решения через ADR.
  • Менять глобальную архитектуру (docs/architecture/) ради одной задачи без отдельного глобального ADR в docs/architecture/adr/.

Эскалация

  • При архитектурно крупных изменениях (новый сервис, новая БД, breaking change в API) — лейбл arch:major-change и обязательный человеческий approve в Plane.
  • При невозможности удовлетворить ТЗ существующей архитектурой — комментарий и возврат в Анализ.

3. Agent: Designer

Имя в Openclaw: designer LLM: Opus 4.7 (UX-логика — high-stakes; экономия здесь даёт уродливый или неюзабельный UI). Опции: интеграция с Figma MCP / v0.dev API (если есть подписка) для рендера mockups. Цена/задача (порядок): $0.502.50.

Зона ответственности

  • Перевести UI-требования в макеты.
  • Использовать существующие компоненты и токены дизайн-системы.
  • Описать все состояния экранов (loading/empty/error/success/disabled).
  • Заложить a11y с самого начала (контраст, ARIA, клавиатурная навигация, focus order).

Вход

  • 02-trz.md, 09-ui-requirements.md
  • docs/design/design-tokens.json, docs/design/components.md, docs/design/style-guide.md
  • (если есть) Figma-проект через Figma MCP

Выход

  • docs/work-items/<id>/11-design/wireframes.md
  • docs/work-items/<id>/11-design/mockups.md + assets/
  • docs/work-items/<id>/11-design/states.md
  • docs/work-items/<id>/11-design/a11y.md
  • (опц.) docs/work-items/<id>/11-design/prototype/index.html

Инструменты (MCP)

  • Plane MCP — статус, комментарии.
  • Filesystem — Read везде, Write в docs/work-items/<id>/11-design/.
  • Figma MCP (опц.) — экспорт фреймов в PNG/SVG.
  • Mermaid / SVG renderer — для wireframes.

Что обязан

  • Использовать только токены из design-tokens.json. Любой произвольный цвет/шрифт = fail QG-3.
  • Использовать существующие компоненты из components.md. Новый компонент — только если согласован отдельно (комментарий стейкхолдеру: «нужен новый компонент X, причина Y, OK?»).
  • Покрыть все состояния явно. Если состояние неприменимо — пометить not-applicable: <причина>.
  • Заполнить a11y чек-лист: контраст по WCAG 2.1 AA, ARIA-роли, focus management, клавиатурная навигация, screen-reader text.

Что запрещено

  • Изобретать новые цвета/шрифты/spacing.
  • Делать «дизайн ради дизайна» (анимации без функциональной нагрузки, лишние состояния).
  • Перепридумывать существующий UX без явного запроса.
  • Уходить в код React-компонентов (это Developer).

4. Agent: Developer

Имя в Openclaw: developer LLM: Sonnet 4.6 (по умолчанию). Опции: GLM-5.1 для удешевления на простых задачах. Цена/задача (порядок): $1.008.00 (зависит от объёма кода).

Зона ответственности

  • Реализовать функциональность строго по ТЗ + ADR + дизайну.
  • Написать тесты: unit + integration + e2e (под Acceptance).
  • Обновить миграции, OpenAPI, README, CLAUDE.md.
  • Открыть PR, заполнить шаблон.

Вход

  • ТЗ, AC, Test Plan, ADR, UI-mockups (если есть).
  • Кодовая база (src/, tests/, migrations/).
  • Инфра-требования из 07-infra-requirements.md.

Выход

  • Коммиты в ветке feature/<id>-*.
  • Открытый PR с заполненным шаблоном (см. 07_git_workflow.md).
  • Зелёный CI (lint+type+unit+integration+build+coverage).
  • Обновлённые docs (CHANGELOG, OpenAPI, README/CLAUDE).

Инструменты (MCP)

  • Plane MCP — статус, комментарии.
  • Filesystem — Read/Write всего, кроме docs/work-items/<id>/01..03,05..12 (артефакты предыдущих этапов — read-only).
  • Gitcommit, push, не merge.
  • Forge MCP (GitHub/Gitea) — открыть PR.
  • Test runners через Bash — pytest, vitest, playwright.

Что обязан

  • Каждое требование REQ- имеет тест с метаданным coverage: [REQ-X, AC-Y].
  • Перед commit — make lint, make test локально (на агенте). Не коммитить «авось CI поймает».
  • Размер PR ≤ 1500 строк diff. Если больше — сначала декомпозиция (предложение Analyst'у).
  • Conventional Commits: feat(scope): описание и тело с Refs: PROJ-NNN.
  • Обновлять документацию в этом же PR, не «потом».

Что запрещено

  • Менять ТЗ, ADR, design-артефакты.
  • Делать архитектурные решения «по дороге» без согласования с Architect (вернуть задачу).
  • Добавлять зависимости без отметки в 08-data-requirements.md или ADR.
  • Игнорировать линтеры — суффиксы вроде // eslint-disable запрещены без объяснения в комментарии.
  • Коммитить секреты (gitleaks отлавливает, но и сам — никогда).
  • Мержить свой PR.

Эскалация

  • Если ТЗ/ADR противоречивы или невыполнимы — поставить статус blocked подзадачи и комментарий с конкретным конфликтом.
  • Если задача оказалась объёмнее оценки на ≥30% — пинг Analyst'у на декомпозицию.

5. Agent: Reviewer

Имя в Openclaw: reviewer LLM: Opus 4.7 (ревьюер должен быть умнее или равен разработчику). Цена/задача (порядок): $0.502.50.

Зона ответственности

  • Проверить соответствие кода ТЗ.
  • Проверить соответствие кода ADR.
  • Оценить качество, безопасность, читаемость.
  • Оценить полезность тестов.

Вход

  • PR (diff + история коммитов).
  • ТЗ, AC, ADR.
  • 12-review.md (создаёт сам в процессе).

Выход

  • Комментарии в PR через Forge API.
  • Итоговый review (approve / request-changes).
  • docs/work-items/<id>/12-review.md с резюме.

Инструменты (MCP)

  • Forge MCP — читать PR, оставлять комментарии, ставить review.
  • Plane MCP — статус.
  • Filesystem — Read везде.
  • Git — read-only (читать diff локально).

Что обязан

  • В 12-review.md явно указать:
    • compliance_with_trz: true|false (с конкретными ссылками на REQ)
    • compliance_with_adr: true|false
    • findings: [{severity, file, line, description, suggestion}]
  • При severity: P0|P1 (blocker) — request-changes.
  • При severity: P2|P3 (мелочи) — approve с комментарием «учесть в следующих задачах» или «по желанию».
  • Проверить тесты на «бумажность»: тест должен реально вызывать логику, не expect(true).toBe(true).
  • Проверить документацию: обновлена ли вместе с кодом.

Что запрещено

  • Самому править код. Только комментарии.
  • Апрувить PR, который написал тот же экземпляр Developer (защита от самосогласования: orchestrator не запустит reviewer'а в той же сессии, что и developer).
  • Игнорировать любое требование из ТЗ.
  • Просить изменения без ссылки на конкретное правило (ADR/ТЗ/CLAUDE).

Эскалация

  • При обнаружении нарушения архитектуры — лейбл back-to:arch и возврат в Architect.
  • При обнаружении несоответствия ТЗ — лейбл back-to:dev и возврат в Developer.

6. Agent: Tester

Имя в Openclaw: tester LLM: Sonnet 4.6 (по умолчанию) / Qwen 3.6+ (вариант экономии — анализ логов хорошо у локальных моделей). Цена/задача (порядок): $0.503.00.

Зона ответственности

  • Прогнать все тесты на preview-окружении.
  • Запустить регресс.
  • Запустить e2e + visual + a11y + performance + security.
  • Завести найденные баги в Plane.
  • Оформить отчёт.

Вход

  • PR с лейблом stage:test.
  • Test Plan (04-test-plan.yaml).
  • Acceptance Criteria.
  • Preview-окружение URL.

Выход

  • docs/work-items/<id>/13-test-report.md + screenshots/
  • Заведённые баги в Plane (если есть)
  • Лейбл stage:ready-to-deploy (при passing) или back-to:dev (при failing)

Инструменты (MCP)

  • Plane MCP — статус, создание баг-issue.
  • Filesystem — Read везде, Write только в docs/work-items/<id>/13-test-report*.
  • Playwright через Bash — запуск e2e и UI-тестов.
  • HTTP probe — проверка preview-эндпоинтов.
  • Lighthouse / axe-core через CLI — perf + a11y.
  • Trivy / npm audit — security.

Что обязан

  • Запустить все TC из Test Plan (по automation.tool + automation.file).
  • Сделать скриншот на каждый failing TC.
  • Завести баг в Plane с шагами воспроизведения, ожидаемым/фактическим, скриншотом, ссылкой на PR.
  • Указать в 13-test-report.md итоговый verdict и распределение по severity.
  • При visual regression diff — приложить before/after.

Что запрещено

  • Писать продакшн-код.
  • «Помогать» Developer'у фиксить баги — Tester только описывает проблему.
  • Запускать тесты на test/prom (только на preview).
  • Закрывать «не воспроизводится» без записи в отчёт об попытках воспроизвести.

Эскалация

  • При flaky-тестах (мерцающих) — заводить отдельную задачу tech-debt:flaky-test-X и метить TC соответствующим тегом, не блокируя релиз.

7. Agent: Deployer

Имя в Openclaw: deployer LLM: Sonnet 4.6. Цена/задача (порядок): $0.100.50 (мало текста, много вызовов CLI).

Зона ответственности

  • Выполнить merge → tag → deploy в test → smoke → (после approve) deploy в prom.
  • Запустить smoke-тесты на каждой среде.
  • Зафиксировать deploy log.
  • Закрыть Work Item при finalApprove.

Вход

  • PR с лейблом stage:ready-to-deploy.
  • Зелёные QG-6.
  • Approve в Plane от стейкхолдера.

Выход

  • Merge выполнен.
  • Tag создан.
  • Деплой произошёл.
  • docs/work-items/<id>/14-deploy-log.md.
  • Запись в CHANGELOG.md.
  • Status задачи в Plane → Done (после QG-final).

Инструменты (MCP)

  • Plane MCP — статус, комментарии.
  • Forge MCP — merge PR, создание tag, запуск release workflow.
  • Filesystem — Read везде, Write только в docs/work-items/<id>/14-deploy-log.md и CHANGELOG.md.
  • Bash — deploy-скрипты (Ansible, docker compose).
  • HTTP probe / Prometheus query — healthcheck и метрики.

Что обязан

  • Не мержить PR без зелёного QG-6.
  • При неудачном деплое в test — откатить (rollback procedure из runbook), завести incident-issue в Plane.
  • При неудачном деплое в prom — немедленный rollback + incident-issue высокого приоритета.
  • Сохранять deploy log с метками времени, версией, командами.

Что запрещено

  • Менять код.
  • Деплоить в prom без зелёного QG-7 (test smoke + approve).
  • Использовать --force-push, --no-verify и т.п.
  • Закрывать Work Item до зелёного QG-final (uptime + final approve).

Эскалация

  • Любая неудача деплоя в prom — немедленная эскалация: лейбл incident:prom-deploy, оповещение всех Owner в workspace.

Orchestrator (не агент в LLM-смысле)

Что это: небольшой набор скриптов (Python ~300 строк), который связывает Plane, Git и запуск агентов.

Что делает:

  • Слушает webhook'и Plane (Work Item created/updated, status change, comment, reaction).
  • Слушает webhook'и форджа (PR opened/updated/merged, label change, review).
  • На определённые события — запускает соответствующего агента:
    • Plane status «Анализ → To Do» → claude --agent analyst <id>
    • PR labeled stage:testclaude --agent tester <id>
    • Reaction :approved: → проверка QG → переход к следующему этапу.
  • Обновляет статус Work Item в Plane на основе событий.
  • Пишет метрики в Prometheus.
  • Логирует все вызовы агентов (стоимость токенов, время, успех).

Почему не LLM: оркестратор должен быть детерминированным. Нет содержательных решений — только маршрутизация. LLM здесь даст нестабильность и стоимость.

Где живёт: отдельный сервис на VPS, рядом с Plane и Forge. ~300 строк Python (FastAPI + APScheduler) или Node.js. Альтернатива на старте — GitHub Actions + Plane webhook'и + один cron-скрипт (минимум кастома).

См. 08_interaction_protocol.md для полной диаграммы событий и команд.


Бюджет токенов и kill-switch

В каждом проекте лежит .openclaw/budget.yaml:

defaults:
  max_tokens_per_subtask: 200000
  max_cost_usd_per_subtask: 5.00
  max_iterations_per_subtask: 5
  hard_kill_at_usd: 15.00

per_agent:
  analyst:
    max_cost_usd_per_subtask: 1.50
  architect:
    max_cost_usd_per_subtask: 4.00
    max_iterations_per_subtask: 3
  developer:
    max_cost_usd_per_subtask: 8.00
  reviewer:
    max_cost_usd_per_subtask: 2.50
  tester:
    max_cost_usd_per_subtask: 3.00
  designer:
    max_cost_usd_per_subtask: 2.50
  deployer:
    max_cost_usd_per_subtask: 0.50

Orchestrator измеряет потребление через Anthropic API headers / OpenRouter и при превышении — останавливает агента и заводит Plane-issue budget:exceeded с эскалацией.

hard_kill_at_usd — последняя черта: если совокупная стоимость подзадачи перевалила за этот порог, процесс убивается без шансов, требуется человеческое вмешательство.


Защита от само-согласования

  • Reviewer-агент никогда не выполняется в той же сессии, что Developer. Orchestrator проверяет это по session_id Openclaw.
  • Tester-агент никогда не использует тот же Anthropic API key, что Developer (опционально, для совсем строгих случаев).
  • Сама модель ревьюера должна отличаться от модели разработчика (Opus vs Sonnet) — разные «головы» лучше ловят разные ошибки.

Сводка моделей и стоимости (порядок)

Агент Базовая модель Альтернатива (дешевле) Альтернатива (мощнее)
Analyst Sonnet 4.6 Qwen 3.6+ (локально) Opus 4.7
Architect Opus 4.7 — (не экономить)
Designer Opus 4.7 Sonnet 4.6
Developer Sonnet 4.6 GLM-5.1 (локально) Opus 4.7 (для крупных рефакторингов)
Reviewer Opus 4.7 — (не экономить)
Tester Sonnet 4.6 Qwen 3.6+ (для анализа логов) Opus 4.7
Deployer Sonnet 4.6 Haiku 4.5 (мало текста)

Усреднённая полная стоимость на одну Feature-задачу: $525 (с учётом prompt caching на CLAUDE.md и context-документах).