Open source · MIT · Self-hostable
Ground your coding agent in your design system.
Assembly turns any design-system corpus into queryable knowledge — manifest-driven ingest, hybrid vector + full-text retrieval, served over MCP and HTTP. Your agent answers from your components, tokens, and patterns instead of guessing.
ships with shadcn/ui @ 4.13.0 — or point the manifest at your own corpus
$ claude "Add a notifications toggle to settings — use our Switch"
assembly-knowledge · search_design_system("switch toggle form")
└ 4 hits · switch.mdx · form.mdx · switch.tsx · switch.stories.tsx
assembly-knowledge · get_component_docs("switch")
└ props · anatomy · accessibility notes · 3 usage examples
✓ SettingsToggle.tsx — on-system props, zero invented APIs
22.8% → 100%
mean required-API coverage, bare model vs. retrieval-informed
0/12 → 12/12
tasks matching every required component API
8 → 0
tasks that shipped hallucinated APIs
Measured on 12 React + TypeScript tasks against @halcyon/ui — a fictional design system invented so no model can have memorized it. Same model, same tasks; the only variable is retrieval. Methodology & limitations →
From intent to merged PR
The flagship demo drives the whole loop: generation grounded in corpus docs, a six-check quality gate — including axe-core accessibility, an LLM judge, and visual baselines rendered by a real browser farm — then auto-merge. Humans only ever approve visual baselines.
Usage telemetry flows back into retrieval ranking — the knowledge engine gets better the more agents use it.
What's in the box
Six services across Go, Python, and TypeScript — one shared Postgres, real queues, honest measurement.
Manifest-driven ingest
A manifest maps corpus paths to doc types — component docs, source, stories, tokens. A new design system is a new manifest, not a code change.
Hybrid retrieval
Vector search over Postgres + pgvector fused with full-text search via reciprocal-rank fusion. HNSW-indexed, cosine similarity.
MCP and HTTP
Three MCP tools your agent calls natively, plus a plain HTTP API for scripts, CI, and everything else.
Evals with an honest baseline
Retrieval quality is scored against a deterministic baseline, and the proof-of-value benchmark — limitations included — ships in the repo.
Usage-aware ranking
Query telemetry feeds back into retrieval as a usage-weighted boost: hit@5 0.790 → 0.807 in evals, tunable by env var.
Intent to merged PR
A flagship pipeline generates on-system UI, runs a six-check quality gate with real-browser visual baselines, and auto-merges.
Three tools, zero glue code
Register the stdio server with any MCP client — Claude Code, Cursor, anything that speaks MCP — and the corpus is queryable.
search_design_system(query, limit) Hybrid search across the whole corpus. Ranked chunks with source path, component, doc type, and RRF score.
get_component_docs(component) Everything about one component, ordered docs → source → stories. Near-name suggestions when a lookup misses.
get_design_tokens() The full design-token set, ordered and cached. Ask once, theme correctly.
Running in one command
The quickstart stack ships a deterministic fake embedder and the pinned shadcn/ui corpus — no API keys required. Swap in Voyage embeddings with a single env var when you're ready.
git clone https://github.com/abdalkadir/assembly.git
cd assembly
make quickstart → knowledge API on 127.0.0.1:8100 · shadcn/ui corpus ingested · no keys