Design guidance for AI coding agents. 1 skill, 23 commands, live browser iteration, and 60 deterministic detector rules for AI-generated frontend design. Anthropic's frontend-design was the first widely-used design skill for Claude. Impeccable started from there. Every model trained on the same SaaS templates. Skip the guidance and you get the same handful of tells on every project: Inter for ever
npx mdskills install pbakaus/impeccableComprehensive design system with 23 commands, deterministic rules, and live browser iteration for frontend quality
1# Impeccable23Design guidance for AI coding agents. 1 skill, 23 commands, live browser iteration, and 60 deterministic detector rules for AI-generated frontend design.45> **Quick start:** From your project root, run `npx impeccable install`, then run `/impeccable init` inside your AI coding tool. Full docs: [impeccable.style](https://impeccable.style).67## Why Impeccable?89Anthropic's [frontend-design](https://github.com/anthropics/skills/tree/main/skills/frontend-design) was the first widely-used design skill for Claude. Impeccable started from there.1011Every model trained on the same SaaS templates. Skip the guidance and you get the same handful of tells on every project: Inter for everything, purple-to-blue gradients, cards nested in cards, gray text on colored backgrounds, the rounded-square icon tile above every heading.1213Impeccable adds:14- **One setup flow.** `/impeccable init` writes `PRODUCT.md` and offers `DESIGN.md`, so later commands know the audience, brand/product lane, voice, anti-references, colors, type, and components.15- **23 commands.** A shared design vocabulary with your AI: `polish`, `audit`, `critique`, `distill`, `animate`, `bolder`, `quieter`, and more.16- **60 deterministic detector rules** plus LLM-only critique checks. The CLI and browser extension run the deterministic rules with no LLM and no API key.1718## What's Included1920### The Skill: impeccable2122The skill installs as one command:2324```bash25/impeccable <command> <target>26```2728Start every new project with:2930```bash31/impeccable init32```3334`init` asks whether the surface is brand (marketing, landing, portfolio) or product (app UI, dashboard, tool), then writes design context that every later command reads.3536### 23 Commands3738All commands are accessed through `/impeccable`:3940| Command | What it does |41|---------|--------------|42| `/impeccable craft` | Full shape-then-build flow with visual iteration |43| `/impeccable init` | One-time setup: gather design context, write PRODUCT.md and DESIGN.md, configure live mode, recommend next steps |44| `/impeccable document` | Generate root DESIGN.md from existing project code |45| `/impeccable extract` | Pull reusable components and tokens into the design system |46| `/impeccable shape` | Plan UX/UI before writing code |47| `/impeccable critique` | UX design review: hierarchy, clarity, emotional resonance |48| `/impeccable audit` | Run technical quality checks (a11y, performance, responsive) |49| `/impeccable polish` | Final pass, design system alignment, and shipping readiness |50| `/impeccable bolder` | Amplify boring designs |51| `/impeccable quieter` | Tone down overly bold designs |52| `/impeccable distill` | Strip to essence |53| `/impeccable harden` | Error handling, i18n, text overflow, edge cases |54| `/impeccable onboard` | First-run flows, empty states, activation paths |55| `/impeccable animate` | Add purposeful motion |56| `/impeccable colorize` | Introduce strategic color |57| `/impeccable typeset` | Fix font choices, hierarchy, sizing |58| `/impeccable layout` | Fix layout, spacing, visual rhythm |59| `/impeccable delight` | Add moments of joy |60| `/impeccable overdrive` | Add technically extraordinary effects |61| `/impeccable clarify` | Improve unclear UX copy |62| `/impeccable adapt` | Adapt for different devices |63| `/impeccable optimize` | Performance improvements |64| `/impeccable live` | Visual variant mode: iterate on elements in the browser |6566Use `/impeccable pin <command>` to create standalone shortcuts (e.g., `pin audit` creates `/audit`).6768#### Usage Examples6970```71/impeccable audit blog # Audit blog hub + post pages72/impeccable critique landing # UX design review73/impeccable polish settings # Final pass before shipping74/impeccable harden checkout # Add error handling + edge cases75```7677Or use `/impeccable` directly with a description:78```79/impeccable redo this hero section80```8182### Anti-Patterns8384The skill includes explicit guidance on what to avoid:8586- Don't use overused fonts (Arial, Inter, system defaults)87- Don't use gray text on colored backgrounds88- Don't use pure black/gray (always tint)89- Don't wrap everything in cards or nest cards inside cards90- Don't use bounce/elastic easing (feels dated)9192## See It In Action9394Visit [the Neo Mirai case study](https://impeccable.style/cases/neo-mirai) to see a before/after case study of a real project transformed with Impeccable commands.9596## Installation9798### Option 1: CLI installer (Recommended)99100From the root of your project, run:101102```bash103npx impeccable install104```105106This shows the harness folders it detected (for example `~/.claude`, `~/.codex`, `~/.grok`, or project-local `.cursor`), lets you keep the detected set or customize providers, then asks whether to install into the current project or globally. Use `--providers=claude,codex,cursor,grok` and `--scope=project|global` to skip those choices in scripts. On Claude Code, Cursor, Codex, GitHub Copilot, and Grok Build, it also installs the provider-native hook manifest for the current project. Works with Cursor, Claude Code, Gemini CLI, Codex CLI, Grok Build, and every other supported tool. Reload your harness afterward.107108To refresh an existing install, run:109110```bash111npx impeccable update112```113114Codex users should open `/hooks` after install or update and approve the project hook when prompted. Codex tracks trust by hook definition, so updates that change `.codex/hooks.json` can require approval again. Grok Build users need project folder trust (`/hooks-trust` or launch with `--trust`) before `.grok/hooks/` scripts run.115116### Option 2: Git Submodule117118For teams that want to keep Impeccable vendored and updated through Git, add this repo as a submodule and link the compiled provider build into your harness folders:119120```bash121git submodule add https://github.com/pbakaus/impeccable .impeccable122npx impeccable link --source=.impeccable --providers=claude,cursor123git add .gitmodules .impeccable .claude .cursor124git commit -m "Add Impeccable skills"125```126127Use the providers your project needs, for example `claude`, `cursor`, `gemini`, `codex`, `github`, `grok`, `opencode`, `pi`, `qoder`, `trae`, `trae-cn`, `rovo-dev`, or `vibe`. The command links individual skill folders from `.impeccable/dist/universal/` and leaves existing real skill directories untouched unless you pass `--force`.128129To update later:130131```bash132git submodule update --remote .impeccable133npx impeccable link --source=.impeccable --providers=claude,cursor134```135136### Option 3: Plugin install137138**Claude Code:**139```bash140/plugin marketplace add pbakaus/impeccable141```142143> Claude Code only. After adding the marketplace, open `/plugin` and install Impeccable from the list.144145**Grok Build:**146```bash147grok plugin install pbakaus/impeccable#plugin --trust148```149150> Grok Build only. The `#plugin` suffix installs the slim plugin package (skills, agents, and hooks) instead of the full monorepo. Then run `/impeccable init` in a Grok session. Project-scoped installs via `npx impeccable install --providers=grok` also work and write `.grok/skills/` plus `.grok/hooks/impeccable.json`.151152### Option 4: Download from Website153154Visit [impeccable.style](https://impeccable.style), download the ZIP for your tool, and extract to your project.155156### Option 5: Copy from Repository157158**Cursor:**159```bash160cp -r dist/cursor/.cursor your-project/161```162163> **Note:** Cursor skills require setup:164> 1. Switch to Nightly channel in Cursor Settings → Beta165> 2. Enable Agent Skills in Cursor Settings → Rules166>167> [Learn more about Cursor skills](https://cursor.com/docs/context/skills)168169**Claude Code:**170```bash171# Project-specific172cp -r dist/claude-code/.claude your-project/173174# Or global (applies to all projects)175cp -r dist/claude-code/.claude/* ~/.claude/176```177178**OpenCode:**179```bash180cp -r dist/opencode/.opencode your-project/181```182183**Pi:**184```bash185cp -r dist/pi/.pi your-project/186```187188**Gemini CLI:**189```bash190cp -r dist/gemini/.gemini your-project/191```192193> **Note:** Gemini CLI skills require setup:194> 1. Install preview version: `npm i -g @google/gemini-cli@preview`195> 2. Run `/settings` and enable "Skills"196> 3. Run `/skills list` to verify installation197>198> [Learn more about Gemini CLI skills](https://geminicli.com/docs/cli/skills/)199200**Codex CLI:**201```bash202# Project-local203cp -r dist/agents/.agents your-project/204mkdir -p your-project/.codex205cp dist/codex/.codex/hooks.json your-project/.codex/hooks.json206207# Or install the skill user-wide. Copy .codex/hooks.json into each project208# where you want the design hook to run.209mkdir -p ~/.agents/skills210cp -r dist/agents/.agents/skills/* ~/.agents/skills/211```212213> The asset-producer subagent ships nested inside the skill's own `agents/` folder, which Codex auto-discovers. No separate `.codex/agents/` copy is needed. The hook is project-local because Codex discovers hooks from `.codex/hooks.json` next to trusted project config.214215**GitHub Copilot:**216```bash217cp -r dist/github/.github your-project/218```219220**Trae:**221```bash222# Trae China (domestic version)223cp -r dist/trae/.trae-cn/skills/* ~/.trae-cn/skills/224225# Trae International226cp -r dist/trae/.trae/skills/* ~/.trae/skills/227```228229> **Note:** Trae has two versions with different config directories:230> - **Trae China**: `~/.trae-cn/skills/`231> - **Trae International**: `~/.trae/skills/`232>233> After copying, restart Trae IDE to activate the skills.234235**Rovo Dev:**236```bash237# Project-specific238cp -r dist/rovo-dev/.rovodev your-project/239240# Or global (applies to all projects)241cp -r dist/rovo-dev/.rovodev/skills/* ~/.rovodev/skills/242```243244**Qoder:**245```bash246# Project-specific247cp -r dist/qoder/.qoder your-project/248249# Or global (applies to all projects)250cp -r dist/qoder/.qoder/skills/* ~/.qoder/skills/251```252253**Mistral Vibe:**254```bash255# Project-specific256cp -r dist/vibe/.vibe your-project/257258# Or global (applies to all projects)259cp -r dist/vibe/.vibe/skills/* ~/.vibe/skills/260```261262**Grok Build:**263```bash264# Project-specific265cp -r dist/grok/.grok your-project/266267# Or global (applies to all projects)268cp -r dist/grok/.grok/skills/* ~/.grok/skills/269```270271> Prefer `npx impeccable install --providers=grok` or `grok plugin install pbakaus/impeccable#plugin --trust` so the design hook installs too. Project hooks need `/hooks-trust` (or `--trust`) once per folder.272273## Usage274275Once installed, every command runs through the single `/impeccable` skill:276277```278/impeccable audit # Find issues279/impeccable polish # Final cleanup280/impeccable distill # Remove complexity281/impeccable critique # Full design review282```283284Type `/impeccable` alone to see the full command list.285286Most commands accept an optional argument to focus on a specific area:287288```289/impeccable audit the header290/impeccable polish the checkout form291```292293If you reach for one command often, pin it with `/impeccable pin audit` to get `/audit` as a standalone shortcut.294295**Note:** Codex uses skills here, not `/prompts:` commands. Open `/skills` or type `$impeccable`. Repo-local installs live in `.agents/skills/`; user-wide installs live in `~/.agents/skills/`. GitHub Copilot uses `.github/skills/`. Restart the tool if a newly installed skill does not appear.296297## Keeping `.impeccable` out of git298299As you run commands, Impeccable writes working files under `.impeccable/`: critique and polish screenshots, live-mode session and preview state, runtime caches, and per-developer config. Most of it is ephemeral and should not be committed, while a few files are shared project artifacts that belong in the repo. Add this block to your project's `.gitignore`:300301```gitignore302# impeccable-ignore-start303# Ephemeral output, runtime state, and per-dev overrides.304# Unanchored: .impeccable may sit at the repo root or under a nested305# workspace (apps/web/.impeccable/...); anchored patterns would miss it.306# Shared artifacts stay tracked: config.json, live/config.json,307# design.json, critique/*.md.308.impeccable/config.local.json309.impeccable/hook.cache.json310.impeccable/hook.pending.json311.impeccable/*.png312.impeccable/live/server.json313.impeccable/live/sessions/314.impeccable/live/previews/315.impeccable/live/annotations/316.impeccable/live/cache/317.impeccable/live/manual-edit-apply-transaction.json318.impeccable/live/manual-edit-events.jsonl319.impeccable/live/manual-edit-evidence/320.impeccable/live/pending-manual-edits.json321.impeccable/live/deferred-svelte-component-accepts.json322.impeccable/live/*.png323# impeccable-ignore-end324```325326The block is wrapped in `# impeccable-ignore-start` / `# impeccable-ignore-end` markers so you can recognize and refresh it later. Patterns are unanchored on purpose: in a monorepo the active project (and its `.impeccable/` directory) often lives under a nested workspace path like `apps/web/`, and a root-anchored pattern would miss it.327328**Keep these tracked** (they are shared project artifacts, do not add them to `.gitignore`):329330- `.impeccable/config.json` (unified shared config)331- `.impeccable/live/config.json` (live-mode framework wiring)332- `.impeccable/design.json` (shared design spec)333- `.impeccable/critique/*.md` (review reports)334335If an ephemeral file (a screenshot, `config.local.json`) was committed before you added the block, `.gitignore` will not untrack it automatically. Run `git rm --cached <path>` to stop tracking it without deleting your local copy.336337## Design hook338339On Claude Code, GitHub Copilot, Codex, Cursor, and Grok Build, `npx impeccable install` and `npx impeccable update` install a provider-native hook manifest along with the skill payload. The hook runs the Impeccable design detector on direct UI file edits and surfaces findings back into the agent flow. Claude Code, GitHub Copilot, Codex, and Grok Build surface findings after the edit (and run a deeper pass on Stop where supported). Cursor blocks bad proposed writes before they land.340341Installed hook surfaces:342343- Claude Code: `.claude/settings.local.json` (gitignored, machine-local) runs `${CLAUDE_PROJECT_DIR}/.claude/skills/impeccable/scripts/hook.mjs`. A hook moved into the shared `settings.json` is honored in place.344- GitHub Copilot: `.github/hooks/impeccable.json` (committed, shared by the Copilot CLI and the cloud agent) runs `.github/skills/impeccable/scripts/hook.mjs`. The Copilot CLI activates it once the file is on the repository's default branch and the folder is trusted.345- Cursor: `.cursor/hooks.json` runs `.cursor/skills/impeccable/scripts/hook-before-edit.mjs`.346- Codex: `.codex/hooks.json` runs `.agents/skills/impeccable/scripts/hook.mjs`.347348The installer preserves unrelated hook entries and settings. If a hook manifest is malformed, install/update aborts by default; rerun with `--force` to back up the malformed file as `.bak` and replace it.349350On an interactive `install`/`update`, Impeccable explains the hook and offers to install it (default yes). Your choice is remembered per-developer in the gitignored `.impeccable/config.local.json`, so you are not asked again; `--no-hooks` skips it for that run without recording anything. Hook lifecycle settings live under the `hook` key of `.impeccable/config.json`; detector ignores live under `detector`, shared by `/impeccable hooks` and `npx impeccable detect`.351352For debugging, set `hook.auditLog` in `.impeccable/config.json` to a path (or the legacy `IMPECCABLE_HOOK_LOG` env var) to write one NDJSON line per hook invocation. Leave it unset for normal use.353354Codex requires one platform step that Impeccable cannot safely skip: open `/hooks` after install or update and approve the project hook. There is no Codex marketplace/plugin install flow for this hook.355356Full hook docs: [impeccable.style/docs/hooks](https://impeccable.style/docs/hooks).357358Manual copy commands are fallback/debug instructions. The normal path is:359360```bash361npx impeccable install362npx impeccable update363```364365## CLI366367Impeccable includes a standalone CLI for detecting anti-patterns without an AI harness:368369```bash370npx impeccable detect src/ # scan a directory371npx impeccable detect index.html # scan an HTML file372npx impeccable detect https://example.com # scan a URL (Puppeteer)373npx impeccable detect --json . # CI-friendly JSON output374npx impeccable detect --no-config src/ # raw scan, ignoring project config/context375npx impeccable ignores list # show detector ignores376npx impeccable ignores add-file "src/legacy/**"377npx impeccable ignores add-value overused-font Inter --reason "Brand font"378```379380The detector catches 60 deterministic issues across AI slop (side-tab borders, purple gradients, bounce easing, dark glows) and general design quality (line length, cramped padding, small touch targets, skipped headings, and more).381382By default, `detect` respects the same `.impeccable/config.json` and `.impeccable/config.local.json` detector config as the design hook: `detector.ignoreRules`, `detector.ignoreFiles`, `detector.ignoreValues`, and `detector.designSystem.enabled`. Hook lifecycle settings such as `hook.enabled` only affect automatic hook execution.383384For a waiver that should travel with one file instead of the repo config, add an inline comment in the file: `<!-- impeccable-disable overused-font: exported brand doc -->`. The marker works in any comment syntax, scopes to the whole file (or one line with `impeccable-disable-line` / `impeccable-disable-next-line`), and is bypassed by `--no-inline-ignores` or `--no-config`.385386Full detector docs: [impeccable.style/docs/detector](https://impeccable.style/docs/detector).387388## Supported Tools389390- [Cursor](https://cursor.com)391- [Claude Code](https://claude.ai/code)392- [GitHub Copilot](https://github.com/features/copilot)393- [Gemini CLI](https://github.com/google-gemini/gemini-cli)394- [Codex CLI](https://github.com/openai/codex)395- [Grok Build](https://x.ai/cli)396- [OpenCode](https://opencode.ai)397- [Pi](https://pi.dev)398- [Kiro](https://kiro.dev)399- [Trae](https://trae.ai)400- [Rovo Dev](https://www.atlassian.com/software/rovo)401- [Qoder](https://qoder.com)402- [Mistral Vibe](https://docs.mistral.ai/vibe/code/overview)403404## Community & Ecosystem405406Join the community and ecosystem conversations:407408- GitHub Discussions: file bugs, request features, and help newcomers.409- [Impeccable on npm](https://www.npmjs.com/package/impeccable): grab the CLI, follow releases, and star the package.410- Follow @pbakaus on Twitter for release notes, sample lint reports, and video highlights of new rules.411412## Contributing413414See [DEVELOP.md](docs/DEVELOP.md) for contributor guidelines and build instructions.415416## License417418Apache 2.0. See [LICENSE](LICENSE).419420---421422Created by [Paul Bakaus](https://www.paulbakaus.com)423
Full transparency — inspect the skill content before installing.