Sync Figma and code automatically.
What should an agent be allowed to change in someone else's work?
I designed and built, on my own, an agent that keeps Figma, code, Storybook and docs in sync for GitHub's Primer, without taking the decision away from the people who own the system.
The decisionThe agent acts alone only when it's sure and the change can be undone. Everything else goes to a person.
LIVE REPLAYChanges come in from four sources. Fixes go back out. The decisions the agent won't make turn amber and wait for a person.
[01.00]>Read the drift
Sync Figma and code automatically.
What should an agent be allowed to change in someone else's work?
Today's sync tools pick a winner, Figma first or code first, and quietly overwrite the other side. The drift gets fixed. The decision about whose work counts gets made by a script.
of in-house design systems are rated successful
of teams don't measure their design system at all
use design tokens, but most struggle to keep them in sync
actively use AI in their design system work
JobKeep the system used, unbroken, and justify the team to leadership.
PainLearns about drift when someone complains. No numbers to defend the investment.
Lives inFigma, GitHub, Slack
JobDesign fast with components that look like production.
PainWon't open another tool. Unsure if Figma matches code.
Lives inFigma
JobShip without arguing with design about values.
PainReviews JSON diffs by hand. Can't tell which design version a release matches.
Lives inGitHub, CI
Drift is data, not an emergency. The emergency is overwriting someone without telling them.
[02.00]>Decide the autonomy
Technically, a success. But I kept picturing Laura opening a pull request full of changes she never asked for and can't easily reverse. Nobody merges that.
On day three I rebuilt it around a confidence gate, a review queue and an undo journal. The console stopped leading with failures and started leading with what needs a person.
Every change goes through the same path. What happens at the end depends on how sure the agent is, and on whether a person already made a choice there.
Certification finds drift across the four sources
Rules first. Models only where judgment is needed
Every call carries a number and a reason
Apply the fix, log it in the journal, show how to undo it.
Logged · undoableSend it to the lead's queue with both values and the evidence.
The PR stays redShow each person's reason in their own words. Don't pick a side.
A person decidesAutonomy is decided per kind of change, not per agent.
Each kind of change got its own rule and its own owner, ordered from most to least autonomy.
WhenCode shipped first and Figma is behind.
LimitBlocked if it breaks WCAG AA contrast.
WhenThe model reads the commit and the ticket.
LimitBelow 85% confidence, it asks.
WhenA small model pairs old and new names.
LimitA person confirms the pair.
WhenIt exists on one side only.
LimitNever created alone.
WhenDesigner and engineer disagree.
LimitAlways a person's call.
[03.00]>Design the trust
Laura opens the console from a notification, starts with the conflict, reads both reasons and picks a side. The answer goes to the PR and the check turns green. Engineers never need to open the console.
Try it yourselfThe designer made invisible buttons blue so they read as actions. The engineer made them grey because blue clashed with links in tables. The agent shows both, as the real component, in each person's own words.

Once the lead decides, the card closes, the progress updates and the PR has one less blocker. The toast says exactly what was kept, with a way back. Three rejections of the same kind pause auto-apply for that kind. The agent doesn't argue. It just stops doing it alone.

≥ 85% confidence before the agent acts alone. Below that, it asks.
3× rejected, and auto-apply pauses for that kind of change.
1 click to undo anything it did, from the activity log.
Notification → Overview
The whole system and what needs her
Decide conflicts, approve options, undo
Figma notice → her item
Changes that touch Figma
See her reason on the card, comment on the PR
PR comment → his item
Changes that touch code, and the PR state
See his commit message, review the diff
I wrote the agent's voice before its screens: precise, honest about certainty, quoting people in their own words. It never says “Great news”, “magic” or “AI-powered”. When it's wrong, it admits it in one sentence and reverts.
16 checks out of sync after 5 changes.
Both people changed it. Pick which value stays.
Code is right → Figma updated · 95%.
I applied this with the wrong value. Reverted.
I explored three marks in Figma. The closed loop won because it says what the product does without a single word.

[04.00]>Break it on purpose
So judgment moved to the larger model. The small one only pairs names now.
13 of 13 found, with 3 false alarms in one read. Three reads, a majority vote and a second model confirming took it to zero.
The PR check had silently never run on ten pull requests. GitHub was holding them. I only saw it testing end to end.
A heading set to the exact hex of a token, but not linked to it. Now there's a rule for that.
Seamline checks how components are used in six GitHub screens: detached instances, colours set by hand, text below AA contrast. It also found problems I didn't plant, including contrast just under AA in Primer's own dark dimmed mode.

6/6 breaks found on a screen I hadn't tuned for, with 0 false alarms on the decoys.
343/343 random breaks caught by the screen rules.
74 Primer components checked on every run, Button in depth.
Seamline runs on GitHub's public Primer system, not with a real design system team. Model confidence is the model's own estimate, not calibrated. Figma is read, not written. The next step is the one that matters: real pull requests from a real team, and seeing which decisions people actually want back.
The hard part of an agent isn't what it can do. It's what it chooses not to.
> MORE WORK