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.Severity levels
Claude posts each finding as an inline comment on the lines concerned and marks it with one of three severity levels:
When the review recorded its reasoning, the finding has a collapsed Why this was flagged section. Expand it to read why Claude flagged the issue and how it verified the problem.
To change what Claude flags in your repository or how it ranks severity, see Customize Code Review.
Respond to findings
You can merge without responding to a finding, unless your repositoryâs own rules require it. If its branch protection requires conversation resolution, resolve each findingâs thread before you merge. To clear a finding, resolve its thread or push a fix.- Dismiss it without a code change: resolve the thread yourself on GitHub. Replying alone doesnât dismiss a finding.
- Fix the issue: change the code and push. The next review of the pull request resolves its earlier thread when it judges the issue fixed, whether that review runs automatically on your push or you request it.
- Explain or disagree: reply to the comment. Claude doesnât respond right away, and a reply doesnât start a review. The next review of the pull request reads the replies on its earlier findings, and can resolve the thread or post one follow-up reply. If the same kind of finding keeps coming back, ask a maintainer to add a rule to
REVIEW.md.
@claude review as a top-level pull request comment.
Check run output
The Details link on the Claude Code Review check run opens the findings in one table sorted by severity, including any finding whose inline comment GitHub didnât accept:
A finding that has a line but wasnât posted as an inline comment appears as an annotation in the Files changed tab, on the lines concerned. Important findings show in red, nits in yellow, and pre-existing bugs in gray.
The check run concludes as neutral, or as skipped after some pushes that change no files and keep the earlier result. It never concludes as a failure, so a finished review doesnât fail a required check. If you donât see findings, or a review didnât run, see Troubleshoot Code Review.
When a push keeps the earlier result
If the check run has one of these titles after you push, Code Review kept the result of an earlier review instead of starting a new one:- Code review skipped â no new changes: no Important finding from the earlier review is still open, so you donât need a new review
- Code review not repeated â earlier findings still open: to start a new review, push a fix for an open Important finding, or resolve its thread and push again
- The pull request still adds and removes the same lines, as after an empty commit, a clean merge of the base branch, or a clean rebase
- Nobody has resolved an Important findingâs thread since that review
@claude review or click Re-run on the check run.
Read the result from a script
To gate a merge or post a summary from your own CI, parse the last line of the Details text withgh and jq. That line is an HTML comment that holds the severity counts as JSON:
1
Find the check run ID
From your shell, list the commitâs check runs and take the If the commit has had more than one
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:Claude Code Review run, such as after a Re-run, GitHub lists only the newest.2
Read the severity counts
Read the counts from the check runâs This prints a JSON object with a count per severity and its keys in alphabetical order, for example
output.text field, which holds the Details text. Replace CHECK_RUN_ID with the ID:{"nit": 1, "normal": 2, "pre_existing": 0}. Except on a check run that kept an earlier result, the counts include findings from earlier reviews of the pull request whose threads are still open.Under the title Code review skipped â no new changes, the counts leave out nits and pre-existing findings from earlier reviews that are still open. No Important finding from the earlier review is still open then.3
Act on the result
Have your script handle these cases in order:
- The title starts with
Code review not repeated: Code Review kept an earlier result whose Important findings are still open, and the check run has no severity line. Read the title before the counts, withgh api repos/OWNER/REPO/check-runs/CHECK_RUN_ID --jq .output.title. Fail the job if you want to gate the merge. - The title ends with
no new changes: let the job pass without reading the counts normalis above zero: fail the job if you want to gate the merge. Thenormalkey holds the count of Important findings, so Claude found at least one bug worth fixing before merge. To print only that count, add| .normalbefore the closing single quote.- The line is missing: the command prints an error that contains
no severity lineinstead of counts, and exits with a non-zero status. Treat that 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.
Request a review
If your pull request is a draft or comes from a fork, automatic reviews skip it, so request the review with a comment command. To get a review on your pull request, do one of these:- Open it or mark it ready: in a repository set to Once after PR creation or After every push, a review starts when you open or reopen the pull request, or mark a draft ready for review.
- Comment a command: post
@claude reviewon the pull request. - Push a commit: a push starts a review in a repository set to After every push, or on a pull request you subscribed with
@claude review always. If your pull request still adds and removes the same lines after the push, Code Review can keep the earlier result instead. - Click Re-run: after a review fails or times out on a pull request that isnât from a fork, run it again from the check run. On a pull request that isnât from a fork, you can also click Re-run after a push that kept the earlier result.
- Wait for the automatic retry: a review whose session was interrupted is retried once automatically. The check runâs summary says when thatâs happening.
Comment commands
Post one of these commands as a comment on the pull request:
In 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 stop pushes from starting reviews on one pull request there, convert it to a draft. When you mark it ready for review again, a review starts.
For any comment command to take effect, all of these conditions have to hold:
- 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.
- Put the whole command on one line at the start of the comment. Other text can follow it. If
alwaysorstopis misspelled or on a later line, Claude reads the comment as a plain@claude reviewand starts a single review. Capitalization doesnât matter. - 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.
- The pull request must be open.
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.What a later review covers
A later review that starts on its own, such as after a push, focuses on what changed since the last review and posts fewer nits and pre-existing findings. To see whether it left findings out as a result, look in the review body for a sentence that counts them:- Findings on code that hasnât changed since the last review: the sentence ends âoutside the scope of this re-review and not postedâ
- Nits and pre-existing findings: the sentence ends âfound and not postedâ
@claude review. It covers the whole pull request again.
Review drafts and pull requests from forks
Automatic reviews skip both of these, so request the review with a comment command:- Draft pull requests: a comment command runs on a draft, so you can request a review before you mark the pull request ready. Pushes to a draft donât start reviews, even after
@claude review always. The subscription takes effect once you mark the pull request ready. - Pull requests from forks: Claude doesnât review a pull request from a fork automatically, regardless of the repositoryâs Review runs setting. To start one, comment
@claude reviewon the pull request. The conditions for comment commands still apply, and the write access you need is to the base repository, not the fork.
@claude review always works too, but doesnât subscribe the pull request to reviews on later pushes. Clicking Re-run on the check run doesnât start a review there.
Use Code Review alongside the Claude Code GitHub Action
If the repository also runs the Claude Code GitHub Action in interactive mode with its default@claude trigger phrase, an @claude review comment starts the Action as well. To keep the two apart, set the Actionâs trigger_phrase input to a different phrase.
Related resources
- Troubleshoot Code Review: a review that didnât start, failed, or was skipped for budget
- Code Review: what the service is and how a review runs
- Set up Code Review: for Owners, turn on Code Review and choose when reviews run and at what level
- Customize Code Review: change what Claude flags with
REVIEW.mdandCLAUDE.md - Code Review costs and usage: how reviews are billed and where the spend limit is set
- Review locally with
/code-review: run a review of your branch from a Claude Code session