Privacy-friendly analytics only with consent. No ads, no cross-site tracking. Read the privacy policy.
Slipstream treats an AI coding agent as a first-class consumer. Instead of hoping a model infers the API from source, every component publishes a contract and a validator checks the generated JSX before it ships. 109 components (92 core, 17 AI) ship that contract today.
Agents trained on the open web guess at component APIs. The result is usually the same three failures: a prop that does not exist, an enum value that was never in the type, or a required prop that never appears. Documentation written for humans does not close that gap, because the model never sees it at the moment it writes the code.
Each component directory ships a manifest beside its source. The manifest is small enough to load into a prompt and explicit enough to validate against:
{"id": "stepper","name": "Stepper","tier": "molecule","description": "Multi-step flow indicator...","props": [{ "name": "current", "type": "number", "required": true },{ "name": "orientation", "type": "'horizontal' | 'vertical'","defaultValue": "horizontal", "enum": ["horizontal", "vertical"] },{ "name": "variant", "type": "'numbered' | 'dots'","defaultValue": "numbered", "enum": ["numbered", "dots"] }],"examples": [{ "title": "Onboarding wizard", "code": "<Stepper ... />" }],"antiPatterns": [{ "title": "Don't use it for progress percentage", ... }],"accessibility": [{ "feature": "Sequence + state", ... }],"compositionRules": [{ "component": "Form", ... }],"relatedComponents": ["Progress", "Tabs", "Form"]}
The manifest is not a copy of the TypeScript types. It adds intent, anti-patterns, and accessibility requirements that types cannot express. A drift checker compares the two on every run, so the contract cannot silently fall behind the code.
1. search_components("multi-step form")-> Stepper, Progress, Tabs2. get_component_manifest("stepper")-> exact props, defaults, required flags, examples3. the agent writes JSX<Stepper current={step} orientation="vertical" steps={steps} />4. validate_usage({componentId: "stepper",code: "<Stepper current={step} orientation='vertical' steps={steps} />"})-> { valid: true, issues: [] }5. emit only after validation passes
The validator reports unknown props, values outside a documented enum, and missing required props. It also returns the manifest's anti-patterns so the agent can re-check intent, not only syntax.
A JSON contract beside every component: prop schema, defaults, enums, examples, anti-patterns, accessibility, content, and composition rules.
Manifest schema →
Five tools let an agent search, read, and validate against the manifests at authoring time. No source scraping, no guessed props.
MCP reference →
Every manifest is also served as clean markdown and a single-file corpus, so any agent that can fetch works without an MCP client.
Agent integration →
The same data powers the shadcn-compatible registry and the CLI, so humans and agents install the exact source the docs describe.
CLI reference →
| You have | Start with | Then |
|---|---|---|
| An MCP-capable IDE (Claude Code, Cursor, Windsurf, OpenCode) | The MCP server | Add a rules-file instruction that requires validate_usage. |
| Any agent that can fetch a URL | /llms.txt | Read the per-component markdown for props and anti-patterns. |
| A build pipeline or codegen tool | The registry JSON | Read manifests at build time; copy source with the CLI or shadcn. |
| A human writing the first screen | The quickstart | Read one manifest so you know what your agent will see. |
pnpm validate:manifests # schema + TS drift + versions + countspnpm generate:registry # /registry/*.jsonpnpm generate:llm-docs # /llm/*.md, llms.txt, llms-full.txtpnpm check:llm # fail if generated docs are stale
validate_usage is a contract check, not a compiler or a design review. It does not type-check expressions, run your app, or judge visual composition. Keep your normal tsc, tests, and axe runs in the loop; the validator catches the class of mistakes that type-checking never sees because the generated code imports the real types only after it is emitted.
Concrete configs for Claude Code, Cursor, Windsurf, and OpenCode.
Run validate_usage and manifest checks on every pull request.
Streaming chat, agent dashboard, RAG citations, and more.
The same overview an agent fetches before writing code.