We can't find the internet
Attempting to reconnect
Something went wrong!
Hang in there while we get back on track
The Claude Code team's review pipeline
Addy Osmani shared a write-up of how the Claude Code team reviews code. Claude writes about 90% of Claude Code. From June to September, merged PRs more than doubled while the share of PRs that had to be reverted fell by more than 40% . The team still reviews code. Review now happens continuously while the code is written, so Claude has usually reviewed and corrected a change at least once before a human looks at it . Their goal is for most PRs to merge with at most one person in the loop, and they treat revert and incident rates as a guardrail .
Patterns you can copy:
- Ask for proof before opening a PR. Have Claude run something, such as tests, the build, or a screenshot compared with the design: "Instead of saying the task is done, we ask it to show us the result." Then a subagent with fresh context reviews the diff. Many team members also run their own skills for bug hunting, shrinking the diff, end-to-end validation and checking UI against design guidelines . Boris Cherny estimates a verification process improves output quality by 2–3× .
-
Fix repeated findings at the source. If the reviewer keeps flagging the same issue, change the skill, add a lint rule, or update the docs. Keep
CLAUDE.mdshort, since it is loaded into every review. InREVIEW.md, owners say what counts as failure, limit nitpicking, list paths to ignore, require file and line references, and ask for a top-level summary that includes a count and a clear "no issues" when there are none . -
Filter findings with several agents. Agents hunt for bugs in parallel. A separate vote keeps only findings with enough support, and findings that are only about style or cleanup are dropped. The team A/B tested these filters on its own PRs. Comments are labeled Important, Nit or Pre-existing . These features ship as Code Review for Claude Code on Team and Enterprise plans, with a lighter local
/code-review. Since the preview, the share of internal PRs getting substantive comments rose from 16% to 54% . - Cap review loops. One PR went back and forth between agent author and agent reviewer more than 50 times overnight. About 59% of what the reviewer kept flagging was code that had been there since the first pass . The fix: after three cycles, the reviewer asks the author to rethink the approach. Later rounds look only at the diff, name the class of bug, and don't repeat findings already reported .
- Set human review by the change's risk, not the author. Classifiers decide the risk level. Sensitive paths and CI workflow files always need another approval. Agent approvals don't count as human approvals, and approval must be given again after untrusted commits .
- Use past incidents as the eval set. The review system is tested daily against a collection of PRs that caused incidents. Noise is measured by how people respond to each comment .
Humans still decide whether to build something, audit dangerous code like billing and CI, review architecture, check the evidence, and answer for every change . On the same theme, Theo posted: "If you're still merging most PRs by hand, you're behind" . Armin Ronacher polled whether people still write more than 20% of their code by hand. He reads the results so far as showing the base is "divided" .
Theo: Opus fixes UI, and the hallucination record of another model
Robin Ebers criticized T3 Code's fonts, border radius, icons and font hierarchy, and pointed to Capy as inspiration . Theo asked whether he could turn the UI into "a hill climb for Opus" . He opened pingdotgg/t3code#24837 , later posted "Holy shit it worked" , and called Opus 5.5 "the greatest model of all time" . After a few hours on the build, he said he hadn't realized how much better a cleaned-up design would feel . If you have a vague design complaint, try turning it into a goal the model can iterate toward.
He also ran a thread on an Ubuntu machine that drove an iOS simulator on a Mac mini connected through T3 Code. He calls it "the best iOS dev experience I've ever had" .
Theo's council skill has models review each other's work. He now lists specific Gemini hallucinations from one run: a line number (line 173 cited in a 72-line file), IP addresses, command arguments, and function exports and returns . He calls it "a straight up liability in your stack" . These are his own observations, not a benchmark.
LangChain's OpenSWE: identity and sandbox design
LangChain's engineering agent, OpenSWE, drafts PRs and reviews every PR . When you message it, it acts as you and opens PRs under your GitHub handle. When it reviews in the background, it uses its own GitHub App identity . It picks a sandbox base image based on the channel or user. It runs outside the sandbox and executes code inside it, using a secret proxy to reach authenticated services . A new PR automatically triggers a review .
Shorter notes
- Compaction (antirez). Salvatore Sanfilippo disagrees with commenters who say you should never reach context compaction. He says compaction comes up less often for him, and models are less disoriented afterward with Astra and especially Opus 5.5. The model now has an explicit tool to search the session's JSONL log; before, he had to tell it to look there .
- Spending (antirez). He had switched his Anthropic plan from 20x to 5x by accident and, using Opus 5.5 heavily, never hit the weekly limit, so he kept it . He argues for flat subscriptions, for example a €200 reimbursement per employee, over paying API rates . He also argues that agents give the most leverage to developers with product vision who steer a project at a high level .
- Ramp-up prompt (TheStandup). On a new codebase, ask the AI to find the relevant repos, explain why something behaves the way it does, and read the commits to trace the original decision. One host says this covers "at least a good 80%" of the questions that slow onboarding .
- Keep your data portable. A user said Grok Bot deleted weeks to months of work for him and others . Kent C. Dodds responded by recommending Kody, which keeps your work outside any one walled garden so you can switch agents without a migration .
- Sanfilippo argues coding agents amplify product and project judgment: developers who can maintain a high-level product vision and steer project concepts gain more leverage than those whose strength is mainly coding line by line.
- In his own use, he says he relies heavily on Opus 5.5; after accidentally switching his Anthropic plan from 20x to 5x, he never reached the weekly usage limit and kept the 5x tier. He recommends favoring flat subscriptions over metered API spending and suggests reimbursing workers for AI access, including a proposed €200 reimbursement.
- For enterprise spending, he describes Accenture’s reported arrangement as $29 baseline access, with larger developer token budgets approved for specific projects; he says this helps curb indiscriminate use and allows AI costs to be charged to clients on fixed-price contracts.
- From June to September, Claude Code’s team more than doubled merged PR volume while reducing the share of PRs that had to be reverted by over 40%; they moved review into the coding workflow so Claude catches routine bugs before human review.
- Before opening a PR, ask Claude to demonstrate runnable evidence—such as tests, a build, or a screenshot compared with the design—then have a fresh-context subagent review the diff. The team also uses bug-hunting, diff-reduction, end-to-end validation, and UI-guideline skills; Claude Code creator Boris Cherny estimates verification can improve output quality two- to threefold.
-
Put review expectations in concise project guidance: keep
CLAUDE.mdfocused on stack, conventions, goals, and non-goals; useREVIEW.mdto define failure modes, ignored paths, and requirements such as file-and-line references and a top-level summary. Claude reviews every PR; parallel agents hunt for bugs and a separate vote filters findings, while style and cleanup findings are suppressed. - Bound agent review loops: after three cycles, ask the author to reassess the approach; later reviews should focus on the diff, specify bug classes, and avoid repeating known findings. Keep humans responsible for dangerous code, architecture, verifying evidence, and ownership of shipped changes.
For local-model evaluation, Nick Reese says his team tuned a 4× AMD R9700 server on 100 real jobs from USA Arms and achieved almost 9× more correct answers per hour; the post does not specify a comparison baseline for that improvement. Reese says relying on popular TPS benchmarks would have cost them a third of their work. The post does not identify the jobs as coding tasks.
Against commenters’ claim that a coding agent should never need context compaction, Salvatore Sanfilippo says it happens less often in his experience and post-compaction disorientation has improved; he specifically cites Opus 5.5. He says the model now has an explicit tool to search the conversation’s JSONL—whereas he previously had to tell it to inspect the log—and learns to use past context.
- A practical codebase-ramp-up prompt discussed: ask AI to find relevant repos, explain why a behavior exists, and inspect commits to trace the original decision; one participant says this can resolve “at least a good 80%” of questions that otherwise slow onboarding. They also suggest asking AI to explain unfamiliar bespoke technology.
- For coding-agent systems, consider agent-to-agent communication, testing, and compiler feedback as potential bottlenecks: a participant expects slower links to constrain improvement and create unevenly advancing pockets, while presenting this as a likely pattern to study rather than a proven result.
Dodds used his Grok bot to build a Kody PWA for plunking out choir notes, hosted on Kody with a custom domain; he says he likes being able to customize it to exactly what he wants. He says the app can be forked and changed, and also describes having the bot make a sacrament-meeting app to help his young children focus on the Savior.
Riley Brown says Anthropic models stopped his AI workflow for cutting a cybersecurity video, returning “can't continue”; he attributes the failure to the video's topic. This is a firsthand model-reliability caveat, but the reported task was video editing rather than coding-agent use.
Kent C. Dodds recommends @kodykoala to keep agent work outside a walled garden, so developers can switch their preferred agent without migration; he made the recommendation in response to reports that Grok Bot had deleted weeks or months of users’ work .
T3 Code Nightly shipped a broken update; affected users were told to revert to Stable while a fix was prepared. Stable was unaffected, and the issue was client-side/UI-only, with no data loss or remote-server impact. The fixed Nightly build was available by redownloading from the Nightly channel.
Theo calls Opus 5.5 “the greatest model of all time” and says he is still struggling to find its ceiling, a strong positive firsthand assessment without a specific coding workflow or benchmark.
Theo’s council skill reviews work with various models and includes a “Gemini the jester” section; he says Gemini hallucinated in over 80% of runs. In one reported run, Gemini fabricated line numbers (including line 173 in a 72-line file), IP addresses, command or script arguments, and function exports and returns.
Armin Ronacher's poll asked whether people still write more than 20% of code by hand; he said results so far across Twitter, Bluesky, and Mastodon showed a clearly divided base. He acknowledged concerns about small samples and shared an updated graph with more respondents, while noting that polling on Bluesky was harder because it lacks a poll feature.
Theo said T3 Code had roughly matched Codex’s “28 days of improvements” pace, with at least one solid improvement each day of the month, and set a goal of shipping one meaningful T3 Code improvement daily. He later said the one-per-day commitment was slowing releases despite having five changes he wanted to ship, and considered dropping multiple updates in one day.
Theo proposed turning T3 Code’s UI into a “hill climb for Opus,” an agent-driven interface-improvement challenge, alongside Robin Ebers’ critique that the fonts, border radius, icons, and font hierarchy kept him reinstalling the app; Robin suggested a UI/UX designer and cited Capy as clean inspiration. Theo later said it seemed to be working, and described Ebers’ PR as improving.
Theo used T3 Code to connect his Ubuntu/T3OS computer to a Mac mini running the iOS simulator, and called it his best iOS development experience; he said the setup also works on regular Ubuntu.
Theo’s setup used an Ubuntu computer with an iOS simulator running on a Mac mini connected via T3 Code; he called it his best iOS development experience . He also says the device simulator works fully on iOS and describes testing the Duo simulator remotely while using a Duo .
DHH says RAWmakase handled his Japan and China family-photo edits, with his Lightroom presets working and only minor issues left; he judged it 97% ready and said he could drop Adobe Creative Suite . RAWmakase’s developer reports that agents made minimal progress on highlights/shadows parity research and were going in circles, prompting consideration of a different approach or waiting for Opus 6.5 .
- LangChain’s OpenSWE drafts PRs and reviews all PRs; it listens for newly created PRs to trigger background reviews. When a user messages it, it opens PRs as that user; background reviews use its own GitHub App identity.
- OpenSWE runs code in a sandbox, selecting a base image based on the channel or user; LangChain uses a secret proxy so sandboxed code can securely reach authenticated services.
Theo said T3 Code’s search overhaul aimed to make results more relevant, forgiving, recent, and clear . He said the team had pretty much kept pace with Codex’s “28 days of improvements” by shipping at least one solid improvement each day that month, and planned to continue aiming for one meaningful T3 Code improvement daily .
How the Claude Code team does code review

