[CASE STUDY / 01]> AI AGENT · DESIGN SYSTEMSOpen the console

Seamline — An agent that keeps a design system in sync, and knows when to stop.

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.

ROLE

Solo · product design, agent behaviour and build

CONTEXT

Nebius × NVIDIA Global AI Hackathon 2026 · results Jan 2027

STACK

Nemotron on Nebius Token Factory · TypeScript · GitHub Actions · Figma

MY OWNERSHIP

Solo: designed the agent's autonomy, built it end to end and tested where it breaks.

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.

Each source was right on its own. Together they disagreed, and nobody owned the gap.

THE OBVIOUS BRIEF

Sync Figma and code automatically.

→
THE QUESTION I CHOSE

What should an agent be allowed to change in someone else's work?

> WHAT THE DATA SAYS

Teams invest in design systems, then lose track of whether they hold.

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.

  1. Sparkbox 202139%

    of in-house design systems are rated successful

  2. Sparkbox 202159%

    of teams don't measure their design system at all

  3. zeroheight 202584%

    use design tokens, but most struggle to keep them in sync

  4. zeroheight 2025~10%

    actively use AI in their design system work

> WHO IT'S FOR

Three people touch the same button. Only one of them should decide.

LauraDesign system lead

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

MartaProduct designer

JobDesign fast with components that look like production.

PainWon't open another tool. Unsure if Figma matches code.

Lives inFigma

DaniFrontend engineer

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.

My first version fixed everything. It worked, and it was the wrong product.

> DAY ONE

The agent repaired all five breaks I planted in Button.

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.

> HOW A CHANGE MOVES

One check. Three outcomes.

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.

01Detect

Certification finds drift across the four sources

02Judge

Rules first. Models only where judgment is needed

03Check confidence

Every call carries a number and a reason

ACT≥ 85% and reversible

Apply the fix, log it in the journal, show how to undo it.

Logged · undoable
ASKUnsure or new

Send it to the lead's queue with both values and the evidence.

The PR stays red
NEVER ALONEBoth sides changed

Show each person's reason in their own words. Don't pick a side.

A person decides

Autonomy is decided per kind of change, not per agent.

> FIVE KINDS OF CHANGE

Some changes are mechanical. One should never be the agent's call.

Each kind of change got its own rule and its own owner, ordered from most to least autonomy.

  1. 01

    An urgent hotfix

    WhenCode shipped first and Figma is behind.

    LimitBlocked if it breaks WCAG AA contrast.

  2. 02

    A value changes on one side

    WhenThe model reads the commit and the ticket.

    LimitBelow 85% confidence, it asks.

  3. 03

    A token is renamed

    WhenA small model pairs old and new names.

    LimitA person confirms the pair.

  4. 04

    A new option appears

    WhenIt exists on one side only.

    LimitNever created alone.

  5. 05

    Both sides change the same thing

    WhenDesigner and engineer disagree.

    LimitAlways a person's call.

If the agent can earn autonomy, it has to be able to lose it.

> THE CONSOLE

The lead answers in one place. The pull request does the rest.

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 yourself
01 / A REAL CONFLICT

Both people are right. The lead decides.

The 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.

Seamline conflict card showing the Figma and code values of the invisible button side by side, each with its author's reason
02 / ONE CLICK BACK

Every answer can be changed. Every fix can be undone.

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.

Seamline Decisions view after the lead kept the code value: the conflict is marked done, progress updated and a toast offers to change the answer
> THE THREE RULES THAT HOLD IT TOGETHER

Small numbers, chosen on purpose.

≥ 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.

> SAME DATA, DIFFERENT DOOR

Nobody gets a different version of the truth. They just start in a different place.

Enters fromSees firstCan
Laura · lead

Notification → Overview

The whole system and what needs her

Decide conflicts, approve options, undo

Marta · designer

Figma notice → her item

Changes that touch Figma

See her reason on the card, comment on the PR

Dani · engineer

PR comment → his item

Changes that touch code, and the PR state

See his commit message, review the diff

> VOICE

A calm on-call teammate. Never cheerful, never a black box.

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.

  • Drift foundDirect · exact16 checks out of sync after 5 changes.
  • Conflict for a personWarm · explicit uncertaintyBoth people changed it. Pick which value stays.
  • Applied aloneBrief · with a numberCode is right → Figma updated · 95%.
  • Agent errorSlow · plainI applied this with the wrong value. Reverted.
> IDENTITY

Two arcs, design and code, closed by a dot: the person who closes the loop.

I explored three marks in Figma. The closed loop won because it says what the product does without a single word.

Three Seamline logo directions: closed loop, four into one, and two layers aligned, each at several sizes on light and dark

The most useful parts of the project were the failures.

> WHAT EACH ROUND OF TESTING EXPOSED
  1. 01The small model invented a commit

    So judgment moved to the larger model. The small one only pairs names now.

  2. 02The model didn't answer the same way twice

    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.

  3. 03A guardrail that wasn't running

    The PR check had silently never run on ten pull requests. GitHub was holding them. I only saw it testing end to end.

  4. 04The rules missed what looked right

    A heading set to the exact hex of a token, but not linked to it. Now there's a rule for that.

> BEYOND THE PLANTED BREAKS

It reads real screens, not just tokens.

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.

Seamline Decisions view listing problems found in real GitHub screens
> WHAT IT CAN DO TODAY

The full loop runs on real pull requests, with no hand edits in between.

Read the code and test log

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.

> WHAT I CAN'T PROVE YET

It's a hackathon project. I'd rather say so.

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.

  • Which kinds of change people trust it with
  • Whether the pause after three rejections feels fair
  • How often the lead overrides the agent
The hard part of an agent isn't what it can do. It's what it chooses not to.
[N. NEXT]

> MORE WORK