pr-agent

The-PR-AgentMIT活跃维护

自动审查 Pull Request 的 AI 代码审查工具,接入 OpenAI、Anthropic、Ollama 等模型,在 PR 提交时生成评审意见、改进建议和摘要。

🚀 PR Agent: The Original Open-Source PR Reviewer. This project is not the Qodo free tier.

v0.50.0发布于 2026-11-07 22:35 UTC15,799star +357 / 7 天2,165fork同步于 2026-11-10 11:25 UTC

怎么上手

由 README 提炼,执行前请确认
pip install "pr-agent[github]"
export OPENAI_KEY=your_key_here
pr-agent --pr_url https://github.com/owner/repo/pull/123 review
硬件要求按 README 说明

README 未说明硬件要求;模型通过 LiteLLM 调用云端 API(OpenAI、Claude、Gemini、Bedrock、Ollama 等),本地无需 GPU 显存。

有 Docker 镜像
下载:源码 zip·GitHub Releases(安装包)本站不镜像安装包

项目说明

由 README 自动翻译提炼

开源 AI 代码评审代理,在 PR 上自动跑 review、describe、improve 等命令

自动审查 Pull Request 的 AI 代码审查工具,接入 OpenAI、Anthropic、Ollama 等模型,在 PR 提交时生成评审意见、改进建议和摘要。

核心能力

  • 用 /review、/describe、/improve 等命令对 PR 自动评审
  • 每个工具只调用一次 LLM,约 30 秒完成且成本低
  • 用 PR Compression 策略处理超大 PR 的上下文
  • JSON 配置化提示词,可自定义评审类别与行为
  • 支持 GitHub、GitLab、BitBucket、Azure DevOps、Gitea

容易踩的坑

Git 平台 SDK 是可选依赖,需按平台装 pr-agent[github] 等额外包或 pr-agent[all];Docker 镜像 0.34.2 起迁到 pragent/pr-agent,旧 codiumai/pr-agent 命名空间已冻结不再更新;/help_docs 自 v0.36.1 起因凭证泄露问题被临时禁用。

内容由模型根据 README 生成,可能不完整或不准确,以官方文档为准。看原文 README

最近发版

