uxskill
Star on GitHub
v3.0.0 — THE BRAIN MIT, no telemetry

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.

1,243 entries 22 commands 145 lint rules 160 brand specs 17 IDEs
~/dot/landing — uxskill 3.0
$
02 — Brand specs · 160 catalogue · growing

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

02.5 — THE BRAIN · v3.0 architecture

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.

Mode 01 · fastest strict_brand 100% brand · verbatim

reference_brands=[stripe] strict=True → 100% Stripe tokens, no axis adaptation. Fastest path. For when you know exactly what you want.

Mode 02 · the sweet spot brand_anchor 70% named · 30% axis adaptation

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.

Mode 03 · infinity space pure_synthesis 0% brand · 100% axes

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.

The 7 axes · deterministic mapping

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.

03 — The reasoning engine

Five parallel searches.
One recommendation.

Merged by industry fit, brand voice, and anti-slop risk.

Brief in Marketing site / Developer tools / dark / editorial / cinematic
forbid amber forbid coral media-first a11y AA

Style

Saturated Cinema

0.94

Palette

Media-derived (no fixed)

0.91

Type

Bricolage × Inter × JBM

0.89

Motion

Slide-up clip 480ms

0.87

Components

12 compatible

0.93
Merged recommendation
Saturated Cinema, dark canvas, scene-local palettes, Bricolage variable display, terminal-led hero.
5 lanes, 1,243 entries searched, 31ms median.
04 — The anti-slop linter

152 regex rules.
Run before commit.

Deterministic. JSON-queryable. The page you are reading scanned clean.

~/dot/landing — ux lint
$ ux lint docs/ --threshold high
Scanning 14 files · 152 rules active
blog/cursor-design-plugin.html:184 medium inter-as-display
about.html:53 high cormorant-garamond-leak
index.html clean 0 findings
done in 31ms
145 rules 0 high
05 — Inside the editor

Same engine.
Every coding agent.

One mockup. Three hosts. The same tool reads the same brief.

Cursor  ·  landing.tsx
/ux-recommend cmd+k
Style Saturated Cinema
Type pair Bricolage × Inter × JBM
Motion Fade-up clip · 480ms
05A — Editorial

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.

Plate 01 · The keyboard

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.

Plate 02 · The workspace

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.

Plate 03 · The maker

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.

Plate 04 · The room

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.

Plate 05 · The surface

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.

Plate 06 · The pause

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.

Plate 07 · The brief

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.

Plate 08 · The catalogue

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.

Plate 09 · The verdict

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.

05·5 — In the editor

Not a marketing render.
The plugin, in the editor.

One install. Recommendation in chat. Component in editor.

Cursor IDE running /ux-design — sidebar shows .ux/last-recommendation.json, editor shows generated Hero.tsx, chat shows linter result
Cursor running /ux-design. The recommendation feeds the chat; the chat writes the component.
Claude Code session — ux recommend chained into ux design
Claude Code · /ux-recommend/ux-design
Terminal output of ux lint — findings with file:line, severity, why, fix
ux lint · 152 rules · file:line, why, fix
160 brand DESIGN.md specs — a mosaic of brand surfaces
160 brand specs · type, palette, voice

Color is what the section is about, not what it has. Every fold takes its palette from its media. The page is a film, not a swatch.

07 — By the numbers

The catalogue.
The surface area.

0Structured entries
0Anti-pattern rules
0Brand DESIGN.md specs
0IDE integrations
08 — The scorecard

We measured.
We wrote it down.

50-point rubric. Built from gh api on 2026-05-28.

uxskill 0/50
next-best plugin 0/50
See the full 50-point scorecard
09 — Install

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.
10 — MCP server

14 tools over stdio for any MCP host. Same Python wheel, no extra runtime.

Read the MCP spec