10.09.2026 523 материалов

Два ИИ-агента в одном редакторе: как Claude и GPT проверяют код друг друга

Разработчик создал инструмент, который связывает два ИИ-агента в едином воркфлоу — один пишет код, а второй проверяет его, не видя объяснений первого. Но не всё так однозначно, как кажется из заголовка.

Два ИИ-агента в одном редакторе: как Claude и GPT проверяют код друг друга

Два ИИ-агента не обязательно должны соглашаться. Полезнее — когда один из них может задать другому неудобный вопрос до того, как код попадёт в продакшн.

Пары, которые не существуют в природе

Заголовок звучит соблазнительно: Claude Fable 5.1 и GPT-6 Astra, shoulder to shoulder, ревьюят код в тандеме. Антропик и OpenAI, вечные конкуренты, наконец объединились ради вашего pull request'а. Красивая картинка. Вот только она не совсем честная.

Разработчик Денис Бабкевич, создавший инструмент OMP Tandem, в тексте сам признаёт: в реальном кейсе использовался Claude через алиас sonnet с GPT-6 Astra в роли «пира». Связка Fable 5.1 + Astra — это пример конфигурации, а не протестированная связка. Заголовок работает на маркетинг, а не на точность. Но идея за ним стоит серьёзная.

Что такое OMP Tandem

OMP Tandem — это open-source «мост» между двумя ИИ-агентами, работающий поверх платформы Oh My Pi (OMP). Не обёртка над API двух моделей, а полноценный интеграционный слой через MCP (Model Context Protocol).

Суть проста: у вас есть основной кодинг-агент — например, Claude Code или Codex CLI. Выพยายаете к нему второго агента через OMP. Второй агент не дублирует работу первого, а выполняет роль независимого ревьюера или соисследователя.

Конфигурация гибкая: хост и пир используют разные модели, разные провайдеры, разные учётные записи. Tandem не поставляет доступ к моделям и не обходит ограничения провайдеров — всё настраивается вручную.

Главная фишка: независимость ревьюера

Конструктивный момент, на который автор делает главную ставку — тайминг.

Когда человек ревьюит чужой пул-реквест, он сначала видит описание PR, потом код, потом обсуждение. Все аргументы автора доступны сразу. ИИ-ревьюер в стандартном сценарии работает так же: ему скармливают и предложение, и обоснование, и ожидается, что он кивнёт.

Tandem меняет порядок. Пир сначала получает требования, критерии приёмки и исходные материалы. Объяснение автора скрыто и появляется только после того, как второй агент сформировал собственную оценку. Это не абсолютное слепое ревью — код, тесты и требования всё равно косвенно подсказывают замысел — но гарантия порядка зашита в контроллер, а не в промпт.

Разница между «оценить предложенное решение» и «самостоятельно найти решение — а потом сравнить» принципиальна. Это как разница между рецензентом статьи, которому показали черновик, и экспертом, которого попросили разобраться в проблеме независимо.

Не только ревью

Ревью готового коммита — лишь одна точка входа. Tandem умеет больше:

  • Пир может оспорить архитектурное предположение до реализации
  • Пока координатор проверяет одну часть кода, пир исследует подозрительный участок параллельно
  • Роли «координатор» и «пир» — это роли в воркфлоу, а не иерархия «умный — глупый»

Координатор и пир могут работать над разными задачами. Типичное задание для пира может звучать так: «Независимо изучи дизайн повторных попыток и отмен. Я проверю контракт API. Найди точки отказа, процитируй код и скажи, какие данные отличат одну гипотезу от другой».

История диалога сохраняется, так что можно сменить цель, не теряя контекст.

Работа со снапшотами

Ещё один важный нюанс: ревью привязано к конкретному состоянию файлов, а не к «тому, что лежит на диске прямо сейчас».

Tandem поддерживает два источника: worktree (рабочие изменения) и staged (подготовленный коммит). Материал сохраняется в момент захвата. Если вы потом подредактировали файлы, сохранённое ревью это отразит — с пометкой, что оно, возможно, устарело.

Файлы за пределами захвата не покрываются молча. Если ревьюеру нужен неизменённый вызывающий код или тест — его нужно явно добавить в контекст. Следующий шаг — новый, расширенный снапшот, а не добавление файлов «задним числом» в старое ревью.

