Read and request reviews on a pull request changedcode-review-pull-requests
Nearest release: v2.1.305, published under an hour after upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 20 Oct 2026 18:36 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 20 Oct 2026 18:37 UTC.
Upstream edited
Recorded here
Lines+33added
Lines−32removed
From line
6
where the diff opens
First seen
15 Oct 2026
this site's first read of the page
Recorded edits5to this page, all time
The whole hunk
from line 6, old and new numbered
/
from line 6
66
77An Owner controls [when reviews run](/docs/en/code-review-setup#set-when-reviews-run) and [how thorough they are](/docs/en/code-review-setup#set-the-default-review-level) for each repository.
88
9<Note>
10 If your plan doesn't include Code Review, you can still have Claude review your branch from a Claude Code session: see [Review locally with `/code-review`](/docs/en/code-review-local).
11</Note>
9> [!NOTE]
10>
11> If your plan doesn't include Code Review, you can still have Claude review your branch from a Claude Code session: see [Review locally with `/code-review`](/docs/en/code-review-local).
1212
1313## Severity levels
1414
from line 53
5353
5454To gate a merge or post a summary from your own CI, parse the last line of the Details text with `gh` and jq. That line is a machine-readable comment.
5555
56<Steps>
57 <Step title="Find the check run ID">
58 From your shell, list the commit's check runs and take the `id` of the `Claude Code Review` run. Replace `OWNER` and `REPO` with your repository owner and name, and `<commit-sha>` with the pull request's head commit:
56**1. Find the check run ID**
5957
60 ```bash theme={null}
61 gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'
62 ```
63 </Step>
58From your shell, list the commit's check runs and take the `id` of the `Claude Code Review` run. Replace `OWNER` and `REPO` with your repository owner and name, and `<commit-sha>` with the pull request's head commit:
6459
65 <Step title="Read the severity counts">
66 Read the counts from that check run, replacing `CHECK_RUN_ID` with the ID:
60```bash theme={null}
61gh api repos/OWNER/REPO/commits/<commit-sha>/check-runs --jq '.check_runs[] | {id, name}'
62```
6763
68 ```bash theme={null}
69 gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \
70 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'
71 ```
64**2. Read the severity counts**
7265
73 This prints a JSON object with a count per severity and its keys in alphabetical order, for example `{"nit": 1, "normal": 2, "pre_existing": 0}`. The counts include findings from earlier reviews of the pull request whose threads are still open.
74 </Step>
66Read the counts from that check run, replacing `CHECK_RUN_ID` with the ID:
7567
76 <Step title="Act on the result">
77 Have your script handle these cases:
68```bash theme={null}
69gh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID \
70 --jq '.output.text | split("bughunter-severity: ")[1] | split(" -->")[0] | fromjson'
71```
7872
79 * **`normal` is above zero**: fail the job if you want to gate the merge. The `normal` key holds the count of Important findings, so Claude found at least one bug worth fixing before merge.
80 * **The line is missing**: treat it as no verdict rather than as zero findings. A check run for a review that failed, timed out, was canceled, or was superseded by a newer one has no such line, and some completed reviews have none either.
81 </Step>
82</Steps>
73This prints a JSON object with a count per severity and its keys in alphabetical order, for example `{"nit": 1, "normal": 2, "pre_existing": 0}`. The counts include findings from earlier reviews of the pull request whose threads are still open.
8374
75**3. Act on the result**
76
77Have your script handle these cases:
78
79* **`normal` is above zero**: fail the job if you want to gate the merge. The `normal` key holds the count of Important findings, so Claude found at least one bug worth fixing before merge.
80* **The line is missing**: treat it as no verdict rather than as zero findings. A check run for a review that failed, timed out, was canceled, or was superseded by a newer one has no such line, and some completed reviews have none either.
81
8482## Request a review
8583
8684If your pull request is a draft or comes from a fork, automatic reviews skip it, so [request the review with a comment command](#review-drafts-and-pull-requests-from-forks). To get a review on your pull request, do one of these:
from line 95
9795
9896| Command | What it does | When to use it |
9997| :- | :- | :- |
100| `@claude review` | Starts a single review without subscribing the PR to future pushes | You want one review now, such as on a pull request in a repository set to Manual, or another review right away in the other modes |
101| `@claude review always` | Starts a review and subscribes the PR to push-triggered reviews going forward | You want every subsequent push to start a fresh review, such as on a high-priority PR in a repository set to Manual |
98| `@claude review` | Starts a single review without subscribing the PR to future pushes | You want one review now, such as on a pull request in a repository set to **Manual**, or another review right away in the other modes |
99| `@claude review always` | Starts a review and subscribes the PR to push-triggered reviews going forward | You want every subsequent push to start a fresh review, such as on a high-priority PR in a repository set to **Manual** |
102100| `@claude review once` | Same as `@claude review`: starts a single review without subscribing | The same cases as `@claude review` |
101| `@claude review stop` | Ends the PR's subscription to push-triggered reviews, without starting a review or canceling one that's already running. Claude replies with a comment instead of a check run. | You subscribed a PR with `@claude review always` in a repository set to **Manual** or **Once after PR creation**, and no longer want each push to start a review |
103102
104For any of these commands to start a review, all of these conditions have to hold:
103In a repository set to **After every push**, you can't stop reviews with a comment, because pushes there start reviews with or without a subscription. To pause reviews on one pull request there, convert it to a draft.
105104
105For any comment command to take effect, all of these conditions have to hold:
106
106107* Post it as a new top-level pull request comment, not an inline comment on a diff line and not the body of a review. Editing an earlier comment doesn't count.
107* Put the command at the start of the comment, with `always` on the same line as the rest of the command. Capitalization doesn't matter.
108* Put the whole command on one line at the start of the comment. Other text can follow it. If `always` or `stop` is misspelled or on a later line, Claude reads the comment as a plain `@claude review` and starts a single review. Capitalization doesn't matter.
108109* You need write, maintain, or admin permission on the repository. Claude checks this with GitHub for each person who comments, and comments from bots don't start reviews.
109110* The pull request must be open.
110111
111When the command is accepted, a **Claude Code Review** check run appears on the pull request with the title **Code review queued...**. The title changes to **Code review in progress...** when the review starts. Claude may also react to your comment with 👀, but that reaction can appear when no review starts, so look for the check run instead.
112When a command that starts a review is accepted, a **Claude Code Review** check run appears on the pull request with the title **Code review queued...**. The title changes to **Code review in progress...** when the review starts. Claude may also react to your comment with 👀, but that reaction can appear when no review starts, so look for the check run instead.
112113
113114If a review is already running on the pull request's latest commit, a new request doesn't start a second one.
114115
115<Note>
116 Before a July 2026 update, `@claude review` subscribed the PR to push-triggered reviews. If you relied on that behavior, comment `@claude review always` instead.
117</Note>
116> [!NOTE]
117>
118> Before a July 2026 update, `@claude review` subscribed the PR to push-triggered reviews. If you relied on that behavior, comment `@claude review always` instead.
118119
119120### What a later review covers
120121
No line in this hunk matches that.