Ship designer-grade UI by default. A design engineering system for AI coding agents — install it as a skill or as the ui-craft CLI, and your agent starts designing like it has taste. Ask for a dashboard, get one you'd put in production. Not gradient cards and bounce animations.
Website: skills.smoothui.dev

/craft dashboard
Three questions (or none — the defaults are strong), a named composition, a production theme preset, and a build that must pass a 10-item acceptance bar before it reports done: "would a designer retouch this?" If a box fails, it isn't done.
For everything else — reviews, animations, forms, polish — the skill routes by intent: just describe what you're building.
New here? Run /start — it reads your project (framework, tokens, brief, existing UI) and tells you what ui-craft can do right now, then points you at the right next step.
UI Craft gives AI coding agents the design knowledge they're missing. Not templates. Not component libraries. Actual craft knowledge — opinionated rules about how interfaces should look, move, and feel — plus the tooling to verify the result. Stack-agnostic by design.
Every UI gets tested against a single question: "Would someone believe AI made this?" If yes, it starts over.
You don't have to learn any of it to benefit. It grows with you.
| Layer | You do | You get |
|---|---|---|
| 1 · Just install it | Nothing — ask for UI the way you always do | The agent designs with taste: real hierarchy, system tokens, no AI slop. Same prompt, shippable result. |
| 2 · Drive it | Run /start to see your options, then a slash command (/craft, /sddesign, /finalize, …) |
Focused passes — build a surface, run a scored critique, gate a ship. 22 commands, one lens each. |
| 3 · Verify it | Wire the agents / MCP / CLI into review or CI | Independent design + a11y review, a deterministic 0-100 quality score, an anti-slop gate on every commit. |
Start at Layer 1. Most people never leave it — that's the point. Layers 2 and 3 are there the day you want them.
What makes this different: the only AI design system that produces a scoreable, defensible critique — Nielsen's 10 usability heuristics × 6 classic design laws (Fitts, Hick, Doherty, Cleveland-McGill, Miller, Tesler) × 5 persona walkthroughs, with every finding tagged by business impact (blocks-conversion / adds-friction / reduces-trust / minor-polish). Paste the scorecard straight into any issue tracker.
Without UI Craft
![]() |
With UI Craft
![]() |
![]() |
![]() |
More before/after comparisons on the landing page.
A single static Go binary that detects your AI coding harness and wires skill+commands, MCP gates, review agents, and design-memory into its native config in one interactive pass. No Node required at install time.
macOS / Linux:
brew install --cask educlopez/tap/ui-craft
Windows (Scoop):
scoop bucket add educlopez https://github.com/educlopez/scoop-bucket
scoop install educlopez/ui-craft
Then run:
ui-craft install
ui-craft install detects Claude Code / Cursor / Codex / Gemini / OpenCode, walks you through à-la-carte component selection (interactive TUI or --yes for CI), and writes each chosen component into that harness's native config. All writes are idempotent, backed up before they happen, and rolled back automatically on any failure.
What rides which install?
| Component | CLI | Claude Code plugin | npx skills add |
|---|---|---|---|
| Skill + commands | All harnesses | ✅ | All harnesses |
MCP gates (check_anti_slop, tokens_lint, acceptance_bar, score_ui) |
All MCP-capable harnesses | ✅ auto-wired | Manual .mcp.json |
Review agents (design-reviewer, a11y-auditor) |
Claude Code + OpenCode | ✅ | — |
Design memory (.ui-craft/) |
✅ (component opt-in) | — | — |
Full reference docs: skills.smoothui.dev/docs.
One command installs the skill, all 22 slash commands, the 2 review agents, and the MCP quality-gate server — auto-wired, no .mcp.json editing:
/plugin marketplace add educlopez/ui-craft
/plugin install ui-craft
The plugin bundles a .mcp.json (npx -y ui-craft-mcp), so the deterministic gates register automatically on install — first launch fetches the package via npx. This uses Claude Code's own plugin system, so it's not affected by the global-path issue noted below.
npx skills add educlopez/ui-craft
Works with any agent that supports the Agent Skills spec. Each agent gets a pre-built mirror under a dedicated folder (.codex/, .cursor/, .gemini/, .opencode/, .agents/). The main ui-craft skill lands as a peer skill; each slash command is materialized as its own sub-skill in non-Claude harnesses (other agents trigger them by intent: "audit my UI", "polish this page").
[!note] Using
npx skills add -gwith Claude Code? The skills CLI installs global skills to~/.agents/skills, but Claude Code reads~/.claude/skills(vercel-labs/skills#693). If the skill isn't picked up, use the CLI or plugin install above, install per-project (drop-g), or symlink it:bash ln -s ~/.agents/skills/ui-craft ~/.claude/skills/ui-craft
# Clone
git clone https://github.com/educlopez/ui-craft.git ~/.skills/ui-craft
# Git submodule
git submodule add https://github.com/educlopez/ui-craft.git .skills/ui-craft
The ui-craft binary is a single static Go binary (distributed via Homebrew and Scoop). It is the lifecycle and cross-harness wiring core for the system.
Run ui-craft with no arguments to open the interactive hub — a full-screen menu with an async update check that routes into install, upgrade, backups, and uninstall. Every subcommand below also works directly for scripting/CI.
| Command | Does |
|---|---|
ui-craft (no subcommand) |
Open the interactive TUI hub: welcome menu + update check → Start installation · Upgrade · Manage backups · Managed uninstall. |
ui-craft install |
Detect harnesses, à-la-carte component selection, write configs. |
ui-craft update [harness] |
Re-apply all installed components at the new embedded version. |
ui-craft update [harness] --component <name> |
Re-apply one component only. |
ui-craft uninstall [harness] |
Remove managed blocks and wired components. |
ui-craft doctor |
Health check — verifies each harness install is coherent. |
ui-craft backup |
Snapshot all harness configs without installing. |
ui-craft backup list |
List existing snapshots. |
ui-craft backup pin <id> / unpin <id> |
Protect or unprotect a snapshot from retention cleanup. |
ui-craft rollback [harness] |
Restore latest backup for a harness. |
ui-craft self-update |
Upgrade binary to latest GitHub release (or prints the correct package-manager command when installed via Homebrew/Scoop). |
ui-craft version |
Print the binary version. |
ui-craft version --check-parity |
Verify the Claude Code install matches the expected surface. |
install| Flag | Effect |
|---|---|
--harness <name> |
Target a specific harness (cursor, codex, gemini, opencode) instead of auto-detecting. |
--components <list> |
Comma-separated components to install (skill-commands, mcp-gates, review-agents, design-memory). |
--dry-run |
Preview all planned writes without touching any file. |
--yes |
Non-interactive — skip TUI prompts and apply defaults. |
| Flag | Effect |
|---|---|
--json |
Machine-readable JSON output. Implies non-interactive. |
--quiet |
Suppress non-essential output; print only errors and a final one-line outcome. |
Every install snapshots existing configs to ~/.ui-craft/backups/ (tar.gz, SHA-256 deduped) before writing. Any mid-plan failure rolls back the whole plan. rollback [harness] restores from the latest snapshot at any time. State is persisted to ~/.ui-craft/state.json so update can replay your choices at the new version without re-prompting.
Before building anything, the skill analyzes your project for existing design decisions — CSS variables, Tailwind config, font imports, component themes. If your project already has a design system, it respects it. If not, it asks 4 quick questions (style, accent color, font, optional animation stack) so it never defaults to generic blue/Inter.
Three numeric knobs (1-10) that the skill asks about during Discovery. They change behavior, not just tone.
| Knob | 1 | 10 |
|---|---|---|
| CRAFT_LEVEL (default 7) | ships fast, skips Polish Pass | pixel-perfect, compound details applied |
| MOTION_INTENSITY (default 5) | hover states only | scroll-linked, page transitions, magnetic cursor |
| VISUAL_DENSITY (default 5) | whitespace-heavy editorial | dashboard-dense |
At MOTION_INTENSITY 8+ the skill loads references/stack.md only if the user opts into Motion / GSAP / Three.js during Discovery.
Three opt-in sibling skills that pre-commit to a style and lock the knobs to matching values. Agents pick them when the user mentions a specific aesthetic or product reference.
| Variant | Triggers on | Knobs locked | Style anchors |
|---|---|---|---|
ui-craft-minimal |
"minimal", "Linear-like", "Notion-like", "whitespace-heavy" | CRAFT=8 / MOTION=3 / DENSITY=2 | Monochrome + one accent, Inter/Geist, hairline borders |
ui-craft-editorial |
"editorial", "magazine", "Medium-like", "Substack-like", "long-form" | CRAFT=9 / MOTION=4 / DENSITY=3 | Serif display + humanist body, wide reading column, OpenType |
ui-craft-dense-dashboard |
"dashboard", "admin panel", "Bloomberg-like", "Retool-like" | CRAFT=7 / MOTION=3 / DENSITY=9 | IBM Plex + mono numbers, semantic palette, 4/8px grid |
Each variant defers to the main ui-craft skill for base rules and references — it only overrides knob defaults and adds style-specific guidance.
For playful and brutalist aesthetics (Clay / Gumroad / Duolingo / Arc-playful, Nothing-phone / Swiss-print / brutalist), see examples/presets/playful.md and examples/presets/brutalist.md. The main ui-craft skill applies these preset knob values + style overrides on top of the base rules when the user asks for those aesthetics.
Twenty single-lens passes, plus /sddesign (the pipeline that chains them) and /start (the front door).
Front door:
| Command | Does |
|---|---|
/ui-craft:start |
Run this first. Reads the project (framework, tokens, brief, spec, existing UI) and reports what ui-craft can do right now, then routes you to the right next step. Read-only — no code changes. |
Decision spine & finalize:
| Command | Does |
|---|---|
/ui-craft:brief |
Write or update the project's durable design brief at .ui-craft/brief.md — 5 required sections + principles workshop. Run before any net-new project. |
/ui-craft:tokens |
Audit or establish the 3-layer token spine (primitive → semantic → component). Both modes intentionally crafted, not just inverted. |
/ui-craft:finalize |
Pre-ship gate. Runs detector + brief/token check + the 10-pass finish bar + feedback hierarchy filter. Output only — no auto-fix. |
Review & ship:
| Command | Does |
|---|---|
/ui-craft:heuristic |
Signature move. Scored critique — Nielsen 10 + 6 design laws + persona walkthroughs. Produces a Markdown scorecard with impact tags. No code changes. |
/ui-craft:audit |
Technical — a11y, performance, responsive. Prioritized findings table. |
/ui-craft:critique |
UX — hierarchy, clarity, anti-slop. No code changes. |
/ui-craft:polish |
Final pass — compound details that turn "done" into "crafted". |
/ui-craft:harden |
Production readiness — loading/empty/error states, i18n, offline, edge cases. |
/ui-craft:unhappy |
State-first pass — design every non-happy state (idle/loading/empty/error/partial/conflict/offline) before the happy path. |
Plan & transform:
| Command | Does |
|---|---|
/ui-craft:sddesign |
Full spec-driven pipeline. brief → tokens → shape → craft → converge → ship. Writes .ui-craft/spec.md. Run when starting a net-new surface. |
/ui-craft:craft |
One-shot surface build. Outcome recipe pipeline — 3 inputs (or silent defaults) → named composition → theme preset → build order → acceptance bar. Surfaces: dashboard, landing, auth. |
/ui-craft:shape |
Wireframe-first. ASCII layout + content inventory + state list + open questions before any JSX. Run when starting a new screen. |
/ui-craft:animate |
Add / fix motion. Ho |
$ claude mcp add ui-craft \
-- python -m otcore.mcp_server <graph>