Skip to content

Repository files navigation

AI PR Reviewer

AI-код-ревьюер для GitHub pull request'ов. Берёт diff PR, прогоняет через LLM и оставляет review с вердиктомAPPROVE / REQUEST_CHANGES / COMMENT — с комментариями прямо на строках кода.

По умолчанию заточен под Android, но фокус ревью — это профиль, который настраивается под любое направление (backend, web, KMP, безопасность — что угодно). Работает тремя способами: авто-ревью на каждый PR через GitHub Actions, разовое ревью из терминала и как webhook-сервис.

Возможности

  • Вердикт + inline-комментарии — замечания вешаются на конкретные строки diff.
  • 🔁 Любая LLM — DeepSeek, OpenAI, Claude или локальная модель (Ollama / LM Studio / vLLM, без ключа и без облака). Переключается одной командой.
  • 🎯 Профили ревью под любое направление — из коробки Android (android, compose, kmp); свои профили под что угодно добавляются без правки кода.
  • 🤖 Авто-режим auto — сам определяет, про что PR, и запускает подходящие профили, даже несколько сразу.
  • 🖥️ Дружелюбный CLI — мастер настройки со скрытым вводом ключа, doctor, разовое ревью, управление профилями и провайдерами.

Установка

Вариант 1 — как утилита (pipx): одна команда, глобально

pipx install git+https://github.com/Sermage/pr-reviewer

Ставит команду pr-reviewer в систему — без клонирования и возни с venv. Конфиг и свои профили живут в ~/.pr-reviewer/. Дальше сразу pr-reviewer setup. Идеально для ревью из терминала. (Нет pipx — brew install pipx.)

Вариант 2 — как репозиторий: для webhook-сервиса, GitHub Actions и разработки

git clone https://github.com/Sermage/pr-reviewer
cd pr-reviewer
./install.sh

install.sh создаёт локальное окружение, ставит зависимости и сразу предлагает настройку. Здесь .env, свои профили и workflow лежат в репозитории (едут в Actions). Он также кладёт симлинк в ~/.local/bin, так что команда pr-reviewer доступна глобально (если ~/.local/bin в PATH — install.sh подскажет, как добавить). Прямо из папки репозитория всегда работает лаунчер ./pr-reviewer <команда> без активации venv.

Быстрый старт

Мастер проведёт по шагам: окружение → провайдер LLM → ключ (вводится скрыто) → профиль → GitHub Actions.

pr-reviewer setup    # интерактивная настройка
pr-reviewer doctor   # проверить, что всё на месте

Использование

При установке через pipx команда глобальная — пиши pr-reviewer как есть. В варианте с репозиторием без активации venv добавляй ./: ./pr-reviewer <команда>.

pr-reviewer setup                     # интерактивная настройка
pr-reviewer doctor                    # проверить настройку
pr-reviewer review --pr 1 --dry-run   # разовое ревью PR (показать, не постить)
pr-reviewer review --repo o/n --pr 1  # ревью и публикация в PR
pr-reviewer profile                   # профили ревью
pr-reviewer provider                  # LLM-провайдеры
pr-reviewer serve                     # webhook-сервис локально
pr-reviewer update                    # обновить до свежей версии
pr-reviewer uninstall                 # удалить сервис
pr-reviewer help                      # все команды

review берёт токен из GITHUB_TOKEN или gh auth token, ключ и настройки — из .env. Флаги: --profile <имя>, --dry-run, --approve.

Провайдер LLM

pr-reviewer provider                 # список + активный
pr-reviewer provider claude          # Claude API
pr-reviewer provider openai --model gpt-4o
pr-reviewer provider local           # локальная модель (Ollama по умолчанию)
Провайдер Модель по умолчанию Ключ
deepseek deepseek-chat нужен
openai gpt-4o-mini нужен
claude claude-sonnet-5 нужен
local qwen2.5-coder (Ollama) не нужен

Локальная модель целиком офлайн:

ollama pull qwen2.5-coder
pr-reviewer provider local
pr-reviewer review --pr 1 --dry-run

Профили ревью

pr-reviewer profile                  # список + активный
pr-reviewer profile compose          # переключить фокус
pr-reviewer profile auto             # авто-режим (оркестратор)

Свой профиль — без правки кода:

pr-reviewer profile --add security --from security.md   # из файла
pr-reviewer profile --add gradle --focus "Проверяй version catalogs, ..."
pr-reviewer profile --show security   # посмотреть, что проверяет
pr-reviewer profile --edit security   # отредактировать ($EDITOR)
pr-reviewer profile --remove security

Авто-режим (auto)

