Repository navigation
Releases: TOMOSIA-VIETNAM/open-pr
Release list
v2.2.0 - Intel Macs, self-repair, and a watcher that never misses a request
Update
Claude Code (restart it afterwards):
claude plugin marketplace update open-pr
claude plugin update open-pr@open-prCodex:
codex plugin marketplace upgrade open-pr
codex plugin add open-pr@open-prCursor, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateNo config migration: your repo's settings keep their shape.
New
- When a command fails in a way the plugin does not document, the agent diagnoses it, patches the installed copy once you approve, and offers to file the report with
/open-pr:feedback. - Claude Code sessions are named after the PRs you give
/open-pr:reviewor/open-pr:fix, e.g.review admin !1913, api #12. A name you chose is never replaced. /open-pr:watchreads requests made before it started: each open PR's pending/open-pris asked once, and the ones you skip stay skipped./open-pr:watchwith no role asks Review, Fix, or both each time.- Once a requested review is posted, the watcher replies in the request's thread with its link.
- A pending draft review of yours on the PR no longer fails the post: you choose to publish or discard it.
- The plugin can edit or delete its own posted comments, and only those. It refuses a comment you wrote, even one quoting a finding.
Improved
- The menu bar and toasts run on Intel Macs, and the watcher reports a toast only when it was actually shown.
- jq 1.6 is supported.
- A finding on a line outside the diff goes on the file when the file is in the diff, otherwise into the overview. The same rule applies on GitHub, GitLab and Bitbucket.
- GitLab: a finding on an unchanged line no longer fails the publish with a 500. A publish cut off part-way resumes without posting any note twice.
- A re-review confirms findings the developer answered by hand.
- A review with line findings only opens with the Overview heading.
- A finding's Fix label renders as its own paragraph.
- Menu bar: a PR's fix row sits under its review row. Clicking a session brings forward the tab already attached to it instead of opening another. After a plugin update, the menu bar shows a restart line and restarts only when you click it.
- Watched sessions no longer stall on a permission prompt from a chained shell command.
v2.1.0 - Reviews on request, fixes in one click, a menu bar for both
Update
Claude Code:
/plugin marketplace add TOMOSIA-VIETNAM/open-pr
/plugin install open-pr@open-prCursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateNo config migration: your repo's settings keep their shape. /open-pr:watch asks its own settings the first time it runs in a repo.
New
/open-pr:watchreviews a PR when someone comments/open-pron it (or mentions you, if the repo picks that trigger): one review session per PR, on Claude Code, Codex, Gemini CLI, Cursor or Antigravity. Only authors with write access trigger it.- A question asked with
/open-prgets an answer in the comment's thread instead of a review. - Fix role: a new review on your own PR shows its findings with "Fix now"; one click runs
/open-pr:fixin its own session, and after the fix it offers to request a re-review in the original thread. - A review watcher and a fix watcher run side by side; several machines can watch one repo, and the first to claim a request takes it.
/open-pr:menubar(macOS): every watcher on the machine in one menu — PRs per repo with their state, last poll, the host's API quota, Stop, snooze, and each repo's settings and doctor date behind a gear.- Toasts drawn as macOS banners, with no notification permission; a click goes where you act.
data_dirskeeps each workspace's review memory in its own data directory, so two clients' memory stays apart.
Improved
- One poll every 3 minutes serves both roles; unchanged GitHub repos cost no API quota, rate limits back off up to 15 minutes, and an idle repo slows to 10 minutes.
v2.0.4 - Review data outside every repo
Update
Claude Code:
/plugin marketplace add TOMOSIA-VIETNAM/open-pr
/plugin install open-pr@open-prCursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateNo config migration: your repo's settings keep their shape.
New
- Review memory, settings and worktrees live in one data directory outside every repo, so no reviewed repo needs a
.gitignoreline. The first command asks once where it goes, recommendingnotebooks/reviewin the directory just outside the repo, and stores the answer asdata_dirin~/.config/open-pr/config.json. - An existing
notebooks/review/under the directory you run from is copied into the data directory (worktrees excluded). The original stays until you delete it, along with its.gitignoreline; then rungit worktree prunein each reviewed repo. - A repo whose memory sits in another
notebooks/review/below the current directory is offered for import on its first review, instead of going through setup again. open-pr.sh --helplists every subcommand, option and exit code the runtime takes.
Improved
/open-pr:fixreads 1.1% less context per run (7,874 → 7,791 tokens, mean).- A hand-edited
config.jsonthat is not valid JSON stops with an error naming the file, and is never overwritten.
v2.0.3 - the review checks the PR against itself
Update
Claude Code:
/plugin marketplace add TOMOSIA-VIETNAM/open-pr
/plugin install open-pr@open-prCursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateNo config migration: your repo's settings keep their shape.
New
- The review cross-checks the PR against itself before concluding: two hunks editing the same function, a rule changed in one hunk and restated in another, or a definition edited in one hunk and called in another are compared with each other — staying silent requires the same check as raising a finding.
- A finding whose fix touches shared code names the callers that fix must keep working, so applying the suggested fence cannot silently regress another call site.
Improved
- Read spend during a review is the agent's own judgment: bounded reads around the hunk stay the default, wider reads happen when a conclusion needs them, grep comes before read. Measured on the e2e fixture: one more MUST FIX found, no extra file reads.
/open-pr:fixre-derives a suggested snippet against the surrounding code and checks the other call sites of anything it edits before committing — it never pastes a reviewer's fence blind.- A
(Recommended)option is marked only after the case for the alternative is weighed; a genuine tie gets no mark.
v2.0.2 - multi-PR fix, post_lgtm, and a suite that sees across files
Update
Claude Code:
/plugin marketplace add TOMOSIA-VIETNAM/open-pr
/plugin install open-pr@open-prCursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateNo config migration: the field added here carries a read-time default.
New
.review.post_lgtm—falsekeeps a review that found nothing in the chat instead of on the PR. Defaulttrue, so an existing repo behaves as before. Asked at first-run setup.
Improved
/open-pr:fixtakes several PR URLs in one command: each PR is a whole run of its own, a submodule PR ahead of the parent that bumps it, and the matching pass is bounded — a run can no longer loop until the rate limit stops it.- A re-review confirms a fix the
fixcommand already replied to, and resolves that thread whenauto_resolve_fixed_findingsis on. /open-pr:fixreuses what the session already established — the memory a review just wrote and the checkout already gated at the PR head — instead of asking for both again from a side worktree.<op> settingsfinds the memory a review wrote at the workspace when the command runs from a linked worktree or a subdirectory.
Context per run vs v2.0.1: mean +2.9% over 17 scenarios, /open-pr:fix +5.3%.
v2.0.1 - Wrong-directory runs stop losing your configuration
Update, if the plugin is already installed:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateExisting repos need no config migration — schema_version is unchanged.
Improved
- Running from the wrong directory no longer silently discards your saved configuration: settings now report which memory directory was read and whether your settings were there, and both commands ask one question — first run here, or wrong directory — instead of re-running setup and reviewing with defaults in your saved language's place.
- The code snippet inside a finding is now reviewed against the same criteria as the diff before it is posted — what runs once applied, whether the replaced path is really gone — and a snippet the reviewer cannot verify states the direction in prose instead of shipping unchecked code.
- The installed plugin now carries its own
LICENSEandSECURITY.md.
Context cost: +3.1% mean vs v2.0.0, all of it the two guards above — still ~26% below v1.4.3.
v2.0.0 - The CLI runtime: code does the mechanics, prompts do the judgment
Update, if the plugin is already installed:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateExisting repos need no config migration — schema_version is unchanged.
New
- The plugin now ships a small command-line runtime (
bin/open-pr.sh) that performs every vendor and git mechanic — fetching PR context, checking out the PR into its worktree, verifying line numbers against the real file, posting and publishing through each vendor's own flow, and pushing fixes. The review prompts keep only the judgment. - Every reviewed tree is verified against the PR's head commit by code, not by instruction — a wrong or stale checkout stops the run instead of producing a review of the wrong code, on all three vendors.
/open-pr:fixworks from any starting point: on the PR's branch it fixes in place; anywhere else it offers a fresh, gated worktree and never touches your checkout. Its push goes to the remote matching the PR's host — a clone with several vendor remotes no longer risks pushing to the wrong one.- FILE-level findings are now visible to
/open-pr:fixon GitLab and Bitbucket, where they live as top-level comments.
Improved
- 22–42% less context per review run and 17–35% less per fix run (per-scenario, measured against v1.4.3); mean across all scenarios −26%.
- Line comments are confirmed against the real file before posting — the old side reads the merge-base blob, so a moved base branch cannot shift an anchor.
- A stored
falsein settings staysfalse(one boolean used to flip to itstruedefault), and settings read the memory directory the review actually created. - Credentials never enter command arguments; request bodies travel via files. A failed push or missing credential stops with the exact instructions to fix it, per OS.
install.sh --ref <tag>now installs exactly that tag into Claude Code instead of silently followingmain.
Breaking
- Requires
gitandjqalongsidegh/glab. On Windows everything runs in Git Bash (Claude Code already requires Git for Windows); install jq withwinget install jqlang.jq. - The per-vendor prompt files (
src/vendors/) are gone; anything that referenced them directly should usebin/open-pr.shsubcommands (src/core/cli.mdis the contract).
v1.4.3 - Cross-file assumptions checked before a review concludes
Update, if the plugin is already installed:
/plugin marketplace update open-pr
/plugin update open-pr@open-prthen /reload-plugins. Cursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateExisting repos need no config migration — schema_version is unchanged.
New
- A review checks the code around the diff before it concludes: when raising a finding — or staying silent on one — turns on how a caller or a capability outside the diff behaves, it takes one targeted
Grepfirst, max 3 per PR, and what that grep cannot settle arrives as a 🔵 naming the symbol and the assumption. Costs +104 tokens per review run (+0.7% to +1.3%).
v1.4.2 - Model-invocable commands + branch-pinned installs
Update
/plugin marketplace update open-pr
/plugin update open-pr@open-prthen /reload-plugins. Cursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateExisting repos need no config migration — schema_version is unchanged.
New
review,fix,clean,feedback,upgradecan now be invoked straight from conversation, not only via/open-pr:<cmd>.--ref <branch-or-tag>on install pins to a specific branch or tag instead of the release channel;--updatethen stays on it.--ref latestgoes back to the release channel.
Improved
--updateno longer asks which platform twice, and no longer runs the update twice throughinstall.sh.
v1.4.1 - Reviews verified against the PR's real code
Update, if the plugin is already installed:
/plugin marketplace update open-pr
/plugin update open-pr@open-prthen /reload-plugins. Cursor, Codex, Gemini CLI, Antigravity:
curl -fsSL https://raw.githubusercontent.com/TOMOSIA-VIETNAM/open-pr/main/install.sh | bash -s -- --updateExisting repos need no config migration — schema_version is unchanged.
Improved
- Every review is verified to be looking at the PR's real code: the worktree — and a submodule's checkout on a bump — must match the PR's head commit before any finding is written, and a failed checkout stops the run instead of reviewing the wrong tree.
- Reviewing a PR whose branch is checked out in your own clone now works — the checkout fetches the PR ref directly instead of
gh pr checkout, which exited 128 there. - Line comments land on the line they describe: a LINE finding must sit inside a diff hunk, and its line number is confirmed against the real file (the merge-base blob for the old side) before posting.
- A push landing mid-review no longer wastes the run: the review posts anchored to the commit that was read, with a note that a newer commit is unreviewed.
- Submodule reviews read the submodule's own tree for line checks, old-finding comparison and merge base — not the parent repo's file at the same path — and anchor their post to the commit they reviewed.
- The overview's assessment is capped at three sentences, one conclusion each.
/open-pr:feedbackwrites the tracker's real form headings, so the issue body matches the forms exactly.- A post failure on your own PR is no longer declared unworkaroundable, and a rejected
commit_idis explained as a force-push with the fix (call the review again). - Context cost: mean +4.4% (+403 tokens per run), all of it spent on the verification gates above;
fix,upgradeandcleanare unchanged.