Article
What code review has to catch once an agent is writing the code
Review that hunts for syntax errors is redundant once the compiler has caught them. What has to be hunted is decisions: a new file that should have been an extension, a dependency added quietly, and an edge case that vanished.
Once an agent writes the code, what arrives at review changes. It nearly always compiles, nearly always passes lint, and often arrives with tests attached. A reviewer walking in with the old habits — hunting a typo, commenting on a variable name — will read the change, find nothing, and approve it.
The problems have moved up a layer. They are no longer in the line but in the structure: why is this a new file, why was a library added, and why does the case we discussed in the meeting appear nowhere. Those questions need familiarity with the system, which is why on a project where an agent writes a lot, an experienced reviewer becomes more critical rather than less.
The four questions that replace the old review
What worked for us was abandoning line-by-line reading in favour of a short list of structural questions. It is faster and it catches more.
- Does something here already exist in the system under another name? The most common failure, because an agent cannot know what it has not seen.
- Was a dependency added, and what does it save? Twenty lines does not justify a package somebody maintains for years.
- Are the cases agreed in the meeting handled — especially failure states, which tend to disappear when they were not asked for explicitly.
- Do the tests assert behaviour or merely execute the code? A test that calls a function and checks no error was thrown is not a test.
The fourth surprised us most. An agent generates tests happily, and they look convincing — until you read them and find they cover the lines without asserting a single business rule. High coverage that states nothing is worse than low coverage, because it manufactures confidence with nothing under it.
Why duplication is problem number one
A developer writing a new component feels friction: they remember something similar, go looking, find it, and extend it. An agent feels nothing. If it is not told where the existing pattern lives, it will produce a new one that works perfectly — and a month later the same behaviour turns out to be defined in three places.
The effective way to reduce that is not review but what precedes it: a short conventions file describing where things live and what already exists. For us that did more than any amount of writing better instructions for an individual task, because it gets read on every task afresh.
What about large changes?
Reviewing a two-thousand-line change is an inspection nobody genuinely performs, and that was true when humans wrote them too. The difference is that an agent produces such changes far more easily, which makes discipline about task size more important rather than less.
The rule we adopted is simple: define a task so its output can be reviewed in one sitting. If the output exceeds that, it is a sign the task was two tasks. We set out the gate and the process around it in our piece on working with an agent in a team.
The comparison is not a loose metaphor. In both cases production cost collapsed, in both cases volume jumped, and in both cases what decided the outcome was whether a gate existed to determine what passed. The only difference is that in code the gate is the build, the tests and the review — and all but the last can be run automatically.
And code the agent wrote a month ago
There is a whole layer nobody reviews: code that passed review at the time and that nobody understands today. This happens with human code too, at a lower rate, because whoever wrote it remembers something. When an agent wrote it there is nobody to ask — the only memory left is what went into the commit message and the tests.
The practical consequence is that commit messages and tests matter more, not less. A message explaining why a change was made, rather than only what changed, is frequently the only documentation that survives. We require it in review, and it is one of the changes that paid for itself fastest.
What no longer needs reviewing
Some things are worth ceasing to comment on, because a machine does them better. Formatting, import order, simple naming conventions — all of that belongs to a tool rather than to a person's time. A review full of such comments trains the team to skim comments, and that is precisely when the one that matters arrives.
If you are weighing which tool to adopt, we have a comparison of Claude Code and Cursor. But the decision that matters more than the tool is what exactly counts as a finished task, and that is the team's decision rather than the vendor's.
In short
- The problems moved from the line to the structure: a new file, a new dependency, a vanished case.
- Duplication is the most common failure, because an agent feels no friction.
- A test that runs code without asserting a rule is not a test, however high the coverage.
- Anything lint can enforce should leave human review.
From our own work
On this project we added a short conventions file describing where everything lives, and the number of duplicate components created instead of extending an existing one dropped noticeably — more than any change to how individual tasks were phrased.
Reviewing auto-generated tests we found several that called a function and only confirmed no error was thrown, asserting no rule at all — it has been a standing review question for us since.
Recurring questions
How long should reviewing an agent-written change take?
Less than a normal review, if the task was scoped properly. Once you stop reading line by line and move to the four structural questions, a reasonably sized change closes in ten to twenty minutes. If it takes an hour, that is almost always a sign the task was too large to begin with rather than that the review is unusually thorough.
Can you let an agent review its own code?
You can have it read through and report, and that is useful for spotting inconsistency and repetition. What it cannot do is decide that an architectural decision is wrong, because that follows from product context it does not hold. In practice we use it as a first pass and a person makes the pass that decides.
Do team review rules need to change?
Yes, mostly by shrinking. Anything an automated tool can enforce — formatting, import order, simple naming — should leave human review and move to lint. What remains is the questions that require context, and that is also what makes the review worth the time of whoever performs it.
Sources
- Claude Code documentation — Anthropic (2026-08-10)
- Spam policies for Google web search — Google Search Central (2026-08-10)
Keep reading
Answer
Will AI replace developers — what has actually changed in the work
No, but the mix has shifted: the repetitive and survey parts shrank, and the parts requiring a decision and accountability take up more room. Demand for experienced developers went up, not down.
5 min read ·
Answer
Claude Code vs Cursor: the real difference and which to pick
The difference is not model quality but where the tool sits: Cursor is an editor with an agent inside it, and Claude Code is a terminal agent that leaves your editor beside it. That determines which tasks each one suits.
5 min read ·
Answer
Why Claude Code is considered the strongest coding tool — and when it isn't
Claude Code's central advantage is that it works across a whole repository from the terminal rather than on an open file, which suits multi-file work. For pinpoint edits that is a drawback.
5 min read ·
← Back to the cluster: Claude Code and AI-assisted development