5 个版本v0.50.0
  1. v0.50.0最新正式版2026-11-07 · 2026-11-07 22:35 UTC

    ⚠️ Breaking changes and upgrade notes

    • Host-only settings: Repository .pr_agent.toml files can no longer override GitHub pacing and retry settings (github.seconds_between_requests, github.seconds_between_writes, github.api_retries, github.ratelimit_retries), config.num_retries, azure_devops_server.agent_identity, custom-label settings (config.enable_custom_labels and [custom_labels]), or pr_code_suggestions.max_number_of_calls. config.num_retries is capped at 10. Per-directory .pr_agent.toml files also cannot set pr_code_suggestions.dual_publishing_score_threshold. Move values you rely on to host configuration. (#4445, #4475, #4485, #4632, #4745)
    • Comment arguments: config.ai_timeout and pr_code_suggestions.max_number_of_calls can no longer be set through command comments. (#4445)
    • Removed no-op settings: pr_code_suggestions.approve_pr_on_self_review and pr_code_suggestions.fold_suggestions_on_self_review are removed from the shipped configuration. PR-Agent warns if they remain set; they never changed /improve behavior. (#4598)
    • Custom provider integrations: Unused provider methods and capability names were removed. Review #4691 if a custom provider calls those internal methods.
    • Auto-approval: config.enable_auto_approval is now host-only. The auto-approval path remains disabled in this release. (#4700)

    🔐 Trusted Publishing

    PyPI releases now use PyPI Trusted Publishing through GitHub Actions OIDC and produce package attestations. The release workflow rejects commits that are not reachable from main. (#3909)

    🚀 Features

    • feat(push_outputs): select tools and deliver Ask answers by @PeterDaveHello in #4739
    • feat(cli): enable JSON output for plain-diff describe and improve by @PeterDaveHello in #4730
    • feat(i18n): localize improve summaries and empty states by @PeterDaveHello in #4731
    • feat(config): add protected host system instructions by @Evhye38496 in #4716
    • feat(i18n): translate the fixed text of the /review comment into response_language by @AdelFetner in #4684
    • feat: add Microsoft Teams output sink by @utsab345 in #4630
    • feat(repo-context): expand @path imports by @utsab345 in #4620
    • feat(review): include commit messages in /review and /improve prompts by @abhiramshaji-cyber in #4603
    • feat(scripts): link config reference sections to their docs pages by @mirzasnowy in #4596
    • feat(doctor): check configured output destinations by @oleksii-tumanov in #4541
    • feat(config): identify keys absent from shipped declarations by @oleksii-tumanov in #4505
    • feat(litellm): add per-PR session ids by @utsab345 in #4503
    • feat(models): support Kimi K3 / K3.1 Pro and bypass temperature parameter by @JI4JUN in #4515
    • feat(review): add an opt-in deterministic structural-reach row by @moinerus in #4421
    • feat: support Amazon Bedrock guardrails on the Converse route by @luisrviz in #4420
    • feat: configure improve failure comments by @utsab345 in #4426
    • feat(models): add Claude Sonnet 5.5 and Haiku 5.5 support by @montss in #4360
    • feat(model-routing): support a patch character limit by @oleksii-tumanov in #4376
    • feat(github-action): stop the runner on a failed key check by @Yoel-qin in #4325

    🐛 Bug Fixes

    • [Bug] Prefetch review diff outside the event loop by @askarshabdanov1-collab in #4403

    • fix(ci): Restrict releases to main and attest PyPI packages by @oleksii-tumanov in #3909

    • fix(config): keep dual_publishing_score_threshold out of per-directory settings by @shu-chen-dot-ca in #4745

    • fix(gitea): build file links for AGit-flow PRs from the head SHA by @Yi-111-a in #4744

    • fix(plain-diff): strip terminal controls from Markdown output by @jiangjiang248 in #4738

    • fix(github): keep suggestions just outside a hunk instead of dropping them by @ylcn91 in #4734

    • fix(servers): parse string-valued boolean settings in webhook servers by @ylcn91 in #4735

    • fix: pin auto-approval to the reviewed head and m

  2. v0.49.02026-10-25 · 2026-10-25 11:14 UTC
    查看更新说明

    ⚠️ Upgrade notes

    • GitHub polling needs an allowlist. New host-only github.polling_repositories = ["owner/repo", ...]; empty (the default) ignores every notification, so polling deployments must set it (#4294).
    • Jira project_keys = [] now disables lookups. The default is now ["*"]. If you set [] to mean "all projects", change it to ["*"] or remove it (#4049).
    • litellm.extra_headers is host-only. Repository .pr_agent.toml and comment arguments can no longer set it (#4287).
    • Default model is now gpt-6.1-sol with gpt-6-luna as fallback (was gpt-5.6 / gpt-5.6-terra). Pin config.model to keep the old one (#4088).
    • Langfuse SDK 4.18.0 needs self-hosted Langfuse 3.63.0+; use the langfuse_otel callback (#4343).
    • GitHub App token in Actions: set github.agent_login to <app-slug>[bot] so PR-Agent recognises its own comments (#4329).

    ✨ Highlights

    • pr-agent doctor preflights a deployment (#4321).
    • --json-output for /describe, /improve and /review (#4265, #4227, #4226).
    • Jira scoped API tokens (#4250), /ask with the CI artifact as context (#4176), globs in repo_context_files (#4220), opt-in GitLab subgroup settings inheritance (#4059).
    • Security hardening: DNS rebinding block, repo-context path escapes, host-only config output, loguru diagnose off, more credential redaction (#4252, #4279, #4293, #4280, #4328).

    What's Changed

    • Redact Stripe, Twilio and SendGrid credentials by @IlyaKhalafi in #4328
    • ci(review): make self-hosted /improve post suggestions again by @Yoel-qin in #4174
    • Enable automatic /review on new PRs (fixes #4162) by @kiranmutyala18 in #4170

    🚀 Features

    • feat(artifacts): support multiple artifact files by @utsab345 in #4338
    • feat(cli): add a doctor command to preflight the deployment by @Yoel-qin in #4321
    • feat(describe): write the description to --json-output by @Yoel-qin in #4265
    • feat(jira): support scoped API tokens by @utsab345 in #4250
    • feat(repo-context): glob entries and fallback alternatives in repo_context_files by @ira-at-work in #4220
    • feat(ask): include organizational skills in line-level answers by @Yoel-qin in #4225
    • feat(review): list the files left out in the JSON output by @Sajinthan in #4226
    • feat(improve): write suggestions to --json-output by @Sajinthan in #4227
    • feat(ask): answer questions with the CI artifact as context by @Yoel-qin in #4176
    • feat(help): prioritize a matching document in constrained prompts by @oleksii-tumanov in #4101
    • feat(gitlab): add opt-in closest-subgroup settings inheritance by @ashearin in #4059
    • feat(improve): retain equal summaries across files by @oleksii-tumanov in #4128

    🐛 Bug Fixes

    • fix(ask_line): defer handler setup until a diff hunk matches by @oleksii-tumanov in #4354
    • fix(mosaico): retain tasks with bounded owner history by @utsab345 in #4337
    • fix(add-docs): retry malformed model responses with fallback models by @PeterDaveHello in #4346
    • fix(routing): count diff hunks without splitting patch lines by @PeterDaveHello in #4344
    • fix: retry whitespace-only model completions by @PeterDaveHello in #4348
    • fix(azure): reject incomplete linked work item responses by @oleksii-tumanov in #4173
    • fix(algo): prefer exact source lines before fuzzy matching by @PeterDaveHello in #4340
    • fix(similar_issue): use the supported Qdrant query API by @PeterDaveHello in #4341
    • fix(azure): handle created events without a web link by @oleksii-tumanov in #4171
    • fix(ask): answer with a note when every changed file is filtered out by @sarankumar1325 in #4336
    • fix(gitlab): paginate repository directory listings by @utsab345 in #4332
    • fix(github): let the operator name the agent login an app token posts as by @sarankumar1325 in #4329
    • fix: reject boolean routing limits by @utsab345 in #4302
    • fix: parse GitLab boolean settings by @utsab345 in #4303
    • fix: stop Gitea changed-files pagination at the advertised total by @fixfon in #4306
    • fix(describe): retain valid YAML
  3. v0.48.02026-10-16 · 2026-10-16 19:55 UTC
    查看更新说明

    ⚠️ Breaking Changes

    [!WARNING] This release changes several defaults and makes more settings host-only. Check each item below against your deployment before upgrading.

    • pip install pr-agent no longer installs the git provider SDKs (#3679): PyGithub, python-gitlab, atlassian-python-api, the Azure DevOps SDKs, boto3, giteapy, the Google Cloud SDKs and a2a-sdk moved to the github, gitlab, bitbucket, azure, codecommit, gitea, google and mosaico extras. Install the ones you use, for example pip install "pr-agent[github]", or pr-agent[all] for the previous set. The Docker images already install all.
    • Docker service images run as a non-root user (#3910): the webhook, app, polling and Mosaico targets run as UID/GID 10001 with HOME=/home/pragent. Mounted secrets must be readable by that user, output and database directories must be writable, and home-relative mounts should move to /home/pragent. The GitHub Action, CLI and Lambda images still run as root.
    • Azure DevOps and Bitbucket Server webhooks require credentials (#3911): with azure_devops_server.webhook_username/webhook_password or bitbucket_server.webhook_secret unset, every webhook is rejected with HTTP 403. Set them on both the sender and PR-Agent before upgrading.
    • GitLab webhooks backed by a secret provider need a new token format (#3913): when GitLab credentials come from AWS Secrets Manager or Google Cloud Storage, the webhook's Secret Token must be <secret-name>:<webhook-token>. Name-only tokens are rejected with HTTP 401, so update the webhooks when you deploy.
    • Namespace-wide settings are off by default (#3908): PR-Agent no longer applies <namespace>/pr-agent-settings to every repository automatically. Set the host-only config.global_settings_repo = "pr-agent-settings" to keep the old behaviour.
    • [tool.pr-agent] in pyproject.toml is no longer read (#3941): move those settings to .pr_agent.toml.
    • More settings are host-only (#3840, #3904, #3950, #4001, #4054): a repository's .pr_agent.toml and comment arguments can no longer set provider endpoints (openai.api_base and the other api_base keys), keys ending in url, endpoint, org, key, token or secret, provider auth mode and TLS settings (github.deployment_type, gitlab.auth_type/ssl_verify, bitbucket.auth_type, gitea.skip_ssl_verification/ssl_ca_cert), jira.jira_site/jira_api_email/project_keys, or LiteLLM callbacks. They are ignored with a warning, so set them in host configuration instead. Comment arguments are restricted further as well (#3902).
    • Gitea and Gerrit read repository settings from the target branch (#3906): Gitea uses the PR base and Gerrit the default branch, so a .pr_agent.toml change inside a PR no longer applies to that PR.
    • Cross-repository reads need an allowlist (#3922, #3897): GitHub ticket context only reads linked issues and sub-issues from the PR's own repository or same-owner repositories listed in config.repo_context_sibling_repos. gitlab.expand_submodule_diffs only expands submodules listed there that sit in the MR's top-level group.
    • **Ignore rules now cover
  4. v0.47.02026-10-02 · 2026-10-02 15:20 UTC
    查看更新说明

    ⚠️ Important Changes

    • Gitea webhooks now require a secret (#3637): with gitea.webhook_secret unset, the Gitea app rejects every webhook with HTTP 403 instead of accepting it unsigned. Set the secret on the Gitea webhook and in your config before upgrading.
    • The GitHub Action fails on tool errors (#3712): a tool failure that used to be logged and swallowed now fails the Action. Set github_action_config.fail_on_tool_errors = false to keep the old green behaviour.
    • Comment commands need a leading / on GitLab, Bitbucket and Bitbucket Server (#3769): a comment only runs a tool when it starts with a slash command, so plain comments that mention one no longer trigger anything.
    • extra_config_url is host-only (#3638): a repository's .pr_agent.toml can no longer set it. Configure it on the host instead, for example with PR_AGENT_EXTRA_CONFIG_URL.
    • commitable_code_suggestions is now committable_code_suggestions (#3749): the old spelling still works with a deprecation warning until 1.0.
    • The Bitbucket Server webhook image runs under gunicorn (#3667): the container now starts multiple workers through the shared gunicorn_config.py instead of a single Python process.

    Known issue: Bedrock Kimi K3, new in this release (#3651), still receives a temperature by default, which Bedrock is reported to reject. Until #3752 lands, add the model ids to config.no_temperature_models.

    What's Changed

    • Run BitBucket Server webhook under gunicorn for worker isolation by @jkratz55 in #3667
    • test: pin LiteLLM future Claude fallbacks by @PeterDaveHello in #3660
    • test(ai_handlers): add tripwire for guarded private LiteLLM imports by @utsab345 in #3615
    • test: use the bundled LiteLLM cost map in local unit runs by @akalongman in #3641
    • fix(codecommit): align language classification with diff packing by @oleksii-tumanov in #3625
    • refactor(cloud_auth): deduplicate repeated logic by @high-tail in #3607

    🚀 Features

    • feat(gitlab): distinguish applied and bot-resolved suggestion threads in the improve context by @JokeWaumans in #3774
    • feat: add Bedrock Kimi K3 models by @ira-at-work in #3651
    • feat: reply to GitLab trigger discussions by @deadpool-mjpatel4444 in #3426
    • feat(gitlab): support inline key issues by @utsab345 in #3650
    • feat(ai_handlers): surface prompt cache visibility by @utsab345 in #3618
    • feat(models): add Claude Opus 5.5 support by @PeterDaveHello in #3629
    • feat: validate /describe output against existing model by @taljeon in #3616

    🐛 Bug Fixes

    • fix(git_providers): log publish and settings errors at quiet verbosity by @PeterDaveHello in #3802
    • fix(tickets): cap fetched sub-issues per ticket and order parent before children by @rishiiicreates in #3807
    • fix(models): clamp OpenRouter Gemini reasoning disablement by @oleksii-tumanov in #3787
    • fix(tools): re-raise any provider incomplete-files error, not just Bitbucket's by @PranavD2905 in #3800
    • fix(bitbucket): encode filenames in line links by @kudala-bharani in #3796
    • fix(servers): route inline comments to /ask_line only on a leading /ask by @utsab345 in #3797
    • fix(review): link a TODO without a usable line number to its file by @Arta-shoja in #3788
    • fix: stop caching repo context on a mutable ref by @utsab345 in #3776
    • fix(typo): commitable to committable by @even-even in #3749
    • fix(action): share GitHub helpers so the Action keeps the #3670 /ask fix by @Yoel-qin in #3785
    • fix(github): fetch newest polling comments by @oleksii-tumanov in #3747
    • fix(labels): build the label enum whe
  5. v0.46.02026-09-21 · 2026-09-21 16:28 UTC
    查看更新说明

    What's Changed

    🚀 Features

    • feat(status): acknowledge a pull request the moment automatic commands start by @dwin-gharibi in #3091
    • feat(gitlab): content-based auto-resolve for fixed inline threads by @Nie1iX in #3478
    • feat(tickets): make description issue matching configurable by @utsab345 in #3385
    • feat: register Grok 4.3 reasoning effort by @deadpool-mjpatel4444 in #3425
    • feat(context): load repo-context files from sibling repos (same namespace/owner) by @utsab345 in #3362
    • feat: add typed prompt output models by @utsab345 in #3371
    • feat: per-directory .pr_agent.toml for monorepo settings by @utsab345 in #3282
    • feat(improve): recover failed chunks with fallback models by @junnhwan in #3324
    • feat(jira): add project-key allowlist to skip lookups for key-shaped noise by @Fayupable in #3304
    • feat: add Jira ticket-context support by @dellch in #2420
    • feat(telemetry): expose a native prometheus scrape endpoint by @utsab345 in #3238
    • feat: generalize org-level settings to all providers via get_owning_namespace by @utsab345 in #3143
    • feat(models): route small pull requests to a cheaper primary model by @ylcn91 in #3104
    • feat(artifacts): read the CI artifact context from the CLI as well by @ylcn91 in #3105
    • feat(models): add Claude Fable 5.1 support by @PeterDaveHello in #3101
    • feat(models): add OpenAI GPT-6 Astra support by @PeterDaveHello in #3087
    • feat(push_outputs): route describe and improve output to the configured sinks by @dwin-gharibi in #3098
    • fix(tickets): bound the shorthand issue-number match at six digits, matching the branch pattern by @dwin-gharibi in #3082
    • feat(reactions): configurable start and outcome reactions by @dwin-gharibi in #3089
    • feat(review): publish sanitized failure reasons by @elijahchancey in #2996

    🐛 Bug Fixes

    • fix: check pinecone upsert response by @utsab345 in #3561
    • fix: preserve quoting in CLI and configured Action commands by @oleksii-tumanov in #3585
    • fix(github): send label names to the set-labels endpoint by @utsab345 in #3582
    • fix: point shipped docs links at live targets by @utsab345 in #3556
    • fix(diff): preserve source lines containing EOF marker text by @PeterDaveHello in #3572
    • fix(codecommit): apply ignore rules and read .pr_agent.toml from the destination commit by @PeterDaveHello in #3576
    • fix(polling): log worker capacity waits by @PeterDaveHello in #3574
    • fix(similar_issue): treat a blank qdrant url as unset by @utsab345 in #3551
    • fix(similar_issue): honor max issues scan limit by @mote24405-coder in #3565
    • fix(similar_issue): let a second repository join an existing lancedb table by @utsab345 in #3563
    • fix(similar_issue): make lancedb search and ingest match the other backends by @utsab345 in #3562
    • fix: namespace pinecone similar issue by @utsab345 in #3560
    • fix(similar_issue): stop lancedb duplicating the sentinel row by @utsab345 in #3558
    • fix(similar_issue): keep the best hit per issue so the comment lists stay aligned by @utsab345 in #3557
    • fix(similar_issue): list all lancedb tables instead of the deprecated 10-name call by @utsab345 in #3553
    • fix: preserve generated changelog after write failures by @oleksii-tumanov in #3529
    • fix(similar_issue): skip null comment bodies before splitting by @utsab345 in #3549
    • fix: resolve the PR head SHA through a provider hook (#3431) by @sloemo01 in #3528
    • fix: invert lancedb ingest table check by @utsab345 in #3531
    • fix(gitlab): narrow broad exception handlers in the GitLab provider by @wfatih in #3525
    • fix(gpt5): clamp reasoning_effort 'max' where xhigh is unsupported by @auroraxo in #3273
    • fix: redact sensitive AWS Secrets Manager error logs by @PeterDaveHello in #3512
    • fix(tests): validate Gitea E2E file writes and tool results by @PeterDaveHello in #3513
    • fix: keep tags in reasoning support probe by @utsab345 in #3502
    • fix(litellm): support adaptive thinking for profile ARNs by @rajin-khan in #3497
    • fix(github-

用户点评

登录用户的真实使用记录,可按版本和硬件筛选
共 0 条

    还没有人点评。第一个说出真实体验的人最有价值。

    README 原文

    未翻译

    This repository contains the open-source PR Agent Project. It is not the Qodo offering for open-source projects.

    PR-Agent is an open-source, AI-powered code review agent and a community-maintained legacy project of Qodo. It is distinct from Qodo's primary AI code review offering, which provides a feature-rich, context-aware experience. Qodo offers a free version for open-source projects and integrates seamlessly with GitHub, GitLab, Bitbucket, and Azure DevOps for high-quality automated reviews.

    Sponsors

    PR-Agent is a community-maintained open-source project, with its ongoing development supported by our sponsors. If you'd like to support the project, consider becoming a sponsor.

    Table of Contents

    Getting Started

    [!NOTE] Docker Hub namespace migration. Releases 0.34.2 and later are published under pragent/pr-agent. Older releases (up to and including v0.31) remain available at the legacy codiumai/pr-agent namespace as a frozen archive — no new images are pushed there. Update any pinned image: / docker pull / uses: docker:// references when upgrading to 0.34.2+.

    🚀 Quick Start for PR-Agent

    1. GitHub Action (Recommended)

    Add automated PR reviews to your repository with a simple workflow file:

    # .github/workflows/pr-agent.yml
    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 }}
    

    Full GitHub Action setup guide

    2. CLI Usage (Local Development)

    Run PR-Agent locally on your repository:

    pip install "pr-agent[github]"
    export OPENAI_KEY=your_key_here
    pr-agent --pr_url https://github.com/owner/repo/pull/123 review
    

    Git provider SDKs are optional extras: install the one for your provider (list), or pr-agent[all] for every integration. Complete CLI setup guide

    3. Other Platforms

    News and Updates

    Full notes for every release are on the Releases page.

    Why Use PR-Agent?

    🎯 Built for Real Development Teams

    Fast & Affordable: Each tool (/review, /improve, /ask) uses a single LLM call (~30 seconds, low cost)

    Handles Any PR Size: Our PR Compression strategy effectively processes both small and large PRs

    Highly Customizable: JSON-based prompting allows easy customization of review categories and behavior via configuration files

    Platform Agnostic:

    • Git Providers: GitHub, GitLab, BitBucket, Azure DevOps, Gitea
    • Deployment: CLI, GitHub Actions, Docker, self-hosted, webhooks
    • AI Models: OpenAI GPT, Anthropic Claude, Google Gemini, DeepSeek, Mistral, and any other model reachable through LiteLLM (Azure OpenAI, AWS Bedrock, Vertex AI, Databricks, OpenRouter, Ollama, and more) — see Changing a model

    Open Source Benefits:

    • Full control over your data and infrastructure
    • Customize prompts and behavior for your team's needs
    • No vendor lock-in
    • Community-driven development

    Features

    See the current feature and git provider support matrix in the PR-Agent documentation.

    ⚠️ /help_docs is temporarily disabled since v0.36.1 pending a fix for a credential-exposure issue (#2445).


    See It in Action

    Usage Examples

    PR-Agent tools run as a comment on a PR or from the CLI. A few common ones:

    # Comment on a PR (GitHub/GitLab/Bitbucket/…):
    /describe
    /review
    /improve
    /ask "What does this PR change?" # free-text Q&A about the PR
    
    # Issue-scoped commands run on an issue instead of a PR:
    /similar_issue # find similar issues in the repository
    
    # Or locally via the CLI:
    pr-agent --pr_url <PR_URL> review
    pr-agent --issue_url <ISSUE_URL> similar_issue
    

    See the Tools docs for the full list of tools with example commands, and each tool's page for screenshots and options.

    How It Works

    The following diagram illustrates PR-Agent tools and their flow:

    PR-Agent Tools

    Data Privacy

    Self-hosted PR-Agent

    Contributing

    To contribute to the project, get started by reading our Contributing Guide.

    For local verification, run PYTHONPATH=. uv run pytest from the repository root; it discovers the unit-test suite under tests/unittest by default. End-to-end tests under tests/e2e_tests require provider credentials and should be invoked explicitly, for example PYTHONPATH=. uv run pytest tests/e2e_tests/test_github_app.py.

    Big News for PR-Agent

    PR-Agent has a new home!

    After years of building this tool alongside the community, Qodo has donated PR-Agent to the open-source community - and we couldn't be more excited about what comes next.

    The project now lives in the PR-Agent org on GitHub, is fully community-owned, and is open for contributions and additional maintainers.

    What else changed:

    • Docs moved to - docs.pr-agent.ai
    • Qodo Merge (Qodo 1.0), the hosted URL, which was the enterprise version of PR-Agent, has been rebranded and evolved into Qodo (Qodo 2.0), a full AI code review platform.

    ❤️ Community

    This open-source release remains here as a community contribution from Qodo — the origin of modern AI-powered code collaboration. We’re proud to share it and inspire developers worldwide.

    The project now has its first external maintainer, Naor (@naorpeled), and is currently in the process of being donated to an open-source foundation.