Один workflow-файл, один секрет с ключом модели и три строки конфига — и каждый pull request получает описание, ревью и предложения по коду от открытого агента PR-Agent.
PR-Agent — открытый агент код-ревью: он читает diff pull request, пишет описание, оставляет замечания, предлагает правки и отвечает на вопросы по изменению. Ставится в CI одним workflow-файлом: на каждый PR запускается GitHub Action, тот вызывает модель один раз на инструмент и публикует результат комментарием. Ниже — рабочая настройка от нуля до первого ревью, с правами токена, выбором модели и разбором того, где это ломается.
Идея проекта — не «умный чат про код», а набор узких инструментов, каждый из которых делает одну работу за один вызов модели. /describe пишет заголовок и описание PR, /review выдаёт замечания и оценку риска, /improve предлагает конкретные правки по строкам, /ask отвечает на свободный вопрос по изменению, /similar_issue ищет похожие issue. Авторы оценивают один прогон примерно в 30 секунд — это важно для бюджета: не «агент думает десять минут», а один короткий вызов на инструмент.
Ключевая инженерная деталь — сжатие PR. Большой diff не влезает в контекст модели целиком, поэтому PR-Agent применяет стратегию компрессии: разбивает изменение на части, отбрасывает неинформативное и поднимает лимит токенов через max_model_tokens. Без этого на PR в несколько тысяч строк вы получите либо обрезанное ревью, либо ошибку провайдера.
PR-Agent не приносит свою модель: он ходит к провайдеру через LiteLLM, поэтому подходит почти любой OpenAI-совместимый endpoint. Для начала положите ключ в секреты репозитория: Settings → Secrets and variables → Actions → New repository secret. Имя секрета выбирайте по провайдеру — в примерах документации это OPENAI_KEY; для собственного шлюза задаются OPENAI__API_BASE и OPENAI__KEY, для Anthropic-совместимого — ANTHROPIC_API_BASE и ANTHROPIC__KEY.
Name: OPENAI_KEY Value: sk-...
python3 --version
Минимальный вариант — из README проекта. Он запускается на открытие PR и на каждое обновление ветки, то есть ревью обновляется вместе с кодом.
name: PR Agent
on:
pull_request:
types: [opened, synchronize]
jobs:
pr_agent_job:
runs-on: ubuntu-latest
steps:
- name: PR Agent action step
uses: the-pr-agent/pr-agent@main
env:
OPENAI_KEY: ${{ secrets.OPENAI_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}Практика добавляет к этому две вещи. Первая — явные права токена: в новых репозиториях GITHUB_TOKEN по умолчанию только читает, и тогда Action отработает, но не сможет оставить комментарий. Вторая — permissions для issues: часть инструментов публикует результат именно туда.
permissions: contents: read pull-requests: write issues: write
pull_request_target даёт workflow доступ к секретам при PR из форка — это классический способ утечь ключ. Для PR-Agent хватает pull_request: секреты в таких прогонах недоступны, поэтому ревью форков либо пропускается, либо запускается отдельным workflow с ручным триггером и без ключей.Поведение агента настраивается файлом .pr_agent.toml в корне репозитория. Имена секций и ключей стоит сверять с pr_agent/settings/configuration.toml в репозитории: файл большой (больше 650 строк) и он единственный надёжный источник — документация отстаёт от релизов.
[config] model = "deepseek/deepseek-reasoner" fallback_models = ["openai/gpt-6.1-sol"] max_model_tokens = 32000 [pr_reviewer] require_score_review = false extra_instructions = "Пиши замечания по-русски, коротко, без воды. Игнорируй стиль форматирования." [pr_description] publish_description_as_comment = false [github] publish_as_check_run = false
| Ключ | Что делает | Когда менять |
|---|---|---|
| config.model | модель по умолчанию для всех инструментов | когда нужен свой провайдер или дешёвая модель |
| config.fallback_models | список запасных моделей | если основной провайдер иногда отдаёт 429 |
| config.max_model_tokens | жёсткий лимит токенов на вызов | для больших PR и моделей с коротким контекстом |
| pr_reviewer.extra_instructions | дополнительные требования к ревью | язык, формат, запрет на придирки к стилю |
| pr_description.publish_description_as_comment | публиковать описание комментарием | если описание перезаписывает тело PR |
| github.publish_as_check_run | публиковать результат как Check Run | если комментарии в PR запрещены политикой |
Для OpenRouter модели адресуются с префиксом openrouter/…, ключ берётся из переменной openrouter__key или .secrets.toml. Для локальной Ollama переменные окружения задаёт сама Ollama, а контекст ограничивается OLLAMA_CONTEXT_LENGTH — на 8K окно мало для среднего PR, поэтому локальный вариант имеет смысл только с моделью на 32K и больше.
Инструменты работают двумя способами: автоматически из workflow или вручную комментарием в PR — достаточно написать /review в обсуждении. Второй режим удобен, когда не хочется тратить токены на каждый коммит.
| Команда | Что делает | Когда запускать |
|---|---|---|
| /describe | заголовок и описание PR, список изменений | на открытие PR — экономит время автору |
| /review | замечания по коду, оценка риска и усилий | перед ревью человеком |
| /improve | конкретные правки по строкам | когда нужны предложения, а не общие слова |
| /ask | ответ на свободный вопрос по изменению | разбор незнакомого PR |
| /similar_issue | поиск похожих issue в репозитории | для issue, а не для PR |
| /help_docs | вопрос по документации проекта | отключён с v0.36.1 |
/help_docs временно отключён начиная с версии 0.36.1, пока не исправлена проблема с раскрытием учётных данных (issue #2445). Если вы видели этот инструмент в старых гайдах — он не работает, и включать его в чек-лист не нужно.GitHub Actions — рекомендованный путь, но не единственный. Если репозиторий живёт в GitLab, Bitbucket, Azure DevOps или Gitea, PR-Agent ставится вебхуком или в собственном контейнере: поддерживаются все четыре платформы плюс Gitea. Локальный CLI удобен, чтобы прогнать ревью до пуша и не светить черновик в PR.
| Способ | Плюсы | Минусы |
|---|---|---|
| GitHub Action | ноль инфраструктуры | нет доступа к секретам в PR из форков |
| Docker (self-hosted) | полный контроль и свои ключи | нужен сервер и вебхук, обновления вручную |
| CLI локально | можно проверить до пуша | не автоматизирует ревью в PR |
pip install "pr-agent[github]"
export OPENAI_KEY=sk-... pr-agent --pr_url <PR_URL> review
Для self-hosted варианта есть официальный образ pragent/pr-agent в Docker Hub: с версии 0.34.2 образы публикуются только там, старый namespace codiumai/pr-agent заморожен. Если в ваших workflow или compose-файлах закреплён старый путь, после обновления его надо поменять, иначе вы останетесь на архиве.
max_model_tokens и без понимания стратегии компрессии ревью будет неполным — особенно на PR с генерацией кода и миграциями./describe и /review на событие opened, а /improve оставьте ручной командой. Так вы за неделю увидите реальный расход токенов и качество замечаний, прежде чем вешать агента на каждый коммит.GITHUB_TOKEN по умолчанию только на чтение. Добавьте в workflow блок permissions с pull-requests: write и issues: write. Вторая причина — PR пришёл из форка: там секреты и права урезаны намеренно.pr-agent[gitlab], pr-agent[bitbucket] и так далее.