English · العربية · 简体中文 · 繁體中文 · 日本語 · 한국어 · हिन्दी · Bahasa Indonesia · Tiếng Việt · ไทย · Français · Deutsch · Español · Português · Italiano · Русский · Türkçe
ux-skill — the design intelligence engine for Claude Code, Cursor, and every other AI coding tool
A design-intelligence engine that makes AI-generated UI distinctive instead of generic. Drop it into any of 17 AI coding tools and your output stops reading as AI-built. Free, MIT, offline, no LLM.
pip install uxskill
Star ux-skill on GitHub if this is useful — it is the single cheapest way to help the project. New here? Start with the 60-second tour or see it live at uxskill.laithjunaidy.com.

Before: generic stock-photo SEO slop. After: real construction-photo hero under a dark scrim, editorial headline with an amber accent, quote form in the hero. Same AI coding tool, same prompt, different result when ux-skill supplies the constraints.
v3.1.0 — THE BRAIN, now brand-true + responsive. The strongest UX plugin for AI coding. A Python reasoning core with a deterministic 7-axis synthesizer, 12 queryable JSON manifests (84 styles, 176 palettes, 70 type pairings, 148 components, 184 industries, 35 chart types, 57 motion presets, 112 UX laws, 152 anti-pattern rules, 25 tech stacks, 160 brand specs), 25 slash commands, 5 sub-agents, 18 MCP tools, and a deterministic anti-AI-slop linter. Cross-IDE: ships into Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini CLI, Codex, Kiro, Cline, Continue, Aider, Zed, JetBrains AI, Pieces, Tabby, Tabnine, CodeWhisperer, and Roo Cline.
The brand name is
ux-skill. The PyPI / npm package name staysuxskill. The GitHub repo lives atLaith0003/ux-skill.
Site: uxskill.laithjunaidy.com · Compare vs every Claude UX plugin: compare.html · GitHub: Laith0003/ux-skill · PyPI: uxskill · npm: uxskill
New in v3.1 — brand-true, responsive, alive
- Brand fidelity is enforced, not hoped. The primary color is read from the LOGO's pixels (not the most-painted CSS); default fonts are rejected for the logo's letterform style. The extracted brand travels
recommend->synthesize, and a hard floor inevaluateFAILS any output that drops the brand color/logo or ships no real imagery. Two-way interop with the openbrand.mdconvention (render + ingest). - Mobile-first, gated. New craft foundations (
responsive.md,component-behaviors.md) plus a wrap-aware gate that fails on horizontal scroll, a wrapping nav/wordmark/button label, or an over-tall sticky header. - The wow layer. The engine derives 2-3 coordinated signature moments per page — the "wow can only come from the user" doctrine is overturned.
- Sharper linter (152 rules): imagery-mandatory + icon-only detection, placeholder-token and
100vwrules; seeded picsum kept, random stripped.
Tests 310 passing. Offline. Deterministic. No LLM ever called. Full notes in CHANGELOG.md.
What's new in v3
- Brand specs become training data, not templates. The 160 brand specs are no longer a catalogue the recommender picks from — they're vocabulary the synthesizer distills from. Output is novel every call.
- 7-axis synthesizer (warmth, contrast, density, geometry, formality, motion, type_personality). Briefs map deterministically to axis values; axis values compile to fresh palette + type + spacing + radius + motion tokens.
- Three auto-dispatched modes —
strict_brand(100% of one brand),brand_anchor(70% one brand + 30% axis-adapted siblings),pure_synthesis(no brand named — distill from 8 axis-matching exemplars). - Decisions ledger drives the recommender.
.ux/decisions.jsonlre-ranks candidates by past wins in the same(industry, ui_type)bucket. Cold-start safe. Counts onlylint_score >= 80+user_accepted = truedecisions. - Axis interaction matrix — explicit conflict resolution between competing axes (dense + corporate → 4px, airy + corporate → 12px, soft + playful → 18px radius). No more silent ad-hoc rules.
/ux-evolveauto-loop — lint → polish → re-lint until score ≥ 90 or plateau or 5 rounds. Quality gate at 65.- 3 new MCP tools (15 → 18):
ux_synthesize,ux_decisions_query,ux_decisions_stats. - Local stats dashboard —
uxskill stats --htmlwrites.ux/stats.htmlshowing what YOUR install has learned. No telemetry, no global aggregate. - 223 tests pass. Offline. Deterministic. No LLM ever called.
Full details in CHANGELOG.md.
Star history
What is ux-skill
ux-skill is a design intelligence engine for AI coding tools. It runs as a Python package (pip install uxskill), as a Claude Code plugin, and as a 17-IDE multi-installer. The engine ingests a project brief (industry, audience, tone, must-haves, forbidden moves, stack, region) and returns a complete recommended design system: style, palette, type pair, motion presets, components, brand exemplars to study, and the anti-pattern guardrails that must hold. The recommendation is deterministic — same input always produces the same output.
The plugin sits between you and the AI coding tool. When you ask Claude Code, Cursor, or any other AI assistant to "build a fintech landing page," the assistant typically improvises — and the result reads as AI-generated within five seconds (purple-to-blue gradients, three equal cards, Inter at display size, "John Doe" in testimonials, 300ms default transitions, centered hero, bouncing arrow CTAs). ux-skill replaces improvisation with structured constraints: you run /ux-discover to capture the brief, /ux-recommend to pick the system, /ux-design to generate the code, and /ux-lint to verify it passes the 152 deterministic anti-AI-slop rules before commit.
This README is the canonical reference. Every command, every sub-agent, every data manifest, every install path, every brand spec, every anti-pattern category — it's all documented here. If you're shopping for a Claude Code design plugin or comparing AI design tools for Cursor, Windsurf, or Codex, read this top to bottom and the compare.html side by side.
Table of contents
- The Brain — what v3.0 is
- Quick install
- The numbers — live comparison vs the top 8 Claude UX skills
- Architecture — how the pieces fit
- The 25 slash commands — detailed reference
- The 5 sub-agents
- The 11 data manifests
- The 152 anti-AI-slop rules — the linter
- The 160 brand DESIGN.md specs — by category
- MCP server — the asymmetric move
- The 17-IDE installer
- Use cases — concrete scenarios
- Compared to alternatives
- Roadmap
- Contributing
- License, author, acknowledgments
The Brain — what v3.0 is
v3.0.0 is the biggest architectural shift in ux-skill's history. The recommender no longer picks templates from a catalogue — the engine synthesizes a fresh design language per brief. Same brief always yields the same output (fully deterministic), but every distinct brief gets its own novel system. Brand specs aren't templates anymore; they're training data the engine learns the vocabulary from. The system has eyes on its own history, closes the feedback loop locally, and never calls an LLM.
The compiler is a deterministic 7-axis synthesizer — warmth, contrast, density, geometry, formality, motion, type_personality. Every brief maps to axis values; axis values compile to fresh palette + type + spacing + radius + motion tokens. Modular type scales pick their ratio from contrast (1.200 quiet / 1.250 balanced / 1.333 loud). Layout primitives are responsive by construction (auto-fit minmax(min(N, 100%), 1fr) + container queries). Broken layouts can't be emitted because they aren't representable.
There are three auto-dispatched modes: strict_brand (reference_brands=[stripe] strict=True → 100% Stripe tokens, fastest path); brand_anchor (reference_brands=[stripe] → 70% Stripe + 30% axis-adapted from 4 sibling brands); and pure_synthesis (no brand named → infinity space, 8 axis-matching exemplars distilled into a novel design language). Conflicting axes are resolved by a documented axis interaction matrix — dense + corporate compiles to 4px (density wins, Bloomberg-school), airy + corporate to 12px (formality wins, luxury), soft + playful to 18px radius, sharp + corporate to 2px. No silent ad-hoc rules in the implementation.
The decisions ledger (.ux/decisions.jsonl, schema _v: 1 locked) closes the feedback loop. The recommender now re-ranks candidates by past wins in the same (industry, ui_type) bucket. Cold-start safe — it skips below 3 priors. It only counts decisions with lint_score >= 80 AND user_accepted = true. Plus /ux-evolve runs lint → polish → re-lint until score ≥ 90 or plateau or 5 rounds, with a 65-score quality gate below which output is refused unless --force. The result: every install gets smarter on its own corpus, every run is reproducible across machines, and the engine stays fully offline.
Quick install
Three install paths. Pick the one that matches your environment.
Path 1 — Claude Code marketplace (canonical)
If you live in Claude Code, install via the plugin marketplace:
/plugin marketplace add Laith0003/ux-skill
/plugin install ux@ux-skill
That wires all 25 slash commands and 5 sub-agents into your Claude Code session. After install, run /ux-init to set up the per-project .ux/ state directory and verify the Python engine is reachable.
Path 2 — pip (universal)
If you live outside Claude Code (Cursor, Windsurf, CLI, CI), install the Python package:
pip install uxskill
uxskill init # auto-detects your IDE, installs the right artifact
uxskill stats # print manifest counts to verify install
uxskill lint . # run the linter against the current directory
The package exposes both ux and uxskill as CLI entry points — they're the same binary.
Path 3 — npx (no Python required)
If you don't want to manage Python directly, the npx wrapper bootstraps everything via pipx:
npx uxskill init # downloads pipx + uxskill on first run
npx uxskill recommend --industry=fintech-neobank --tone=warm --stack=nextjs-15-app-router
Verify install
ux stats
# {
# "version": "3.0.0-stable",
# "counts": {
# "styles": 84,
# "palettes": 176,
# "type-pairs": 70,
# "components": 148,
# "industries": 184,
# "chart-types": 35,
# "tech-stacks": 25,
# "ux-guidelines": 112,
# "motion-presets": 57,
# "anti-patterns": 145,
# "brands": 160
# }
# }
If any count returns 0, the JSON file is missing — open an issue at github.com/Laith0003/ux-skill/issues.
The numbers — live comparison vs the top 8 Claude UX skills
Star counts last verified via gh api on 2026-05-28. ux-skill (Laith0003/ux-skill) is the newest entrant — we're tiny on awareness, deep on architecture. The comparison below is honest: where we lose, where we win.
| Plugin | Stars | Architecture | Slash commands | Linter (CI-safe) | Brand specs | Components | Motion presets | IDEs supported |
|---|---|---|---|---|---|---|---|---|
| nextlevelbuilder/ui-ux-pro-max-skill | 83,958 | Python BM25 + CSV, single skill | 1 | — | — | 0 | 0 | 18 |
| nexu-io/open-design | 54,406 | Node.js + 19 skills + preview | 19 | — | — | 0 | 0 | 1 |
| Leonxlnx/taste-skill | 25,202 | Bash + research-backed taste | 1 | — | — | 0 | 0 | 1 |
| alchaincyf/huashu-design | 15,455 | Single 62 KB SKILL.md + scripts | 1 | — | — | 0 | 0 | 1 |
| google-labs-code/stitch-skills | 5,762 | MCP-wired skill library | multi | — | — | 0 | 0 | 1 |
| dominikmartn/nothing-design-skill | 2,391 | Single-aesthetic skill | 1 | — | — | 0 | 0 | 1 |
| Nutlope/hallmark | 2,164 | Anti-slop design skill | 1 | — | — | 0 | 0 | 1 |
| hamen/material-3-skill | 955 | MD3 components + audit | 1 | — | (MD3 only) | 0 | 0 | 1 |
| Laith0003/ux-skill (ux-skill) | 14 | Python engine + 12 manifests + 25 commands + 5 sub-agents + CI linter | 22 | 152 regex rules | 160 | 148 | 57 | 17 |
Where we lose
- Awareness. They have hundreds of thousands of stars. We have 14. Star us — it's the cheapest way to help.
- Brand recognition. ui-ux-pro-max and open-design have a head start measured in months, not days.
- Marketing polish. They have screenshots, demo videos, and a discoverable landing page. We have a thorough README and a thin landing.
Where we win
- Component library: 148 documented components with anatomy, states, tokens used, and motion specs. None of the other 8 ship a component manifest.
- Motion presets: 57 stack-ready entries (Framer Motion, GSAP, CSS) with reduced-motion fallbacks. None of the others ship a motion manifest.
- Anti-pattern linter: 152 deterministic regex rules, runs in CI, exits non-zero on Critical/High. None of the others ship a deterministic linter.
- Brand specs: 160 real DESIGN.md specs (Apple, Stripe, Linear, Figma, Tesla, BMW, Notion, Spotify, Airbnb, Vercel, Supabase, Cursor, Raycast, Claude, and 96 more). None of the others ship a brand library.
- 17 IDEs supported: same engine, different glue per IDE.
- 25 slash commands: discovery, generation, audit, lint, polish, fix loop, case-study, workshop, copy, motion, a11y, dashboard, conductor — fully integrated.
Full table-by-table side-by-side at uxskill.laithjunaidy.com/compare.html.
Architecture — how the pieces fit
ux-skill (package name: uxskill)
│
├── data/ The brain — queryable JSON manifests
│ ├── styles.json 84 design styles + when/skip + tokens
│ ├── palettes.json 176 palettes (light/dark, contrast verified)
│ ├── type-pairs.json 70 display × body × mono triplets
│ ├── components.json 148 components (anatomy, states, motion)
│ ├── industries.json 184 industry rules + audience signals
│ ├── chart-types.json 35 chart types (when/skip, encoding)
│ ├── tech-stacks.json 25 stacks (Next, Astro, SvelteKit, Blade...)
│ ├── ux-guidelines.json 112 named UX laws (Hick, Fitts, Miller...)
│ ├── motion-presets.json 57 motion presets (entry, exit, hover...)
│ ├── anti-patterns.json 152 regex rules (CI-safe linter source)
│ └── brands/*.json 160 brand DESIGN specs + _index.json
│
├── engine/ Python — the reasoning
│ ├── synthesizer/ v3 — 7-axis deterministic compiler
│ ├── decisions/ v3 — .ux/decisions.jsonl ledger + recommender re-rank
│ ├── recommender/ 5-parallel-search merge engine (re-ranked by decisions)
│ ├── linter/ Deterministic anti-slop scanner
│ ├── discovery/ 10-field forcing protocol
│ ├── generator/ Token + manifest emitter
│ ├── installer/ 17-IDE multi-installer
│ └── cli/ `ux` / `uxskill` entry point
│
├── commands/ 22 Claude Code slash commands (.md)
│ ├── ux-init.md bootstrap
│ ├── ux-stats.md inventory snapshot
│ ├── ux-discover.md 10-field intake (gate)
│ ├── ux-recommend.md FLAGSHIP — 5-parallel search
│ ├── ux-lint.md deterministic linter
│ ├── ux-design.md generate frontend code
│ ├── ux-component.md generate one component
│ ├── ux-system.md generate full design system
│ ├── ux-dashboard.md generate dashboard surface
│ ├── ux-motion.md motion treatment + audit
│ ├── ux-audit.md 6-lens design audit
│ ├── ux-a11y.md WCAG 2.1 AA audit
│ ├── ux-critique.md taste critique (3 wins, 3 misses, 1 move)
│ ├── ux-copy.md microcopy review + rewrite
│ ├── ux-fix.md apply findings as atomic commits
│ ├── ux-polish.md cosmetic pass + AI-slop kill
│ ├── ux-frame.md 4-field framing block
│ ├── ux-research.md research planning + synthesis
│ ├── ux-workshop.md 5-phase design thinking workshop
│ ├── ux-case-study.md publishable Wfrah-editorial case study
│ ├── ux-next.md workflow conductor (read-only)
│ └── ux-expert.md consulting hook
│
├── agents/ 5 sub-agents (.md)
│ ├── frontend-engineer.md React/Next/Vue/Blade/Astro
│ ├── motion-engineer.md Framer Motion / GSAP / CSS
│ ├── copy-writer.md microcopy in brand voice
│ ├── research-synthesizer.md interviews + analytics + competitors
│ └── design-system-architect.md tokens / components / foundations
│
├── references/ Prose source for the data + demo pages
│ ├── foundations/ anti-patterns.md, principles, taste
│ ├── laws/ UX laws long-form
│ ├── process/ discovery-protocol.md (load-bearing)
│ ├── styles/ per-style prose (anti-slop.md, etc.)
│ ├── components/ component long-form
│ ├── output/ output rubrics
│ └── conditional/ stack-specific guidance
│
├── bin/
│ ├── uxskill.mjs npx wrapper -> Python engine
│ ├── ux-lint.py v2 linter (preferred)
│ └── ux-lint.sh v1 fallback (bash + perl-PCRE)
│
└── .ux/ (created per project)
├── last-discovery.json brief snapshot
├── last-recommendation.json picked system
├── last-frame.json framing block
├── last-audit.json / last-a11y.json / last-copy.json / last-motion.json
├── last-design.json / last-component.json / last-dashboard.json
└── last-critique.json / last-polish.json / last-research.json / last-workshop.json / last-case-study.json
How the engine actually works
- Input. You provide a brief — either interactively via
/ux-discover(10 fields) or non-interactively via flags toux recommend. - 5 parallel searches. The engine runs five lookups concurrently across the manifests:
- Industry → recommended_styles (industries.json)
- Style → palette + type + motion compatibility (styles.json)
- Tone × must-have → palette filter (palettes.json)
- Stack → component compatibility + motion presets (tech-stacks.json, motion-presets.json)
- Forbidden + region → guardrails + brand exemplar shortlist (anti-patterns.json, brands/)
- Merge. A deterministic merger ranks candidates, resolves conflicts (e.g., must-have dark-mode forces palette mode), and emits a single recommended system.
- Output. A JSON document with the picked style, palette, type pair, top 5 motion presets, top 12 components, top 5 brand exemplars, and all 152 anti-pattern guardrails active. Plus a rationale block explaining each pick.
- Generation. Downstream commands (
/ux-design,/ux-component,/ux-system,/ux-dashboard) consume the recommendation to generate actual code via the sub-agents. - Verification.
/ux-lintre-scans the generated code against the 152 regex rules. Exits non-zero on Critical/High in CI.
v3 additions. The recommender now re-ranks candidates from engine/decisions/ using .ux/decisions.jsonl (only counts decisions with lint_score >= 80 AND user_accepted = true; cold-start safe below 3 priors). The generator path can dispatch into engine/synthesizer/ — a deterministic 7-axis compiler that produces fresh palette + type + spacing + radius + motion tokens per brief instead of picking templates from a catalogue. See The Brain — what v3.0 is for details.
Python thinks. HTML shows. Markdown chains.
The 25 slash commands — detailed reference
Every command is shipped as a .md file under commands/ with description, allowed-tools, triggers, when to use, when to skip, input, process, and output state file. The descriptions below are condensed; the full source is the canonical spec.
Commands are grouped into five buckets: bootstrap & inventory, discovery & recommendation, generation, audit & verify, fix & polish, and conductor.
Bootstrap & inventory
/ux-init — bootstrap the project
- What: Detects which IDE you're using (
.claude/,.cursor/,.windsurf/, etc.), installs the right artifact, verifies the Python engine is reachable, prints a stats snapshot. - When to use: First time installing in a new project. After cloning a project that uses ux-skill. After
pip install --upgrade uxskill. - When to skip: You already ran it in this project and nothing changed.
- Invocation:
/ux-init(no args) oruxskill initfrom the CLI. - Output: Per-IDE artifact (see The 17-IDE installer) +
.ux/directory + stdout summary. - Chains to:
/ux-discovernext.
/ux-stats — print the data inventory
- What: Prints version + entry counts for the 11 data manifests, so you can verify what's installed.
- When to use: After install. After upgrade. When
/ux-recommendreturns surprising picks and you suspect the manifests are incomplete. - When to skip: Never — it's a 50ms read-only command.
- Invocation:
/ux-statsoruxskill stats. - Output: JSON to stdout (see Verify install above).
- Chains to: Diagnostic only; doesn't feed downstream.
Discovery & recommendation
/ux-discover — the forcing function (10-field intake)
- What: The mandatory 10-field intake every project goes through before any generation command. Project type, audience, primary goal, tone, must-haves, forbidden, reference brands, stack, region, success metric. No improvisation. Banned phrases ("modern", "clean") force the user to be specific.
- When to use: Before any
/ux-design,/ux-component,/ux-system, or/ux-dashboard. Whenever a previous brief has gone stale. - When to skip: You're fixing a bug (
/ux-fix). You're only running a linter pass (/ux-lint). The brief is unchanged from the last session. - Invocation:
/ux-discover. The plugin asks; you answer. - Output: Writes
.ux/last-discovery.json(the 10-field brief). - Chains to:
/ux-recommend→ uses the discovery to pick style + palette + type + motion + components./ux-design [extra brief]→ generates frontend code grounded in the recommendation./ux-component <name>→ generates one component aligned to discovered constraints.
/ux-recommend — the flagship 5-parallel-search engine
- What: Runs the Python engine's 5-parallel-search across 12 manifests and returns one merged design system. Industry → Style → Palette → Type → Motion + Components + Brand Exemplars + Guardrails.
- When to use: Starting a new project from zero. Pivoting a tired-looking product. Pre-flight before any
/ux-designor/ux-component. - When to skip: You already ran
/ux-discoverand saved a brief —/ux-recommendis automatic in that flow. You're fixing one bug (use/ux-fix). You only need to lint (use/ux-lint). - Invocation (Claude Code):
Invocation (CLI):/ux-recommendux recommend \ --project-type=landing \ --industry=fintech-neobank \ --tone=warm --tone=editorial \ --must-have=dark-mode --must-have=a11y-AA \ --forbidden=brutalism --forbidden=purple-gradients \ --stack=nextjs-15-app-router \ --region=mena - Output: Writes
.ux/last-recommendation.json— picked style, picked palette, picked type pair, top 5 motion presets, top 12 components, top 5 brand exemplars, all 152 anti-pattern guardrails active, plus rationale. - Chains to:
/ux-design [brief]→ frontend code using the recommended tokens./ux-system→ full design system from the recommendation./ux-component <name>→ one component using the recommended style./ux-lint→ verify the generated code.
Generation
/ux-design — generate a beautiful, anti-slop surface from a brief
- What: Generates a complete, production-grade frontend artifact (landing, marketing site, app shell) from the discovery brief + recommendation. Dispatches
frontend-engineerwith creative direction from anti-slop and arsenal references. - When to use: "Design a", "build me a", "generate a landing page", "create a dashboard", "make a component" — any free-form visual deliverable request.
- When to skip: You want a review, not a build (use
/ux-auditor/ux-critique). You want one component only (use/ux-component). Backend or infrastructure work. - Invocation:
/ux-design generate a fintech landing for a MENA neobank, warm editorial tone, dark-mode AA, no purple gradients. - Output: Generated code (HTML / Blade / JSX / Vue / Astro), plus
.ux/last-design.json. - Chains to:
/ux-lint→ verify against guardrails./ux-polish→ cosmetic pass./ux-a11y→ accessibility audit./ux-copy→ microcopy review./ux-fix→ apply findings as atomic commits.
/ux-component — generate one component
- What: Produces a single, production-grade component (button, modal, navbar, sidebar, card, table, form, chart) from a spec. All four interaction states, accessible, on-brand. Looks up the component in
.ux/last-recommendation.jsonfirst, falls back to direct manifest query. - When to use: Any single-element request — "build a button", "create a pricing card", "make a modal", "add a navbar", "design a sidebar", "I need a data table", "build a form", "make a chart component".
- When to skip: Full page or multi-section surface (use
/ux-design). Backend or infrastructure. - Invocation:
/ux-component pricing-card-trio --brief="fintech, dark, monospace numbers". - Output: Generated component code, plus
.ux/last-component.json. - Chains to:
/ux-lint→ verify./ux-polish→ tighten.
/ux-system — generate a complete starter design system
- What: Proposes a complete starter design system for a project that doesn't have one — tokens (color, type, space, motion, radius, shadow), foundation docs, component contracts, dark-mode pairings, theme switcher. Dispatches
design-system-architect. - When to use: "We don't have a design system", "build us a system", "propose tokens", "what should our theme be", "set up our DS".
- When to skip: The project already has a design system — use
/ux-componentagainst the existing system instead. Backend or infrastructure. - Invocation:
/ux-system(runs discovery first if not already on file). - Output:
tokens.json,foundations.md,components/*.mdcontracts, optional Tailwind / vanilla / SCSS emit. Writes.ux/last-system.jsonfor chain context. - Chains to:
/ux-component→ build against the new system./ux-design→ generate a surface using the new tokens.
/ux-dashboard — specialized dashboard generation
- What: Dashboard with data density discipline — bento layout, tabular monospace numerals, sparkline patterns, anti-card-overuse, semantic state colors, sparing motion. Not a marketing site with charts pasted on.
- When to use: "Build a dashboard", "design the admin panel", "make a metrics page", "operator console", "analytics view", "KPI board", "monitoring screen".
- When to skip: Marketing landing page with stats (use
/ux-design). One widget only (use/ux-component). Backend or infrastructure. - Invocation:
/ux-dashboard. - Output: Generated dashboard code +
.ux/last-dashboard.json. - Chains to:
/ux-lint,/ux-audit,/ux-a11y.
/ux-motion — motion treatment
- What: Generates the motion layer of a surface — durations, easings, choreography, reduced-motion fallbacks, performance discipline. Also audits existing motion against the 5 dimensions (timing, easing, meaning, reduced-motion, performance).
- When to use: "Motion check", "are the animations good", "fix the motion", "review the animations", "motion audit", "performance pass on the motion".
- When to skip: Surface has no motion (use
/ux-auditor/ux-polish). Backend or infrastructure. - Invocation:
/ux-motion path/to/component.tsx(audit mode) or/ux-motion --generate hero-entry(generation). - Output: Updated code (in generation mode) or
.ux/last-motion.jsonreport (in audit mode). - Chains to:
/ux-fix→ apply motion findings./ux-polish→ tighten.
Audit & verify
/ux-lint — deterministic regex-based linter (no LLM, CI-safe)
- What: Runs 152 regex rules against your code. No LLM call. Exits non-zero on Critical / High in CI. Source:
data/anti-patterns.json. Rules cover A11y (23), Content (15), Layout (13), Typography (10), Color (9), Quality (9), Visual (9), Motion (8), Performance (4). - When to use: Pre-commit hook. CI gate. Fast first pass on a large codebase before paying the cost of
/ux-audit. After/ux-designor/ux-componentto verify generation. - When to skip: You want a fix loop (the linter reports, it does not edit — chain into
/ux-polish --fixor/ux-fix). You want taste judgment (use/ux-critique). - Invocation (slash):
/ux-lint src/. - Invocation (CLI):
uxskill lint .orpython3 bin/ux-lint.py .orbash bin/ux-lint.sh --ci --fail-on high. - Invocation (CI):
- name: ux-lint run: bash bin/ux-lint.sh --ci --fail-on high - Output: Findings to stdout (location, rule id, severity, evidence). Exit code 0 if clean, non-zero on Critical/High when
--fail-on highis set. - Chains to:
/ux-polish --fix→ LLM-driven counterpart on the same patterns./ux-fix→ apply findings as commits, severity-sorted./ux-audit→ full 6-lens reasoning pass./ux-next→ let the conductor decide.
/ux-audit — 6-lens design audit
- What: A structured, opinionated review against six lenses (clarity, hierarchy, accessibility, voice, motion, taste), producing severity-tagged findings. Polaris-style report. Reads
.ux/last-frame.jsonfirst — audience and outcome anchor every finding's severity. - When to use: Surface exists and you want a defensible critique. "Audit", "review the ux", "is this any good", "what's broken", "tear this apart".
- When to skip: Surface doesn't exist yet (use
/ux-design). User wants one lens (use the targeted command:/ux-a11y,/ux-copy,/ux-motion,/ux-polish). User wants taste opinion (use/ux-critique). Backend or infrastructure. - Invocation:
/ux-audit https://example.com/pricingor/ux-audit src/components/Pricing.tsx. - Output: Writes
.ux/last-audit.json—findingsarray of{lens, severity, title, principle, evidence, fix},severity_counts,dominant_lens,strategic_moves. - Chains to:
/ux-fix→ apply findings./ux-polish→ cosmetic pass./ux-design→ if structural redesign needed.
/ux-a11y — WCAG 2.1 AA audit + common-courtesy checks
- What: A structured WCAG 2.1 AA audit, plus the common-courtesy checks that pass automated tools but still hurt real users (focus visibility, error specificity, motion preferences, keyboard traps, color reliance).
- When to use: Pre-ship accessibility gate. After a redesign. "Accessibility check", "WCAG audit", "is this accessible", "a11y review", "screen reader test", "keyboard nav check".
- When to skip: Not user-facing. Backend or infrastructure. Work-in-progress sketches.
- Invocation:
/ux-a11y https://example.com(live URL preferred — automated tools and keyboard testing only work live). - Output: Writes
.ux/last-a11y.json—findingsarray of{wcag_sc, sc_name, severity, title, evidence, fix, category},beyond_wcagarray,severity_counts. - Chains to:
/ux-fix→ apply findings as commits./ux-copy→ fix alt text and form-error wiring as part of a copy pass.
/ux-critique — taste call (3 wins, 3 misses, 1 strategic move)
- What: A designer's opinion — not a structured audit, not a severity score, just a tight, opinionated take that names what's working, what's not, and the one strategic move that would change the most.
- When to use: "What do you think", "is this good", "critique this", "honest take", "is the vibe right", "does this feel like us", "should we ship this".
- When to skip: User explicitly wants a structured audit (use
/ux-audit). Backend or infrastructure. - Invocation:
/ux-critique https://example.com. - Output: Writes
.ux/last-critique.json— 3 wins, 3 misses, 1 strategic move, plus prose. - Chains to:
/ux-designif the take recommends redesign./ux-polishif the take recommends tightening.
/ux-copy — microcopy review + rewrite
- What: Evaluates every visible string against the voice rubric and produces a before/after rewrite. Catches: "form contains errors" (generic), "John Doe" (placeholder), AI-cheerful celebratory copy, generic CTAs, dead empty states, useless errors.
- When to use: Structure is right but words are weak. "Review the copy", "fix the microcopy", "the error messages are bad", "rewrite this", "tighten the strings", "the buttons sound generic", "this empty state is dead".
- When to skip: Layout problems (use
/ux-auditor/ux-polish). Accessibility-driven copy issues like alt text (use/ux-a11y). Backend or infrastructure. - Invocation:
/ux-copy src/views/checkout.blade.php. - Output: Writes
.ux/last-copy.json—stringsarray of{location, severity, before, after, notes}, plus rubric + locales needing translation. - Chains to:
/ux-fix→ apply rewrites./ux-a11y→ re-check after copy fixes.
Fix & polish
/ux-fix — apply findings as atomic commits
- What: Reads the latest report from
.ux/(audit, copy, a11y, motion, or polish), validates the working tree, and applies findings as atomic commits via the right sub-agents. Re-verifies by re-running the originating command. - When to use: After running an audit-class command and reviewing findings. "Fix the findings", "apply the fixes", "run the fix loop", "patch the surface", "make the changes", "go fix it".
- When to skip: No prior report in
.ux/. Working tree is dirty and the user hasn't agreed to stash/commit. Fixes need design judgment, not mechanical application (use/ux-designfor a redesign). - Invocation:
/ux-fix(auto-detects which report to fix) or/ux-fix --from=last-a11y.json. - Output: Atomic commits per finding. Re-runs the originating command and updates the
.ux/last-*.jsonfile. Prints a summary. - Chains to:
/ux-next→ conductor picks the next move.
/ux-polish — cosmetic pass + AI-slop kill
- What: Spacing rhythm, hierarchy sharpening, AI-slop detection, token consistency. The LLM-driven counterpart to
/ux-lint— uses your judgment on taste calls. - When to use: Structure is right but execution is loose. "Polish", "tighten this up", "remove the AI-slop", "make it premium", "make this less AI-looking", "the spacing feels off", "this looks generic", "needs more taste".
- When to skip: Surface is missing core functionality (fix that first). Needs a redesign, not a polish (use
/ux-design). Copy issues (use/ux-copy). Motion issues (use/ux-motion). A11y issues (use/ux-a11y). - Invocation: `/ux-polish src/comp
No comments yet
Be the first to share your take.