relay.codes — агрегатор для Claude Code, ChatGPT и Grok. Сегодня эти три инструменты работают над одним проектом как три отдельных исполнителя без общего состояния: каждый прав в своём контексте — и потому все трое несовместимы одновременно. RELAY — операционная система для такого экипажа: единый контракт проекта, доска с владением зонами, формализованная передача результата и движок конфликтов, который разрешает 85% споров без человека.
relay.codes — агрегатор. Человек ставит одну задачу; платформа разбирает её на параллельные прогоны Claude Code, ChatGPT (Codex) и Grok с разными перспективами, проверяет каждый по DoD, сводит их в один PR и фиксирует решение в журнале.
CLAUDE CODEHeadless CLI + MCP. Многофайловые изменения, рефакторинг, работа с репозиторием. Его дифф — базовый при слиянии.
CHATGPT (CODEX)Независимая реализация, тесты на edge-cases, разбор диффа первого агента. Дополняет базу, а не дублирует её.
GROKВнешний контекст: рынок, семантика, свежая документация, проверка гипотез. Код по умолчанию не пишет — факты идут в отчёт и бэклог.
| Ситуация | Решение | Автоматически | Кто решает |
|---|---|---|---|
| Диффы не пересекаются — разные файлы | Оба варианта сливаются в сводную ветку | да | RELAY |
| Один файл, разные хунки | 3-way merge, конфликтных маркеров не возникает | да | RELAY |
| Один файл, одни строки, разный смысл | Семантический конфликт: оба варианта + критерии → Judge | нет | Judge |
| Прогон не прошёл DoD-гейт | Исключается из сведения, причина в отчёте прогона | да | RELAY |
| Все три пришли к одному результату | Consensus: доверие высокое, базовый вариант Claude Code | да | RELAY |
| Все три разошлись | Три готовых варианта с последствиями — человеку | нет | Человек |
| Grok вернул только факты | Факты → в отчёт и бэклог, код не трогаем | да | RELAY |
Проблема не в том, что агенты плохие. Проблема в том, что у них нет общего состояния — и поэтому каждый искренне считает, что прав именно он.
«Поднять конверсию оплаты». Задача уходит пяти агентам одновременно.
У каждого своя копия требований, своя память проекта, своё представление о приоритетах.
Две версии токенов, две структуры страниц, два решения по одному вопросу — и ни одна сторона не знает о второй.
Дни работы уходят на согласование того, что считать правильным. Значительная часть спринта — не ценность продукта.
C-1Дизайн-агент правит «цвет бренда», SEO требует другой оттенок, инженер уже встроил первый.
C-2Решение принято в переписке или в голове у одного агента. Второй принял обратное — и не узнает об этом.
C-3Копии требований расходятся на 2–3 итерации. К моменту работы агент оперирует не той версией.
C-4Код пишется по спецификации, которая ещё не зафиксирована. Результат — гарантированная переделка.
C-5Два агента берут одну задачу с разными критериями приёмки. Кто-то сделает зря.
C-6Агент упал, handoff не принят, задача висит «в работе» неделю. Никто не знает.
RELAY не пишет код за агентов и не добавляет им ещё один промпт. Он вводит правила игры, при которых конфликт становится невозможным или дешёвым.
Версионируемая машинно-читаемая спецификация: цели, границы, стек, Definition of Done, карта владения зонами.
Единый поток: backlog → ready → in progress → review → blocked → done, с явными зависимостями и критериями приёмки.
Результат работы — версионируемый артефакт с интерфейсом потребления, а не сообщение в чат. Передача — по формату.
Шесть детекторов, авто-разрешение по правилам, эскалация с готовыми вариантами — не с вопросом «кто прав».
Каждый переход проверяется системой. Нарушить правило нельзя — можно только обосновать отказ от него через решение.
Идея без критериев приёмки. Не может быть взята.
Есть зона, acceptance, зависимости, приоритет.
Claim выдан, lease живёт, WIP в лимите.
Handoff-пакет приложен, проверки DoD прогнаны.
Вердикт: accept / accept_with_comments.
Reject с обоснованием → задача в очередь, история сохранена.
| Переход | Условие, проверяемое системой | Кто может |
|---|---|---|
| ready → in_progress | acceptance непустой · claim выдан · все зависимости в done · зона соответствует контракту · WIP не превышен | Агент зоны |
| in_progress → review | Handoff-пакет заполнен (есть «сделано» и «не сделано») · результат проверок приложен | Исполнитель |
| review → done | Вердикт приёмщика по DoD. Автопереход запрещён | Верификатор / владелец зоны |
| review → in_progress | Reject со ссылкой на нарушенный критерий. Без ссылки — валидатор не примет | Приёмщик |
| любой → blocked | Указана причина: конфликт, зависимость или SLA. Задача в blocked видна всем | Любой участник |
Право работать с артефактом выдаётся не фактом «я это сделал», а зоной в контракте. Всё остальное — через заявку с SLA.
| Роль | Зона по умолчанию | Производит |
|---|---|---|
| Product / UX Strategy | requirements · copy · priority | Требования, декомпозиция целей, критерии приёмки, карта IA |
| UI/UX Design | design-tokens · component-spec | Дизайн-система, токены, спеки компонентов, макеты, состояния |
| Fullstack Engineering | app-code · api · db | Код, API-контракты, миграции, интеграции, тесты |
| SEO / Research | semantics · analytics · content | Семантика, карта ключей, аудит, контент-план, техрекомендации |
| QA / Verifier | acceptance | Приёмка по DoD, регрессия, отчёт о дефектах |
| Актив | Product | Design | Eng | SEO | QA | Человек |
|---|---|---|---|---|---|---|
| Требования и приоритеты | A R | C | C | C | I | A |
| Дизайн-система и токены | C | A R | C | I | C | I |
| Спеки компонентов | C | A R | C | — | C | I |
| Код приложения и API | C | I | A R | — | C | I |
| Семантика и контент-план | C | I | I | A R | I | A |
| Приёмка и регрессия | C | C | C | C | A R | I |
| Изменение целей и non-goals | R | C | C | C | I | A |
| Релиз | R | I | R | I | R | A |
DETECT → CLASSIFY → AUTO-RESOLVE или ESCALATE → RESOLVE → LOG → PREVENT. Последний шаг обязателен: без него конфликт повторится в следующем спринте.
| ID | Детектор | Что видит | Авто-разрешение | Иначе |
|---|---|---|---|---|
| D-1 | Пересечение claim | Два агента держат claim на пересекающиеся артефакты | Ранний claim побеждает, второй получает conflict.claim_overlap | Эскалация менеджеру зоны |
| D-2 | Нарушение контракта | Работа вне своей зоны или в обход non-goals | Claim отклоняется, задача возвращается в ready | Эскалация Product-агенту |
| D-3 | Конфликт решений | Новый ADR противоречит принятому, но не помечает его как superseded | Помечается conflict.decision | Человек, если веса ролей равны |
| D-4 | Устаревшая зависимость | Задача опирается на артефакт ниже текущей версии | Блокировка до re-acknowledge, автопересчёт затронутых задач | Пересчёт по impact-графу |
| D-5 | Дублирование работы | Две задачи с одинаковым выходом (intent + зона) | Вторая помечается duplicate_candidate | Product-агент объединяет |
| D-6 | Тихий сбой | Handoff не принят за SLA; агент молчит дольше N минут | Переназначение другому агенту той же зоны | Эскалация оркестратору |
Механическая защита от C-4. Дизайн-агент поднимает версию токена — RELAY считает потребителей и автоматически помечает всё, что успело устареть. Никто не должен узнавать об этом из сломанного билда.
RELAY держит протокол, а не конкретного исполнителя: Claude Code, Codex, Gemini CLI, MiniMax или любая модель через API подключаются одинаково.
Событийная модель: каждый переход состояния — запись в append-only ленту events. Это даёт аудит, повторную обработку и метрики без отдельного пайплайна.
Передача результата — формализованный пакет с обязательными полями. Приёмка — формальный вердикт по Definition of Done.
task: TASK-142 «Собрать страницу результатов поиска» from: agent:design to: agent:fullstack status: handoff done: · Экран в 3 брейкпоинтах, токены из контракта v7 · Компонент SearchResultCard — контракт props зафиксирован not_done: · Адаптив до 360px — нужен отдельный тикет changed: · tokens: color.brand.primary переименован (v12, non-breaking) risks: · SEO-агент может потребовать другой H1 — проверить до вёрстки requires_from_receiver: · Подтвердить контракт props SearchResultCard questions: · Брать ли мобильную раскладку отдельной задачей или здесь?
ПРАВИЛО 1Пустой «not_done» — норма. Пустой «done» — ошибка валидации.
ПРАВИЛО 2Получатель отвечает за 4 часа, за 1 час — по блокирующим. Нет ответа — авто-эскалация.
ПРАВИЛО 3Вердикт reject без ссылки на нарушенный критерий системой не принимается.
Фаза 0 даёт эффект ещё до написания кода и снижает риск Фазы 1: платформа строится под проверенный процесс, а не под выдуманный.
Контракт под 2–3 текущих проекта, шаблон ADR, регламент handoff, карта зон, baseline-замер конфликтов и переделок.
Закрываем 4 из 6 корневых причин: контракт, доска, реестр артефактов с impact-графом, handoff, ADR и 4 детектора конфликтов.
Декомпозиция целей в граф задач, автоназначение по зонам, human gates, Context Pack Builder, cost ledger, метрики, детектор D-6.
Генерация типов и стабов из consumer_contract, CI-линкер «токен ↔ код», автоприёмка по DoD, визуальная регрессия.
Baseline обязателен до старта Фазы 1. Без него утверждение «стало лучше» не имеет доказательной базы.
Главный риск — не технический, а организационный: агенты продолжат работать мимо платформы.
| # | Риск | Влияние | Мера |
|---|---|---|---|
| R-1 | Агенты работают мимо платформы — в обход CLI, в привычном чате | высокое | Pull-модель: агент берёт задачи только из RELAY; метрика «% задач из RELAY» как guardrail |
| R-2 | Порог входа слишком высок — описывать контракт, зоны и DoD дорого | высокое | Шаблоны под 3 типа проектов; автогенерация контракта из существующей документации |
| R-3 | RELAY становится бутылочным горлышком — очередь решений человека | высокое | Авто-разрешение по правилам; человек видит 2–3 готовых варианта; SLA на гейты |
| R-4 | Формализация замедляет — скорость падает | среднее | Мягкие артефакты; метрика lead time как guardrail против переусложнения |
| R-5 | Дрейф интеграций с агентами — CLI и API меняются | среднее | Адаптерный слой + контрактные тесты адаптеров; ≥3 агента на старте |
| R-6 | Ложные срабатывания детекторов, особенно D-5 | среднее | Настраиваемый порог близости; каждое авто-разрешение пишет причину; регулярный тюнинг |
| R-7 | Безопасность: исполнение сгенерированного кода, доступ к секретам | высокое | Sandbox без сети по умолчанию; allowlist инструментов; секреты только через MCP-broker с аудитом; redacting логов |
Каждое — с моей рекомендацией. Ответы «по рекомендации» по умолчанию запускают Фазу 0 без дополнительных встреч.
Отдельный self-hosted сервис (Docker Compose) или монорепо рядом с продуктом? Это определяет эксплуатацию и границы команд.
Вы лично закрываете гейты, или это делегируется техлиду? Каждый гейт — это ваше внимание, и это дефицитный ресурс.
Реальный проект (например, sales.travel) или синтетический стенд?
Только гейты или ежедневное участие в приёмке?
Сколько тратить на прогоны агентов через RELAY в пилоте.
Объём интеграций определяет срок MVP.
Дизайн-токены и спеки — в git-репозитории или только в базе RELAY?
Полный MVP за 4–6 недель или сначала короткий срез для быстрой проверки идеи?