vs4vijay/prx

Local-first PR review lifecycle manager

Rust

1

3 commits

updated Oct 10, 2026

See the code

See what people are saying

README

prx: AI informs, human decides.

prx

prx (Pull Request eXaminer) has the coding agent you already run review your pull requests, and leaves the approving to you. It watches the GitHub repositories you choose, has a local agent CLI (pi, claude, codex, or your own) or an LLM API review each open pull request, posts the findings to GitHub itself, notifies you, and keeps a history of every review.

It runs on your machine as one Rust binary: a CLI, a background daemon, and a localhost API. On macOS there is also PRX.app, a menu bar client. The only services it talks to are GitHub, through the gh CLI you are already signed in to, and an LLM endpoint if you configure one.

A 23-second screen recording of PRX.app. First its menu bar menu opens on the list of pull requests, grouped under Changes requested, In review, Ready for approval, Needs review and Reviewed. Then the app window: the Dashboard with the pull requests that need attention, the pull request list with one brief opened, and the History page with a review's findings and token usage
23 seconds of prx: the menu bar menu, then the app window. The full demo runs 109 seconds (MP4, 1080p) and also shows a pull request's actions and an approval from the menu.

Why

An agent that can post to GitHub can also approve a pull request, merge it, or follow instructions hidden in a diff. prx is built so the reviewing agent never needs to write anything to GitHub, by splitting the work in three:

  1. The agent only reads. It analyzes the pull request and writes one JSON file, the review manifest: a verdict, a summary, and a list of findings. It is told never to write to GitHub and to treat everything in the PR as untrusted data.
  2. prx does the writing. It validates the manifest, then posts the review body and inline comments through gh. prx itself never executes anything from the PR.
  3. Only a human approves. prx has one approve path: you, running prx approve or clicking Approve… in the app.

One limit to know about: an agent CLI runs as you, so its read-only rule is an instruction in the prompt, not a sandbox. An LLM API engine has no tools at all; it only receives the prompt and the diff. The security model has the details.

prx daemon ──poll──> gh pr list ──> lifecycle state machine ──> desktop notifications
    │                                                     │
    │ render prompt + run agent                           state.json / history.jsonl
    v                                                     │
read-only agent ──writes──> review manifest (JSON)        └──> localhost IPC API
                             │                                  ^           ^
                    prx validates & posts                        │           │
                             v                                   │           │
              gh api (inline) + gh pr review (body)        CLI commands   menu bar client
                             ^                                           (separate GUI)
                    prx approve (human only)

More in Architecture.

Screenshots

Everything shown here is a made-up team (acme, globex), not real repositories.

PRX.app lives in the macOS menu bar, and its menu is where you will use it most: your pull requests grouped by state, with review and approve actions one click away.

The PRX menu bar menu in dark appearance. A header reads 4 PRs need attention, checked 7m ago, next in 2m, above Check GitHub now and Review PR. Fourteen pull requests from acme and globex follow in seven groups: Changes requested, In review, Ready for approval, Needs review, Reviewed, Skipped, and Merged / closed. Each row gives the repository and number, author, age, title and a one-line verdict; the two rows ready for approval each have an Approve item beneath them. Review mode, Open PRX, Settings, History and Quit PRX close the menu

Each pull request opens a submenu with the verdict, a one-line brief, and every action: Review, Approve…, Block (request changes)…, Snooze, Ignore (screenshot). Approving always asks first. The PRX.app guide walks through the menu.

The Dashboard in PRX.app: what needs you, with a plain-language brief of each pull request.

The PRX.app Dashboard: the review mode and pause controls, counts of tracked pull requests (12 tracked, 3 need attention, 2 ready for approval), and the pull requests with changes requested, each with its brief

The Pull requests page: a table of pull requests with their state, age and last review; one row is open and shows its brief, the last verdict and the engine that reviewed it The Usage and stats page: 12.2M tokens, 13.41 dollars of reported cost and 47 runs over 30 days, above a bar chart of tokens per day
Every pull request with the agent's verdict, and its brief one click away.Tokens and reported cost per day, engine, repository, or pull request.

The same data from the command line:

A terminal running three commands: prx status, a table of fourteen pull requests across seven repositories with a state icon, author, verdict and last review for each; prx brief for one pull request; and prx usage by week, a table of tokens, cost and runs

More screenshots are in the guides, starting with PRX.app.

Install

prx is a download from the latest release; there is nothing to compile. You need the GitHub CLI signed in (gh auth status), and either a coding-agent CLI (pi, claude, codex) or an API key for an LLM API.

