A design system that agents will read raises a practical question: which token names does a model already expect, and which does it have to be told? If every model calls the main text colour color.text.primary, that name needs no documentation. If every model names the medium spacing step differently, it does. This study of design token naming measured where that line falls.
When this matters
The main use is building a design system for a project that agents will work on, where the aim is to minimise drift: the same thing getting a different name across sessions, pages and models. Drift shows up in three forms. An agent builds a page and invents token names as it goes. Agents from more than one vendor read the same system, and their guesses need to land on real tokens. Or someone writes the instructions for an agent and has to decide what to document and what to leave implicit.
Predictability is the point. An agent that edits a site writes CSS against your tokens. A name that does not exist fails quietly: the browser falls back, or the agent invents a duplicate token, or it reads the whole token file before every change. So the aim is a scheme models already expect, with documentation spent only where they do not agree.
Method
The test was blind. Five briefs described a product in plain words: a SaaS dashboard, an editorial site, an online store, a marketing site and a generic website design system. Each listed twenty things to name. Every brief went to five models:
- Claude Opus 5.5
- GPT-5.6
- Claude Fable 5.1
- Grok 4.7
- Muse Spark 1.3
Each model ran in a fresh session with no files, tools or examples, and JSON as the only output. Each brief has 20 items in five groups; five versions of every brief rotated those groups so the items came in a different order while every line stayed word for word the same. Each model saw all five versions: 125 runs, 2,500 names. Names were compared with separators and case removed.
What came back
This is the dashboard brief in full. Each line is a thing to name, described without naming it. The model saw nothing else.
Context: A responsive analytics product with a navigation rail,
KPI cards, charts, data tables, filters, and account controls.
Create one design-token identifier for each concept below.
Choose the naming syntax, hierarchy, vocabulary, prefixes,
separators, and casing you consider most appropriate.
Do not omit, combine, or add concepts.
- S1-C01: The central product-brand color
- S1-C02: The lowest page background layer
- S1-C03: A raised panel background layer
- S1-C04: A subtle divider color
- S1-C05: Primary readable text
- S1-C06: De-emphasized supporting text
- S1-C07: The default primary action color
- S1-C08: The hovered primary action color
- S1-C09: The largest dashboard page heading
- S1-C10: A heading for a dashboard section
- S1-C11: Default interface body copy
- S1-C12: Compact metadata and helper copy
- S1-C13: The smallest repeated interface gap
- S1-C14: The standard content-group gap
- S1-C15: The corner rounding used by controls
- S1-C16: The elevation used by floating panels
- S1-C17: The primary button background
- S1-C18: The primary button label color
- S1-C19: The internal padding of a KPI card
- S1-C20: The maximum width of the main content region
Return JSON only. Do not use Markdown fences, commentary,
rationale, or additional keys.
All 100 things the models were asked to name, by brief
SaaS analytics dashboard. A responsive analytics product with a navigation rail, KPI cards, charts, data tables, filters, and account controls.
- The central product-brand color
- The lowest page background layer
- A raised panel background layer
- A subtle divider color
- Primary readable text
- De-emphasized supporting text
- The default primary action color
- The hovered primary action color
- The largest dashboard page heading
- A heading for a dashboard section
- Default interface body copy
- Compact metadata and helper copy
- The smallest repeated interface gap
- The standard content-group gap
- The corner rounding used by controls
- The elevation used by floating panels
- The primary button background
- The primary button label color
- The internal padding of a KPI card
- The maximum width of the main content region
Editorial site. A digital magazine with a masthead, issue navigation, feature stories, article pages, author metadata, pull quotes, and newsletters.
- The publication's distinctive accent color
- The base reading-page background
- The strongest ink-like color
- A quiet rule or separator color
- The default inline-link color
- The hovered inline-link color
- The background of selected text
- The color used for urgent editorial notices
- The publication masthead lettering
- The main article headline
- Long-form article copy
- Bylines, dates, and reading-time copy
- A compact spacing step for metadata
- A generous spacing step between article sections
- The corner rounding used by article imagery
- The elevation used by an overlaid story card
- The active issue-navigation item color
- The border color of a story preview card
- The readable maximum width of article prose
- The viewport threshold for the wide article layout
Ecommerce store. A modern storefront with category navigation, product grids, product detail pages, price and inventory states, a cart drawer, and checkout actions.
- The store's main brand color
- The storefront page background
- The product-card surface color
- The strongest neutral color
- The color indicating an available product
- The color indicating an unavailable product
- The default purchase-action color
- The disabled purchase-action color
- A product-detail title
- The current product price
- Default product-description copy
- Small inventory and shipping copy
- The gap between compact product attributes
- The gap between major product-page regions
- The corner rounding used by product cards
- The elevation used by the cart drawer
- The add-to-cart button background
- The sale-badge background
- The gap between cards in a product grid
- The viewport threshold where the product grid gains columns
Professional-services marketing site. A consulting firm's marketing site with a confident hero, service summaries, case studies, testimonials, team profiles, and lead-generation forms.
- The firm's primary identity color
- The base page background
- A contrasting section background
- A restrained decorative-line color
- The strongest heading and body text color
- The supporting-copy color
- The default call-to-action color
- The keyboard-focus indicator color
- The high-impact hero statement
- A heading introducing a service group
- Default marketing body copy
- Testimonial attribution copy
- The compact gap used inside small content groups
- The vertical separation between major page sections
- The corner rounding used by form controls
- The elevation used by a featured case-study card
- The consultation button background
- The consultation button label color
- The internal padding of a testimonial card
- The maximum width of a standard marketing section
Generic website design system. A reusable website foundation intended to support content pages, marketing sections, forms, navigation, cards, dialogs, and responsive layouts.
- The foundational brand hue
- The lightest neutral step
- A middle neutral step
- The darkest neutral step
- The default page surface
- The default readable content color
- The color communicating successful completion
- The color communicating a destructive action
- The largest display-text role
- A middle-level content heading
- The default paragraph role
- The smallest supporting-text role
- The smallest nonzero spacing step
- A middle spacing step
- The standard control corner rounding
- The standard floating-overlay elevation
- The default button background
- The invalid form-field border
- The internal padding of a generic card
- The viewport threshold where compact navigation becomes expanded navigation
And the first answer from each model, eight of the twenty rows.
| Token | Opus 5.5 | GPT-5.6 | Fable 5.1 | Grok 4.7 | Muse 1.3 |
|---|---|---|---|---|---|
| Primary text | color-text-primary | color.text.primary | color.text.primary | color.text.primary | color.text.primary |
| Primary action, hovered | color-action-primary-hover | color.action.primary.hover | color.action.primary.hover | color.action.primary.hover | color.action.primary.hover |
| Lowest page background | color-surface-base | color.surface.page | color.background.base | color.background.canvas | color.background.page |
| Section heading | font-heading-section | typography.heading.section | typography.heading.section | typography.heading.section | type.heading.section |
| Compact helper copy | font-body-caption | typography.body.compact | typography.body.caption | typography.meta | type.meta.helper |
| Standard group gap | space-gap-md | space.gap.md | space.gap.md | space.group | space.gap.group |
| Floating panel elevation | shadow-elevation-floating | shadow.panel.floating | elevation.overlay | elevation.floating | shadow.panel.floating |
| Primary button background | button-primary-color-background | component.button.primary.background | button.primary.background | color.button.primary.background | component.button-primary.background |
Every model builds the same kind of name: a category, then what the token is for, then which one, then a state if there is one. Eight first words (color, typography, space, radius, spacing, breakpoint, type, elevation) open 87% of the 2,500 names. The agreement is uneven, though: colours match, while spacing, depth and the button tokens go five different ways.
Share of tokens where three or more models chose the same name
Where the models already agree
A colour role has a 75% chance of coming back with a name most models would also choose. All five models independently produced color.text.primary, color.link.hover, color.action.primary.hover, color.brand.primary and radius.control, among 32 names in total. Those need no documentation.
Typography sizes, spacing steps, shadows and status colours are the opposite. “A middle spacing step” came back as space-md, spacing.400, space.4 and space.500. “The smallest supporting-text role” produced sixteen different names from twenty-five answers. No model will guess these; they have to be written down.
Why the names differ
When two models disagree, they rarely disagree about the structure. Two thirds of the mismatched pairs share the first word and at least half of the words. The difference is one synonym: secondary, muted or supporting for quiet text. Three forks stand out. The table counts how many of each model’s 500 names contain the word.
| Word | Opus 5.5 | GPT-5.6 | Fable 5.1 | Grok 4.7 | Muse 1.3 |
|---|---|---|---|---|---|
space | 61 | 14 | 56 | 69 | 28 |
spacing | 0 | 52 | 0 | 0 | 35 |
shadow | 15 | 19 | 14 | 0 | 11 |
elevation | 11 | 6 | 11 | 25 | 14 |
typography | 59 | 100 | 72 | 72 | 52 |
font | 25 | 0 | 16 | 4 | 0 |
type | 4 | 0 | 4 | 19 | 40 |
text | 12 | 0 | 8 | 4 | 4 |
GPT and Muse say spacing; the other three never do. Grok never says shadow. Muse opens almost half of its text roles with type. Listing the other word as an alias lets an agent’s guess still resolve.
The brief matters more than the model
The two concrete products, the store and the dashboard, scored about one and a half times as high as the generic design system. A brief with real nouns in it (product, cart, article, KPI) gives the model something to attach the name to. It even changed the syntax: Fable wrote CSS custom properties like --space-md in all five generic runs and in none of the editorial runs.
Share of tokens where three or more models chose the same name
You will not get the same names twice
Listing the same items in a different order changed nothing about the task, but a model repeated its own name only 54% of the time on average, and Opus only 24% of the time on typography. GPT was the exception: one fixed grammar for text roles, kept to every time. The table shows the share of runs with the same name.
| Kind of token | Opus 5.5 | GPT-5.6 | Fable 5.1 | Grok 4.7 | Muse 1.3 |
|---|---|---|---|---|---|
| Colour primitives | 72% | 63% | 70% | 66% | 62% |
| Colour roles | 76% | 64% | 73% | 71% | 61% |
| Typography | 24% | 56% | 43% | 28% | 38% |
| Spacing, radius, elevation | 54% | 51% | 46% | 51% | 31% |
| Components | 60% | 45% | 45% | 56% | 38% |
| All tokens | 57% | 56% | 55% | 54% | 46% |
In practice
For a project where agents build pages against one design system, the aim is to stop names drifting. The study suggests this order of work.
- Start the project with a short tokens file: the type scale, the spacing steps, the shadows and three alias pairs (
spaceandspacing,shadowandelevation,typographyandfont). These names drift most, so write them before the first agent session. - Use the standard colour-role names and leave them undocumented. Every model produced them unprompted, so they do not drift.
- Brief every agent with the product and its parts, not “a design system”. Concrete nouns keep names stable from page to page.
- Generate names once, at the start. Keep the agent’s colour-role names, replace its type, spacing and shadow names from the file, and point every later session at that file. Asking again is where drift begins.
- Review agent CSS for the three drift points: fork words, component-first against property-first names, and a state word that is not last.
- If agents from several vendors will work on the project, draft the system with Opus or Fable, whose names overlap most with the others. If one model does all the work, GPT drifts least on typography.
Limits and data
This is one sample per prompt per model, at default settings, on 13 October 2026. It shows a pattern, not a ranking, and the model versions will date faster than the findings about colours, type and briefs. The full report, the prompts, the raw responses and the analysis are on GitHub, so the test can be rerun with other models.

