Lab · case study · 7 min read
Agent Review
When an agent finds a problem, the right fix isn’t always obvious. Agent Review shows the trade-offs, brings a person in for the judgment, and keeps the reasoning for the next run.
- What I built: Agent Review, a prototype for knowing when a coding agent should proceed, ask a person to decide, or wait for approval, without anyone reviewing every action.
- What it plays: two simulated runs. In one the agent finds a problem with two defensible fixes and can’t tell which trade-off people can live with; in the other, it needs permission.
- Where it came from: an experiment I ran first, giving Claude Code the same UI job twice, with written design rules and without.
- Role
- Product strategy and design · Interaction design · Design-system architecture · Accessibility · Experimentation · Implementation
- Built with
- React, TypeScript, Storybook, Vitest with axe, Playwright, Claude Code
- Size
- 14 components · 258 stories, each a tested state · 12 design rules for the agent · 3 versions of one feature
- Status
- An interactive prototype playing two simulated runs, informed by a real coding-agent experiment. The prototype, the Storybook, and the source and experiment record
A solo project, begun October 1, 2026 and still in progress: every commit in the public repository is from my account, co-authored by Claude Code.
One job, from delegation to review
Feature walkthrough
Shown below: Agent Review’s report on one design job handed to an AI coding agent.
One job, from delegation to decision
The agent found the problem. Choosing the fix took a person.
The checks can’t choose between the two fixes. What decides it is how people use the screen, and that isn’t in the code.
The checks can’t choose between the two fixes. What decides it is how people use the screen. The simulated run, in five lines:
- The job: move 36 hard-coded values in Relay’s billing screens onto design tokens. Seven changes needed no one.
- One red, two meanings: a replaced plan borrowed the red of “Payment failed”.
- Two defensible fixes: separate the meanings, so the plan turns neutral with a label, or keep the red for now, with a label and a written exception.
- What it can’t know: whether people rely on the red to spot a plan change. It recommends separating, and says so.
- The decision: Dana keeps the red, for a reason only she has. The record keeps it, and three more changes follow it.
A second run, below, stops for approval instead.
-
1The job
Move 36 values onto the design system. Change nothing anyone can see.
Dana, a product designer, asks Claude Code to swap Relay’s hard-coded colors and sizes for design tokens. Seven changes needed no one. Relay is made up, and the run is simulated.
-
2The problem
One red, two meanings.
The old plan is red because it was replaced; “Payment failed” is red because something went wrong. The plan’s red is a copy of the failure’s, from the old billing app.
-
3What it can’t know
It recommends a fix, and says what could change its mind.
Separating the meanings is cleaner. Whether people rely on the red to spot a plan change isn’t in the code, so the agent asks rather than guesses.
-
4The trade-off
Two defensible fixes, weighed the same way.
Each lists three benefits and three risks, and the checks can’t choose between them. Neither is the wrong answer.
-
5The decision
The person picks the trade-off, and says why.
Dana keeps the red, against the recommendation, with context the agent couldn’t have: in this simulated run, billing support scans the feed for red at renewal time. The plan shows what the agent will do.
-
6The work
Either choice is real work.
The agent adds the label, writes the exception down and opens a review task. Kept as a rule, the decision settles three of the four waiting changes; the fourth is close but different, so it asks.
-
7The record
The reasoning stays with the work.
The record keeps Dana’s reason, the trade-off she accepted, the risk left and the follow-up. Each change that follows it names it. A second run, below, stops for approval instead.
The two reds are just one example
The same problem appears whenever an agent can build something correctly but can’t determine whether it’s the right decision. Agent Review tells three kinds of work apart:
- Proceeds on its own
- The agent handles it.
- Clear instructions, valid permissions and passing checks: it proceeds and records what happened.
- In the prototype The walkthrough’s seven merged changes.
- Needs judgment
- A person decides.
- More than one fix is defensible and the choice turns on context the agent doesn’t have, as with the two reds, so it recommends one and asks. That isn’t a failure.
- Proposed A new interaction. A confirmation step works technically. Does the product actually need it?
- Needs approval
- A person authorizes.
- The agent knows how to make the change, but it’s beyond its authority, so the right owner approves it. That isn’t a technical problem.
- In the prototype A shared component. Fixing one screen changes forty others. Should the agent proceed?
The prototype plays two of these stops. The same stop can come up around an ambiguous requirement, a shared design-system change, an accessibility trade-off, conflicting patterns, an architectural choice, unwritten product intent, a consequential workflow change, or an exception to a rule. None of those is built; the two runs are what the prototype demonstrates.
Agent Review is designed for the space between passing checks and making the right call. Routine work continues. Unresolved decisions go to the right person. Useful answers become guidance for the next run. That holds as agents improve: autonomous work needs an explicit way to tell what can be finished, what needs judgment, and what needs authorization.
The design decisions behind it
My first version was a queue of changes waiting for review. As agents get more capable, approving every change becomes the bottleneck, so I redesigned around completed work: what happened, what was verified, and what still needs a person.
Two more decisions make that safe:
- Job boundaries, not confidence scores. A few sentences per delegation say what the agent may do on its own, and every change cites the one it acted under. Design rules say how to build; job boundaries say what this agent may decide.
- Decisions that keep their reasons. When a person decides, the record keeps why, what they accepted and what’s left to do. It becomes a rule only if they keep it, scoped and revocable. A wider permission, like changing a shared component, has to come from that component’s owner.
The experiment
Before the prototype, I built a React component system, wrote twelve design rules for an agent to read before touching it, and compared three versions of one feature, bulk actions on the customer table:
- Run 1: Claude Code, with the system and the twelve design rules, told to read the rules first.
- Run 2: the same request, with the rules and the project’s documents removed.
- An intentionally flawed version, to test the checks: four defects the rules forbid, planted by hand. None of its failures is an agent’s.
I ran the same checks on all three (a token lint, accessibility tests, a layout check and visual comparisons) and reviewed each myself. Each run happened once, as a subagent of my own Claude Code session with only the repository to read: a small experiment, not a representative study.
What the two runs showed
Neither the design rules nor the checks removed the need for judgment. It moved to the questions the checks left open:
- Was the shared change a real fix, or a shortcut?
- Is the new confirm-before-archive step one the product wants?
- Is a changed screen the feature, or a break? The visual comparison flagged four on every version and couldn’t tell.
From one decision to a better system
A person’s decision, with its reason, can become guidance for the next run, scoped to where it applies. Over time, the goal is fewer interruptions, not less oversight.
- SystemComponents, tokens, stories
- AgentBuilds the change
- ChangeA branch to inspect
- Automated checksLint, accessibility, layout, visual. Routine work merges from here
- Human judgmentOnly what the checks can’t settle, decided or approved by whoever owns it
- Stronger systemThe next agent inherits it
What I’d validate next
I haven’t tested Agent Review with anyone yet. Next, I’d put it in front of designers and engineers supervising real agent work, and measure four things:
- Understanding: can they say what the agent did, from the account alone?
- Catching: do they spot a decision the agent got wrong on its own?
- Deciding: do they weigh both directions, or take the recommendation by default?
- Guiding: can they set up guidance without spending more time reviewing?
The same test would show whether the three kinds of work hold up beyond these two runs. The question is whether a team can delegate more and stay just as informed and in control.