На 16 сентября 2026 открытый OpenCodeReview от Alibaba (CLI ocr, репозиторий alibaba/open-code-review) — это не чат, куда вставляют git diff. Сначала детерминированный конвейер отбирает файлы, пакует правки и сопоставляет правила; затем агент с вызовом инструментов читает целые файлы и контекст репозитория и пишет замечания по строкам. Статья идёт этим путём: что он смотрит, три режима, пять минут установки, сколько багов / дыр / замечаний по качеству дали три настоящих пакета изменений, каким комментариям верить и как встроить CI.
Сначала: что именно смотрит OpenCodeReview
Его часто путают с OpenCode (агент разработки за opencode serve). Другой продукт. OpenCodeReview — внутренний ИИ-ревьюер Alibaba, открытый как CLI: читает Git-изменения, выдаёт структурированные строчные комментарии, несёт правила (NPE, потоки, XSS, SQL-инъекции) и говорит с эндпоинтами OpenAI / Anthropic. Исходник: alibaba/open-code-review. Документация: open-codereview.ai.
Это не «ещё один бот, который хвалит PR». Чат-модель видит только вставленный кусок. Она не открывает вызывающих и не знает, держит ли соседний файл ту же блокировку. Ставка — детерминированная сортировка плюс глубокий агент: решить, что смотреть, вставить чеклист по типу файла, затем file_read, поиск, сравнение других изменённых файлов.
У нас уже есть как выбрать 4 / 8 / 16 ГБ для self-hosted OpenCode — это счёт за память агента разработки. Здесь только ocr review: автопроверка Git diff, багов, уязвимостей и качества и сколько находок даёт живой проект.
Официальная формулировка — «десятки тысяч разработчиков, миллионы дефектов». Это история масштаба Alibaba, не обещание на ваш следующий PR. Вторая пара глаз перед мержем — да. Машина, которая подписывает прод, — ни README, ни этот прогон не подпишут.
Как он читает Git diff: три режима
Кто искал «автопроверка Git diff», хочет «что я изменил». CLI делит это на три взаимоисключающих режима — смешение даёт жёсткую ошибку. Флаги: CLI Reference.
| Режим | Вызов | Что реально видит | Когда |
|---|---|---|---|
| Рабочая копия | ocr review | git diff HEAD (index + дерево) плюс неотслеживаемые | перед коммитом |
| Диапазон | ocr review --from main --to feature | merge-base(from,to)..to — только эта ветка | PR / фича-ветки |
| Коммит | ocr review --commit abc123 | git show этого коммита | хотфикс, после bisect |
Режим диапазона считает merge-base — ближе к человеческому ревью PR, чем сырой diff двух веток: поздние коммиты в main не заливают проверку. Официальный GitHub Action делает то же: merge-base, затем ocr review --from MERGE_BASE --to HEAD_SHA --format json и строчные комментарии в PR.
Четвёртый путь — ocr scan: целые файлы, без осмысленной Git-истории, когда наследуете каталог. Токены и шум растут. Для мержа начните с diff; scan наследия — потом.
Всегда сначала ocr review --preview. Только фильтр, без денег модели. Видно will_review против расширения / удаления / тестового пути. В нашем прогоне PR с картинками и lockfile потерял примерно половину «огромных на вид» файлов до LLM — правильно.
Пять минут: установка, модель, preview
По умолчанию — npm global. Есть install.sh и статичный бинарник с GitHub Releases. Нужен Git ≥ 2.41. Без настроенной модели ocr review не выдумает комментарии (кроме Delegation Mode на уже оплаченного агента разработки).
npm install -g @alibaba-group/open-code-review ocr version ocr config provider ocr config model ocr llm test cd /path/to/your-repo ocr review --preview ocr review --from main --to HEAD --format json --audience agent
Конфиг в ~/.opencodereview/config.json. В CI — ocr config set или уже существующие ANTHROPIC_* / OCR_LLM_*. Язык комментариев: ocr config set language Russian (по умолчанию английский). .opencodereview/rule.json можно коммитить; ключи — нет.
npm-обёртка обновляется в фоне (~18 минут паузы). В CI зафиксируйте версию и OCR_NO_UPDATE=1. Сессии в ~/.opencodereview/sessions/. ocr viewer на localhost:5483 для повтора, не публичный сервис.
Не копируйте статью про RAM OpenCode. Тяжёлое — API LLM и параллельные git-подпроцессы; LSP не греется. По умолчанию --concurrency = 8. Крышка ноутбука посреди диапазона оставляет сессию на --resume. Машина, которая не спит, честнее, чем ставка на командировочный ультрабук.
Практика: три настоящих пакета изменений
Та же конфигурация (протокол, совместимый с OpenAI, средняя чат-модель, системные правила плюс проектные) на трёх пакетах в форме PR — не игрушка на десять строк. Каждый пакет: --preview, затем ocr review --from --to --format json. Метки: must-fix, should-fix, стиль, ложное. Один снимок; другая модель — другие числа. Смесь важнее заголовка.
| Пакет | Файлы | Комментарии | Must-fix | Should-fix | Стиль | Ложные |
|---|---|---|---|---|---|---|
| A. Бэкенд: строка запроса в SQL + проверка сессии | 6 | 11 | 3 | 3 | 3 | 2 |
| B. Форма: поля API пишутся в DOM | 5 | 9 | 2 | 2 | 4 | 1 |
| C. Воркер: общая map + обёртка ошибок | 4 | 7 | 2 | 1 | 3 | 1 |
| Итого | 15 | 27 | 7 | 6 | 10 | 4 |
Must-fix (7): три по безопасности, четыре дефекта. Безопасность: запросы из строк, неэкранированный HTML, внутренний текст ошибки клиенту. Дефекты: nil как объект, запись в map без блокировки, ошибки без %w. Это попадает в заявленный набор — NPE, потоки, XSS, SQL — не сочинение.
Should-fix (6): нет таймаутов, ретраи неидемпотентных вызовов, логи с почтой или телом. Человек должен поднять; пятничный вечер часто нет. Агент не устаёт.
Стиль (10) — самая большая корзина. Имена, ранний return, «вынеси функцию». Полезно и размывает сигнал. Без настройки к третьей неделе команда сворачивает всё ревью — та же патология шумных PR-ботов.
Ложные (4) были скучными в хорошем смысле: SQL из фикстуры как прод-инъекция; уже параметризованный запрос снова; переменная цикла до Go 1.22. Три из четырёх умирают, если после --preview исключить тесты. Сначала фильтр, потом модель.
Масштаб совпадает с официальным примером: диапазон часто выглядит как «9 файлов, десяток комментариев, около минуты, ~20k токенов». Наши три пакета — три отдельных диапазона, не один гига-PR. Diff файла, съедающий ~80% окна, отбрасывается до LLM — сгенерированные блобы и lockfile должны исчезнуть на preview, не в счёте.
Баги, безопасность, качество: что ловит
Разложить 27 комментариев по четырём словам заголовка ближе к тому, как вы будете пользоваться инструментом, чем одно «найдено проблем».
| Искали | Сильная сторона | Сигнал в этом прогоне | Не ждать |
|---|---|---|---|
| Git diff | merge-base, упаковка связанных файлов, отсев расширений | Lockfile / картинки / чистые удаления до LLM не дошли | Сказать, дробить ли PR |
| Баги | NPE, цепочки ошибок, явные гонки, пропущенные границы | Все четыре must-fix дефекта со строкой | Неверную бизнес-формулу между сервисами |
| Безопасность | XSS, склеенный SQL, утечка внутренних ошибок | Три must-fix, у каждого предлагаемый патч | Полную модель угроз, ключи, уже утёкшие иначе |
| Качество | Читаемость, дубли, мелкие рефакторы | Десять нитов, худшее S/N | Проверить доменную модель |
Агент читает весь файл, поэтому сильнее «только зелёные строки». Официальный пример map без блокировки типичен: в diff одна присваивание, ложе состояние уже выше. Diff-only боты пропускают; file_read тянет контекст. Это заявленный разрыв с ревьюерами PR, которые видят только патч — они быстрее и тише и слабее поперёк файлов.
Намеренные промахи: неверная формула скидки, поле валюты как USD, эндпоинт, который не должен открываться до одобрения. Ноль комментариев. У модели нет вашего глоссария. --background с описанием PR помогает. Требования человека это не заменяет.
Комментарии по безопасности — зацепки, не приговор. «Здесь склеивают SQL» всё равно требует драйвер, роль и класс данных. Статья не показывает, как эксплуатировать эти строки — только отметил ли ревьюер. Если нужно ограничить запись агентов разработки: безопасное редактирование файлов через VFS — ревью только читает; диск пишет агент разработки.
CI: GitHub Actions, правила, ложные срабатывания
Когда локально завелось, команде нужны строчные комментарии в PR. Официальный composite Action чекаутит доверенную базу (не разворачивает недоверенное дерево форка), тянет git-объекты head, считает merge-base, гоняет ocr review --format json и постит строки плюс липкое резюме. Триггеры: PR opened/synchronized или комментарий /open-code-review.
Минимум прав: contents: read; pull-requests: write только чтобы постить. Ключи в Secrets, имена моделей в Variables. Форки не получают секреты репозитория — защита, не баг. Не склеивайте pull_request_target с checkout недоверенного кода ради авторевью форков; это утечка секретов. GitHub: Security hardening for GitHub Actions.
Правила в четыре слоя: --rule, проектный .opencodereview/rule.json, глобальный домашний, встроенный. ocr rules check показывает победителя. merge_system_rule: true, чтобы две заметки про логи не стёрли чеклист NPE для Java. Исключить тесты, сгенерированное и vendor дешевле, чем потом спорить о ложных.
На macOS ревьюить Xcode-diff просто; держать runner живым — нет. Сборка: как выбрать GitHub Actions macOS Runner. Машина, которая не спит, с ключами без борьбы за квоту ноутбука, делает ревью повторяемым.
Держать ревью на Mac, который не засыпает
OpenCodeReview хочет три вещи сразу: Git ≥ 2.41 с полной историей, квоту LLM до конца и API-ключ не во фронтенде. Закрыли крышку — диапазон умер на середине, сессия в ~/.opencodereview ждёт --resume. Облачный Mac mini Nuvcloud — выделенный Apple Silicon bare metal: унифицированная память под --concurrency и git-подпроцессы, живой SSH, связка ключей на репозиторий, низкий idle — предкоммитный ocr и Action на PR могут делить одну машину, которая не спит.
Если Git diff, баги, безопасность и качество должны воспроизводиться 24/7, начните с тарифов и регионов Nuvcloud, чтобы ревью шло на включённом Mac, а не на командировочном ноутбуке посреди токена.
Ещё по теме
FAQ
OpenCodeReview и OpenCode — один проект?
Нет. OpenCodeReview — CLI ocr от Alibaba. OpenCode — другой агент разработки (opencode serve). Статья 4/8/16 ГБ про память второго, не про качество этого ревьюера.
Можно ли ревьюить без ключа модели?
Не для комментариев. ocr review --preview всё ещё показывает фильтр файлов. Настоящие замечания требуют настроенный LLM. Delegation Mode может взять уже оплаченного агента разработки.
Сколько комментариев даёт живой проект?
Три средних пакета: 27 комментариев, 13 стоило менять. Официальный пример часто ~9 файлов и десяток комментариев на диапазон. Огромные PR пакуются и идут параллельно — стиль завалит вас первым.
Это заменяет SAST и человека?
Нет. Хорошо прибивает XSS, склеенный SQL, NPE и оборванные цепочки ошибок. Не заменяет SAST, сканеры зависимостей и человека, который знает продукт. Комментарии по безопасности — зацепки.
Что делать с кучей ложных?
Сначала ocr review --preview и ocr rules check. Исключить тесты, сгенерированное, vendor. Включить merge_system_rule. Критерии приёмки в --background. Не прыгать сразу на более крупную модель.
Почему PR из форков не ревьюятся сами?
Форки по умолчанию не получают секреты репозитория. Так задумано. Не открывайте авторевью чекаутом недоверенного кода под pull_request_target.
Можно ли продолжить упавшее ревью?
Диапазон и коммит — да: ocr session list, затем ocr review --from … --to … --resume <id>. Рабочая копия — нет. Preview нельзя сочетать с resume.
Нужен ли новый Mac?
Нет. Недавний ноутбук запускает ocr. Если нужно 24/7 ревью PR без дележа ключей и git-объектов с офисными приложениями, облачный Mac mini, который не спит, дешевле, чем новые машины всем.