PRX.app (macOS 12 or later, Apple silicon)

The menu bar app, with the CLI and the daemon inside. Three steps.

1. Get PRX.app, whichever way you prefer:

  • Option 1: download it from the Releases page. Open the latest release in your browser and download PRX-<version>-macos-arm64.zip. Double-click the zip in Finder (Safari may already have unpacked it), then drag PRX into your Applications folder.

  • Option 2: use the command line.

    cd ~/Downloads
    gh release download --repo vs4vijay/prx --pattern 'PRX-*-macos-arm64.zip'
    ditto -x -k PRX-*-macos-arm64.zip /Applications    # unpacks PRX.app into Applications
    

2. Allow it to open. The same for both options, once, before you open PRX:

[!IMPORTANT] Run this in Terminal before the first open:

xattr -dr com.apple.quarantine /Applications/PRX.app

PRX.app is not yet notarized by Apple, so macOS blocks a downloaded copy, saying that Apple could not verify "PRX" or that "PRX" is damaged (the wording varies by macOS version). The app is not damaged; this command clears the download flag macOS objects to. Without a terminal: try to open PRX once, then choose Open Anyway under System Settings → Privacy & Security. More about this step.

3. Open it. Double-click PRX in Applications, or run open /Applications/PRX.app. A PRX icon appears in the menu bar and the PRX window opens on the Dashboard, where Add a repo gets you started. There is nothing to set up first: PRX writes its default config (~/.config/prx/config.yml) and starts its daemon by itself.

For a prx command in your terminal, open Settings → General in PRX and choose Install command-line tool….

CLI and daemon (macOS and Linux)

On an Intel Mac, on Linux, or without the app. The release has one tarball per platform, prx-<version>-<target>.tar.gz, where <target> is aarch64-apple-darwin (macOS, Apple silicon), x86_64-apple-darwin (macOS, Intel), x86_64-unknown-linux-gnu (Linux, x86_64) or aarch64-unknown-linux-gnu (Linux, arm64).

1. Get the tarball and unpack it, whichever way you prefer:

  • Option 1: download it from the Releases page. Download the tarball for your machine from the latest release and unpack it: double-click it on macOS, or tar -xzf prx-*.tar.gz.

  • Option 2: use the command line, in the folder you want the download in:

    target=aarch64-apple-darwin    # or one of the other three targets above
    gh release download --repo vs4vijay/prx --pattern "prx-*-$target.tar.gz"
    tar -xzf prx-*-"$target".tar.gz
    

Either way you now have a folder named prx-<version>-<target>, with prx inside.

2. On macOS, allow it to run. The same for both options, in the folder that holds the unpacked folder:

[!IMPORTANT]

xattr -dr com.apple.quarantine prx-v*/

prx is not yet notarized by Apple either. A quarantined copy is stopped the moment it starts: the shell prints killed and nothing else. Not needed on Linux.

3. Put prx on your PATH and create the config:

mkdir -p ~/.local/bin
install -m 755 prx-v*/prx ~/.local/bin/prx    # or any directory on your PATH
prx --version
prx init                                      # writes ~/.config/prx/config.yml

Install has the details: system requirements, checksums, updating, and uninstalling. To build prx yourself, see Building from source.

Quickstart

If you installed PRX.app, skip prx init and prx daemon start: the app creates the config and starts the daemon itself. Watching a repository, reviewing, and approving can also be done from the app.

prx init                            # write ~/.config/prx/config.yml
prx repos add acme/api              # watch a repository
prx doctor                          # check config, gh auth, engines, data directory
prx status                          # list open PRs and their state
prx review acme/api#42 --dry-run    # run the whole pipeline and print it; posts nothing
prx review acme/api#42              # review one PR now and post the result
prx daemon start                    # keep going in the background: polling, queue, notifications

Then act on what the review found:

prx approve acme/api#42             # post your own GitHub approval
prx snooze acme/api#42 --hours 2    # or: prx ignore, prx pause --hours 2
prx history                         # what was reviewed, merged, or failed
prx insights                        # throughput, recurring blockers, effectiveness

The Quickstart and Your first review go through this step by step.

