Then
Human
Design systems built for human reference — designers, developers
→
Now
Human
AI Agent
Two consumers — but most design systems still built for one
→
The shift
Human
AI Agent
Design systems built to serve both — natively

For the past decade, design systems were built for humans. Designers browsed them in Figma. Developers referenced them in documentation. That model worked well — until AI agents became a meaningful part of how products are built.

AI agents now write UI code, build screens, generate components. They consume your design system. But they were never designed for. The system lives in an external tool. The agent has to be told about it each time, has to interpret it, has to guess how visual decisions translate to code. The result is familiar: inconsistency that compounds with every generated screen.

"Design systems were built for humans to reference. The AI era requires design systems that agents can actually use."

This is not an argument against Figma or hosted design systems — those tools remain valuable for human collaboration and visual design. The argument is simpler: modern design systems need to support both humans and AI agents. Right now, most don't support agents at all.


The problem — and what changes

Without an agent-consumable system
Agent invents components from scratch every task
Tokens inconsistent across generated screens
Design drift compounds with every build
Manual correction required after each task
Figma and code diverge over time
With an agent-consumable system
Agent reads the library before every task
Tokens applied consistently — system enforces it
Screens become more consistent over time
Correction work reduces considerably
Code is the source of truth — always current

What it looks like — the three-layer model

Three structured files do most of the work. Each layer has a distinct role — and the agent reads all three before touching any UI.

1
Design tokens
src/styles/tokens.css
Every color, font, spacing value, and radius as CSS custom properties. Imported once. Available to every component in the project. No hardcoded values anywhere else.
↓
2
Component map
.agent/skills/ui/component-library.md
A structured index of every component: exact file path, all props with types and defaults, usage examples. This is what the agent reads before every UI task — the map of what already exists.
↓
3
Real component code
src/components/ui/
The actual working components — what every screen imports from. The single source of truth. Built once. Reused everywhere. Updated by the design system agent when the product evolves.
What I noticed in practice

Before structuring things this way, agents would regularly create variations of components that already existed — slightly different button styles, custom spacing that didn't match the system. After implementing the component map, reuse improved considerably. The output felt more like work from someone who knew the codebase.


Why this matters for design leaders

This is fundamentally a question of design governance in an AI-native environment. The implications extend well beyond technical architecture.

01 — Consistency
Consistency at scale

When agents build from a shared component map, consistency improves — not because anyone enforced it manually, but because the system itself guided the output.

02 — Debt
Reducing design debt

A large source of design debt in AI-assisted development is components generated rather than reused. The component map creates structural pressure to reuse.

03 — Onboarding
Faster onboarding

New developers, new agents, new team members — all can understand the design system through a single file. The component map becomes onboarding documentation.

04 — Governance
Design governance

When the design system lives inside the codebase, changes are tracked through version control. You can see when a component changed, why, and what screens were affected.

05 — Language
Shared understanding

The component map creates a common language between designers, developers, and AI agents. Same component names, same prop vocabulary — communication improves across the team.

06 — Speed
Quality at speed

The promise of agentic development is speed. The risk is quality degradation. The design system is the structural mechanism that lets you increase speed without proportional inconsistency.

The strategic shift

Design leaders have always been responsible for maintaining the design system. In an AI-native team, that responsibility evolves — the system itself needs to be maintained in a format that agents can consume. That's a design leadership decision, not a technical one.


Before the architecture — the thinking

Everything you're about to see came from a deliberate architectural decision made before any code was written. Most teams skip this step. With agentic development, that compounds quickly — agents inherit whatever structure exists, good or bad.

Read first — prerequisite
How to architect an agentic project before you start building

Before defining a design system, you need the agent architecture itself — what agents exist, what they own, how they communicate, what they're never allowed to touch. That thinking shapes everything downstream, including how a design system fits into the project.

Read the architecture article →

The reference architecture

This structure works inside Claude Code, Cursor, Windsurf, or any agentic IDE that reads project context. The file names and folder conventions map directly across tools.

.agent/
what the agent reads before every task
AGENT.md agents/design-system-agent.md agents/ui-developer.md skills/ui/component-library.md rules/design-system.md hooks/protect-files.sh
↓
src/
real code the agent writes and imports
styles/tokens.css components/ui/Button.jsx components/ui/InputField.jsx components/ui/Card.jsx components/ui/Badge.jsx components/ui/Modal.jsx components/ui/CountdownTimer.jsx lib/tokens.js pages/LoginPage.jsx component-preview.jsx
↓
Public
what humans see — same codebase, two surfaces
yourdomain.com designsystem.yourdomain.com localhost:3000/preview (dev only)

Two agents. Separate responsibilities.

The most important structural decision: split UI work between two distinct agent roles.

Design system agent
Owns components · builds new ones · maintains the library · never builds screens
→
component-library.md
The shared map both agents read and the design system agent keeps current
→
UI developer agent
Builds screens · only consumes components · never creates them

