Impeccable — the frontend design plugin
A design language that makes any AI coding agent better at frontend — 23 commands, a design hook, and a slop detector.
Impeccable is a design language for AI coding agents — “the design language that makes your AI harness better at design.” Built by Paul Bakaus on top of Anthropic's frontend-design skill, it exists to break the homogeneous output models fall into when they've all trained on the same SaaS templates: Inter everywhere, purple-to-blue gradients, nested cards, tracked-uppercase eyebrows. It installs as a single skill plus a background hook that nudges any agent — Claude Code included — toward interfaces that don't look like “AI made that.”
This guide runs on it
This very Dev Guide has Impeccable installed — its detector hook scans every UI file edit in the repo. The config and the hook output you've seen in this project come straight from it.How it works — three layers
One install gives you three cooperating surfaces: a skill you drive with commands, a hook that watches edits, and a detector you can run on its own.
The skill
/impeccable command with 23 sub-commands. It carries the design rules, the workflow, and the register-aware judgment (brand vs. product).The design hook
The detector CLI
npx impeccable detect scans files, folders, or URLs with no AI harness at all — deterministic rules, JSON output, CI-friendly.Install
- 1
Run the installer
From your project root, run the installer. It detects which agent folders you have (.claude,.cursor,.codex, …), lets you pick providers and scope, and installs the skill plus the hook manifest.bashnpx impeccable install # update an existing install later: npx impeccable update - 2
Reload the agent
Reload so the new skill and hook register. In Claude Code the/impeccablecommand appears. - 3
Set up the project once
Run/impeccable initso every other command has context to work from (see the workflow below).
Other ways in
Prefer not to use the installer? Add it as a git submodule (git submodule add …/impeccable .impeccable), copy the per-tool dist/ folders by hand, or download a ZIP from impeccable.style.Works across a wide range of agents:
The workflow
Everything starts at init, which writes the context files the rest of the commands read before they act.
PRODUCT.md — the strategy
init after a short discovery interview.DESIGN.md — the visual system
init when code exists, or generated later with document. When present, the detector also checks fonts/colors/radii against it.You invoke any command as /impeccable <command> [target], and the target narrows the scope — /impeccable audit the header. Pin a command you use often to get a top-level shortcut:
/impeccable pin audit # now /audit runs /impeccable audit
/impeccable unpin audit # remove itThe 23 commands
Grouped by intent. Most take an optional [target] to focus on one feature, page, or component.
| Command | What it does |
|---|---|
| craft [feature] | Shape, then build a feature end-to-end — discovery, visual probes and a north-star mock, then build and visually iterate. |
| shape [feature] | Plan UX and UI before any code: a required multi-round discovery interview that produces a user-confirmed design brief. |
| init | One-time project setup. Discovery interview → writes PRODUCT.md (strategy), offers DESIGN.md (visual), preconfigures live mode, recommends next steps. |
| document | Generate DESIGN.md from existing code — auto-extracts colors, type, spacing, radii and component patterns (Google Stitch format). |
| extract [target] | Pull repeated patterns, components and tokens into the design system; consolidate drift back to one consistent system. |
Plus three management commands: pin / unpin <command> for shortcuts, and hooks <on|off|status|…> to manage the design detector hook.
What it enforces — the rules
The skill carries a compact rulebook the agent must satisfy. The essentials:
Color
Typography
text-wrap: balance on headings, pretty on prose.Layout
repeat(auto-fit, minmax(280px, 1fr)) for breakpoint-free grids. Build a semantic z-index scale, never 999/9999.Motion
prefers-reduced-motion alternative is mandatory. Reveals must enhance already-visible content, never gate it.Interaction
position: absolute inside an overflow container get clipped — use the native <dialog> / popover API, position: fixed, or a portal.The AI-slop test
The absolute bans
Match-and-refuse patterns. If the agent is about to write one of these, it rewrites the element with different structure instead.
The detector & hook
Underneath the skill is a detector: roughly 44 deterministic rules plus LLM-only critique checks, spanning AI-slop patterns (side-stripe borders, purple gradients, bounce easing), general quality (line length, cramped padding, small touch targets, skipped headings, overused fonts, contrast), and responsive/accessibility. When a DESIGN.md exists, it also checks fonts, colors and radii against it.
Run it standalone on files, folders, or a URL:
npx impeccable detect src/ # scan a directory
npx impeccable detect https://example.com # scan a live URL
npx impeccable detect --fast --json src/ # regex-only, machine-readable (CI)The hook wires that same detector into the agent: it runs automatically after UI edits and surfaces findings as you work. Configure it per project in .impeccable/config.json:
{
"detector": {
"ignoreRules": [],
"ignoreFiles": [],
"ignoreValues": [],
"designSystem": { "enabled": true }
},
"hook": {
"enabled": true,
"quiet": false,
"auditLog": ".impeccable/hook.ndjson"
}
}Suppress noise precisely — per rule, per file, or per value — from the CLI or with an inline comment, and keep machine-local settings (like hook consent) out of git in config.local.json:
npx impeccable ignores add-file "src/legacy/**"
npx impeccable ignores add-value overused-font Inter --reason "Brand font"
# or inline, in any file:
# <!-- impeccable-disable overused-font: brand requirement -->How this guide configures it
For reference, here is the actual Impeccable config committed to this project — one file is exempted from the detector, and hook consent is stored locally:
{
"detector": {
"ignoreRules": [],
"ignoreFiles": ["components/shell/sidebar.tsx"],
"ignoreValues": []
}
}Pair it with the workflow
Impeccable is strongest as a standing critic, not a one-off. Run/impeccable init once, leave the hook on, and reach for critique / audit before shipping a surface and polish to close the gaps it finds.