Честная позиция: отчёт говорит вам, что именно проверялось и актуально ли это ещё. Он не превращает проверку пяти файлов в заявление о всём репозитории.

Реальный кейс: три эпизода, один баг

В репозитории есть задокументированный кейс — три эпизода ревью с машиночитаемыми доказательствами. Результаты не выглядят как победный марш.

Первый ревью провалился из-за нехватки контекста. Пир запросил недостающие файлы, координатор отменил задачу вместо того, чтобы выдумывать ответ.

Расширенный ревью нашёл конкретный дефект: синхронный захват снапшота удерживал глобальный лок контроллера, не подчиняясь общему тайм-ауту и контролю отмены. Медленный захват мог задержать отмену другого запуска. Координатор воспроизвёл баг локально — тест с бюджетом в одну секунду вернул no_changes через 2,745 секунды.

Третий эпизод — этот самый расширенный ревью — сам упал по тайм-ауту. Но его ответы сохранились, а статус не перезаписали как успешный, поскольку формально задача не завершилась.

После первого исправления независимая проверка нашла другой риск: блокировки публикации SQLite могли мешать отмене. Это был статический фикс, не воспроизведённый по времени. Отдельный рантайм-тест потом подтвердил взаимодействие, исправил его и прошёл регрессии.

Итого: три эпизода, 598 секунд настенных часов, примерно $5,68 записанных затрат. Полная стоимость неизвестна — часть учётных данных пира отсутствует, а человеческая подготовка и локальные проверки не попали в запись.

Чего нет в статье

И это критически важно: сравнительных результатов не опубликовано. Автор подготовил четырёхсторонний бенчмарк-протокол (один агент, саморевью, обычная передача между агентами и процесс Tandem), но сами цифры не представлены.

Протокол — это не лидерборд. Без данных невозможно сказать, даёт ли двухагентный подход реальное преимущество перед одним агентом с хорошим промптом. Кейс показывает, что интеграция работает и находит баги — но контрольного эксперимента нет.

Кроме того, кейс использовал Claude sonnet, а не обещанный в заголовке Fable 5.1. Это значит, что для громкой связки из заголовка мы вообще не имеем никаких данных.

Границы, которые нельзя игнорировать

Автор честно перечисляет ограничения, и это один из сильных моментов статьи:

  • work-режим — не песочница ОС. Внешний процесс OMP не наследует ограничения шелл-песочницы хост-агента.
  • Локальное хранение — не офлайн-инференс. Настроенные провайдеры получают контекст задачи. MIT-лицензия на софт не отменяет использование облачных моделей.
  • Завершённый отчёт — не доказательство корректности кода. Находки и исправления по-прежнему требуют верификации.

Для инструмента, который работает с незнакомым кодом и генерирует патчи, это не формальности — это реальные риски.

Что нужно для запуска

Tandem 3.3.0 требует macOS, Linux или WSL с Linux-инструментами. Нужен Python 3.12+ и настроенный хост-агент. Установка через Homebrew и плагины для Claude Code или Codex CLI описана в документации.

Автор рекомендует начать с локальной диагностики — /omp-tandem:setup с запросом «local diagnosis only». Это проверяет конфигурацию без обращения к модели. Живой запрос к провайдеру — отдельный явно одобренный шаг.

Важно: сессию хост-клиента нужно держать открытой до завершения задачи. Сохранённая история — не detached-сервис.

Итого: инструмент для узких мест

Не каждое изменение кода требует второго агента. Tandem нацелен на ситуации, когда независимая оценка может повлиять на решение: неоднозначная архитектура, сложный баг, рискованный рефакторинг, коммит перед мержем.

Концепция верная: независимая оценка, явное сравнение, привязка к версии кода и человек, который видит, что остаётся неопределённым. Но пока это — инструмент с хорошей архитектурой и неподтверждённой эффективностью. Сравнительные бенчмарки, реальная работа с Fable 5.1 и масштабные кейсы ещё впереди.

Хотите проверить? Автор приглашает попробовать Tandem на хорошо знакомом изменении и поделиться результатами. Именно обратная связь от реальных пользователей сейчас ценнее, чем красивые диаграммы и громкие имена моделей в заголовках.