pr-af

Agent-Field活跃维护

开源的自动化代码审查工具,在 Code-Review-Bench 上排名第一,用 LLM 智能体自动审查 Pull Request 并给出评审意见。

#1 open-source code reviewer on Code-Review-Bench

暂无版本664star +1 / 7 天75fork同步于 2026-11-10 11:57 UTC

怎么上手

由 README 提炼,执行前请确认
git clone https://github.com/Agent-Field/pr-af.git && cd pr-af
cp .env.example .env
docker compose up --build
硬件要求按 README 说明

README 未说明显存或 GPU 要求;提供 Docker Compose 本地部署,也可一键部署到 Railway,模型调用走 OpenRouter API。

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

项目说明

由 README 自动翻译提炼

基于 AgentField 的开源智能体代码审查工具,把 PR 变成有证据支撑的深度评审

开源的自动化代码审查工具,在 Code-Review-Bench 上排名第一,用 LLM 智能体自动审查 Pull Request 并给出评审意见。

核心能力

  • 按 PR 拓扑动态编译语义、机械、系统三类审查维度
  • 派发临时审查 agent,并用 AST 提取代码证据校验结论
  • 用可证伪性校验过滤无法被代码证据支持的发现
  • 跨文件聚类孤立风险,合成复合漏洞结论
  • 通过 CLI、curl 或 CI 触发,自动发布 GitHub 行内评论

容易踩的坑

必须先在 .env 中填好 OPENROUTER_API_KEY 和 GH_TOKEN,否则无法读取 PR 或发布评论;GH_TOKEN 需要 repo 权限;本地控制面默认监听 8080 端口,远程部署的接口需要带 X-API-Key 请求头。

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

最近发版

0 个版本

暂无 release 数据(可能没有发版,或尚未同步)。