Features

  • Review lifecycle. A state machine per PR with cooldowns before a first review and between re-reviews, skip rules for drafts, authors, labels, and branches, snooze, ignore, and diff-size caps.
  • Three review modes. Review and post comments, review without posting (monitor), or off. Set globally, per organization, or per repository.
  • Your choice of engine. Built-in support for the pi, claude, and codex CLIs, any other agent CLI through config, or the Anthropic, OpenAI, and OpenAI-compatible APIs (including local servers such as Ollama). Agents that support it resume the same session on re-reviews.
  • Scheduling and pausing. Cron expressions limit when reviews run; a timed pause holds automatic reviews during a demo or a release freeze.
  • Control over what is posted. Custom review prompts, a template for the review body, inline comments on or off, and a fixed output contract that no prompt edit can remove.
  • Briefs. A short plain-language description of what each PR does, for people who have not opened the diff.
  • History, insights, and token usage. An append-only local log, analytics on recurring blockers and review effectiveness, and per-engine token and cost reports.
  • Desktop notifications with configurable tiers per event.
  • PRX.app for macOS. A menu bar item with per-PR actions, and a window with a dashboard, history, usage charts, and settings.
  • Localhost API. The CLI and the app are thin clients of the daemon's bearer-token JSON API, which you can script against too.
  • Live config reload and login autostart through launchd or systemd.

Documentation

Everything is under docs/.

Security

  • No stored credentials. Every GitHub call goes through your gh session. LLM API keys and alternate GitHub tokens are referenced by environment-variable name and never written to disk.
  • Local only. The API listens on 127.0.0.1 behind a per-start bearer token. State and history stay on your disk. There is no telemetry. The one optional outbound connection is to an LLM API you configure, which then receives the review prompt and the PR diff.
  • No automated approval. No code path in prx lets an engine approve; PR content is handled as data.

See the security model. To report a vulnerability, follow SECURITY.md.

Scope

prx is a review manager for one person's machine. It does not merge pull requests, approve them, or run in CI, and it has no team or hosted features. Priority ordering beyond oldest-due-first, delta reviews, file-path filters, and exports are also out of scope for now. See Scope and non-goals.

GitHub is the only supported forge. PRX.app is macOS only; the CLI and daemon run on macOS and Linux.

Contributing

Bug reports and pull requests are welcome. CONTRIBUTING.md has the setup and the checks to run before you push; AGENTS.md has the project's invariants and conventions, for people and coding agents alike; Development covers building from source, the test tiers, the release process, and how the screenshots and the demo video are regenerated.

License

MIT

vs4vijay/prx

Local-first PR review lifecycle manager

Rust

1

3 commits

updated Oct 10, 2026

See the code

See what people are saying

README

prx: AI informs, human decides.

prx

prx (Pull Request eXaminer) has the coding agent you already run review your pull requests, and leaves the approving to you. It watches the GitHub repositories you choose, has a local agent CLI (pi, claude, codex, or your own) or an LLM API review each open pull request, posts the findings to GitHub itself, notifies you, and keeps a history of every review.

It runs on your machine as one Rust binary: a CLI, a background daemon, and a localhost API. On macOS there is also PRX.app, a menu bar client. The only services it talks to are GitHub, through the gh CLI you are already signed in to, and an LLM endpoint if you configure one.

A 23-second screen recording of PRX.app. First its menu bar menu opens on the list of pull requests, grouped under Changes requested, In review, Ready for approval, Needs review and Reviewed. Then the app window: the Dashboard with the pull requests that need attention, the pull request list with one brief opened, and the History page with a review's findings and token usage
23 seconds of prx: the menu bar menu, then the app window. The full demo runs 109 seconds (MP4, 1080p) and also shows a pull request's actions and an approval from the menu.

Why

An agent that can post to GitHub can also approve a pull request, merge it, or follow instructions hidden in a diff. prx is built so the reviewing agent never needs to write anything to GitHub, by splitting the work in three:

  1. The agent only reads. It analyzes the pull request and writes one JSON file, the review manifest: a verdict, a summary, and a list of findings. It is told never to write to GitHub and to treat everything in the PR as untrusted data.
  2. prx does the writing. It validates the manifest, then posts the review body and inline comments through gh. prx itself never executes anything from the PR.
  3. Only a human approves. prx has one approve path: you, running prx approve or clicking Approve… in the app.

One limit to know about: an agent CLI runs as you, so its read-only rule is an instruction in the prompt, not a sandbox. An LLM API engine has no tools at all; it only receives the prompt and the diff. The security model has the details.

prx daemon ──poll──> gh pr list ──> lifecycle state machine ──> desktop notifications
    │                                                     │
    │ render prompt + run agent                           state.json / history.jsonl
    v                                                     │
