← На главную

Cloudflare AI-ревью на OpenCode — 131 246 проверок за месяц, 7 агентов

26.05.2026 07:06 · hackernews

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

Сначала они попробовали готовые AI-инструменты для ревью кода. Многие работали неплохо и давали гибкость, но не для масштаба Cloudflare. Тогда они пошли проторенным путём: взяли git diff, засунули в сырой промпт и попросили LLM найти баги. Результат был шумным: куча расплывчатых советов, галлюцинации синтаксических ошибок и «добавьте обработку ошибок» в функции, где она уже есть.

Вместо монолитного агента Cloudflare построили CI-native оркестратор на базе OpenCode — открытого код-ревью агента. Когда инженер открывает merge request, его проверяет команда из нескольких AI-агентов. Запускается до семи специализированных ревьюеров: безопасность, производительность, качество кода, документация, управление релизами и соответствие внутреннему Engineering Codex. Координатор собирает их результаты, убирает дубликаты, оценивает серьёзность проблем и пощает один структурированный комментарий.

Система построена на плагинной архитектуре. Плагины работают в три фазы: Bootstrap (не фатальный, конфигурация подгружается асинхронно), Configure (фатальный — если VCS не подключился, смысла продолжать нет) и postConfigure. Каждый плагин регистрирует агентов, провайдеров, переменные окружения и промпты через контекстное API — прямой доступ к конфигу у них нет. Изоляция полная: GitLab-плагин не видит конфигурацию AI Gateway, и наоборот.

OpenCode выбрали потому, что он open source, Cloudflare уже внёс туда 45+ pull request’ов, и у него отличный SDK. Ключевое — архитектура server-first: можно создавать сессии программно через API, а не дёргать CLI. Оркестратор запускает OpenCode как дочерний процесс через Bun.spawn, передавая промпт через stdin (чтобы не упереться в ARG_MAX), и читает JSONL-логи на stdout. Координатор использует spawn_reviewers tool, который порождает отдельные сессии OpenCode для каждого под-ревьюера. Те работают независимо, у каждого свой промпт, свои инструменты и модель.

Для структурированного логирования используют JSONL (JSON Lines). Формат, где каждая строка — самодостаточный JSON. Это решает проблему преждевременного завершения процесса, когда обычный JSON не закрыт. Поток разбирается в реальном времени: буферизируется по 100 строк или 50ms, отслеживаются триггеры вроде token usage из step_finish, ошибки для ретрая и обрезка по max_tokens.

Вместо одной большой модели с универсальным промптом — узкоспециализированные агенты. Каждому чётко говорят, что искать, а что игнорировать. Например, security reviewer получает инструкцию: флаговать только эксплуатируемые уязвимости (инъекции, обход аутентификации, хардкод секретов), но не «теоретические риски» или советы вроде «попробуйте библиотеку X». Оказалось, что сказать LLM, чего не делать — самая ценная часть промпт-инжиниринга.

Каждый ревьюер выдаёт структурированные XML-находки с severity: critical, warning, suggestion. Стоимость моделей распределяют по сложности. Top-tier (Claude Opus 4.7, GPT-5.4) — только координатору, который сводит результаты семи моделей. Standard-tier (Claude Sonnet 4.6, GPT-5.3 Codex) — для тяжёлых ревьюеров. Kimi K2.5 — для лёгких текстовых задач. Все назначения можно переопределить через Cloudflare Worker в рантайме.

Защита от промпт-инъекций: агентские промпты собираются из markdown-файлов, координатор получает структурированный XML, из которого вырезаются boundary-теги (mr_body, mr_comments и т.д.), чтобы инженеры не могли сломать систему через описание MR.

Экономия токенов: вместо полных диффов в промпте — ссылки на patch-файлы. Каждый под-ревьюер читает только своё. Общий контекст (shared-mr-context.txt) записывается на диск один раз и читается всеми, а не дублируется семикратно.

После запуска под-ревьюеров координатор делает judge pass: убирает дубликаты, переносит issues в правильные категории, отсеивает спекулятивные находки. Если не уверен — идёт в код проверять. Решение об аппруве жёсткое: если всё чисто — approve, есть warning без риска — approve_with_comments, несколько warnings — minor_issues (с отзывом аппрува), критическое — requested_changes. Есть break glass: если человек написал «break glass», система форсирует аппрув. Нужно для хотфиксов.

Три уровня риска: trivial (до 10 строк, 2 ревьюера), lite (до 100 строк, 4 ревьюера), full (всё остальное и любые security-файлы). Trivial стоит $0.20 в среднем, full — $1.68. Дифф фильтруется от noise-файлов (lock-файлы, минифицированные ассеты, сгенерённые файлы), но миграции БД не исключаются.

Таймауты: per-task 5 минут, overall 25 минут, retry budget 2 минуты. Circuit breaker для моделей: три состояния (closed/open/half-open). При ошибке система проходит цепочку failback. Для coordinator отдельный failback — при ошибке hot-swap модели в конфиге. Если модель отвечает «модель думает» больше 30 секунд — heartbeat-лог, чтобы пользователи не отменяли задачу.

Для инкрементальных ре-ревью координатор получает предыдущий комментарий и треды DiffNote. Правила: fixed — убирается, unresolv — остаётся, user-resolv — уважается, user reply с обоснованием — обрабатывается. Ещё Easter egg: может ответить на один несерьёзный вопрос.

Отдельный AGENTS.md ревьюер следит, чтобы при серьёзных изменениях (смена тест-фреймворка, билд-тулза, пакетного менеджера) разработчики обновляли файл инструкций для AI. Плохие практики в AGENTS.md тоже подсвечиваются.

Система — готовый GitLab CI component. Команда добавляет include в .gitlab-ci.yml и кладёт AGENTS.md в корень репозитория. Работает и локально через TUI-команду /fullreview.

За 30 дней в 5 169 репозиториях выполнено 131 246 ревью для 48 095 MR. Медианное время — 3 минуты 39 секунд. Break glass использовали 288 раз (0.6%). Средняя стоимость ревью — $1.19, медиана — $0.98, P99 — $4.45. Всего 159 103 находки (~1.2 на ревью). Больше всего — у Code Quality (74 898), меньше всего — у Release (745). 85.7% кэш-хитов токенов. Топ-модели обработали 51.8% трафика, стандартные — 46.2%, Kimi (через Workers AI) — 0%.

Читать оригинал →