AI-ревью кода

Открываете MR, а там простыня.

ReviewGate читает её первым — по правилам вашей команды. Вам остаётся то, ради чего нужен человек.

в терминале на хуке перед push в MR

Бесплатно · self-hosted · свой ключ модели

ревью в цикле агента

Ревью идёт до появления MR/PR

Код всё чаще пишут агенты, и ждать MR/PR, чтобы найти ошибку, — это лишний круг. Те же правила команды и тот же судья работают прямо в редакторе: агент вызывает ревью сам через MCP, а хук не даёт сделать git push с блокирующими находками. Бот на MR/PR при этом остаётся независимым: агент не может сам себя принять.

$ reviewgate review --json --fail-on major
# one file, no Node and no Docker · macOS · Linux · Windows
как это работает

От вебхука до замечания — за минуты

01

MR/PR открыт или получил новые коммиты

GitLab или GitHub шлёт вебхук. ReviewGate отвечает мгновенно и кладёт задачу в очередь — без таймаутов на вашем инстансе.

02

Ревью по вашим стандартам

Дифф, правила команды из .reviewgate/config.yml и пресет стека уходят в выбранную вами модель — и только к вашему ключу. Опциональные режимы (независимый судья, полный код-контекст) добавляют в тот же промпт файлы целиком — адресат не меняется.

03

Замечания приходят прямо в MR/PR

Строчные замечания по позициям диффа, сводка по severity и гейт (check run на GitHub, commit status на GitLab), который умеет блокировать merge.

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

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

Дешёвая модель находит — сильная судит находки по реальному коду и отбрасывает ложные, так что в MR/PR попадает меньше false positives. Ре-пуш ревьюит только изменённое и не повторяет находки: бот не спамит и уважает Resolved-треды.

Что ещё умеет движок →
  • два прохода: generate → verify
  • судит находки по коду, не по диффу
  • инкрементально, без спама
  • уважает Resolved-треды
  • фикс в один клик (committable suggestion)
три щели, куда не достают облака

Почему мы, а не облачный ревьюер

БЕЗ ОПЛАТЫ ЗА МЕСТО

Self-hosted без звонка менеджеру

ReviewGate бесплатен и ставится одним Docker-образом в вашем контуре. Конкуренты берут $24–48 за место и отдают self-hosted только по Enterprise-договору; здесь вы платите своему провайдеру модели — и больше никому.

ОДНА ПОЛИТИКА

Одни правила на четырёх поверхностях

Свои соглашения вы описываете один раз — файлом в репозитории. Эта же политика ревьюит агента в редакторе, останавливает плохой push из хука, отвечает в CLI и держит гейт на MR/PR — поэтому локальный прогон предсказывает, что скажет бот.

ДО PUSH

Гейт срабатывает раньше, чем дифф кто-то увидит

Облачный ревьюер способен заговорить только тогда, когда MR/PR уже открыт. Хук перед push останавливает блокирующие находки, пока ветка ещё ваша, а ваш агент может сам вызвать то же ревью и починить найденное.

пресеты стека

11 языков, десятки фреймворков — из коробки

Senior-ревью на стеке вашей команды: пресет знает идиомы и типичные ошибки каждого языка, а не «найди баг вообще». Без пресета — работает на любом языке через ваши правила.

так это выглядит в MR/PR
src/app/cart/badge.component.tspreset: typescript
27+ this.cart.items$.subscribe((items) => {28+ this.badgeCount = items.length;29+ });
warning · rxjs-subscription-leak Подписка на cart.items$ переживает уничтожение компонента — утечка. Используйте takeUntilDestroyed() или async pipe.

Полный список фреймворков и опции каждого пресета — в справочнике конфигурации →

для безопасников

Код и дифф никогда не логируются и не покидают контур

Хранятся только метаданные ревью — число замечаний, severity, статусы. Лицензия проверяется офлайн, без звонков домой. В изолированном контуре ставится локальная модель (Ollama, vLLM) — и наружу не уходит вообще ничего.

Как устроена безопасность →
  • on-prem, один Docker-образ
  • только метаданные в БД
  • любой провайдер · облако или локально (Ollama)
  • офлайн-проверка лицензии, без телеметрии
  • по умолчанию один адрес наружу
поставить

Первое ревью — уже сегодня

Поднимите бот в своём контуре, подключите к GitLab или GitHub и дайте ему свой ключ модели.

$ docker compose up -d
$ curl http://localhost:3000/api/health  # {"status":"ok"}