We previously mentioned that Claude writes about 90 percent of the code for Claude Code. So how do we do code review at this scale? Who reads code anyway? What happens if code goes wrong?
This post describes our team’s code review process at Claude Code and how we have improved it. Between June and September, we saw more than double the number of pull requests that were merged to the codebase for Claude Code, while the share of pull requests that had to be reverted fell by more than 40 percent.
We didn’t stop doing code review. Instead, we’ve automated the majority of reading and tuned it to optimize for human time and effort. We’ve also made significant investments into improving the speed and ease of reverting mistakes.
Rethinking the goal of code review
With agents writing code, the volume of changes increases rapidly. In our monorepo, we went from approximately 2,500 changes merging each day in May to over 30,000 (opens in new tab) in September of this year.
While Claude Code is not in our monorepo, it has a lot of pressure on it as well. When you’re moving fast like that, it becomes increasingly hard, if not impossible, to do code review manually, line by line.
Code review serves two purposes:
Detect and correct bugs before they ship
Develop a shared understanding of the codebase
While this article focuses primarily on the first goal, we’ll discuss the second goal toward the end of the post.
We view “did someone read the code?” as an imprecise measure of “what could go wrong with this change, and what check - automated or human - is the right one to catch it?”
This question also changed the timing of code review. Traditionally, code review was a check performed after the fact, when the code was written, the PR was filed, and someone waited for someone else to take a look. Instead, we’ve integrated code review into the workflow. It’s more like a spellcheck that you continuously do while writing.
The majority of changes have already been reviewed and corrected by Claude, at least once, before a human is asked to take a look. In this way, we catch most of the routine bugs and reserve human attention for more high-level considerations.
Human time and attention
We want to reserve human time and attention for things only humans can handle, while making sure we have enough automation to cover the rest. Even at our current pace, there is still an incredible amount of work for humans to do, and our team is encountering new and novel challenges almost every day.
For this reason, human time is a dual-sided cost. Not only do we count the time people spend doing code review, but also the time that they spend fixing bugs that are introduced by bad code. If we reduce the first without reducing the second, we’re not really saving human time.
So, our goal is that the majority of pull requests in our Claude Code repos (the CLI, the desktop and web apps, and the mobile apps) should merge with a maximum of one person in the loop (who could be the author) without an increase in reverts or incidents.
We track our human time in terms of median human approvals per PR (along with the 95th percentile), the number of human comments, and how long a PR waits on a person. We use the revert and incident rates as a guardrail: if these metrics increase, we haven’t reduced human time, just relocated it.
What’s the journey of a change?
A typical change, whether it’s from an engineer’s laptop or a Claude session in Slack, goes through multiple layers of review.