pr-reviewer profile auto включает оркестратор: он сам смотрит на diff, определяет направления PR и запускает подходящие профили (несколько при необходимости). Если для найденного направления профиля нет — использует дефолтный и честно пишет в заключении, что точность по этому направлению снижена и какой профиль стоит добавить.

Обновление и удаление

pr-reviewer update      # подтянуть свежую версию
pr-reviewer uninstall   # удалить сервис

update в варианте-репозитории делает git pull и переустанавливает зависимости; при установке через pipx — pipx upgrade.

uninstall снимает глобальный симлинк и (по подтверждению) удаляет конфиг. Полное удаление зависит от способа установки:

# репозиторий:
./uninstall.sh          # удалит .venv и симлинк (спросит про .env)
rm -rf pr-reviewer      # и саму папку клона

# pipx:
pipx uninstall ai-pr-reviewer

GitHub Actions (авто-ревью на каждый PR)

Ревьюить можно любой репозиторий (например, свой Android-проект) — код ревьюера туда копировать не нужно, workflow ставит его из git сам.

Мастер pr-reviewer setup (если gh авторизован) делает всё за тебя: спросит целевой репозиторий, положит секрет LLM_API_KEY, переменные LLM_PROVIDER/LLM_MODEL/LLM_BASE_URL/REVIEW_PROFILE и закоммитит workflow ai-review.yml в дефолтную ветку этого репозитория. После этого ревью запускается на каждый PR (opened / synchronize / reopened).

Добавить/обновить workflow отдельно (или в другой репозиторий):

pr-reviewer install-workflow --repo owner/name   # закоммитит workflow через gh
pr-reviewer install-workflow --print             # просто показать YAML

Убрать авто-ревью из репозитория (workflow + секрет + переменные) — например, чтобы переустановить с нуля:

pr-reviewer uninstall-workflow --repo owner/name

⚠️ Workflow должен лежать в дефолтной ветке целевого репозитория — GitHub берёт определение workflow для PR именно оттуда. Провайдер local в Actions не работает (нет доступа к твоему localhost) — используй облачный.

Вручную нужны: секрет LLM_API_KEY и (опционально) variables REVIEW_PROFILE, LLM_PROVIDER, LLM_MODEL, LLM_BASE_URL.

Webhook-сервис (serve)

Третий способ работы (помимо GitHub Actions и разового review): поднять свой постоянно работающий сервис, который сам принимает события от GitHub и ревьюит PR. Полезно, когда нужен единый бот на много репозиториев, свой сервер или кастомная логика — вместо запуска ревью внутри CI.

Для «просто авто-ревью на каждый PR» это не нужно — проще GitHub Actions: ничего не надо держать запущенным. serve — для тех, кому нужен собственный сервис.

Как запустить

pr-reviewer serve                 # слушает http://localhost:8000
pr-reviewer serve --port 9000     # другой порт
pr-reviewer serve --reload        # автоперезагрузка при правках кода (для разработки)

Настройки берутся из .env (провайдер, ключ, WEBHOOK_SECRET) — заполни его через pr-reviewer setup или вручную (cp .env.example .env).

Что делает сервис

  • POST /webhook — принимает события GitHub. На pull_request (opened / synchronize / reopened) проверяет подпись X-Hub-Signature-256, сразу отвечает 202, а ревью считает в фоне: берёт diff PR, прогоняет через LLM (профиль/оркестратор) и постит review с вердиктом и inline-комментариями. Событие pingpong.
  • GET /health — проверка живости: {"status": "ok"}.

Подключение к GitHub

GitHub не достучится до localhost — пробрось туннель наружу и укажи публичный URL в репозитории: Settings → Webhooks → Add webhook (Payload URL = <url>/webhook, Content type = application/json, Secret = то же, что WEBHOOK_SECRET в .env, событие = Pull requests).

pr-reviewer serve
# в отдельном терминале — туннель на localhost:8000:
npx smee-client --url https://smee.io/<channel> --target http://localhost:8000/webhook
# или: ngrok http 8000   (URL из вывода ngrok → в Payload URL вебхука)

После этого сервис ревьюит каждый новый/обновлённый PR, пока запущен.

Демо без GitHub

Прогнать конвейер на сохранённом diff (удобно для показа):

LLM_API_KEY=sk-... python scripts/demo_local.py samples/sample.diff
python scripts/demo_local.py samples/sample.diff --profile auto

Тесты

pytest

Как устроено внутри — docs/ARCHITECTURE.md.

About

AI PR Reviewer v0.2.0 — AI код-ревью GitHub PR: вердикт + inline-комментарии, любой LLM (DeepSeek/OpenAI/Claude/локально), профили под любой стек (Android по умолчанию)

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages