fix-review — конвеєр мультиагентного рев'ю PR
Огляд
Внутрішній Claude Code skill, що розгортає diff пул-реквесту на три незалежні “думки” рецензентів паралельно, а потім арбітр перевіряє кожну знахідку проти реального стану репозиторію, перш ніж щось міняти — працює в продакшені на PR цього самого сайту з червня 2026.
Задача не в тому, “чи може LLM рецензувати diff” — будь-яка модель може, з таким рівнем хибних спрацьовувань, що довіряти їй сліпо — погана ідея. Справжня задача: скільки незалежних думок виправдовують автоматичну дію, і хто перевіряє перевіряючого?
Результат: 22 PR перевірено за 2 місяці, 69 окремих раундів рецензування моделями/інструментами, 81 сира знахідка — і лише 2 виявилися реальними виправленнями.
Архітектура

Три яруси, пробуються по черзі, кожен — повний fallback для попереднього:
- Ollama Cloud (основний) — три моделі паралельно, різні сімейства для незалежного рев’ю
- 5 зовнішніх CLI-агентів (
cursor-agent,agy,omp,codex,opencode,kilo) — read-only виклики, каскадом по черзі, перший непорожній результат виграє - Ollama local — повністю офлайн, останній резерв
Знахідки дедуплікуються за file:line і рахуються голосами по раундах, що відпрацювали, потім передаються Claude-арбітру, який читає реальні файли перед винесенням вердикту — кількість голосів це пріор довіри, не доказ.
Ключові інженерні рішення
| Рішення | Чому |
|---|---|
| Арбітр перечитує реальні файли перед вердиктом | Консенсус моделей щодо знахідки не означає, що вона реальна — впіймано одностайні хибні спрацьовування (галюцинований “відсутній frontmatter” на файлах, де він був), з якими погодились усі 3 моделі |
Зовнішні агенти викликаються read-only (--mode plan, --sandbox read-only, --no-tools) |
Ярус, що замінений цим, запускав agy --dangerously-skip-permissions і codex --dangerously-bypass-approvals-and-sandbox — повний доступ на запис/обхід дозволів для рецензента, якому потрібне лише читання |
| Auto-merge лише при повністю чистому прогоні | “Чисто” = жодне виправлення не відкочено, немає конфліктів злиття, білд проходить — усе, що менше цього, питає користувача один раз замість здогадок |
| Живе наскрізне тестування перед довірою до виправлення | Примусова заміна cloud-моделі на невалідну назву й реальний прогін PR крізь каскад впіймали два реальні баги, які статичний рев’ю пропустив би (нижче) |
Два баги, які впіймав живий тест, а не статичний рев’ю: timeout <bash-функція> тихо провалюється, бо timeout викликає свій аргумент як зовнішній бінарник — він не може напряму викликати shell-функцію, тож диспетчеризація зовнішніх агентів потребувала обгортки bash -c. А новододаний адаптер (agy) був зареєстрований у диспетчері, але відсутній у списку export -f — він мовчки провалився б при першому реальному спрацюванні fallback-ярусу, бо ніщо не тренує ярус 2, поки ярус 1 (типовий випадок) успішний.
Результати
- 22 PR перевірено, 19 червня — 18 серпня 2026 — реальне продакшн-використання, не демо
- 69 окремих раундів рецензування (виклики моделі чи CLI-інструменту) на цих PR
- 81 сира знахідка → 2 підтверджені виправлення після верифікації арбітром — розрив і є суттю: навіть одностайна згода моделей потребує перевірки проти ground truth
- Одна реальна безпекова регресія виправлена: замінено ярус з обходом дозволів на read-only каскад, верифіковано наживо end-to-end перед злиттям
- Архітектура еволюціонувала за 6 комітів за 2 місяці — додано model-agnostic fallback-ярус зовнішніх агентів, виведено з експлуатації застарілі моделі до відключення провайдера, виправлено мовчазну прогалину в диспетчеризації
Стек
Claude Code Skill (bash + jq + yq) · Ollama Cloud/Local · 5 зовнішніх CLI-агентів рецензування · GitHub CLI (gh) · JSONL-телеметрія