Above is the typical Claude Code change, from the author’s environment to production. Most of this process is automated, with human attention focused on the risky part.
We have six layers of checks with a rollback mechanism to handle any issues that get through.

Each layer catches some bugs while missing others. Few bugs get through all of the layers, and if some do, we have a rollback mechanism in place.
1.Pre-PR verification:
Most of our review is done before we create a PR. We ask Claude to do something runnable, such as running tests, the build, or comparing a screenshot to the design. Instead of saying the task is done, we ask it to show us the result. Then, a subagent reviews the diff with fresh context. Both these strategies are part of our guide to best practices (opens in new tab).
Before opening a PR, many of us also run a handful of internal skills – bug hunting, diff reduction, end-to-end validation, and checking our UI changes against our design guidelines.
According to Boris Cherny, who created Claude Code, equipping Claude with a verification process (opens in new tab) is probably the biggest key to higher quality outcomes.
He estimates that a verification process improves the quality of Claude’s output by a factor of two to three.
The verification process for any given domain can be very different:
Sometimes it’s as simple as running a bash command. Sometimes it’s running a test suite. Sometimes it’s testing the app in a browser or phone simulator.
If the automated reviewer is consistently flagging the same issue, we fix it at the source – via the skill itself, a lint rule, or updating documentation files like:
CLAUDE.md – The project description file that you can use to give Claude context about the project (technology stack, conventions, goals, non-goals). Claude Code pulls this file in for every single review, so we keep it brief for large codebases and reference the rest of the documentation here. When code breaks a convention in this file, or an update makes something in it out of date, the reviewer flags it.
REVIEW.md – The file where code owners tell the reviewer what matters in their part of the code. We separately verify whether the reviewer is actually following these guidelines. Good ones are brief and focus on:
Defining project failure (the docs should not lie; the config should not misroute) Limiting nitpicking Defining ignored paths Requiring file + line reference, not guessing filenames Requiring top-level summary including count and clear statement of “no issues”
2. AI review on every pull request
Every PR receives a Claude review before a human review.
The diff is analyzed against the entire codebase and the intent of the PR as stated by the PR author. It checks that: the change actually addresses the issue the change fits into the larger system the change does not break other parts of the codebase
When reviewing a bug fix, the bot tries to find the root cause.
Our public product, Code Review for Claude Code (opens in new tab), is now available to all Team and Enterprise customers. There is a lighter version for local use as well – /code-review.
Since we released the research preview, the share of our internal PRs getting substantive review comments has gone from 16% to 54%. Code Review detects issues on the majority of PRs with more than 1,000 lines and returns clean results on most smaller PRs. Repos can be configured by admins to use Quick, Standard, or Deep modes. Deep is useful in cases where the cost of missing a single bug is higher than the time spent reviewing code.
Findings are vetted by multiple other agents before human review:
Multiple agents run in parallel to hunt for bugs
A separate vote decides if a finding is valid or a false positive, only confirming the findings that have enough votes
Findings that are only style/diagnostics/cleanup related are filtered out (we A/B tested these filters on our own PRs before rolling them out)
The remaining findings are presented as inline comments, ordered by severity level and marked as:
Important Nit Pre-existing (so we don’t unfairly penalize the author for bugs that were not introduced by the PR)
All findings must be addressed – fixed or the thread is resolved with a reason. In many cases, an agent will fix the problem overnight so the author returns to a PR that’s already been through another review pass.
3. Security review that can block
We also run an automated security review. No PR can be merged while there is still an open finding (either from the code review or the security review). The author can either fix the issue or close the thread with a short reason (how we deal with a false positive).
A finding will be auto-closed if a subsequent commit addresses the problem. You can set up the same thing with the open-source security review GitHub Action, or the /security-review command. See automated security reviews in Claude Code for a guide on how to set this up.
4. Automated checks that block
Standard checks: lint, type checks, tests on all platforms, build. (We wrote about how we scaled CI here.) A typical CLI PR can have dozens of checks run before anyone looks at it. The PR template has questions about how the change was tested and how to revert it. Claude can answer those for you, but the author is responsible for reviewing them.
5. Human approval, scaled by risk
Some changes are more risky than others (e.g. a docs fix vs. an auto-updater change), so they require different levels of review.

