Components render wrong
The guide says one thing, the built types say another, and nobody notices until an agent follows the guide exactly. In the audit that started this tool, five of eight guides had drifted from the actual types.
An agent is not a person. It cannot ask a colleague, and it cannot tell this does not exist from I have not found it yet, so it invents a component and moves on, confidently.
ADSA — agentic design system audit — scores your system out of 45 on how well an agent can use it, writes the report, and fixes what it can.
Every team that lets agents write UI meets at least one of these. They look like three separate problems and they are not.
The guide says one thing, the built types say another, and nobody notices until an agent follows the guide exactly. In the audit that started this tool, five of eight guides had drifted from the actual types.
It needs a <PageHeader />, cannot find one, and writes an
import for it anyway. Nothing in the repository ever said the system does not have that.
Components say what exists. Nothing says how a page is put together, so each session decides again from the beginning.
A person who cannot find a component asks someone.
An agent cannot, so it fills the gap with <PageHeader /> silently.
More documentation cannot fix an absence. Only writing the absence down does.
A report tells a team it has a problem. The distance between two runs tells them the fix worked. That loop is the whole product, and everything else is detail.
Nine dimensions, each 1, 3 or 5, each quoting the files that produced the number, so you can argue with the reading rather than the verdict.
Five fixes write files. Five write a task brief for your agent. Prop-table generation and example compilation need your own build, and a generic codemod would do that job badly, so those arrive as briefs that carry the traps rather than just the goal.
score.json is committed, so the next run compares against the last one and CI fails when the number
drops. Documentation debt cannot land quietly beside a feature.
$ npx adsa-cli audit @acme/ui 1.4.0 — agent readiness 9/45 1/5 Agent instructions 1/5 Machine surface 1/5 Docs coverage 1/5 Docs freshness 1/5 Tokens 1/5 Patterns 1/5 Accessibility documentation 1/5 Verification 1/5 Gap handling Next: npx adsa-cli fix agents-md · 9 more in the report
$ npx adsa-cli fix --all create AGENTS.md — design-system section added create GAPS.md — created; fill in the real absences create .mcp.json — adsa server registered note restart your MCP client, then run `adsa doctor` create guidelines/design-tokens.md — created; replace the example rows create .github/workflows/adsa.yml — gates the score on every pull request create .adsa/fixes/coverage-gate.md — brief for your agent create .adsa/fixes/prop-tables.md — brief for your agent create .adsa/fixes/examples-check.md — brief for your agent create .adsa/fixes/a11y-docs.md — brief for your agent create .adsa/fixes/patterns-doc.md — brief for your agent Hand these briefs to your agent, then re-run `adsa audit`.
$ npx adsa-cli audit @acme/ui 1.4.0 — agent readiness 23/45 5/5 Agent instructions 5/5 Machine surface 1/5 Docs coverage 1/5 Docs freshness 3/5 Tokens 1/5 Patterns 1/5 Accessibility documentation 3/5 Verification 3/5 Gap handling Since the last run: 9 → 23 (+14)
example/design-system · rubric 1.0 · every character is real output
One self-contained HTML file, a markdown twin, and a machine-readable score. This is the real output, not a mockup.
The real file, running. Scroll it, open a dimension, tick something off. Generated from the example system in this repository — one file, no dependencies, opening from disk, offline, years from now.
Each is scored 1, 3 or 5. A dimension that genuinely does not apply, like page patterns in a primitives-only library, is skipped, and a skip lowers the maximum instead of the score.
Not a percentage. Nine wedges, one per dimension, each sized by its share and coloured by its level. Hover a row to find its wedge.
1 — nothing to follow
3 — partly there
5 — done, and enforced
Those are the example system's real scores, the same run as the report above. npx adsa-cli rubric prints what 1, 3 and 5
mean for every dimension.
A score says how well documented a system is. The experiment says what an agent actually built with it.
Give an agent a real page to build using only your system, in a fresh session. Then count what it imported that does not exist. Nobody argues with that list.
This is the same measurement that produced the two rounds below: the first run against an undocumented system, the second after the fixes, with a written list of what the system deliberately does not have.
$ npx adsa-cli eval score ./page --system . against @acme/ui — 1 file, 8 imports, 5 components used invented: 3 PageHeader — src/settings.tsx FormRow — src/settings.tsx Toggle — src/settings.tsx forbidden packages: lucide-react raw palette: 2, first bg-gray-50 at settings.tsx:11 3 of 8 imports name components that do not exist, 1 import from a package the system forbids, 2 raw palette classes.
The score is committed to the repository, so the badge in your README reads the same file the gate in CI reads.
fix --allFour bands, cut at 85%, 60% and 35% of the maximum. The colour is the verdict; the number is the argument.
$ npx adsa-cli badge 
.adsa/badge.json, a shields endpoint, for a badge that changes when the committed score does.npx adsa-cli audit --gate exits non-zero when the score drops below the committed one, and --min sets a floor. Documentation debt stops landing quietly beside a feature.A tool that overstates itself gets run once. These are the edges, stated before you install it.
Everything runs locally against files on your machine. Nothing is uploaded, and there is no account. Read the source.
Page-level patterns come from pages you already have, and no tool can invent them for you. The brief tells your agent how to write them from real screens.
Detection is built for React, TypeScript and markdown guides. Vue and Svelte are detected but less well covered, and it says so rather than scoring you badly for it.
The score is a starting point. The skill exists because reading five guides yourself still finds things no counter can, like rules written as prose an agent cannot act on.
No install, no config. Point it at the repository that holds your design system and read the report it writes.
$ npx adsa-cli audit $ npx adsa-cli fix --all $ npx adsa-cli audit # the delta is the deliverable