возможности

Ревью по стандартам вашей команды

Не generic-проверки, а соблюдение конвенций конкретной команды — на её стеке, с её правилами. В двух точках: у агента в редакторе, пока код пишется, и на MR/PR, когда его пора принимать. Вот что умеет движок.

две точки контроля

Одна политика — в редакторе и на MR/PR

Код всё чаще пишут агенты, и ловить их ошибки только на MR/PR поздно — правки возвращаются через полный круг. Поэтому те же правила команды и тот же судья работают прямо в цикле агента. А бот на MR/PR остаётся независимым гейтом: агент не может сам себя принять, и в точке change control остаётся аудит-трейл.

Где применяются инструменты ReviewGateОдин файл .reviewgate/config.yml задаёт правила команды для всех точек проверки. Локально, пока код пишется, работают MCP (стандарты до кода), CLI (проверка изменений) и хук на git push. После отправки бот на MR/PR остаётся независимым гейтом. .reviewgate/config.yml правила команды · пресет · судьяЛОКАЛЬНО · ПОКА КОД ПИШЕТСЯ MCP стандарты до кода CLI проверка измененийХукгейт на git pushошибку видно до отправки git push GITLAB Бот на MR/PRнезависимый гейтагент не примет сам себя

CLI в любом репозитории

reviewgate review читает те же .reviewgate/config.yml и пресеты, что бот, и гоняет тот же двухпроходный судья. Один файл без Node и Docker — шесть платформ, включая Windows и Alpine.

Хук перед git push

Агент не отправит изменения с блокирующими находками. Гейт стоит именно на push, а не на каждом шаге: замер показал, что судья добавляет 35–47% стоимости прогона, поэтому экономить надо на частоте вызова.

MCP: агент зовёт ревью сам

Два инструмента: проверить изменения и узнать стандарты команды ДО написания кода, а не из ревью после. Работает в MCP-совместимых клиентах; у нас прогнано на Claude Code.

Ни Node, ни Docker на машине разработчика не нужно, а ключ провайдера берётся из окружения процесса или из вашего личного конфига CLI — как поставить и подключить →

в MR/PR

Замечания там, где их читают

Строчные комментарии

Замечания привязаны к конкретным строкам диффа — GitLab discussions, GitHub review comments — как от живого ревьюера.

Сводка по severity

Один сводный комментарий с находками, сгруппированными по критичности, и вердиктом по severity gate.

Severity gate как статусная проверка

Бот публикует check run в GitHub и commit status в GitLab. При «pipeline must succeed» или обязательной проверке это блокирует merge — гейт с реальной силой.

точность, а не шум

Находкам можно доверять

Главная боль AI-ревью — шум и повторы. Движок бьёт по ней тремя механизмами.

Два прохода, а не один

Дешёвая модель находит, сильная — судит каждую находку по реальному коду (полные файлы и импортируемые соседи) и стандартам команды. Контракт судьи жёсткий: новых находок не ищет, severity может только понижать, при сомнении обязан отбросить — в MR/PR попадает меньше false positives. Включается одной ролью в llm.judges.

Не спамит при каждом пуше

Ре-пуш ревьюит только изменившиеся файлы, не повторяет открытые находки и уважает Resolved-треды — одна живая сводка вместо лавины дублей. Экономит и токены, и нервы ревьюеров.

Видит контекст, не только дифф

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

фикс в один клик

Не только находит — предлагает готовый фикс

Для однозначных проблем бот прикладывает предложение прямо в треде: GitLab и GitHub показывают кнопку «Применить» — правка ложится в ветку одним кликом, без копипасты. Включая многострочные правки — до 20 строк за раз. А при включённом судье (llm.judges) сильная модель сперва проверяет сам фикс по коду — и его диапазон, — чтобы в один клик применялось только то, что действительно чинит. Обе опции включаются в конфиге.

Как включить →
🔴 web-api-di-tokens · auth.ts:42
Direct localStorage access breaks SSR.

- localStorage.setItem('token', v)
+ this.storage.set('token', v)

[ ✓ Apply suggestion ]
диалог в треде

Не согласны с ботом? Спросите его

Разработчик отвечает на замечание вопросом — и бот поясняет в том же треде, обычно за минуту-другую, опираясь на код и стандарты команды из вашего конфига. Ответ приходит сам: не нужно запускать джобу в CI или звать бота командой. На «поправил» и «ок, спасибо» бот не шумит в ответ, а в одном треде даёт по умолчанию не больше трёх ответов. Если возражение справедливо, бот прямо это признаёт, а предложение коллеги может поддержать — со ссылкой на правило команды. Закрывает тред всегда человек. По @упоминанию бота можно позвать и в чужой тред.