The tier is determined by the change, not the author. A classifier determines the risk level based on the change. Another classifier determines if a particular change actually requires another approval, even if the tier does not say it does. Some paths always require another approval – anything marked as sensitive by owners, and any CI workflow file.
Only authors on the repo’s trusted list receive relaxed review requirements, and that’s generally the team that owns the repo. All others require a second person to approve. Agent approvals don’t count as human approvals. Automated review can clear a low-risk change, but it can’t stand in for a human when one is required.
The author of the change is responsible for it, so if an agent authors a PR the operator of the agent is always counted as one of the required reviewers. A PR approval is only good for one commit. If a new commit lands that can’t be trusted (e.g. an agent pushed something, or someone resolved a merge by hand), the PR must be reapproved.
6. Merge queue, feature flags and staged rollouts
The merge queue ensures that all the checks run on main with the change applied. This prevents merging two successful PRs into a broken main. Typically, new features are rolled out behind a feature flag, with Anthropic employees getting access first. Because we use the product extensively, we often notice regressions before our users do.
When we roll out publicly, changes go to the latest channel first, and the stable channel trails behind.
7. Fast feedback and rollback
Some bad merges will inevitably make it through. This is our last line of defense, focused on identifying these as quickly as possible. Changes behind feature flags can be disabled without deploying.
Claude Code runs a weekly on-call rotation and any incident reviews involve looking back to see what layer should have caught the problem. It’s still up to the author and on-call to notice bad merges, in addition to monitoring the revert and incident dashboards. We don’t yet have circuit breaker mechanisms that adjust approval requirements based on these, but it’s something we’re looking into as we’re making progress toward less human intervention in merging.
One team member noted that slowing down and reducing output can actually improve accuracy, but that’s mostly because the amount of work being done decreases overall. Our priority is really on improving our ability to identify and correct issues quickly.
How we make the reviewer better
Our code review process is an ongoing cycle of improvement:
We use incidents as an evaluation metric. The team collected incident-causing PRs, their fix-forwards and reverts, and had the engineers who understand the codebase verify the location and correctness of each bug. The review system is evaluated daily against this collection.

