Part 4
How Vercel teaches its agents design
One team has shown how it runs design decisions for its agents, week after week. What does it track, who decides, and how does that compare with Arbiter?
Edmond Hua · 13 Oct 2026 · about 6 minutes · follows Part 3: A hundred decisions later
In part 2 I called a team’s own design calls its case law, and said one team was keeping it: Vercel. In part 3 an agent kept up with 100 written decisions, and what grew was the reading for people.
So what does it take for a team to keep up? In June, John Phamous, a design engineer at Vercel, described how they do it.1 Others record pieces of this. Evil Martians, for example, require a written reason for every exception to a design-system component.2 Vercel’s is the only full practice for AI-built UI I’ve found published. Here’s what it looks like, and where it meets what I’m building.
The problem they start from
Agents copy a product’s style and patterns well. What they can’t see is why those patterns exist, because the reasons live in design reviews, pull request comments, Slack threads and people’s heads. As the post puts it: “For an agent, context that isn’t in the codebase doesn’t exist.”
Vercel’s answer is to treat accepted product decisions like code: kept in the repository, reviewed, and available to every agent working there.
What they built
A product-design skill
- What it does
- Sorts each request into one of five modes (shape, implement, review, copy or harden), loads only the guidance that applies, and has the agent name the evidence for each change. A modal, for example, pulls in the guidance on destructive actions.
Lint
- What it does
- Catches what code can check, and explains the fix. One rule suggests radio buttons instead of a dropdown when there are only two or three fixed options.
A weekly review
- What it does
- Gathers new design feedback from Slack, with the Figma files, pull requests and previews it links to, and prepares changes for a person to approve.
Their test for what goes in lint is worth borrowing. If code can spot the problem without rendering the page, without false alarms, and there’s a concrete fix, it’s a lint rule. If it needs product judgment, it’s written guidance. If it sets a new standard, a person decides. A rule that needs many exceptions goes back to being guidance. It’s the spellchecker from part 1, with a clear test for what belongs in it.
What a decision looks like
Each decision is written up the same way.
Decision and status
- What it holds
- The call, marked proposed, accepted or rejected
Scope
- What it holds
- Where it applies
Rationale and evidence
- What it holds
- Why, and what supports it
Exceptions
- What it holds
- Where it doesn’t apply
Bad and good example
- What it holds
- What to avoid, and what to do instead
Assumptions and open decisions
- What it holds
- What’s taken on trust, and what’s still undecided
Their advice on wording matches what I found in part 3. Skip adjectives like clear, polished or intuitive, and write decisions you can see in the result. “Destructive buttons use a verb and a noun” tells the agent what to build. A rule that buttons should be clear doesn’t. Rules also get stable IDs that state the rule, like rule/destructive-names-action. In part 3 the agent found the decisions it needed by their titles alone, so this is the same idea.
An accepted decision doesn’t always end up as text, either. It can become guidance next to the design system component, guidance in the skill, or a lint rule.
The weekly review
The weekly review is the part I find most interesting, because it’s an answer to the question part 3 left open.
Collect
- Who
- Automated
- What happens
- Searches Slack for design feedback and keeps the links to Figma files, pull requests, review comments and previews. Proposes nothing.
Judge
- Who
- Automated
- What happens
- Groups the evidence, checks the sources, and separates facts from guesses and open questions. Keeps everything pending and edits nothing.
Packet
- Who
- Automated
- What happens
- Lists candidates, topics it turned down, follow-ups and gaps, each linked to its source.
Decide
- Who
- A person
- What happens
- Turns each candidate into guidance, a reference, an example, a lint rule, a test, a known gap, or nothing.
Merge
- Who
- Checks
- What happens
- Puts the change in the narrowest file that fits. It has to pass the checks before it merges.
Two details stand out. A comment from an experienced reviewer can raise a candidate’s priority, but the candidate still needs evidence. And no single screenshot, file or comment becomes a universal rule on its own.
The automation stops at the packet. Every change to the guidance goes through a person.
Who wins
The skill ranks its sources for conflicts. The higher one wins:
- What the person asking wants, and the limits they set
- Verified evidence about users and how the product behaves
- The repository’s own guidance and the design system
- Accepted decisions and examples, where the evidence holds
- Patterns already shipped in the same area
- General interface rules of thumb
Two things are worth noticing. The design system outranks the team’s accepted decisions. And shipped code ranks low, because it shows what exists, not why it’s right. In part 3, one sentence settled who wins between the decisions and DESIGN.md. Vercel wrote down the whole order.
The difference is when it’s caught
Arbiter works on the same layer. It records the design calls an agent makes while it builds, and a designer decides which become rules. Here’s Vercel’s decision template next to an Arbiter entry.
# Decision: {name}Status: proposed | accepted | rejectedScope:Decision:Rationale:Evidence:Exceptions:Bad example:Good example:Assumptions:Open decisions:
Vercel’s decision template, as published. The post doesn’t show a filled-in decision.
When it’s caught
- Vercel
- Weekly, from Slack and what it links to
- Arbiter
- In the session, as the agent builds
Who decides
- Vercel
- A person, candidate by candidate
- Arbiter
- The designer, in a short review
Evidence
- Vercel
- Links to the discussion
- Arbiter
- The commit, the files changed and a screenshot
What lost
- Vercel
- A bad example
- Arbiter
- Each option that lost, and why
Exceptions
- Vercel
- Yes
- Arbiter
- Not yet
Vercel finds decisions after the fact, in the evidence a team already leaves behind. That gives every decision a source, but only if someone discussed it somewhere the collector can search. Arbiter catches calls as the agent makes them, including the option that lost, but it only sees the session, not the Slack thread or the review that led there.
Vercel’s record is stronger on evidence, exceptions and what’s still undecided. Arbiter’s keeps the option that lost, a screenshot, and a board for people who don’t read the code.
Case law, in practice
This is what case law looks like when a team takes it seriously: a written record, evidence behind each call, a person who decides, an order for conflicts, and tests. None of it needs Vercel’s size to start. Their own advice is to pick one surface where the same review comment keeps coming back, and write those decisions down first.
- Vercel treats design decisions like code: kept in the repository, reviewed and tested.
- Each week, automation gathers and sorts the evidence. A person decides every change.
- Vercel writes decisions up weekly, after the fact. Arbiter catches them in the session, as the agent builds.
Sources
- John Phamous, Teaching agents product design at Vercel, Vercel, June 2026. vercel.com/blog
- Anton Lovchikov and Yuri Mandrikov, AI makes design system guardrails mandatory; this framework delivers them, Evil Martians, September 2026. evilmartians.com/chronicles