reference_brands=[stripe] strict=True → 100% Stripe tokens, no axis adaptation. Fastest path. For when you know exactly what you want.
The brain that ships
design work
that doesn't look generated.
v3.0.0 stable. 1,243 structured entries + 160 brand specs + 152 anti-pattern rules — but the catalogue is no longer templates. It's training data for a 7-axis synthesizer that produces a novel design language per brief. The recommender re-ranks from a local decisions ledger you can see. Offline. Deterministic. No LLM. No telemetry.
160 design languages.
Three rails, opposite directions.
Each card is a real specimen — logo, brand colour strip, name in its own typeface. Top rail drifts left, middle drifts right, bottom drifts left. Drag any row with your finger to scrub it; release and it resumes. Tap a card to reskin the page in that brand's voice for six seconds.
160 brand DESIGN.md specs · drag any rail to scrub · tap any card to reskin the page · the catalogue keeps growing
Brand specs are training data,
not templates.
The catalogue used to be the menu. Pick Stripe, get Stripe. v3.0 turns the catalogue into training data for a 7-axis synthesizer — warmth, contrast, density, geometry, formality, motion, type personality. The engine reads the brief, maps it to axis values, and compiles a fresh palette + type + spacing + radius + motion stack. Three dispatch modes decide how much of a named brand to anchor on. The output is novel every call.
Anchor on a named brand, then bend it toward the brief's axis values using 4 sibling brands. For "Stripe-like but for healthcare." The default when one brand is referenced.
No brand named. The synthesizer picks 8 axis-matching exemplars from the catalogue, distills the shared signal, and compiles a brand-new design language. Output is novel every call.
A brief lands on seven values. Same brief → same tokens. Different brief → different design language.
- warmth
- contrast
- density
- geometry
- formality
- motion
- type_personality
The brain learns from itself.
Every /ux-design, /ux-lint, and /ux-evolve writes to .ux/decisions.jsonl. After 3 lint-clean + accepted decisions in an (industry, ui_type) bucket, /ux-recommend bumps that winning combination next time. Offline. Local file. No telemetry. You can cat it.
Five parallel searches.
One recommendation.
Merged by industry fit, brand voice, and anti-slop risk.
Style
Saturated Cinema
0.94Palette
Media-derived (no fixed)
0.91Type
Bricolage × Inter × JBM
0.89Motion
Slide-up clip 480ms
0.87Components
12 compatible
0.93152 regex rules.
Run before commit.
Deterministic. JSON-queryable. The page you are reading scanned clean.
Same engine.
Every coding agent.
One mockup. Three hosts. The same tool reads the same brief.
For the people who
actually ship the work.
Recommender returns tokens; a person turns them into a product. Five plates from the worlds ux-skill ships into — hands on a keyboard, a window-lit workspace, a portrait, an architectural lobby, a designer at the surface. Tools are nothing without the practitioner.
A pair of hands
at four in the morning.
The session writes the JSX. You earn the shape. ux-skill is the brief in between — so the keystrokes ship something a real person would defend in review.
Window light, one screen,
nothing else open.
160 brand specs · 184 industries · 112 UX laws — the entire library sits in /data, indexed before you start. The room stays quiet.
The portrait
of an opinionated taste.
An anti-slop linter scans the diff before commit. It refuses the generic phrase, the placeholder palette, the missing alt text. The person stays in charge.
Negative space
holds the brand.
Apple, Aesop, Patagonia-school restraint lives in the catalogue — palette, type, voice, do's-don'ts. The session pulls the whole spec, not a slogan.
Designer-grade tools,
built for the AI session.
25 slash commands, 18 MCP tools, 5 sub-agents, deterministic linter, Python recommender, 7-axis synthesizer. The AI moves; the practitioner curates.
Between calls.
The system remembers.
Every /ux-recommend writes one line to .ux/decisions.jsonl. The next call reads that file. The brain is the loop, not the model.
Seven axes.
One person's intent.
warmth · contrast · density · geometry · formality · motion · type personality. The brief compiles to all seven. The output compiles back from them. Same brief always lands the same way.
160 brands.
Not templates.
Training data.
Apple, Stripe, Linear, Ferrari, Anthropic, Aesop. v3.0 distills their palettes, type stacks, and motion vocab into something new. No single brand wins. The output is yours.
Score 91.
Ships.
/ux-evolve auto-iterates lint → polish → re-lint until composite reaches 90 or plateaus. Below 65, refuses to ship. The quality gate isn't decoration. It's the gate.
Photographs via Lorem Picsum · CC0 · sourced from contributing photographers on Unsplash. Editorial use; tinted to read on dark.
Not a marketing render.
The plugin, in the editor.
One install. Recommendation in chat. Component in editor.
/ux-design. The recommendation feeds the chat; the chat writes the component.
/ux-recommend → /ux-design
ux lint · 152 rules · file:line, why, fix
The catalogue.
The surface area.
We measured.
We wrote it down.
50-point rubric. Built from gh api on 2026-05-28.
Three runtimes.
One engine.
Pick the runtime that fits where you live. The Python wheel is the engine. The npm shim wraps it for Cursor and Windsurf. The Claude plugin loads it natively.
pip install 'uxskill[all]'
Includes engine, CLI, MCP server, and the full data bundle. Python 3.10+.npx uxskill@latest init
Wraps the Python engine for editors that prefer Node. No global install required.claude plugin install ux@ux-skill
Native install into Claude Code. Slash commands and sub-agents load on next session.14 tools over stdio for any MCP host. Same Python wheel, no extra runtime.
Read the MCP spec