Every incident adds to the collection and every change to the review system is evaluated against the entire collection.
To measure noise, we observe how humans react to the review comments. It’s easy to improve our bug-finding rate if we’re okay with reporting lots of non-bugs, so this needs to be regulated. We categorize each review comment into how the person on the PR handled it: fixed the issue, rejected it, clarified it as intentional, or decided it didn’t matter. Additionally, we run the review system on PRs we know to be clean and observe how often the system reports something that would have resulted in a harmful change.
Our stated priorities are first, detecting real bugs, and second, reducing the number of review cycles.
It’s more costly for an author to have to deal with a review comment when they’re an agent. It only takes a second for a human to dismiss a nit, but when an agent has to address it, this results in another commit, and another cycle of review.
The review process must converge. It’s possible for an agent author and an agent reviewer to cycle forever. We observed one PR in our CLI project cycle more than fifty times overnight, due to the back-and-forth between the agent author and the agent reviewer. This cycle was stopped manually, but it could have gone on indefinitely.
When we ran git blame on what the review system kept flagging, ~59% of it was code that had been there since its first pass. Essentially, the review system was rarely finding new bugs, but finding a few more old ones on each cycle.
We made this worse because we had gotten into the habit of running several review cycles by default, because each cycle can find a different bug. While it can be useful to iterate through several review cycles for a high-risk change, it’s not needed for every PR. Our team started tracking the number of cycles-to-pass in addition to recall, and updated re-review to:
Limit the number of cycles. The review system asks the author to re-evaluate the approach after three cycles. Limit re-review to just diff after the initial cycles. Specify the class of bugs, so the author can correct all of them, not just one line. Avoid re-reporting issues already observed. The review agents are also run on the current codebase overnight, helping us identify historical bugs before they propagate.

