review-inbox
Health Uyari
- License — License: MIT
- Description — Repository has a description
- Active repo — Last push 0 days ago
- Low visibility — Only 5 GitHub stars
Code Basarisiz
- exec() — Shell command execution in hooks/autoreview.ts
Permissions Gecti
- Permissions — No dangerous permissions requested
Bu listing icin henuz AI raporu yok.
Claude Code mod: PRs waiting for your review, each summarized in plain language, plus your own PRs and issues
Review Inbox
English | 한국어 | 日本語 | 简体中文 | 繁體中文 | Español | Português | Deutsch | Français
A Claude Code mod that keeps your GitHub work in view while you code: the pull requests waiting for your review, each summarized in plain language before you open it, your own open PRs and the reviews they get, and the issues that pull you in.

Quick start
With GitHub CLI logged in (gh auth login), at the prompt of a Claude Code session:
/plugin marketplace add https://github.com/SummerRiversound/review-inbox.git
/plugin install review-inbox@review-inbox
/review-inbox
The last line opens the drawer. Options and updates are under Install.
- Band above the prompt — one line counting only what needs you: PRs waiting for your review, your PRs with something to do, and issues assigned to you or mentioning you. Its colour is how long the oldest review request has waited (yellow from 3 days, red from 14).
Openopens the drawer. A count that goes down shows in green for a moment. With auto review on,auto-reviewed Nfollows the counts while reviews it posted for you wait in the drawer. - Drawer —
/review-inbox, with five tabs: To review, My PRs and Assigned & mentioned hold what to act on, then Saved searches and Notifications are there to browse. Press 1 to 5 while the drawer has focus to switch to that tab, counting from the left. The number on a tab counts its cards; Saved searches has none, and Notifications counts the unread. - Toasts — a short notice when something new arrives while you work.
The interface and the summaries come in nine languages; see Language.
Requirements
- Claude Code 2.1.287 or later, the first builds with mods (function-hook plugins). Tested on 2.1.292. Mods are in early access, and their API may change between releases.
- GitHub CLI (
gh) on yourPATH, logged in (gh auth login) with access to the repositories you review. - GitHub Enterprise Server: set
GH_HOSTin the environment Claude Code starts in; everyghcall goes to that host.
Install
At the prompt of a Claude Code session:
/plugin marketplace add https://github.com/SummerRiversound/review-inbox.git
/plugin install review-inbox@review-inbox
The install screen asks for the options below; all of them can stay empty or at their default.
Update and uninstall
claude plugin marketplace update review-inbox
claude plugin update review-inbox@review-inbox
claude plugin uninstall review-inbox@review-inbox
An update applies after a restart. Uninstalling leaves the mod's cache folder, ~/.claude/plugins/data/review-inbox, in place; delete it yourself to remove the cached lists and summaries. See the changelog for what each version changed.
Configuration
Set on the install screen; change them later in /config. A change applies right away.
| Option | Default | What it does |
|---|---|---|
scope |
empty | GitHub search qualifiers added to every search (review-requested:@me, author:@me, assignee:@me, mentions:@me). Empty means all of GitHub. |
githubUser |
empty | The gh account to use when several are logged in (gh auth token -u <user>). Empty uses the active account. |
language |
auto |
auto, or one of the codes in Language. |
refreshMinutes |
10 |
Minutes between fetches from GitHub: 5, 10, 15, 30 or 60. All sessions share one fetch. |
repoPaths |
empty | Where Claude works on each repository, for the next-step buttons. See below. |
motion |
auto |
off stops the band's count flash. auto stops it too when Claude Code's reduced motion setting (prefersReducedMotion) is on. |
directActions |
off |
on adds buttons that write to GitHub from a card. See Direct GitHub actions below. |
autoReview |
off |
on reviews PRs that ask for you in the background and keeps each review as your pending review until you post it. It uses noticeably more tokens. This is only where it starts: once you press the Auto review button atop the To review tab, which asks first before it turns on, the button alone turns it on and off. See Auto review below. |
autoReviewPost |
pending |
What a finished review becomes: pending keeps it as your pending review to post from the card, comment posts it as a comment, verdict posts it with the verdict it suggests, approve and request changes included. Anything but pending posts under your name without asking. |
autoReviewModel |
sonnet |
The model the reviewer runs on: sonnet or opus, which reviews deeper and costs more. |
autoReviewVerify |
off |
on has a second reviewer check each finding of a draft against the code before it is stored, dropping what does not hold and lowering what is overstated. A review with findings then costs about twice the tokens. |
autoReviewDaily |
5 |
Most auto reviews started in a day: 3, 5, 10, 20 or unlimited. Try again on a card is not counted. |
autoReviewSettleMinutes |
30 |
Minutes after a PR's latest commit before auto review starts on it, since authors often push again right after asking: 0, 10, 30, 60 or 120. 0 starts at once. |
autoReviewSkills |
empty | Skills loaded into the reviewer, comma-separated, such as your review playbook. Empty loads none. |
autoReviewInstructions |
empty | Your own words to the reviewer, such as what to check first or how to word comments. Empty adds none. |
autoReviewSeverityNames |
empty | What the four severities are called on a review, blocker to nit, comma-separated, such as Blocker, Decision needed, Follow-up, nit. Empty uses the language's own. |
autoReviewLarge |
on |
on also reviews PRs over 50 files or 2,000 changed lines, which take many more tokens. off leaves them alone. |
autoReviewMaxTurns |
40 |
How many turns the reviewer may take before it must answer: 40, 60, 80 or 120. A large PR can need more; a review that runs out fails, and its card says it ran out of turns. |
autoReviewBacklog |
on |
on also reviews requests made before auto review was turned on, a few a day as autoReviewDaily allows. off leaves them alone. |
scope takes anything GitHub's issue and PR search accepts:
org:my-org
org:my-org org:other-org
repo:owner/name repo:owner/other
org:my-org -repo:my-org/noisy-repo
user:my-username
Repeated org:, repo: and user: qualifiers match any of them. A team review request counts as a request for you, as GitHub's review-requested:@me defines it.
repoPaths takes comma-separated owner/repo=path entries. owner/*=path/* covers every repository of an owner, with * in the path standing for the repository's name; an exact name wins over a wildcard, and ~ is your home folder. A folder named here wins over the session's own folder and the ones the mod remembers.
my-org/*=~/code/*
my-org/legacy=~/old/legacy-app
Tabs
Each tab groups its cards into categories. Press a category's header to fold it, and again to open it. N hidden · show all at the top of a tab brings back that tab's hidden cards.
Note, under a card's ▸ Actions, writes one line above its title: what you checked, or what you agreed to do and when. Save keeps the card in view. Snooze until tomorrow and Snooze until next week put it away until 9 a.m. tomorrow or next Monday, or sooner when it has news: a new commit on a review request, a new state or a new review on your PR, new activity on an issue. A toast tells you when a snoozed card is back, with its note. Clear removes the note.
The search field at the top looks through every tab at once: repository, number, title, author, the first 2,000 characters of the description, the summary and your notes. Hidden and snoozed cards are found too, marked hidden. Empty the field to go back to the tabs. The Claude mobile app draws no text fields yet, so there it shows notes but has no search and no Note.
Cards a session is working on gather under In progress in a session at the top of To review and My PRs, with the session's folder name, or this session. My PR counts when a session's folder is checked out on its branch in its repository; any card counts once a prompt in that session links to it, as Review with Claude does. A session that is closed, or has not checked in for 10 minutes, lets its cards go back to their groups.
A session still running an older release of the mod, as one opened before an update and never reloaded, is named under the drawer's title, such as 2 sessions on an older version (dhub2): run /reload-plugins there. Such a session keeps its own lists in a file of its own, so it never shows its lists or errors in an up-to-date session. Reload them all beside it asks those sessions to run /reload-plugins themselves, through reload.json in the cache folder: each does once it is idle, and its other plugins reload with it. Only sessions on 0.13.0 or later can answer; an older one still needs /reload-plugins typed there once.
Cards from this session's repository come first in every group, tagged this repo. When the tabs also hold other repositories, This repo N and All N above the tabs narrow them to this repository or show everything again; the band always counts everything. This session's repository is the one GH_REPO names, as gh reads it, else the folder's GitHub remotes.
Under its title a card shows up to two labels and how many more, its comment count and, for a PR, → base when it targets a branch other than the repository's default.
A ● before a card's repository marks one updated since you last closed the drawer, as GitHub's own inbox marks what changed since your last visit. Before the first close nothing is marked.
When nothing needs you (no review request, none of your PRs to act on, no issue assigned to you or mentioning you), the drawer says ✓ Nothing needs you above the tabs, and the band stays hidden.
To review
One card per PR waiting for your review: a one-sentence summary, why the PR exists, what it touches, its size and author, and how long your review has been pending. Risky items, such as a schema change or a required deploy order, are marked ⚠️.
Review with Claudemarks the cardAddedand keeps the drawer open, so you can pick several PRs. When you close the drawer (Esc or ×), a review request for each added PR goes into your prompt, with its warnings and what changed since your last review. Nothing is sent until you press Enter. A PR your draft already asks for shows asAddedwhen the drawer opens.Hide, under▸ ActionsbesideNote, hides the card until the PR gets a new commit.re-requestedmarks a PR you already reviewed that asks for you again, with a short summary of what changed since your last review.- Cards are grouped into direct requests, team requests and drafts.

The request also carries one line describing how you usually review, so Claude reviews the way you would. Once a week the mod reads your own comments on up to 30 PRs you recently reviewed, and asks Claude to describe your language and tone, what you look at first and how you phrase requests. With fewer than five comments to learn from, the request goes without that line; if learning fails, the last description stays and the mod tries again a day later. Auto reviews posted under your name are left out, so it learns only from what you wrote yourself.
My PRs
Your open PRs with their state instead of a summary, in the order you have to act on them: changes requested, CI failing, merge conflict, waiting for review (oldest first), approved, in merge queue, draft. Running CI is shown next to the state. A PR in a merge queue shows In merge queue: GitHub merges it once the queue's checks pass, so it is not counted in the band and never shows Ready to merge.
Hide hides a PR until it turns to another state or someone reviews it; your own push alone does not bring it back.

A review submitted after your latest commit shows as New review with who left it, until you commit again. That covers approvals, change requests and comment-only reviews, thread replies included, from people or bots; a dismissed review does not count. Such a PR counts as something to do and moves ahead of quiet ones in the same state. No model calls.
A PR stuck on you (changes requested, CI failing or a merge conflict) has a button for its next step: Address comments, Fix CI or Resolve conflict. Beside it is the folder Claude would work in: this folder when this session holds a clone of the repository, the folder of the last session that ran in it, or no local clone. The button adds the card the way Review with Claude does. When you close the drawer, the request names the step and the gh commands that read the comments or the failing logs, and asks Claude to work in a new worktree, leaving that folder's branch alone. With no known folder, Claude asks where your clone is, or offers gh repo clone and waits for your yes. No extra GitHub calls and no model calls.
Assigned & mentioned
Open issues assigned to you, and open issues and PRs that mention you; an item that is both shows once, as assigned. Below them, other issues and PRs from the last 30 days that referenced one of yours, with who did it. References you made yourself are left out, and only the newest 20 are shown. No model calls.
Items are grouped into assigned, mentions and references. Hide hides an item until it has new activity.

An issue assigned to you has a Work on this button that works the same way: Claude reads the issue, plans the change and starts on a new branch in a new worktree.
Saved searches
GitHub searches you name and save, each a section with its count and the 20 most recently updated matches. A title opens that PR or issue on GitHub, and N more on GitHub opens the whole search there. Three come built in, as in GitHub's own pull request inbox: Involves me (open PRs you take part in but did not open), Reviewed by me, still open and My open issues. Press a section's header to fold it. The searches run with every refresh, three at a time; one that fails shows why and leaves the others alone. No model calls.
Add your own under groups in the same actions.json as the card buttons; /review-inbox add-search asks Claude to write one with you.
{
"groups": [
{ "id": "team", "name": "Team PRs", "query": "org:acme is:open label:urgent", "scope": "prs", "countInBand": true },
{ "id": "reviewed-by-me", "hidden": true }
]
}
query is GitHub search syntax. scope is prs or issues: it adds is:pr or is:issue unless the query already says which, and sort:updated-desc is added unless the query has its own sort:. The scope setting and This repo do not narrow these searches, so write org: or repo: into the query when you want that. "countInBand": true adds the search's count to the band as Saved searches N. A saved search with a built-in id replaces it, and "hidden": true removes it. An entry with a missing field or an unknown scope is left out; the drawer warns about it at the bottom, and /review-inbox buttons lists it with the reason. Only the first 15 saved searches run.
Notifications
Your GitHub notifications that no other tab already shows, in a section per reason (Comment, State changed, CI run and so on), newest first in each; press a section's header to fold it. They are comments, state changes and new activity on threads you opened or take part in, team mentions and security alerts. Finished GitHub Actions runs you started show too, as CI run, linked to the repository's Actions page; GitHub sends them only while Actions notifications are on for GitHub, under Notifications → System → Actions in your GitHub settings. Review requests, assignments and mentions are left out, as are threads whose PR or issue is already a card. An unread thread is marked ●, and the tab's number counts them. Up to 100 notifications from the last 30 days are read.
Done and Unsubscribe take the row away at once and leave Done · Undo or Unsubscribed · Undo in its place for 10 seconds; closing the drawer before then sends them right away. Then Done marks the thread done on GitHub, as GitHub's own inbox does, and Unsubscribe also stops its notifications until someone mentions you or you comment. A thread marked done comes back when it has new activity. If either fails, the row comes back with the reason. No model calls.
GitHub gives notifications only to gh's own sign-in and to classic tokens. Without access, the tab says so and how to get it (gh auth login, or gh auth refresh -s notifications).
Toasts
A new review request, a new review on one of your PRs, one of your PRs turning to changes requested, CI failing or conflicting, and a new assignment, mention or reference. A new session does not announce these one by one: one toast sums up what changed since a session last looked, such as While you were away · CI failing 2, and stays quiet when nothing did. With auto review on, a finished review, or one posted for you, gets a toast too. When several arrive at once, they show one after another, 4.5 seconds apart.
Your PR turning approved with no CI running shows Ready to merge once.

Card buttons
▸ Actions on a card opens Note and Hide, then buttons that each hand the card to Claude with a ready-made request: Summarize risks, Explain this diff and Draft approval comment on a review request, Draft reply to reviewer and Investigate CI failure on your PR. A button adds the card the way Review with Claude does, and the request goes into your prompt when you close the drawer. Nothing runs and nothing is posted until you press Enter.
Add your own in actions.json in the cache folder. /review-inbox buttons shows its path, what it holds and any entry left out, and /review-inbox add-button asks Claude to write one with you.
{
"buttons": [
{ "id": "test-plan", "name": "Test plan", "scope": "review", "prompt": "Write a test plan for {{.PrUrl}} in {{.RepoPath}}." },
{ "id": "draft-approval", "scope": "review", "hidden": true }
]
}
scope is review, pr or issue. The prompt can use RepoName, RepoPath, PrNumber, PrUrl, PrTitle, Author, HeadRefName, BaseRefName, IssueNumber, IssueTitle, IssueUrl, written {{.Name}}, {{Name}}, {{ .Name }} as in gh-dash; one the card has no value for is left empty. A button with a built-in id replaces it, and "hidden": true removes it. An entry with a missing field, an unknown scope or an unknown variable is left out; the drawer warns about it at the bottom, and /review-inbox buttons lists it with the reason. The rest keep working. PrTitle and Author come from GitHub as written, so a prompt that uses them passes someone else's text to Claude.
Direct GitHub actions
With directActions set to on, cards also get buttons that write to GitHub themselves, as your gh account.
Approveon a review request,Ready for reviewon your draft PR, andUpdate branchon your PR when its base branch has moved ahead. Others see these and they cannot be taken back, so the first press turns the row into a line naming what will be sent and as whom, such asApprove o/r#5 "Fix login" as kim — (no comment).Confirm approvesends it, as doesywhile the drawer has the keys;Cancel, or ten seconds, brings the buttons back. The focus moves toCancel, and a confirm within 300 ms of the first press is ignored, so a held Enter sends nothing.- An approval has no comment and names the commit you looked at. If new commits arrived since, it is not sent and the card says so.
Update branchmerges the base branch in and never rebases. Rerun failed CIon your PR with failing checks reruns the failed jobs of the GitHub Actions runs on its latest commit.Assign meon an issue that mentions you is sent at once, withUndofor ten seconds.- A write that fails stays on the card with GitHub's message, and its button comes back.
Nothing merges directly. Your approved PR with no checks running gets a Merge button, with directActions off too: it adds a request to your prompt to check the repository's merge methods and run gh pr merge, which you send with Enter and Claude Code asks permission to run.
Auto review
With autoReview set to on, a PR that asks for your review directly is read by Claude in the background, so the review is waiting on the card when you get to it. Until you press a button, the author sees only a 👀 reaction of yours on the PR while the review runs. That holds while autoReviewPost is pending, its default.
It uses noticeably more tokens. Each review runs a subagent that reads the diff and the code, with your CLAUDE.md, your hooks and the skills in
autoReviewSkills: tens of thousands of tokens a PR, more onopus. The card shows what each review cost, andautoReviewDailycaps how many start in a day.
- What starts one. A request made directly to you (not to a team), on a PR that is not a draft and was not opened by a bot, once
autoReviewSettleMinutes(30 minutes by default) have passed since its latest commit, counted from the commit's own time. One review runs at a time across your sessions. That 👀 tells your other machines the PR is taken, so they leave it alone; one left by a machine that stopped mid-review is taken over after an hour. Requests made before you turned it on and PRs over 50 files or 2,000 changed lines are reviewed too, unlessautoReviewBacklogorautoReviewLargeisoff. TheAuto reviewbutton atop the To review tab turns it on and off for every session; once it has been pressed,autoReviewin/configno longer changes anything. Nothing runs while nothing is due: no model is asked and no agent started. - Setup. The first time the
Auto reviewbutton turns it on, a setup request goes into your prompt: each auto review setting but on and off, which stays with the button, with what it does, what it takes, its default and its value now. Press Enter and Claude goes through them with you one at a time and writes what you choose where/configkeeps them; they apply from the next session./review-inbox auto-review-configputs the same request in at any time. - Which session runs them. The session where you turn on the
Auto reviewbutton starts the reviews on this machine, and the warning before it turns on says so. Run/review-inbox auto-review-herein another session to move them there, or/review-inbox auto-review-anywhereto let any session start them. While that session is closed, queued PRs wait and their cards say so. - What it reads. The reviewer gets read-only tools (
Read,Grep,Glob) and no shell. The mod writes the PR's diff, and for a re-request the diff since your last review, into a run folder; when it knows the repository's folder (the one the next-step buttons use) it also checks out the head commit there as a detached worktree, removed when the review is stored. - How it reviews. The reviewer gets the mod's own rules for reviewing and writing, whatever skills and instructions you set. It checks each finding against the code again before keeping it, turns what it cannot confirm into a question, and grades findings by what merging would cost: blocker, major, minor, nit. It writes for someone reading the code for the first time: the verdict first, with no greeting, and a word on what the change does well only when something stands out; each finding a short paragraph on what goes wrong and what must be decided or hold, leaving how the code works inside and how to fix it to the author; no file or line in a comment that already sits on that code; and nothing about how it checked. It approves when nothing blocks merging, minor and nit findings included.
autoReviewInstructionswins over these rules, and your learned review style sets only the tone. - What it writes. The result goes to GitHub as your pending review, which only you can see: comments on the lines they are about, and anything outside the diff in the review body, grouped by severity. Each finding opens with its severity and conclusion in bold, with the reason on the line below. Severities are named in the mod's language, or as
autoReviewSeverityNamessets them. The card shows the suggested verdict, the findings by severity, the top three and the cost. These cards stay with their requests, to post or discard. WithautoReviewPostatcommentorverdictit is posted as soon as it is stored and leaves the To review tab. It then shows, with its verdict, in anAuto review donegroup right below theAuto reviewbutton, so a review posted for you is not missed;Check allon its row clears the group. If GitHub refuses the post, it stays your pending review on the card. - Posting.
Post as comment,Post and approveandPost and request changes, the suggested one in color, ask on the card the way Direct GitHub actions do, then submit the pending review.Open on GitHubopens the PR's files, where you can edit it first.Refine in sessiontakes the place ofReview with Claudeand asks Claude to work on that review with you, submitting it only once you say which verdict.Discarddeletes it. These show withoutdirectActions. - New commits. A running review stops when the PR gets a new commit, is closed or merged, or stops asking for you. A rebase that changes no content moves your pending review, with your edits, to the new commit without asking Claude. Other new commits leave it where it is: the card says posting it would review code that is gone and offers
Review again. A post is refused when the PR moved since the card was drawn. - Failures. A reply that cannot be read, or a reviewer that could not read the diff, is tried once more, then the card shows why with
Try again. A review you stopped from the task list waits forTry again. One whose session closed starts again from the front of the queue.
Language
The band, the drawer, the toasts, the review request put into your prompt, and the summaries, review-style description and auto reviews the model writes all use one language.
| Code | Language |
|---|---|
en |
English |
ko |
Korean (한국어) |
ja |
Japanese (日本語) |
zh-CN |
Simplified Chinese (简体中文) |
zh-TW |
Traditional Chinese (繁體中文) |
es |
Spanish (Español) |
pt-BR |
Brazilian Portuguese (Português do Brasil) |
de |
German (Deutsch) |
fr |
French (Français) |
- A code picks that language.
auto(the default) follows Claude Code's ownlanguagesetting when it names one of these, by code, English name or its own name (ja-JP,Japanese,日本語). Otherwise it follows the system locale (LC_ALL,LC_MESSAGES, thenLANG), and otherwise English. Chinese is read as Simplified unless it is marked as Taiwan, Hong Kong, Macau or Traditional (zh-TW,zh-Hant,繁體中文), and Portuguese as Brazilian.
Summaries and the description of your review style are kept per language, so switching writes each summary, and that description, once more in the new language. Any other language falls back to English.
Languages other than English and Korean were translated with Claude and have not been checked by native speakers yet. Corrections are welcome as an issue or a pull request: each language is one file in hooks/locales/, and the English table, which every other table follows, is in hooks/i18n.ts.
What it reads and runs
The mod reaches GitHub only through your own gh, sends PR text to Claude to write the summaries and, once a week, your own review comments to describe your style, and writes only to its own cache folder. Below is each thing it touches and why; it matches what claude plugin validate . lists for the mod. With autoReview on it also asks Claude to review PRs, stores each review on GitHub as your pending review or posts it as autoReviewPost says, and adds a worktree to the repository's folder while a review runs.
- Runs
gh:gh api graphqlfor the lists and, once a week, for your recent review comments;gh api repos/<owner>/<repo>/compare/<from>...<to>for a re-requested PR, andgh auth token -u <githubUser>whengithubUseris set. For the Notifications tab it runsgh api notifications, andgh api -X DELETE notifications/threads/<id>(with/subscriptionfirst for Unsubscribe) when you pressDoneorUnsubscribe. WithdirectActionson, a button you press runsgh api userfor your account name andgh api repos/<owner>/<repo>/pulls/<n>to read the head commit, then one ofgh api -X POST …/pulls/<n>/reviews(event=APPROVE,commit_id),gh pr ready,gh api -X PUT …/pulls/<n>/update-branch,gh api …/actions/runs?head_sha=<sha>&status=failurewithgh api -X POST …/actions/runs/<id>/rerun-failed-jobs, orgh api -X POST/-X DELETE …/issues/<n>/assignees. WithautoReviewon, it runsgh api …/pulls/<n>/reviewsand…/pulls/<n>/filesbefore and after each review,gh pr diff, andgh api -X POST …/pulls/<n>/reviewswith the review on its stdin to store it as your pending review; carrying it to a new commit reads…/reviews/<id>and…/reviews/<id>/commentsand runsgh api -X DELETE …/reviews/<id>before creating it again. Around each review it adds and removes that 👀 withgh api -i -X POST …/issues/<n>/reactions(content=eyes) andgh api -X DELETE …/issues/<n>/reactions/<id>. The card's buttons rungh api -X POST …/reviews/<id>/events(event=COMMENT,APPROVEorREQUEST_CHANGES) orgh api -X DELETE …/reviews/<id>, after reading the head commit. WithautoReviewPostatcommentorverdict, it runs the same call on the review it stored, right after storing it. The mod makes no other network calls of its own. - Runs
gitin the session's folder every 30 seconds:git branch --show-currentandgit remote -v, to find a session on your PR's branch, andgit rev-parse --path-format=absolute --git-common-dir, to remember the main folder of that repository. WithautoReviewon and the repository's folder known, it runsgit fetch origin pull/<n>/headandgit worktree add --detachthere for each review, andgit worktree remove --forcewhen the review ends. - Asks Claude (the
sonnetmodel) for each summary, sending a PR's repository name, title, description (first 12,000 characters), changed file paths (up to 80) and size; for a re-requested PR, also the first line of each commit message and up to 60 file paths since your last review. This counts against your Claude Code usage. Each PR is summarized once per head commit and language; a summary that fails is tried at most three times per commit. Once a week it also sends your own review comments on up to 30 PRs you recently reviewed, each cut to 500 characters, at most 60 of them and 12,000 characters in all, to describe your review style; with fewer than five, nothing is sent. - Starts a subagent only with
autoReviewon: oneauto-reviewerat a time, onautoReviewModel, and withautoReviewVerifyon a second one that checks its findings, with read-only tools, your CLAUDE.md, hooks andautoReviewSkills. It counts against your Claude Code usage. Its agent type is kept out of the list your own Claude chooses from. Stopping it usesTaskStop. - Writes files only in its cache folder,
~/.claude/plugins/data/review-inbox(CLAUDE_CONFIG_DIRtakes the place of~/.claudewhen set).inbox-<hash>-f<n>.jsonholds the lists and summaries;hidden-<hash>.jsonholds hidden PRs;notes-<hash>.jsonholds your notes and snoozes, one file per account and scope whatever the language;sessions.jsonholds each live session's folder name, release of the mod, branch, GitHub remotes and the PR links its prompts held, for every account;repos.jsonholds the main folder of each GitHub repository a session has run in, for the next-step buttons;style-<hash>.jsonholds the description of your review style.autoreview-<hash>.jsonholds each PR's place in auto review and its last result, andruns/the run folders, removed withrm -rfwhen a review ends. Each file is written beside itself and moved into place withmv, so a session never reads half of one; where there is nomv, as on Windows, it is written in place. It readsactions.jsonthere if you made one, and never writes it. - Reads environment variables:
CLAUDE_CONFIG_DIR,HOMEandUSERPROFILEto find that folder;GH_REPOto know this session's repository, asghdoes;LC_ALL,LC_MESSAGESandLANGonly whenlanguageisauto. It sets none. - Reads Claude Code settings: the
languagekey only whenlanguageisauto, and theprefersReducedMotionkey only whenmotionisauto. - Reads and fills your prompt only around the drawer: it reads the draft when the drawer opens, to mark the PRs it already asks for, and when the drawer closes it adds the requests for the PRs you added, on new lines after the draft.
How it works
All your open sessions share one fetch: one session asks GitHub at most every 10 minutes, and the others read what it saved.
Every open Claude Code session runs the mod, but they share one cache file per account, scope and language, and so do hidden PRs. Each session reads it every 30 seconds. Only the session that finds it older than 10 minutes and wins a short claim calls GitHub, so ten open sessions make one request. The fetching session renews its claim while it works; a claim not renewed for 3 minutes is taken over. A failed fetch keeps the last good lists and is retried after a minute. ↻ in the drawer fetches right away.
One GraphQL search returns every PR waiting for your review with what the cards need, and one more request with three searches fills My PRs and Assigned & mentioned. References come from the cross-reference events on the PRs and issues you authored. GitHub does not update an item's updatedAt when something references it, so items touched in the last 60 days are checked for references made in the last 30, 50 items per request. If GitHub refuses the reference search (it has a per-query resource limit), the last references are kept and the other tabs still update.
refreshMinutes changes those 10 minutes.
Limits
- At most 100 PRs waiting for your review, in GitHub's best-match order. The other tabs read up to 100 of your open PRs, 100 assigned and 100 mentioning issues, and references from up to 500 recently touched items, each newest activity first. When a list has more than that, its count reads
100+. Each list is read 25 at a time (references 100, as their items are small), each list shows as soon as it arrives, and a page GitHub times out on is asked again at half the size, so a busy account stays inside GitHub's time limit. - A saved search shows its 20 most recently updated matches; its count is GitHub's total for the search.
- The Notifications tab reads up to 100 notifications from the last 30 days, and asks no more often than GitHub's poll interval allows.
- A reference to an item you have not touched in 60 days is missed.
New reviewclears on any new commit to the PR, including one made by GitHub's "Update branch" button or by a bot.- After a force-push that rewrote the commit you reviewed, a re-requested PR shows no "since my last review" line.
- Your review style is learned from the PRs GitHub's search returns for
reviewed-by:@me -author:@me, withinscope, so comments on PRs you wrote yourself are left out. Comments in a PR's conversation, outside a review, are not part of it. Rerun failed CIreruns GitHub Actions only; checks from other CI services are rerun on their own site. Approving several PRs at once and approving with a comment are not offered.- Auto review reviews the PR as it is on GitHub; it does not run tests or builds. A carried review moves only when every file's patch is the same, so a rebase onto a base that changed the same files is reviewed again.
- A review held back by
autoReviewDailyalso holds back a carry to a new commit.rm -rfis POSIX only, so on Windows without WSL a run folder stays in the cache folder.
Troubleshooting
- The drawer shows a
gherror. Rungh auth status. With several accounts logged in, setgithubUser. The mod retries every minute. - The band does not appear. It shows only when something needs you; zeros are left out.
- The language is not the one you expected. Set
languageto a language code in/configinstead ofauto. - Something else. Start Claude Code with
claude --debug; lines from this mod begin withreview-inbox:.
Development
claude plugin validate .
claude plugin test .
claude --plugin-dir .
claude plugin validate and claude plugin test need no login, and CI runs both on the tested Claude Code build. tsconfig.json extends .claude-plugin/types/tsconfig.json, which Claude Code writes (and .gitignore excludes) the first time it loads the mod from this folder, so run claude --plugin-dir . once before type-checking with tsc -p ..
Support
If Review Inbox saves you time, you can buy me a coffee ☕ — it helps keep the project going. Thank you!
License
Yorumlar (0)
Yorum birakmak icin giris yap.
Yorum birakSonuc bulunamadi