Impeccable
Design guidance for AI coding agents. 1 skill, 23 commands, live browser iteration, and 59 deterministic detector rules for AI-generated frontend design.
Quick start: From your project root, run npx impeccable install , then run /impeccable init inside your AI coding tool. Full docs: impeccable.style .
Why Impeccable?
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 everything, purple-to-blue gradients, cards nested in cards, gray text on colored backgrounds, the rounded-square icon tile above every heading.
Impeccable adds:
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.
23 commands. A shared design vocabulary with your AI: polish , audit , critique , distill , animate , bolder , quieter , and more.
59 deterministic detector rules plus LLM-only critique checks. The CLI and browser extension run the deterministic rules with no LLM and no API key.
What's Included
The Skill: impeccable
The skill installs as one command:
Start every new project with:
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.
23 Commands
All commands are accessed through /impeccable :
Use /impeccable pin <command> to create standalone shortcuts (e.g., pin audit creates /audit ).
Usage Examples
Or use /impeccable directly with a description:
Anti-Patterns
The skill includes explicit guidance on what to avoid:
Don't use overused fonts (Arial, Inter, system defaults)
Don't use gray text on colored backgrounds
Don't use pure black/gray (always tint)
Don't wrap everything in cards or nest cards inside cards
Don't use bounce/elastic easing (feels dated)
See It In Action
Visit the Neo Mirai case study to see a before/after case study of a real project transformed with Impeccable commands.
Installation
Option 1: CLI installer (Recommended)
From the root of your project, run:
This 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.
To refresh an existing install, run:
Codex 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.
Option 2: Git Submodule
For 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:
Use 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 .
To update later:
Option 3: Plugin install
Claude Code:
Claude Code only. After adding the marketplace, open /plugin and install Impeccable from the list.
Grok Build:
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 .
Option 4: Download from Website
Visit impeccable.style , download the ZIP for your tool, and extract to your project.
Option 5: Copy from Repository
Cursor:
Note: Cursor skills require setup: Switch to Nightly channel in Cursor Settings → Beta Enable Agent Skills in Cursor Settings → Rules Learn more about Cursor skills
Note: Cursor skills require setup:
Switch to Nightly channel in Cursor Settings → Beta
Enable Agent Skills in Cursor Settings → Rules
Learn more about Cursor skills
OpenCode:
Pi:
Gemini CLI:
Note: Gemini CLI skills require setup: Install preview version: npm i -g @google/gemini-cli@preview Run /settings and enable "Skills" Run /skills list to verify installation Learn more about Gemini CLI skills
Note: Gemini CLI skills require setup:
Install preview version: npm i -g @google/gemini-cli@preview
Run /settings and enable "Skills"
Run /skills list to verify installation
Learn more about Gemini CLI skills
Codex CLI:
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.
GitHub Copilot:
Trae:
Note: Trae has two versions with different config directories: Trae China : ~/.trae-cn/skills/ Trae International : ~/.trae/skills/ After copying, restart Trae IDE to activate the skills.
Note: Trae has two versions with different config directories:
Trae China : ~/.trae-cn/skills/
Trae International : ~/.trae/skills/
After copying, restart Trae IDE to activate the skills.
Rovo Dev:
Qoder:
Mistral Vibe:
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.
Google Antigravity:
Usage
Once installed, every command runs through the single /impeccable skill:
Type /impeccable alone to see the full command list.
Most commands accept an optional argument to focus on a specific area:
If you reach for one command often, pin it with /impeccable pin audit to get /audit as a standalone shortcut.
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.
Keeping .impeccable out of git
As 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 :
The 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.
Keep these tracked (they are shared project artifacts, do not add them to .gitignore ):
.impeccable/config.json (unified shared config)
.impeccable/live/config.json (live-mode framework wiring)
.impeccable/design.json (shared design spec)
.impeccable/critique/*.md (review reports)
If 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.
Design hook
On 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.
Installed hook surfaces:
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.
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.
Cursor: .cursor/hooks.json runs .cursor/skills/impeccable/scripts/hook-before-edit.mjs .
Codex: .codex/hooks.json runs .agents/skills/impeccable/scripts/hook.mjs .
The 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.
On 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 .
For 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.
Codex 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.
Full hook docs: impeccable.style/docs/hooks .
Manual copy commands are fallback/debug instructions. The normal path is:
CLI
Impeccable includes a standalone CLI for detecting anti-patterns without an AI harness:
The detector catches 59 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).
By 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.
For 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 .
Full detector docs: impeccable.style/docs/detector .
Supported Tools
Cursor
Claude Code
GitHub Copilot
Gemini CLI
Codex CLI
Grok Build
OpenCode
Pi
Kiro
Trae
Rovo Dev
Qoder
Mistral Vibe
Google Antigravity
Community & Ecosystem
Join the community and ecosystem conversations:
GitHub Discussions: file bugs, request features, and help newcomers.
Impeccable on npm : grab the CLI, follow releases, and star the package.
Follow @pbakaus on Twitter for release notes, sample lint reports, and video highlights of new rules.
Contributing
See DEVELOP.md for contributor guidelines and build instructions.
License
Apache 2.0. See LICENSE .
Created by Paul Bakaus