Open source · MIT · runs on your machine

Review your PR stacks before you create them.

Local Review shows every commit on your branch as its own pull request, grouped into the stacks you mean to open, in a GitHub-style review UI that runs on your machine.

Comment, get your agent to fix things, and mark PRs ready while it is still just you and your agent. Nothing goes to GitHub until the stack is right.

$ npx local-review

Needs Node 22+ and git. Reads your repos, never writes to them. Set up your first project

Why Local Review

The first review happens before the pull request.

Your agent writes the commits. You review them as the PRs they will become, on your own machine, and nobody else sees a thing until the stack is right.

Every commit is a PR

Each commit gets a Conversation tab and a Files changed tab, numbered and grouped into colour-coded stacks: one PR per commit, the way the stack will go up on GitHub.

Stacks across repos

One project can span several repos, each with its own branch and stacks, so a change that touches the API, the client and the infra is reviewed as one piece of work.

Your agent answers in the review

Comments are plain YAML files. Your agent reads them, fixes the commits and replies in the same files, and its replies appear in your browser as it works.

Read-only by construction

Local Review never fetches, checks out, commits or rebases. All git access goes through one read-only allow-list, so it cannot touch the repos it shows you.

Local, and careful with your work

Local Review never talks to GitHub and only answers on localhost. It never deletes your review, and snapshots it every hour that something changes.

Publish when it is right

When a stack is ready, your agent opens it as GitHub stacked PRs with the titles and descriptions you approved, one stack at a time, then records what it created.

How it works

From a branch full of commits
to a stack of PRs you trust.

1. Describe the work

A project is one YAML file: the repos involved, the branch to review in each, and where each stack starts. Pick stacks by commit subject and they survive every rebase.

A project.yaml excerpt naming a repo, its branch and three stacks by the commit subject each starts at, beside the sidebar it produces: the same three stacks, colour-coded, with their PRs and readiness badges

2. Review each commit as a PR

Read the diff with split or unified views, comment on a line or a range, resolve threads and tick files as viewed. Readiness badges show where every PR in every stack stands.

A comment thread on a range of lines in a diff: the commented lines are tinted, and the reviewer’s comment and a reply sit under them

3. Your agent replies

Hand the project to your coding agent. It reads your threads, fixes each commit where it stands and answers in the review files. Threads follow their code through the rebase.

A thread on five lines of Go: the reviewer points out that a spot on offer still looks free, and Claude, marked as an agent, replies with two ways to fix it and asks which to do

4. Mark it ready, then publish

Mark each PR ready. The plan command prints every branch, base, title and body, and on your go-ahead your agent opens the stack on GitHub and records each PR back in Local Review.

The Draft | Ready toggle set to Ready, and below it the output of local-review plan for that PR: its commit, branch, base, status ready, title, and GitHub: not created
A project.yaml excerpt naming a repo, its branch and three stacks by the commit subject each starts at, beside the sidebar it produces: the same three stacks, colour-coded, with their PRs and readiness badges
A comment thread on a range of lines in a diff: the commented lines are tinted, and the reviewer’s comment and a reply sit under them
A thread on five lines of Go: the reviewer points out that a spot on offer still looks free, and Claude, marked as an agent, replies with two ways to fix it and asks which to do
The Draft | Ready toggle set to Ready, and below it the output of local-review plan for that PR: its commit, branch, base, status ready, title, and GitHub: not created

Works with your agent

Plain files in, plain files out.

There is no plugin and no API key. Local Review keeps your review in YAML files under ~/.local-review, so any coding agent that can read and write files can take part: Claude Code, Codex, or the next one.

  • A guide written for agents

    local-review guide prints the agent guide: the data model, how to answer threads, how to fix a commit mid-stack, how to publish, and what to do after merges.

  • A plan, not guesswork

    local-review plan prints exactly what each PR should be on GitHub, as Markdown, JSON or YAML, so publishing is mechanical.

  • One prompt to hand off

    Paste the hand-off prompt into your agent and it works through your open threads the way the guide says: fix, reply, resolve only what it should.

Read the agent guide
~/.local-review/…/my-feature/reviews/my-service/3f9c2e1….yaml
threads:
  - id: t-1a2b3c4d
    path: src/config/loader.ts
    side: right
    line: 42
    resolved: false
    comments:
      - id: c-5e6f7a8b
        author: ada
        body: |
          This swallows the parse error. Can we
          surface the file name and line instead?
      - id: c-9d0e1f2a
        author: claude
        body: |
          Done in the amended commit: the error now
          reads "config.yaml:12: unexpected key".

Get started

Review your next stack before anyone else sees it

One command starts it. Point a project at the branch your agent just wrote, and every commit on it is a PR you can review, in the stacks you mean to open. Your repos are only ever read.

$ npx local-review

Needs Node 22+ and git. Reads your repos, never writes to them. Set up your first project