read-only agent ──writes──> review manifest (JSON)        └──> localhost IPC API
                             │                                  ^           ^
                    prx validates & posts                        │           │
                             v                                   │           │
              gh api (inline) + gh pr review (body)        CLI commands   menu bar client
                             ^                                           (separate GUI)
                    prx approve (human only)

More in Architecture.

Screenshots

Everything shown here is a made-up team (acme, globex), not real repositories.

PRX.app lives in the macOS menu bar, and its menu is where you will use it most: your pull requests grouped by state, with review and approve actions one click away.

The PRX menu bar menu in dark appearance. A header reads 4 PRs need attention, checked 7m ago, next in 2m, above Check GitHub now and Review PR. Fourteen pull requests from acme and globex follow in seven groups: Changes requested, In review, Ready for approval, Needs review, Reviewed, Skipped, and Merged / closed. Each row gives the repository and number, author, age, title and a one-line verdict; the two rows ready for approval each have an Approve item beneath them. Review mode, Open PRX, Settings, History and Quit PRX close the menu

Each pull request opens a submenu with the verdict, a one-line brief, and every action: Review, Approve…, Block (request changes)…, Snooze, Ignore (screenshot). Approving always asks first. The PRX.app guide walks through the menu.

The Dashboard in PRX.app: what needs you, with a plain-language brief of each pull request.

The PRX.app Dashboard: the review mode and pause controls, counts of tracked pull requests (12 tracked, 3 need attention, 2 ready for approval), and the pull requests with changes requested, each with its brief

The Pull requests page: a table of pull requests with their state, age and last review; one row is open and shows its brief, the last verdict and the engine that reviewed it The Usage and stats page: 12.2M tokens, 13.41 dollars of reported cost and 47 runs over 30 days, above a bar chart of tokens per day
Every pull request with the agent's verdict, and its brief one click away.Tokens and reported cost per day, engine, repository, or pull request.

The same data from the command line:

A terminal running three commands: prx status, a table of fourteen pull requests across seven repositories with a state icon, author, verdict and last review for each; prx brief for one pull request; and prx usage by week, a table of tokens, cost and runs

More screenshots are in the guides, starting with PRX.app.

Install

prx is a download from the latest release; there is nothing to compile. You need the GitHub CLI signed in (gh auth status), and either a coding-agent CLI (pi, claude, codex) or an API key for an LLM API.

PRX.app (macOS 12 or later, Apple silicon)

The menu bar app, with the CLI and the daemon inside. Three steps.

1. Get PRX.app, whichever way you prefer:

  • Option 1: download it from the Releases page. Open the latest release in your browser and download PRX-<version>-macos-arm64.zip. Double-click the zip in Finder (Safari may already have unpacked it), then drag PRX into your Applications folder.

  • Option 2: use the command line.

    cd ~/Downloads
    gh release download --repo vs4vijay/prx --pattern 'PRX-*-macos-arm64.zip'
    ditto -x -k PRX-*-macos-arm64.zip /Applications    # unpacks PRX.app into Applications
    

2. Allow it to open. The same for both options, once, before you open PRX:

[!IMPORTANT] Run this in Terminal before the first open:

xattr -dr com.apple.quarantine /Applications/PRX.app

PRX.app is not yet notarized by Apple, so macOS blocks a downloaded copy, saying that Apple could not verify "PRX" or that "PRX" is damaged (the wording varies by macOS version). The app is not damaged; this command clears the download flag macOS objects to. Without a terminal: try to open PRX once, then choose Open Anyway under System Settings → Privacy & Security. More about this step.

3. Open it. Double-click PRX in Applications, or run open /Applications/PRX.app. A PRX icon appears in the menu bar and the PRX window opens on the Dashboard, where Add a repo gets you started. There is nothing to set up first: PRX writes its default config (~/.config/prx/config.yml) and starts its daemon by itself.

For a prx command in your terminal, open Settings → General in PRX and choose Install command-line tool….

CLI and daemon (macOS and Linux)

On an Intel Mac, on Linux, or without the app. The release has one tarball per platform, prx-<version>-<target>.tar.gz, where <target> is aarch64-apple-darwin (macOS, Apple silicon), x86_64-apple-darwin (macOS, Intel), x86_64-unknown-linux-gnu (Linux, x86_64) or aarch64-unknown-linux-gnu (Linux, arm64).