用户点评

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

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

    README 原文

    未翻译

    PR-AF

    Open-Source Agentic Code Review Built on AgentField

    Apache 2.0 Deploy on Railway Built with AgentField More from Agent-Field

    PR-AF is the #1 open-source code reviewer on Martian Code-Review-Bench. It is built for deep code review, not shallow diff summaries: turn each PR into a task-specific review plan, spawn focused reviewer agents, ground findings in code evidence, challenge the results, and squeeze more useful review intelligence out of cheaper models. Run DeepSeek-class models for routine PRs, GLM-5.2 for deep open-model reviews, or Opus-class frontier models for major PRs — where PR-AF tops the benchmark by a wide margin.

    Benchmark Position

    On the 38 runnable Martian Code-Review-Bench PRs, PR-AF with GLM-5.2 is the #1 open-source reviewer in golden recall: 0.706 across 42 compared tools. It is ahead of cubic-v2 and every qodo, coderabbit, greptile, copilot, and devin variant in this snapshot.

    Where PR-AF shines:

    strengthresult
    Known bug recall0.706 golden recall — #1 open source across 42 compared tools.
    More real issues found595 independently valid findings, ~3× more than the leading commercial tools in the adjusted comparison.
    Open + reproducibleSingle open model (GLM-5.2), public results, per-PR judge verdicts, and reproduction scripts.
    Self-hosted APIRun locally with Docker; trigger reviews by CLI, curl, CI, or other agents.
    Model-flexibleUse cheaper models for regular PRs, GLM-5.2 for open-model CI gates, and Opus-class frontier models for highest-stakes reviews.
    Frontier ceilingWith Opus-class commercial models, PR-AF tops the benchmark by a wide margin.
    Cost positionAbout 10× cheaper per review than closed-source tools.

    Full benchmark package: benchmark/martian-code-review-bench.

    One-Call DX

    Trigger it with the af CLI (requires af ≥ 0.1.87) — it streams live progress and prints the result:

    af call pr-af.review --in '{"pr_url": "https://github.com/owner/repo/pull/123"}'
    

    Prefer raw HTTP? Hit the API directly with curl:

    curl -X POST http://localhost:8080/api/v1/execute/async/pr-af.review \
      -H "Content-Type: application/json" \
      -d '{"input": {"pr_url": "https://github.com/owner/repo/pull/123"}}'
    

    Posts inline GitHub review comments with evidence-grounded findings:

    {
      "total_findings": 5,
      "by_severity": {"critical": 1, "important": 2, "suggestion": 2},
      "findings": [
        {
          "severity": "critical",
          "title": "SQL injection in user input handling",
          "file": "src/api/users.py",
          "line": 42,
          "body": "Raw query parameter interpolated directly into SQL. Tracer confirms no parameterization between input and cursor.execute().",
          "suggestion": "cursor.execute('SELECT * FROM users WHERE id = %s', (user_id,))",
          "evidence": "AST extraction confirms f-string SQL at users.py:42, no sanitization in call chain",
          "compound_risk": "Combined with missing auth middleware (finding #2), this is exploitable by unauthenticated users"
        }
      ],
      "review_dimensions": 4
    }
    

    Custom review strategy per PR. Evidence-grounded findings. About 10× cheaper per review than closed-source tools.


    Dynamic Pipeline Architecture

    PR-AF does not execute a static script. It structurally morphs its own execution graph based on the topology of the incoming Pull Request.

    When a PR arrives, the system dynamically compiles review dimensions — evaluating the diff through semantic, mechanical, and systemic lenses. It uses these dimensions to spawn specialized, ephemeral reviewer agents tailored exclusively to the exact context of the current PR.

    Full architecture deep-dive: docs/ARCHITECTURE.md

    graph TD
        classDef intake fill:#f3f4f6,stroke:#4b5563,stroke-width:2px;
        classDef dynamic fill:#dbeafe,stroke:#3b82f6,stroke-width:2px;
        classDef verify fill:#fef3c7,stroke:#2563eb,stroke-width:2px;
        classDef synthesize fill:#ede9fe,stroke:#d97706,stroke-width:2px;
        classDef output fill:#ecfdf5,stroke:#8b5cf6,stroke-width:2px;
    
        PR[Incoming Pull Request] --> I1[Intake Triage]:::intake
        I1 --> A1[Topological Anatomy Mapping]:::intake
        
        A1 --> M1[Semantic Lens Generator]:::dynamic
        A1 --> M2[Mechanical Lens Generator]:::dynamic
        A1 --> M3[Systemic Lens Generator]:::dynamic
        
        M1 --> D[Dimension Deduplication & Compilation]:::dynamic
        M2 --> D
        M3 --> D
        
        D -->|Dynamically spawns N dimensions| R1(Thread 1: State Mutation)
        D --> R2(Thread 2: API Boundaries)
        D --> R3(Thread N: Dynamic Context...)
        
        R1 --> E[Programmatic AST Extraction Engine]:::verify
        R2 --> E
        R3 --> E
        
        E -->|Ground truth caller snippets| V[Evidence Verification Layer]:::verify
        V -->|Unsubstantiated claims pruned| F[Falsifiability Gate]:::verify
        
        F --> C1(Compound Cluster: File Topology)
        F --> C2(Compound Cluster: Shared Imports)
        F --> C3(Compound Cluster: Tag Overlap)
        
        C1 --> S[Compound Vulnerability Synthesis]:::synthesize
        C2 --> S
        C3 --> S
        
        S --> L{Coverage Depth Gate}
        L -->|Blind spots detected| I1
        L -->|Full coverage achieved| O[Synthesized GitHub Annotations]:::output
    

    How It Works

    PR-AF uses this multi-phase cognitive pipeline to ensure rigorous, high-fidelity reviews:

    1. Evidence Grounding

    If the system flags a missing validation check, PR-AF does not immediately accept it. It pulls exact caller snippets and import context from the repository, then verifies whether the finding is grounded in the code before it reaches the final review.

    2. Compound Vulnerability Synthesis

    Standard tools analyze code linearly. PR-AF clusters related risks across files and evaluates whether isolated findings combine into a larger systemic issue.

    3. Falsifiability Gates

    Before a finding becomes a GitHub comment, the system tries to invalidate it: safe behavior, intended behavior, existing mitigations, or weak evidence. Findings that survive are returned with file, line, body, suggestion, and evidence.


    Ecosystem Comparison

    There are excellent AI code review tools on the market. PR-AF is not designed to replace fast, interactive tools; it is designed for comprehensive CI/CD gating where accuracy and architectural depth matter more than execution speed.

    FeaturePR-AF (AgentField)Claude Code CLICommercial SaaS (e.g. Codex, CodeRabbit)
    Best ForDeep CI/CD architectural auditsFast, iterative inner-loop developmentClean GitHub UX and chat-based reviews
    CostFree / Open Source (BYOK API costs only)Pay-per-token (BYOK)~$20 - $25 / user / month
    ArchitectureMassively parallel cognitive pipelineSingle-thread interactive loopContext retrieval + LLM review
    Execution Time~35-50 minutesSeconds to minutes~2-5 minutes
    False PositivesExtremely low (Evidence Grounding)Moderate (relies on context window)Low-to-Moderate (heuristic filtering)
    Compound RisksYes (Dedicated Compound Synthesizer)Unlikely (diff-focused)Partial (depends on retrieval accuracy)

    We highly recommend using Claude Code for your local development and running PR-AF as your final GitHub Actions gatekeeper.


    Quick Start

    Install into AgentField (af install)

    Already running an AgentField control plane? Install PR-AF straight from GitHub — no clone, no local setup:

    af install https://github.com/Agent-Field/pr-af
    af run pr-af
    

    af install follows the repository manifest to the maintained Go package and registers it as the pr-af node with your control plane. If an older Python pr-af is installed, it is replaced in place, retaining the same node id, triggers, and node-scoped secrets. On first af run you're prompted for the required secrets — OPENROUTER_API_KEY and GH_TOKEN — which are stored encrypted and reused across every node, so you enter each only once. Then review a PR:

    af call pr-af.review --in '{"pr_url": "https://github.com/owner/repo/pull/123"}'
    

    New to AgentField? Install the control plane first with curl -fsSL https://agentfield.ai/install.sh | bash, or use one of the options below.

    To install the Python node deliberately, clone this repository and install the checkout as a local path. Local-path installs do not follow superseded_by:

    git clone https://github.com/Agent-Field/pr-af
    af install ./pr-af
    

    Deploy with Railway (fastest)

    Deploy on Railway

    One click deploys PR-AF + the AgentField control plane + PostgreSQL. Set two environment variables in Railway:

    • OPENROUTER_API_KEY — your OpenRouter key (routes to the review models)
    • GH_TOKEN — GitHub personal access token with repo scope, for reading PRs and posting reviews

    Once deployed, trigger a review against the control plane (the public endpoint requires the X-API-Key header set to your AGENTFIELD_API_KEY):

    curl -X POST https://<control-plane>.up.railway.app/api/v1/execute/async/pr-af.review \
      -H "Content-Type: application/json" \
      -H "X-API-Key: <AGENTFIELD_API_KEY>" \
      -d '{"input": {"pr_url": "https://github.com/owner/repo/pull/123"}}'
    

    Run locally (Docker Compose)

    git clone https://github.com/Agent-Field/pr-af.git && cd pr-af
    cp .env.example .env          # Add OPENROUTER_API_KEY, GH_TOKEN
    docker compose up --build
    

    Starts AgentField control plane (http://localhost:8080) + PR-AF agent.

    curl -X POST http://localhost:8080/api/v1/execute/async/pr-af.review \
      -H "Content-Type: application/json" \
      -d '{"input": {"pr_url": "https://github.com/owner/repo/pull/123"}}'
    

    Poll for results:

    curl http://localhost:8080/api/v1/executions/<execution_id>
    

    Configuration (environment variables)

    The key knobs (see .env.example for the full list):

    VariablePurpose
    OPENROUTER_API_KEYLLM provider key (OpenRouter) — required
    GH_TOKENGitHub token (repo scope) for reading PRs and posting reviews
    PR_AF_PROVIDERHarness provider (default aforge; use opencode to roll back)
    AGENTFIELD_AFORGE_COMMANDAForge headless command (default exec) — read by the Go node's SDK adapter; the pinned Python SDK always runs exec
    PR_AF_AFORGE_BINPath to an aforge-v2 binary (default aforge)
    PR_AF_HARNESS_BINProvider-agnostic executable override
    PR_AF_MODELHarness model (default deepseek/deepseek-v4-flash-0731)
    PR_AF_MAX_COST_USDPer-run cost ceiling in USD (default 2.0)
    PR_AF_MAX_DURATION_SECONDSPer-run wall-clock ceiling in seconds (default 3600)
    AGENTFIELD_HARNESS_IDLE_SECONDSHarness no-output watchdog window in seconds (default 360) — harness CLIs in JSON mode emit events only at completion boundaries, so long single completions look silent
    PR_AF_WORKDIRWhere PR checkouts live (default /workspaces); each PR gets its own <repo>-pr<N> workspace
    PR_AF_GIT_TIMEOUT_SECONDSFallback ceiling for every Git operation when its operation-specific variable is unset
    PR_AF_GIT_CLONE_TIMEOUT_SECONDSgit clone ceiling in seconds (default 600)
    PR_AF_GIT_FETCH_TIMEOUT_SECONDSReused-workspace and PR-head fetch ceiling in seconds (default 600)
    PR_AF_GIT_CHECKOUT_TIMEOUT_SECONDSPR working-tree checkout ceiling in seconds (default 600)
    PR_AF_GIT_DIFF_TIMEOUT_SECONDSRepository diff ceiling in seconds (Python: no timeout by default; Go: 120)
    GIT_LFS_SKIP_SMUDGESkip Git LFS downloads during Git commands (default 1)

    Large repositories and Git LFS. The review workspace is a shallow (--depth 1 --no-tags) clone. pr-af sets GIT_LFS_SKIP_SMUDGE=1 for every Git command it runs, so LFS-tracked files are checked out as pointer files and no LFS content is downloaded during a review. The runtime image ships git without git-lfs, so LFS content would not be fetched in any case. To use real LFS content, install git-lfs in a derived image, set GIT_LFS_SKIP_SMUDGE=0, and raise PR_AF_GIT_CHECKOUT_TIMEOUT_SECONDS as needed. Reviews read diffs and source text, so pointer files are sufficient.

    Both Docker images ship the released AForge CLI (fetched and checksum-verified at build time from https://agentfield.ai/downloads/aforge) and run exec by default. The Python node resolves the binary from PR_AF_AFORGE_BIN (or PR_AF_HARNESS_BIN); the maintained Go node resolves it from PR_AF_HARNESS_BIN. OpenCode stays installed in both images, so PR_AF_PROVIDER=opencode is a configuration-only rollback — no rebuild.

    The image's AForge version is pinned by the AFORGE_VERSION build arg; AFORGE_BASE_URL points the fetch at a different host when needed.

    GitHub Actions Integration

    The easiest way to use PR-AF is to drop it into your GitHub Actions. It requires zero configuration and runs securely using GitHub's built-in GITHUB_TOKEN.

    Add this workflow to your repository at .github/workflows/pr-af-review.yml. It triggers automatically whenever you add the pr-af label to a Pull Request.

    name: AgentField PR Review
    
    on:
      pull_request:
        types: [labeled]
    
    jobs:
      pr-af-review:
        if: github.event.label.name == 'pr-af'
        runs-on: ubuntu-latest
    
        # Needs permissions to post comments and read code
        permissions:
          contents: read
          pull-requests: write
    
        steps:
          - name: Checkout PR-AF
            uses: actions/checkout@v4
            with:
              repository: Agent-Field/pr-af
              path: pr-af
    
          - name: Start AgentField & PR-AF
            working-directory: ./pr-af
            env:
              OPENROUTER_API_KEY: ${{ secrets.OPENROUTER_API_KEY }}
              GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
            run: |
              docker compose up -d
              sleep 15 # Wait for services to be healthy
    
          - name: Execute Deep Architectural Audit
            working-directory: ./pr-af
            env:
              PR_URL: ${{ github.event.pull_request.html_url }}
            run: |
              python3 scripts/ci_runner.py
    

    Note: PR-AF runs a comprehensive parallel pipeline. Reviews typically take 35-50 minutes depending on PR complexity.


    From the AgentField AF Ecosystem

    PR-AF is one example of a larger AgentField ecosystem for building autonomous, agent-native systems.

    • SWE-AF: autonomous software factory for production ready PR
    • SEC-AF: autonomous security factory for code security review, vulnerability investigation, and evidence-grounded remediation.

    From the AgentField Blog

    How an AI-Native Engineering Team Does Code Review

    When the writer and the reviewer are the same intelligence, the pull request gate stops doing what it was designed to do.

    Read the post →


    Go implementation

    The maintained node lives under go/, and installing the bare repository URL gives you this implementation as pr-af on its default port 8007. The Python implementation remains available through python -m pr_af.app, the root Docker Compose stack, or the local-path install escape hatch above. The Go add-on Compose file explicitly uses pr-af-go only so both implementations can run against one control plane during a changeover. Build, run, and Docker/compose docs live in go/README.md.