Verifying...
AI Design System — Part 1
AI Design System — Part 1
Why design and code never really aligned — and what changes now


If you've shipped products for any length of time, you know the scene. The designer hands off a mockup they've polished for days. The engineer builds it. And somewhere in production, a color is just off, a spacing is just wrong, a corner is rounded the wrong way. You go a few rounds. Both sides privately conclude the other isn't being careful enough. It usually ends with "let's ship it and fix it next sprint."
This isn't anyone's fault. Design systems and frontend architecture speak two different languages. Designers speak in intent — this should feel emphasized, this should recede, these elements are part of the same narrative. Engineers speak in structure — this is state, this is a prop, these components share a context. The handoff between those two languages is where almost all the loss happens. The industry has spent over a decade trying to close the gap. Material Design. shadcn. Tokens Studio. Style Dictionary. Component libraries of every shape. None of it fully worked. Not because the tools were bad, but because the role in the middle — bilingual, proactive, organizing — was never really filled.
The arrival of AI Agents finally fills that seat.
The point here isn't the tired productivity story of "AI writes your code." The real shift is this: when an agent can actively read both sides, find the mismatches, and propose alignment, architectural decisions that were compromises — forced by the cost of coordination — can be reopened. This is a renegotiation of which trade-offs are still necessary.
Nowhere is this renegotiation more visible than in how we organize tokens.
For years we've flattened tokens into a single table. primary-color: #E26E41 — simultaneously a semantic ("the main brand color") and a physical value ("this specific orange"). The two got collapsed because keeping them separate was too expensive. If the designer changed the hue, the engineer had to chase it down by hand, one typo away from a broken build. So we stopped trying. We wrote it as one line, and quietly accepted that cross-project reuse was basically impossible.
With an agent in place, that compromise comes undone. Tokens want to be layered:
The semantic layer is what the designer owns —
primary,secondary,warning— a contract about where each role is usedThe physical layer varies per project — the specific orange, the specific red, whatever the brand needs in context
The mapping layer binds them together — a config file, a JSON blob, a runtime lookup, whatever fits
Separate these three, and suddenly the same design system ports across projects. Semantics stay put. Physical values swap out. The mapping regenerates. What the agent actually does here is concrete and narrow: it reads the sources (Figma variables, the project's CSS custom properties), finds what doesn't line up, names the orphans, catches the drift, and produces a reviewable list. It doesn't decide for you. It assembles everything a decision needs.

The thing that makes this actually work is the loop: agent organizes → human decides in the tool → the system leaves a trace.
This isn't an abstract framework. It has a shape. One example from what we've been building recently — a plugin that keeps a theme system in sync with a project's color library. The agent's job isn't to make design choices. It's narrower than that: scan every color asset in the current project, match it against the 32 semantic slots the design system defines, and lay the results out.
Auto-matched slots show a green check. Manually locked slots (where the designer has overridden the agent) carry a purple mark. Unmatched slots get a warning icon. Orphaned bindings (where the resource a slot pointed to has been deleted) get flagged. A designer opens this panel and in seconds knows exactly where to look. They don't start from zero. They respond to the agent's proposal — accept it, or override it. The override is captured as "manual lock," so the next time the agent runs, it won't undo the decision.

The decision happens inside the tool, not in Slack. This is the part that matters. In the old world, alignment work happened in chat threads, in verbal handoffs, in comments buried three layers deep in a Figma file. Now the whole causal chain lives in the tool's interface: who changed what, when, why, and what the system will do about it next. The design system itself becomes a maintained, auditable asset — not a set of conventions surviving only in a Figma file and the margins of a codebase.
The same pattern reopens an older problem: which components depend on which tokens. In the old setup, this knowledge lived in the engineer's head. Now an agent can keep the component-to-token graph as a shared fact. A designer can ask "what breaks if I change primary?" An engineer can ask "what is this component assuming about text-secondary?" Both sides query the same source of truth.
The third compromise worth reopening is the boundary between live and static.
Design systems have historically shipped on cadence. A token package every quarter. Engineers upgrade, projects catch up, everyone moves together. That rhythm wasn't chosen — it was forced, by the sheer cost of propagating changes. If you could change a color and have every product update instantly, who would wait three months?
Agents make instant propagation possible. But in the process they expose a more subtle decision: not every token should be live.
Some should — semantic colors tracking the source of truth, spacing systems updating once and applying everywhere. Others should stay pinned — base colors used to derive entire scales, where a live change creates an off hover state halfway through a pageview; font configurations optimized at build time, where runtime lookups sacrifice performance for flexibility nobody asked for.
Which layers move, which layers hold, is an architectural decision. It's not a tooling question. It's a question of understanding your own system. The agent can execute your decision, can surface every consequence, but it can't decide for you. You need to know what you're building.
So back to the scene we started with. The misalignment between design and code was never about tools. It was about the absence of a bilingual, organizing, record-keeping third party in the middle. An AI Agent isn't a magic wand. It's just the party that was always missing.
But its arrival doesn't solve the problem automatically. It pushes the problem forward one layer. The question is no longer "how do we sync?" — it's "have both our languages actually been spoken clearly?" When designers name things inconsistently, the agent's output is inconsistent. When engineers don't publish their contracts, the agent can't see the boundaries. When the team makes decisions in Slack instead of in the tool, no trace survives. Every layer of honesty is what lets the agent's value compound.
This is a higher bar for clarity, not a liberation.
But a door has opened. The reason we accepted "design and engineering will always have a seam" was because closing it was too expensive. That cost has changed. What's worth doing now is taking another look at the system you already have. How many of the compromises you've accepted as given — as just how things are — are really just the residue of coordination cost?
The answer, if you look honestly, is probably more than you think.