1. Get the tarball and unpack it, whichever way you prefer:

  • Option 1: download it from the Releases page. Download the tarball for your machine from the latest release and unpack it: double-click it on macOS, or tar -xzf prx-*.tar.gz.

  • Option 2: use the command line, in the folder you want the download in:

    target=aarch64-apple-darwin    # or one of the other three targets above
    gh release download --repo vs4vijay/prx --pattern "prx-*-$target.tar.gz"
    tar -xzf prx-*-"$target".tar.gz
    

Either way you now have a folder named prx-<version>-<target>, with prx inside.

2. On macOS, allow it to run. The same for both options, in the folder that holds the unpacked folder:

[!IMPORTANT]

xattr -dr com.apple.quarantine prx-v*/

prx is not yet notarized by Apple either. A quarantined copy is stopped the moment it starts: the shell prints killed and nothing else. Not needed on Linux.

3. Put prx on your PATH and create the config:

mkdir -p ~/.local/bin
install -m 755 prx-v*/prx ~/.local/bin/prx    # or any directory on your PATH
prx --version
prx init                                      # writes ~/.config/prx/config.yml

Install has the details: system requirements, checksums, updating, and uninstalling. To build prx yourself, see Building from source.

Quickstart

If you installed PRX.app, skip prx init and prx daemon start: the app creates the config and starts the daemon itself. Watching a repository, reviewing, and approving can also be done from the app.

prx init                            # write ~/.config/prx/config.yml
prx repos add acme/api              # watch a repository
prx doctor                          # check config, gh auth, engines, data directory
prx status                          # list open PRs and their state
prx review acme/api#42 --dry-run    # run the whole pipeline and print it; posts nothing
prx review acme/api#42              # review one PR now and post the result
prx daemon start                    # keep going in the background: polling, queue, notifications

Then act on what the review found:

prx approve acme/api#42             # post your own GitHub approval
prx snooze acme/api#42 --hours 2    # or: prx ignore, prx pause --hours 2
prx history                         # what was reviewed, merged, or failed
prx insights                        # throughput, recurring blockers, effectiveness

The Quickstart and Your first review go through this step by step.

Features

  • Review lifecycle. A state machine per PR with cooldowns before a first review and between re-reviews, skip rules for drafts, authors, labels, and branches, snooze, ignore, and diff-size caps.
  • Three review modes. Review and post comments, review without posting (monitor), or off. Set globally, per organization, or per repository.
  • Your choice of engine. Built-in support for the pi, claude, and codex CLIs, any other agent CLI through config, or the Anthropic, OpenAI, and OpenAI-compatible APIs (including local servers such as Ollama). Agents that support it resume the same session on re-reviews.
  • Scheduling and pausing. Cron expressions limit when reviews run; a timed pause holds automatic reviews during a demo or a release freeze.
  • Control over what is posted. Custom review prompts, a template for the review body, inline comments on or off, and a fixed output contract that no prompt edit can remove.
  • Briefs. A short plain-language description of what each PR does, for people who have not opened the diff.
  • History, insights, and token usage. An append-only local log, analytics on recurring blockers and review effectiveness, and per-engine token and cost reports.
  • Desktop notifications with configurable tiers per event.
  • PRX.app for macOS. A menu bar item with per-PR actions, and a window with a dashboard, history, usage charts, and settings.
  • Localhost API. The CLI and the app are thin clients of the daemon's bearer-token JSON API, which you can script against too.
  • Live config reload and login autostart through launchd or systemd.

Documentation

Everything is under docs/.

Security

  • No stored credentials. Every GitHub call goes through your gh session. LLM API keys and alternate GitHub tokens are referenced by environment-variable name and never written to disk.
  • Local only. The API listens on 127.0.0.1 behind a per-start bearer token. State and history stay on your disk. There is no telemetry. The one optional outbound connection is to an LLM API you configure, which then receives the review prompt and the PR diff.
  • No automated approval. No code path in prx lets an engine approve; PR content is handled as data.

See the security model. To report a vulnerability, follow SECURITY.md.

Scope

prx is a review manager for one person's machine. It does not merge pull requests, approve them, or run in CI, and it has no team or hosted features. Priority ordering beyond oldest-due-first, delta reviews, file-path filters, and exports are also out of scope for now. See Scope and non-goals.

GitHub is the only supported forge. PRX.app is macOS only; the CLI and daemon run on macOS and Linux.

Contributing

Bug reports and pull requests are welcome. CONTRIBUTING.md has the setup and the checks to run before you push; AGENTS.md has the project's invariants and conventions, for people and coding agents alike; Development covers building from source, the test tiers, the release process, and how the screenshots and the demo video are regenerated.

License

MIT