Как включить →
🟠 magic-values · recently-viewed.ts:52
the id is concatenated with a «magic»
prefix 4200000 before it goes into the
shared list — the other write path stores
a clean id: one list, two formats.

  ├ author: that is intended — items from
  │         the external catalogue carry a
  │         prefixed id. isn't this a false
  │         positive?
  │
  ├ lead: @author, let's move the prefix
  │        into a constant anyway
  │
  └ bot: Not a false positive: a deliberate
         prefix does not remove the two id
         formats living in one list. I back
         @lead: by your magic-values rule
         the prefix belongs in a constant and
         the encoding in a single helper.
прозрачный прогон

Видно, что бот делал — и сколько это стоило

В сводку можно добавить цену прогона на вашем ключе: токены и деньги — по вашему прайсу, в вашей валюте. И свёрнутый блок диагностики: какой контекст видела модель, какие вызовы шли и, главное, решения судьи с причинами — включая отброшенные находки. Почему судья снял находку — видно прямо в MR/PR, без доступа к серверу бота и логам. Кода в блоке нет, только метаданные. Обе опции — по флагу в конфиге.

⚙️ This review: 46.2K tokens in ·
   3.8K out · ≈ $0.21

🔬 Run diagnostics
Model context: diff: 14 files ·
   environment: ✓
Calls:
· generator sonnet — 41.3K→2.9K
  tokens · 38s · findings: 5
· judge opus — 96K→1.1K
  tokens · 64s · dropped: 1
Judge dropped / lowered:
❌ cart.service.ts:42 error-handling —
   «catchError is already one line above»
пресеты стека

Глубина под ваш стек, а не «найди баг вообще»

11 языковых ядер и десятки фреймворков с первого дня. Ядро знает идиомы и ловушки языка, фреймворк-слой — специфику стека. Ядро языконезависимо — без пресета работает на любом языке через ваши правила.

JavaScript / TypeScriptpreset: typescript

Строгие типы вместо any, гонки в async/await, утечки подписок, граница доверия к вводу.

AngularReactVueSvelteNext.jsNestJSExpress
Pythonpreset: python

Типизация и контракты, блокировки в async, ресурсы через context manager, инъекции.

DjangoFastAPIFlask
Gopreset: go

Обработка каждого err, отмена через context, гонки и утечки горутин, defer для ресурсов.

GinEchoFiber
Javapreset: java

Optional вместо null, потокобезопасность, ресурсы через try-with-resources, валидация границ.

Spring
C# / .NETpreset: csharp

Nullable-ссылки, async/await без дедлоков, IDisposable/using, аллокации в LINQ.

ASP.NET Core
PHPpreset: php

Строгие сравнения вместо ==, типизация и readonly, SQL-инъекции, небезопасная десериализация.

LaravelSymfonyYii2
Kotlinpreset: kotlin

Null-safety, структурная конкуррентность корутин, исчерпание when, утечки CoroutineScope.

AndroidKtor
Rubypreset: ruby

Риски метапрограммирования, N+1 и блокировки, обработка исключений, инъекции.

Rails
Rustpreset: rust

Заимствования и lifetimes, отказ от unwrap/panic, ошибки через Result, unsafe под лупой.

AxumActix
Swiftpreset: swift

Опционалы без force-unwrap, retain-циклы и [weak self], async/await, value vs reference.

iOS / SwiftUI
Dartpreset: dart

Null safety, dispose и async gap, ошибки Future/Stream, лишние перестройки виджетов.

Flutter

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

стандарты команды

Правила свободным текстом в репозитории

Стандарты живут в .reviewgate/config.yml рядом с кодом и версионируются через MR/PR. Вы описываете соглашения по-русски — модель применяет их к диффу. Это и есть отличие от линтера. Правила видят и метаданные MR/PR: правило «нет описания — попроси {mr:author} добавить» подставит в замечание @автора — и платформа пришлёт ему уведомление. А через review_prompt задаётся и весь гайдлайн ревью — дополнить дефолтный (extend) или заменить целиком (replace).

Справочник конфигурации →
rules:
  - id: commit-prefix
    description: "Commits carry TASK-<number>"
    severity: critical
  - id: no-any
    description: "No any, except in *.spec.ts"
    severity: major
  - id: mr-description
    description: "No PR description —
      ask {mr:author} to add one"
    severity: minor

severity_gate: off
ваш llm

На вашей модели, по вашему ключу

Облако Anthropic, любой OpenAI-совместимый endpoint (DeepSeek, OpenRouter, Yandex AI Studio, свой vLLM) или локальная модель через Ollama — тогда наружу не уходит вообще ничего. Код не покидает ваш контур.

Посмотреть на своём MR/PR

Поднимите бота в своём контуре и откройте тестовый MR/PR.