Systems drift and break.
Raw values bypass tokens, teams rebuild components locally, and guidance stops matching the code. Nobody has time to find all of it, let alone fix it.
See it · Shape it · Govern it · Run it
Loom turns the system you have, or the one you are missing, into clear, governed decisions that your teams and your AI tools follow. Your product keeps its look. Your people stay in control, with expert help and agents doing the routine work.
About three minutes, and your answers stay in your browser. Or see a real audit and the product tour.
Built and backed by a group of design-system specialists.
Move the pointer to pull the threads. Scroll, and they weave a component.
The problem
Most systems were built for an earlier product, then left to one or two people to look after. Now AI tools build screens every day, and they copy whatever they find.
Source: zeroheight Design Systems Report 2026 (survey closed 14 Jan 2026, 147 respondents), figures as published in the “We need more people” webinar.
Raw values bypass tokens, teams rebuild components locally, and guidance stops matching the code. Nobody has time to find all of it, let alone fix it.
Figma said it plainly at Config 2026: agents without design-system context produce interface that feels “unfamiliar and generic”. Given a broken system, they produce broken interface faster.
Supernova, zeroheight, Knapsack, Figma and Storybook now serve your system to agents over MCP. Each assumes a healthy system already exists. Serving a broken one spreads the problems further.
Sources: Supernova, zeroheight, Knapsack, Figma, Storybook
One system, four jobs
Most tools do one of these. A design system needs all four, and they work best when they share one record of what was decided and why.
Our aim: design systems that never fall behind.
Know what you really have, before you change anything.
Turn it into a next-generation system, without changing how it looks.
Decide once, at the right level, and see where reality differs.
Let agents do the routine work, on your own model, under your rules.
01 · See it
The health check asks plain questions and shows your gaps area by area. With access to your code, Loom’s audit goes further: it reads every token, component and screen, and reports where the system is used, bypassed or missing.
Try it on your own code
Nothing is sent anywhere. The checks are Loom’s own audit code, built into this page: it reads raw colours, spacing, token tiers, modes and contrast, and scores the two areas a stylesheet can show. The full audit reads your whole repository.
Runs on this page only: no upload, no storage, no tracking. Do not paste secrets anyway.
15 / 100 on the subset · Loose threads · Foundations and tokens 28 · Usage 0
Before · an app with no design system
Audit result, 2026-10-24 · github.com/taniarascia/takenote · MIT
Contract stubs are generated for every component with the evidence we could find and explicit 'missing' fields for purpose, when/when-not, states, behaviour, a11y and content.
Promote these to typed DTCG tokens and add a semantic layer (text, surface, border, action, status) on top; generated proposal in artefacts/tokens.
Replace each duplicate with an alias ({palette.x}); two literals with the same value drift apart on the first edit.
A strong system that still has real gaps
Audit result, 2026-10-24 · private repository, summary only
Make every semantic token an alias of a primitive and every component token an alias of a semantic token. Without aliases a palette change does not propagate and dark/high-contrast modes cannot remap roles without touching components.
Replace each duplicate with an alias ({palette.x}); two literals with the same value drift apart on the first edit.
Declare light, dark and high-contrast as token modes that remap semantic aliases, and contrast-check every pair in every mode. A recorded 'not supported' decision is honest but does not meet the 2026 baseline.
Explore the audit
Story Atelier (filled) and takenote (outline), from the audit reports above. With scripting on, you can switch systems and open each area’s checks and findings.
Real output from Loom’s audit engine, run on 24 October 2026. Static analysis only: no code is executed. Seamline is the founder’s own product and its code is private, so only the summary is shown.
02 · Shape it
Conversion turns what you have into a next-generation system: typed tokens and one contract per component, generated from your code with the evidence for each value. Rules for brand, illustration and microcopy come next. Loom also writes components from its contracts and checks them before your team reviews them; today that covers three components.
Typed tokens in the DTCG 2025.10 format, generated from your code with the evidence for each value and checked against the format’s rules for every type. Today: a primitive and a semantic tier in one file. In development: a component tier, and modes for themes and brands. Planned: build outputs for CSS variables, Tailwind and CSS-in-JS.
Conversion drafts one contract per component from your code: purpose, anatomy, API, states, behaviour, accessibility and content, with every gap marked as a question for your team. For the components Loom writes (three so far), behaviour is also written as data, so React and React Native are tested against the same rules.
Loom writes components for React and React Native from one contract and checks them before review: axe on every state, keyboard and focus scripts, and parity between platforms. Today this covers three components (Button, Switch and Dialog); writing your own components this way, and visual regression checks, are planned. A person gives the final approval.
Brand rules, a managed illustration library and a message catalogue become checks that agents and reviewers can run, instead of documents nobody opens.
Before and after
The base button rule of takenote, an open-source notes app (MIT), before and after conversion. After conversion, the same rule reads the tokens Loom generated for it. Move the slider: the rule converts value by value, and the look stays the same.
%buttons {
border: 2px solid $primary;
border-radius: 0.3rem;
background: $primary;
color: white;
font-weight: 600;
font-size: 1rem;
padding: 0.5rem 0.75rem;
margin: 0 0 0.5rem 0;
line-height: 1;
}
.button {
border: 2px solid var(--semantic-action-primary);
border-radius: 0.3rem; /* no token yet */
background: var(--semantic-action-primary);
color: var(--palette-gray-10);
font-weight: 600;
font-size: 1rem;
padding: var(--space-3) 0.75rem; /* 12px: off scale */
margin: 0 0 var(--space-3) 0;
line-height: 1;
}
var(--semantic-action-primary) → {proto.primary} → #5183f5 needs a human decisionvar(--palette-gray-10) → #ffffff needs a human decisionvar(--space-3) → 8px needs a human decisionToken names, values and statuses are copied from the token file Loom’s conversion generated for takenote (24 October 2026). The after rule was written by hand for this page from those names; rewriting stylesheets automatically (codemods) is a concept.
Each component Loom writes has one contract. Loom writes it for React and React Native and tests both against the same behaviour; today that is three components. Every pilot includes a parity report like this one.
An illustrative summary of the parity checks for the Button contract. Both writers and their tests work today for three components; the React Native tests run in a simulated environment (Jest), not yet on devices.
| Check | React | React Native |
|---|---|---|
| States | Default, hover, pressed, disabled, busy | Default, pressed, disabled, busy |
| Role, name and state | axe on every state | Accessibility tree on every state |
| Focus | Keyboard scripts | Screen-reader focus order |
| Tokens | CSS variables | A theme object from the same tokens |
| Content | Message catalogue | The same message catalogue |
If a design system does not let you prototype, test and explore ideas quickly, it is not doing its job. Compose a screen and Loom builds a clickable prototype from your system’s own components, checked against its rules as you go. Describing a screen in words, and letting an agent build it, comes next.
Working today, for the reference system: the workbench Composer builds pages from system components. The product tour shows it as a screenshot. Next: other systems, and prototypes built by agents from a written brief, held to the same rules.
Loom starts from your Figma library and your code in their current state. It audits them, captures your look as tokens and contracts, migrates your products with codemods and agent pull requests, and leaves you with one governed system in code, Figma, documentation and agents.
Working today: the audit, and the tokens and contracts generated from it. Codemods and agent pull requests with before and after screenshots are concepts.
A need becomes a contract, the contract uses tokens, and Loom writes the component for React and React Native. Automated checks run before a person reviews it, and the release arrives as a pull request.
Working today for three components: contract, tokens, writing for React and React Native, and automated accessibility, keyboard and parity checks. Visual checks and the release step (pull request, version and changelog) are concepts.
03 · Govern it
Larger organisations run a system of systems: a global brand, regional needs, digital brands and products. Loom is designed to model each layer with its own owners and rules. Your repo and Figma stay the sources of truth; Loom checks them against your rules and flags what drifts.
A global brand at the top, regions below it, then digital brands and products. Each layer inherits everything above it and adds what it needs.
Concept: layers are in design. The product tour shows them with sample data.
A team can break a rule it owns. The break is flagged, and the people involved are told.
System of systems
Each rule is set at one layer and says how far it bends below it. Pick the layer you stand in, hover a rule to see where it comes from, and try a change. The organisation and its rules are sample data; layers are in design.
| Rule | Set by | Level |
|---|---|---|
| Text contrast of at least 4.5:1 | Global brand | Locked |
| Logo clear space | Global brand | Locked |
| Consent and privacy notices | Region: Europe | Locked |
| Colour palette | Global brand | Extendable |
| Spacing scale | Global brand | Overridable |
| Voice and tone | Digital brand: consumer | Extendable |
| Button corner radius | Digital brand: consumer | Default |
The modes work like the permission modes of a coding agent such as Claude Code, with allow and deny rules on top.
Loom reports what it sees. Nothing changes.
Loom drafts changes. A person approves each one.
Routine changes merge when every check passes. Anything else waits for a person.
Changes merge when the required checks pass, with no review: the owner accepts that risk in writing. Any person can revert a change with one click afterwards.
Your repo and Figma stay the sources of truth. Loom governs them and flags anything that drifts. Sensors compare what exists with your rules; a difference becomes a draft, the owner reviews it, it merges through a pull request and the timeline records it.
Working today: drift checks you run on demand (the audit, and the audit_code tool for agents) and change drafts. Continuous sensors, review by autonomy mode, merging by pull request and the timeline are concepts.
color.action.primary was intended. Draft opened.sm added. Approved by the core system team.Working today: drift checks you run on demand, which find raw values and local rebuilds in your files, and change drafts. Continuous monitoring, layers, autonomy modes and the timeline are concepts in design; the entries above are illustrative.
04 · Run it
Any agent that speaks MCP can use your system. It looks things up, checks its own output and proposes what is missing. Agents use your own model and your own keys, and Loom’s checks give the same answer whichever model produced the result. Making those checks a required step in your CI is planned. Every draft an agent writes is labelled as AI-generated, and agent pull requests will be too.
search_system find components, tokens and patternsget_entity read a full component contractget_tokens read token values and rolesget_guidelines read guidance, or learn that it is missingcheck_composition check a draft before it is writtenaudit_code find drift in existing filespropose_change open a draft for reviewlist_unmet_needs see what agents asked for and could not findRecording of real output
A recorded session: a scripted agent against the Seamline system, with real server output.
The replay types each call as the agent sent it and shows each result after its recorded latency, shortened for the page. Server output is in English.
I need a destructive "delete workspace" action with a confirmation. What does the system have?
search_system · 196 ms→ search_system({"query":"delete confirm danger","kind":"component","limit":5})31 results for "delete confirm danger" (lexical ranking). Top: ConfirmDialog (component:confirm-dialog, 0.87), Toast (component:toast, 0.63), Button (component:button, 0.42), IconButton (component:icon-button, 0.42), Banner and ConflictNotice (component:banner, 0.34)
get_entity · 15 ms→ get_entity({"id":"Button"})Button: The one button. A native button with four tones (primary, secondary, quiet and danger), a link form with the same look, and a busy state that keeps focus.
Here is my first draft. It reaches for an MUI Modal, guesses a variant prop, uses two primary buttons and hard-codes a colour and a margin.
check_composition · 75 ms→ check_composition({"tsx":"import { Card, Button, Heading, Text } from \"@seamline/story-atelie…"})Off-system: 4 errors, 1 warning across 6 nodes.
check_composition · 5 ms→ check_composition({"tsx":"import { Card, Button, Heading, Text, Stack, ConfirmDialog } from \"…"})On-system: 0 errors, 0 warnings across 7 nodes.
audit_code · 292 ms→ audit_code({"files":[{"path":"src/settings/SettingsPage.tsx","source":"import React from \"react\";\nimport { Button as MuiButton, Dialog…Drift found: 14 errors, 8 warnings — 6 colours, 9 dimensions, 1 non-system import, 1 re-implemented component.
get_guidelines · 49 ms→ get_guidelines({"topic":"illustration"})Guidelines for illustration: missing. 0 sections. Missing: Story Atelier has no dedicated illustration guideline. Do not invent one: follow existing foundations, and use propose_change (kind "guideline") to draft it for review.
Research uploads need a drag-and-drop file area. Nothing in the system does that, so I will draft a proposal rather than ship a one-off.
propose_change · 542 ms→ propose_change({"kind":"component","title":"FileDropzone","need":"Researchers attach interview recordings and notes to a journey. Set…","…Draft component-filedropzone-4476b485 written to ../../../../../../tmp/loom-mcp-demo-aLrX07/drafts/component-filedropzone-4476b485.json (status: proposed, labelled AI-generated, not yet human-reviewed). 6 existing alternatives listed; impact: 10 declared dependents.
check_composition · 70 ms→ check_composition({"tsx":"import { Modal } from \"@mui/material\";\nimport { Button } from \"@sea…"})Off-system: 4 errors, 6 warnings across 6 nodes.
The booking flow needs a date range picker. Does the system have one?
search_system · 18 ms→ search_system({"query":"date range picker for booking","kind":"component","limit":5})No component matches "date range picker". Closest partial matches: Meter and ProgressBar (component:meter, partial match, confidence 0.33: covers "range" but not "date picker"); DateLabel and RelativeTime (component:date-label, partial match, confidence 0.32: covers "date" but not "range picker"); MoodScale, MoodPicker and EmotionCurve (component:mood, partial match, confidence 0.29: covers "picker" but not "date range"). Logged as an unmet need. If this is a real gap, draft it with propose_change instead of building it off-system.
search_system · 14 ms→ search_system({"query":"show an error when payment fails","kind":"component","limit":3})34 results for "show an error when payment fails" (lexical ranking). Top: ErrorSummary (component:error-summary, 0.93), AreaBoundary (component:area-boundary, 0.74), Banner and ConflictNotice (component:banner, 0.74)
list_unmet_needs · 7 ms→ list_unmet_needs({})1 unmet need from 1 request; 0 over the threshold (3 requests from 2+ requesters in 30 days). "date range picker" x1.
When people and agents keep searching for something the system does not have, Loom turns the pattern into a draft with the evidence attached. Drafts from agents work today.
Designers, writers and product managers ask in plain language and get answers from the system’s own rules, with the source of each answer. An early version in the product tour searches the reference system’s rules and quotes them; it does not write answers yet.
Notifications where your teams already work: drift found, drafts waiting for review, releases shipped. Requests can start in Slack, Teams or Loom, and reach the right owner.
Loom generates Storybook stories from component contracts: for the reference system, 733 stories render in a real browser, 538 of 663 visibly differ from the component’s default, and every one that does not says why.
Working today: agents over MCP, and audits from the command line. Tested on the reference system: tokens pushed to Figma as variables (one mode) and a partial component library, through an agent and Figma’s connector. Next: a CI package, a GitHub App, Jira and Linear.
Loom works with Figma Professional and above. What it can do depends on your plan, so we explain it plan by plan and shape the setup around yours.
Plan features belong to Figma and change over time; see Figma pricing. The free Starter plan is not supported.
The system lead, product designers and engineers propose, ask and approve. Agents and tools read the rules and report back. Loom sits between them and records every decision.
Working today: agents that read the rules and check their work over MCP, and the drafts they propose. One record of every decision, autonomy settings and checks on every pull request are concepts.
Privacy and ownership
Your repo and Figma stay the sources of truth. Loom’s output is files your team reviews and commits, or opens as pull requests, so every change can be reviewed and reverted. Loom never keeps your system somewhere you cannot leave.
On your own machines, in your own CI, or in Loom cloud if you would rather we run them. Today the Loom command line and MCP server run on your machines from a copy of the Loom repository, and can be scripted into CI that way. A packaged command line with a ready-made CI step, and Loom cloud, are planned.
Agents use your model and your keys: Anthropic Claude, OpenAI, or any OpenAI-compatible gateway. Any agent that speaks MCP can already use your system with the model you choose.
Loom reads your repository and writes its output as files: tokens, contracts, rules and reports that your team reviews and commits, or opens as pull requests. Nothing is kept anywhere you cannot leave. Opening pull requests automatically, with checks on every one, is planned.
We do not use your code, designs or prompts to train models, and we never sell them. Drafts written by agents are labelled as AI-generated.
What comes next
These are designed but not built. We share them because they show where a governed system can go once it holds the truth about itself.
A living test record for every component: which states were checked, how and when. Exportable as evidence for compliance work under the European Accessibility Act, which has applied since June 2025.
Check whether a model, such as Claude, GPT or Qwen, builds correctly with your system, using the same tasks and the same checks. Choose the model that works best for your organisation on evidence.
Before approving a change, see every screen it would affect, across products and layers.
Why “Loom”
On a loom, a draft tells every thread where to go. A design system works the same way: a few named decisions, combined by rule into parts people trust.
The Button draft
Four notes, one component.
Ways to work with us
Every organisation is different, so every paid step is scoped with you. There is no off-the-shelf package and no price list. Loom does the routine work at every step.
A short self-assessment that shows what your design system is missing and where to start. Your answers stay in your browser.
We look at your real system with your team and agree what to fix first. Scoped per client and delivered hands-on with Loom.
We convert your system with you, without changing how it looks, and help your teams adopt it. Your repo and Figma stay the sources of truth throughout.
We look after the system with your team. Loom’s audit and agents find drift and draft fixes, and we keep your tools in step; your people review and decide, and we are there for the judgement calls. Continuous monitoring by agents is planned.
Read more
Contact
Loom is working with a small group of design organisations as design partners. We would like to hear what your system needs, whatever state it is in.