This separation is what makes governance work. The design system agent is the gatekeeper — new components don't appear in the product without going through it. Every component that enters gets documented. The library stays accurate.


What happens when you give a task

A new component request — a countdown timer for session expiry — from task to production-ready.

01 — Task
Task arrives
"Add a countdown timer — session expiry, three variants"
02 — Read
Reads component-library.md
CountdownTimer doesn't exist — proceeds to build
03 — Read
Reads tokens.css
--color-warning
--color-danger
--font-mono
04 — Build
Builds CountdownTimer.jsx
Same radius, same token usage, same prop patterns as Badge and Modal
05 — Document
Updates component-library.md
Path, all props, variants, usage example — library is richer
06 — Ready
Component available to the whole product
UI developer agent can use it on any screen immediately — no duplication, no drift

How to set it up

1
Create the folder structure

Create .agent/skills/ui/, .agent/rules/, .agent/agents/, src/styles/, and src/components/ui/. The separation between agent-readable and real code is the most important decision.

2
Define your design tokens

Create tokens.css with every color, font, spacing, and radius. Import once in main.jsx. From that point every component uses var(--token-name) — no hardcoded values anywhere else.

src/styles/tokens.css
3
Create the component map

Start with five components. Each entry: name, exact file path, props with types and defaults, one usage example. This is what the agent reads before every UI task.

.agent/skills/ui/component-library.md
4
Write the design system rules

The most important rule: read the component library before writing any UI code. Secondary rules cover token usage, file locations, and what to do when a component is missing.

.agent/rules/design-system.md
5
Create the design system agent

A dedicated agent file that owns all component creation and maintenance. Defines responsibilities, workflow, what it must read before starting, and what it must never do.

.agent/agents/design-system-agent.md
6
Build core components through the agent

Ask the design system agent to build each component against the token system. Button, InputField, Card, Badge, Modal — each added to the component map immediately after being built.

src/components/ui/
7
Add a live preview route

A single page rendering every component, every variant, every state — visible in the browser during development only. Agent updates it automatically when new components are added.

src/component-preview.jsx
8
Expose it for stakeholders

Point a subdomain at the preview route — behind authentication if needed. Stakeholders browse real rendered components. Same codebase, same deploy, no separate maintenance.

designsystem.yourdomain.com

What the key files look like

tokens.css

src/styles/tokens.css
:root {
  --color-primary:        #1E6FCC;
  --color-danger:         #CC3B3B;
  --color-warning:        #E5900A;
  --color-success:        #2A8A4A;
  --color-text-primary:   #1A1F2E;
  --color-text-secondary: #5A6478;
  --font-sans: 'Inter', sans-serif;
  --font-mono: 'JetBrains Mono', monospace;
  --space-4: 16px;  --space-6: 24px;  --space-8: 32px;
  --radius-md: 8px;   --radius-lg: 12px;
}

component-library.md — what the agent reads

.agent/skills/ui/component-library.md
## Button
Path:     src/components/ui/Button.jsx
Variants: primary | secondary | ghost | danger
Props:    label, onClick, disabled, loading, size

Usage:
<Button variant="primary" label="Submit" onClick={handleSubmit} />

---

## CountdownTimer
Path:     src/components/ui/CountdownTimer.jsx
Variants: compact | full | banner
Props:    duration (ms), onComplete, variant, warningThreshold (ms)

Usage:
<CountdownTimer
  duration={300000}
  onComplete={handleExpiry}
  variant="banner"
/>

A screen using the library

src/pages/LoginPage.jsx
import { Card }       from '@/components/ui/Card'
import { InputField } from '@/components/ui/InputField'
import { Button }     from '@/components/ui/Button'

export default function LoginPage() {
  return (
    <Card variant="flat" padding="lg">
      <InputField label="Email"    type="email"    required />
      <InputField label="Password" type="password" required />
      <Button variant="primary" label="Sign in" onClick={handleLogin} />
    </Card>
  )
}

Making it visible — the stakeholder subdomain

designsystem.yourdomain.com
✓Real rendered components — not Figma screenshots
✓Same codebase — no separate build process
✓Stays current as the agent adds components
✓PMs see what exists before requesting new work
✓New developers onboard through it
✓Auth-gated if needed — one route config

Where design systems are heading

The challenge is no longer creating a design system. The challenge is creating one that both humans and AI agents can actually use.

The evolution of design systems
Past decade
Built for humans
Figma as source of truth
Tokens for designers
Docs for developers
Maintained manually
1 consumer
Now
Transitioning
AI writing UI code
Agents guess at tokens
Inconsistency compounds
Gap between tools and agents
2 consumers, 1 served
Next decade
Built for both
Code as source of truth
Agents read the system natively
System maintains itself
Compounds with every build
2 consumers, both served
The old model
Design system degrades over time
Manual maintenance. Drift accumulates. Agents ignore it.
The agentic model
Design system compounds over time
Agent maintains it. Every build makes it richer. Compounds automatically.
The teams that build their design system for agents today
will ship more consistent products, faster, tomorrow.
That's the shift worth preparing for.