Reduction in the average number of review rounds per internal pull request after Convergence.
Humans in the loop
Having a senior engineer stop working to review a common error is an expensive process compared to automating that process. Human reviewers are still essential for some tasks:
- Should we even build this? Deciding whether or not to build something, setting the vision, taste, and goals for the product.
One team that claims they have solved the bottleneck of code review still performs human review for changes from outside the team to ensure that it is the right thing to build.
Auditing dangerous code (billing, auto-updater, CI workflows).
Architecture review, because those choices set the conventions others follow.
Verifying proofs (test output, commands run, screenshots, reviewer comments). If you can’t describe what the checks would miss, don’t ask for a 👍, you need a real review!
Taking responsibility. A person answers for every change that ships, whoever typed it.
Team context
Code review has always served the dual purpose of communicating codebase changes. Reading the diff of a colleague’s change is how people usually understand what has changed, and how the codebase works. If the bulk of the reading is done by machines, what becomes the way to learn the codebase?
We don’t have any formal mechanism for this. No member of the team has a full mental model of Claude Code in their head, nor do we think anyone needs to. Rather, when anyone wants to learn about a piece of the codebase, they ask Claude to generate an explainer about that exact slice. It only takes a few minutes and the explainer is always up to date.

For some of us, we go the extra step and have Claude generate a mini artifact that visualizes this area and teaches it in our preferred style.
This is a better way to focus our human attention than reading trivial diffs line by line, which teaches you very little (e.g. a one-line copy change). Creating an explainer about the module you’re going to change teaches you a lot.
Plus, we’re generally open by default, working in open Slack channels, and seeing what others are building as they build it.
“You land it, you own it”
If you merge a small or medium change, and something still goes wrong, the general expectation is that you usually fix it yourself. There are a few reasons why this doesn’t spiral out of control:
Small changes that are easy to review, debug, and revert.
Everything can be reverted. Feature flags, reverts, and staged rollouts can reverse most mistakes in minutes.
Blast radius sets the bar. More expensive code gets more eyes and validation.
Regressions are surfaced quickly by telemetry and internal usage.
It’s not a blame game. The person who fixes the issue owns it because they have the most context. Incident reviews consider the system.
Plus, much of the team shares responsibilities by working in open channels. Anyone can see what others are building, join in on the conversation, or have Claude look for gaps. Feedback also comes from non-code owners. That openness is a big part of why quality stays high without a gate on every line.
Changing course
With agents, it is cheap to start new work, but sometimes you shouldn’t. This typically arises when someone in the channel calls out the proposed change as an invalid path (citing previous decisions or suggesting a better path), and the author either closes the PR or changes the implementation.
Because it was easy to write the code in the first place, it doesn’t feel like a loss to close the PR. The key is to pivot early in the thread, instead of waiting until the end to make a blocking comment on a finalized PR.
How to implement
Most of the components of this approach are already available to your team.
Before the pull request
Give the agent a checklist of checks it can run. List these checks in a short CLAUDE.md file
Set up the agent to call formatters and linters via hooks
Run /code-review and /security-review locally or have a new-context subagent review the changes
Create a REVIEW.md, and use it to track recurring review issues
On every pull request
Enforce CI
Update your PR template with “Testing”, “Risk” and “How to revert”
On one repo, add an AI reviewer (Code Review for Claude Code, or the Claude Code GitHub Action), and iterate on your REVIEW.md for a few weeks before rolling it out to more repos.
Add an automated security review
Require that all review threads be resolved before merging
Apply review rigor according to risk: a quick pass for routine changes, and a thorough review for high-risk areas (where bugs are expensive). Code Review has Quick, Standard and Deep levels.
Limit the number of review rounds, and after a few rounds, just review the new diff.
Approval
Define risk levels, which are set based on the change, not the author. Start strict, and progressively relax as you see evidence.
Reserve lenient approval paths for trusted authors.
Bot approvals cannot be used to satisfy a required approval. Dismiss any approvals when new commits are pushed.
Designate humans as the approvers for code and policies controlling auth, billing, CI, and release workflows, as well as installers. Use CODEOWNERS and branch protection for this.
Merging and post-merge
Set up a merge queue
Experiment with feature flags
Launch to internal users first
Roll out in stages
Create a one-step revert mechanism
Build a set of evals by logging incidents and reverts
Rescore the reviewer any time you change its prompts, tools or model
Track human effort, using reverts and incident rates as guardrails
Where this is headed
Code Review was announced with the intention that the final approval decision would still be made by a human. All the product does is post its findings. But in our own repos, we are going further: Owners are deciding which low-risk changes can be merged automatically when the automated checks pass. And this boundary will continue to evolve.
So whenever our reviewers miss something, we ask ourselves what wasn’t in the model’s context, and turn that into a CLAUDE.md file, a skill or a new check. And we haven’t changed our goal: To reduce the amount of human effort per change while keeping our revert rate no higher than it is now.
So if you also allow agents to create pull requests, please let us know what checks you’ve automated, what requires a human, and what we’re getting wrong.
A rewrite of our original article (opens in new tab) and checked with Pangram.
- From June to September, Claude Code’s team more than doubled merged PR volume while reducing the share of PRs that had to be reverted by over 40%; they moved review into the coding workflow so Claude catches routine bugs before human review.
- Before opening a PR, ask Claude to demonstrate runnable evidence—such as tests, a build, or a screenshot compared with the design—then have a fresh-context subagent review the diff. The team also uses bug-hunting, diff-reduction, end-to-end validation, and UI-guideline skills; Claude Code creator Boris Cherny estimates verification can improve output quality two- to threefold.
-
Put review expectations in concise project guidance: keep
CLAUDE.mdfocused on stack, conventions, goals, and non-goals; useREVIEW.mdto define failure modes, ignored paths, and requirements such as file-and-line references and a top-level summary. Claude reviews every PR; parallel agents hunt for bugs and a separate vote filters findings, while style and cleanup findings are suppressed. - Bound agent review loops: after three cycles, ask the author to reassess the approach; later reviews should focus on the diff, specify bug classes, and avoid repeating known findings. Keep humans responsible for dangerous code, architecture, verifying evidence, and ownership of shipped changes.