Agentic Design System

Agentic Design System

Internal R&D on whether a model can use a design system. It cannot, without being told how. That finding is what Code Connect exists to fix.

The finding
A model reads a design but cannot infer the system behind it
3
Token tiers it can reason about
1
Canonical source everything else derives from
Company
Proctorio
Role
Staff Designer, research lead
Team
Run with the lead front-end engineer
Type
Internal R&D
  • Design Systems
  • Figma MCP
  • Code Connect
  • Design Tokens
  • Claude Code
  • Figma

Problem

The design system had been rebuilt for people. Engineering was starting to generate implementations from designs and designers were starting to prototype in code, and both were reaching for the same system without getting it right. Nobody knew why.

Task

Run the research: test whether a model can take a design and a design system and produce an implementation that actually uses the system, then fix whatever the tests broke.

Process

Tested the workflow end to end with Figma MCP and controlled prompt pipelines, holding the design and the prompt constant and varying how much structure the system exposed to the model.

The question
Can a model use a design system
Figma MCP
The model reads the real design
Controlled prompts
Same design, varied structure
Code Connect
Lookup instead of inference

Where this starts

The design system overhaul rebuilt the system for people. This is the question that came next: what happens when the consumer is not a person.

Two agentic workflows were emerging at the same time, and the design system sat between them. Engineering was beginning to generate implementations from designs. Designers were beginning to prototype in code. Both were reaching for the same system, neither was getting it right, and the explanations on offer were guesses.

So I ran it as research, with our lead front-end engineer, rather than arguing about it in the abstract.

The experiment

Three things made it a test rather than a demo:

  • Figma MCP as the connection between the design file and the model, so the model was reading the real design rather than a description of one.
  • Prompt pipelines with controlled variation, so a difference in the output could be traced to a difference in the input instead of to the weather.
  • The design system as the variable. Same design, same prompt, different amounts of structure exposed to the model.

The question was deliberately narrow. Given a design and a design system, can a model produce an implementation that actually uses the system.

What the first tests told us

No. Not without being told how.

A model reads a design perfectly well. It sees layout, spacing, color, hierarchy, and the relationships between elements. What it cannot do is look at a rectangle with a label and know that it is your Button, let alone know the rules for using your Button correctly.

Handed a design and a system, it would:

  • rebuild components from scratch instead of reaching for the ones that already existed
  • hardcode the values it could see rather than the tokens that produced them
  • assemble combinations the system deliberately does not allow

None of that is the model being careless. It is the model being handed a picture and asked to infer a contract. The information was not missing from the design system. It was missing from what the model could reach.

Inference vs lookup: the same design, twice

Full screen
Both outputs came from the same design and the same prompt. The variable is whether the component could be looked up.

That reframed the whole project. The problem was never model capability. It was that a design system communicates through convention, apprenticeship and review, and none of those survive contact with a machine consumer.

What Code Connect is actually for

This is the thing I understood only by testing it: Code Connect exists to solve exactly this problem. It is not a documentation convenience. It is the link that lets a design point at its implementation, so the model stops inferring and starts looking it up.

Fix 1: Tokens the agent can reason about

Raw values are the first thing that breaks. Hand a model #008b8b and it will cheerfully hardcode that hex in forty places. The moment you rebrand, every one of them is wrong, and no amount of prompting reliably stops it.

  • Primitives are raw values: teal-500: #008b8b, space-4: 16px. The agent should never see these. If it does, it hardcodes them.
  • Semantics are intent-named aliases: color/action/primary, color/danger/background. This is the only layer the agent reads and writes. The name describes the job, not the value, so a rebrand updates one alias and everything downstream follows.
  • Component tokens are optional: button/background/default → color/action/primary. Skip them until you are doing multi-brand work.

The three-tier token architecture: primitives, semantics, component tokens

Fix 2: Component metadata

Most component documentation is written in prose, for humans. An agent needs a contract with explicit keys, explicit values, no ambiguity. The emerging consensus (surfaced across talks from Indeed, GitHub, and others at the AI Design Systems Conference 2026) is JSON metadata per component, covering four things:

  • Props: the states and variants that already exist in Figma. Five states in Figma, five states in the metadata. No interpretation.
  • Relationships: what the agent must know before placing the component. Is it a form child? A toolbar item? What can it not sit next to? This is the context a human infers and an agent cannot.
  • Tokens: which semantic tokens the component consumes. Load-bearing in an agentic system, not decorative.
  • Usage: what it is for, and the anti-patterns. Not the obvious ones ("don't put two primary buttons side by side"), but the specific ones only your team knows.

An agent can auto-generate the first draft of this metadata, but it comes back about 80% right and 20% generic. It will list the obvious anti-patterns and miss the ones that actually bite: "never use a destructive button in onboarding," "loading state shows after 200ms, not immediately." The 20% is the part that encodes what your team learned the hard way, and it is the part a person has to write.

Semantic token definitions layered on top of the raw primitives

Fix 3: One source of truth

The fix is architectural, not editorial. Pick one canonical source: for us, the design system components linked to Figma via Code Connect (or rich component descriptions, which do the same job without enterprise tooling).

Everything else derives from it or maps to it:

  • The Figma library
  • The docs site
  • The token files

None of them are independent truth. They are all projections of the one contract.

What it changed

No more hardcoded values creeping into forty places the moment a token changes. No more agent guessing which source to trust: the Figma library, the docs site, and the token files all resolve to one contract instead of competing.

The larger change is what it made possible. Once the system could be read by a machine, the handoff itself could be rebuilt around that, which became the design skills infrastructure and took spec production from days to under 30 minutes.

What I'd do next

  • Measure it properly. The tests told us what broke and why, but a standing benchmark would tell us whether the system is getting more legible over time or just differently broken.
  • Push the metadata upstream, so a component that ships without its usage contract fails review the way a component without an accessible name would.