pbakaus/impeccablePublic

The design language that makes your AI harness better at design.

AI summary: Design guidance and deterministic detector rules for AI coding agents to improve generated frontend code.

Stars
56.6K
+464 today
Forks
3.4K
Watchers
159
Open issues
41
Open PRs
6
Contributors
~42
Commits
1.4K
Branches
13

JavaScriptApache-2.0Created Nov 16, 2025Last push todayLatest release ext-v1.3.1+3.6K stars this week+5.2K this month

Star history

since Jan 4, 2026
020K40KJan 2026Mar 2026May 2026Aug 2026
56.6K stars as of Aug 7, 2026, tracked back to Jan 4, 2026. Historical curve reconstructed from public GitHub event archives, calibrated to the current total.

Contribution activity

commits per day, last 52 weeks
AugSepOctNovDecJanFebMarAprMayJunJulAugMonWedFri2025-08-09: 0 commits2025-08-10: 0 commits2025-08-11: 0 commits2025-08-12: 0 commits2025-08-13: 0 commits2025-08-14: 0 commits2025-08-15: 0 commits2025-08-16: 0 commits2025-08-17: 0 commits2025-08-18: 0 commits2025-08-19: 0 commits2025-08-20: 0 commits2025-08-21: 0 commits2025-08-22: 0 commits2025-08-23: 0 commits2025-08-24: 0 commits2025-08-25: 0 commits2025-08-26: 0 commits2025-08-27: 0 commits2025-08-28: 0 commits2025-08-29: 0 commits2025-08-30: 0 commits2025-08-31: 0 commits2025-09-01: 0 commits2025-09-02: 0 commits2025-09-03: 0 commits2025-09-04: 0 commits2025-09-05: 0 commits2025-09-06: 0 commits2025-09-07: 0 commits2025-09-08: 0 commits2025-09-09: 0 commits2025-09-10: 0 commits2025-09-11: 0 commits2025-09-12: 0 commits2025-09-13: 0 commits2025-09-14: 0 commits2025-09-15: 0 commits2025-09-16: 0 commits2025-09-17: 0 commits2025-09-18: 0 commits2025-09-19: 0 commits2025-09-20: 0 commits2025-09-21: 0 commits2025-09-22: 0 commits2025-09-23: 0 commits2025-09-24: 0 commits2025-09-25: 0 commits2025-09-26: 0 commits2025-09-27: 0 commits2025-09-28: 0 commits2025-09-29: 0 commits2025-09-30: 0 commits2025-10-01: 0 commits2025-10-02: 0 commits2025-10-03: 0 commits2025-10-04: 0 commits2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 1 commit2025-11-16: 5 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 3 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 1 commit2025-12-15: 4 commits2025-12-16: 31 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 6 commits2026-01-07: 11 commits2026-01-08: 19 commits2026-01-09: 6 commits2026-01-10: 0 commits2026-01-11: 8 commits2026-01-12: 1 commit2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 4 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 14 commits2026-03-05: 8 commits2026-03-06: 0 commits2026-03-07: 1 commit2026-03-08: 3 commits2026-03-09: 0 commits2026-03-10: 4 commits2026-03-11: 1 commit2026-03-12: 6 commits2026-03-13: 1 commit2026-03-14: 3 commits2026-03-15: 14 commits2026-03-16: 11 commits2026-03-17: 23 commits2026-03-18: 8 commits2026-03-19: 13 commits2026-03-20: 9 commits2026-03-21: 5 commits2026-03-22: 1 commit2026-03-23: 2 commits2026-03-24: 13 commits2026-03-25: 1 commit2026-03-26: 0 commits2026-03-27: 4 commits2026-03-28: 3 commits2026-03-29: 1 commit2026-03-30: 11 commits2026-03-31: 4 commits2026-04-01: 1 commit2026-04-02: 4 commits2026-04-03: 25 commits2026-04-04: 0 commits2026-04-05: 5 commits2026-04-06: 8 commits2026-04-07: 13 commits2026-04-08: 52 commits2026-04-09: 12 commits2026-04-10: 20 commits2026-04-11: 3 commits2026-04-12: 12 commits2026-04-13: 18 commits2026-04-14: 4 commits2026-04-15: 2 commits2026-04-16: 1 commit2026-04-17: 4 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 1 commit2026-04-21: 11 commits2026-04-22: 55 commits2026-04-23: 14 commits2026-04-24: 9 commits2026-04-25: 6 commits2026-04-26: 2 commits2026-04-27: 9 commits2026-04-28: 20 commits2026-04-29: 9 commits2026-04-30: 4 commits2026-05-01: 0 commits2026-05-02: 4 commits2026-05-03: 4 commits2026-05-04: 4 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 2 commits2026-05-13: 6 commits2026-05-14: 5 commits2026-05-15: 1 commit2026-05-16: 0 commits2026-05-17: 1 commit2026-05-18: 2 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 1 commit2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 26 commits2026-05-29: 6 commits2026-05-30: 1 commit2026-05-31: 0 commits2026-06-01: 1 commit2026-06-02: 9 commits2026-06-03: 6 commits2026-06-04: 0 commits2026-06-05: 16 commits2026-06-06: 2 commits2026-06-07: 0 commits2026-06-08: 17 commits2026-06-09: 15 commits2026-06-10: 1 commit2026-06-11: 1 commit2026-06-12: 0 commits2026-06-13: 1 commit2026-06-14: 5 commits2026-06-15: 9 commits2026-06-16: 6 commits2026-06-17: 6 commits2026-06-18: 0 commits2026-06-19: 7 commits2026-06-20: 13 commits2026-06-21: 4 commits2026-06-22: 4 commits2026-06-23: 1 commit2026-06-24: 0 commits2026-06-25: 3 commits2026-06-26: 4 commits2026-06-27: 0 commits2026-06-28: 0 commits2026-06-29: 4 commits2026-06-30: 1 commit2026-07-01: 10 commits2026-07-02: 1 commit2026-07-03: 3 commits2026-07-04: 2 commits2026-07-05: 0 commits2026-07-06: 4 commits2026-07-07: 5 commits2026-07-08: 16 commits2026-07-09: 9 commits2026-07-10: 9 commits2026-07-11: 20 commits2026-07-12: 41 commits2026-07-13: 29 commits2026-07-14: 16 commits2026-07-15: 7 commits2026-07-16: 0 commits2026-07-17: 2 commits2026-07-18: 7 commits2026-07-19: 3 commits2026-07-20: 13 commits2026-07-21: 50 commits2026-07-22: 37 commits2026-07-23: 10 commits2026-07-24: 10 commits2026-07-25: 29 commits2026-07-26: 18 commits2026-07-27: 43 commits2026-07-28: 42 commits2026-07-29: 30 commits2026-07-30: 17 commits2026-07-31: 18 commits2026-08-01: 6 commits2026-08-02: 3 commits2026-08-03: 27 commits2026-08-04: 13 commits2026-08-05: 0 commits2026-08-06: 0 commits2026-08-07: 0 commits2026-08-08: 0 commits
1,337 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Landmark project

    56,617 stars

  • Rising fast

    +3,567 stars this week

  • Very active

    1,337 commits in 52 weeks

  • Permissive license

    Apache-2.0

  • Continuous integration

    Automated checks passing

  • Repeat trending

    20 trending appearances

What impeccable does

Impeccable provides a suite of tools and rules to guide AI coding agents in producing better, less generic frontend design. It aims to eliminate common AI design tropes (like overused gradients, nested cards, and generic typography) by establishing a shared design vocabulary between the user and the LLM. It includes a setup flow to define brand guidelines, 23 specific design commands (e.g., 'polish', 'audit', 'distill'), and 60 deterministic detector rules that evaluate generated UI without requiring an API key. It functions as both a CLI tool and an integration for AI coding assistants.

Frontend developers and designers who use AI coding assistants and want to ensure the generated UI is high-quality and on-brand.

  • Shared design vocabulary: Provides 23 commands like 'bolder' or 'quieter' to easily direct the AI's design choices.
  • Deterministic detectors: Runs 60 non-LLM rules locally to catch common AI design flaws instantly.
  • Project initialization: Offers an `init` command to generate PRODUCT.md and DESIGN.md context files.
  • Anti-trope focus: Specifically targets and corrects overused AI design patterns.
  • CLI and browser extension: Includes tools to run checks directly against local code or live sites.

Where teams use it

Guiding AI frontend generation

Developers use the `PRODUCT.md` context so their AI assistant generates UI that matches their specific brand instead of generic SaaS templates.

Auditing AI output

Designers run the deterministic CLI rules against an AI-generated component to catch contrast or spacing issues.

Iterative design refinement

Engineers use commands like `/impeccable critique` to force the AI to evaluate and improve its own layout choices.

Standardizing team AI usage

Engineering teams adopt the tool to ensure all AI-generated code across the company adheres to basic design principles.

Getting started: Run `npx impeccable install` in your project root, then execute `/impeccable init` inside your AI coding tool.

README

main branch

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:

/impeccable <command> <target>

Start every new project with:

/impeccable init

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:

Command What it does
/impeccable craft Full shape-then-build flow with visual iteration
/impeccable init One-time setup: gather design context, write PRODUCT.md and DESIGN.md, configure live mode, recommend next steps
/impeccable document Generate root DESIGN.md from existing project code
/impeccable extract Pull reusable components and tokens into the design system
/impeccable shape Plan UX/UI before writing code
/impeccable critique UX design review: hierarchy, clarity, emotional resonance
/impeccable audit Run technical quality checks (a11y, performance, responsive)
/impeccable polish Final pass, design system alignment, and shipping readiness
/impeccable bolder Amplify boring designs
/impeccable quieter Tone down overly bold designs
/impeccable distill Strip to essence
/impeccable harden Error handling, i18n, text overflow, edge cases
/impeccable onboard First-run flows, empty states, activation paths
/impeccable animate Add purposeful motion
/impeccable colorize Introduce strategic color
/impeccable typeset Fix font choices, hierarchy, sizing
/impeccable layout Fix layout, spacing, visual rhythm
/impeccable delight Add moments of joy
/impeccable overdrive Add technically extraordinary effects
/impeccable clarify Improve unclear UX copy
/impeccable adapt Adapt for different devices
/impeccable optimize Performance improvements
/impeccable live Visual variant mode: iterate on elements in the browser

Use /impeccable pin <command> to create standalone shortcuts (e.g., pin audit creates /audit).

Usage Examples

/impeccable audit blog           # Audit blog hub + post pages
/impeccable critique landing     # UX design review
/impeccable polish settings      # Final pass before shipping
/impeccable harden checkout      # Add error handling + edge cases

Or use /impeccable directly with a description:

/impeccable redo this hero section

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:

npx impeccable install

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:

npx impeccable update

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:

git submodule add https://github.com/pbakaus/impeccable .impeccable
npx impeccable link --source=.impeccable --providers=claude,cursor
git add .gitmodules .impeccable .claude .cursor
git commit -m "Add Impeccable skills"

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:

git submodule update --remote .impeccable
npx impeccable link --source=.impeccable --providers=claude,cursor

Option 3: Plugin install

Claude Code:

/plugin marketplace add pbakaus/impeccable

Claude Code only. After adding the marketplace, open /plugin and install Impeccable from the list.

Grok Build:

grok plugin install pbakaus/impeccable#plugin --trust

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:

cp -r dist/cursor/.cursor your-project/

Note: Cursor skills require setup:

  1. Switch to Nightly channel in Cursor Settings → Beta
  2. Enable Agent Skills in Cursor Settings → Rules

Learn more about Cursor skills

Claude Code:

# Project-specific
cp -r dist/claude-code/.claude your-project/

# Or global (applies to all projects)
cp -r dist/claude-code/.claude/* ~/.claude/

OpenCode:

cp -r dist/opencode/.opencode your-project/

Pi:

cp -r dist/pi/.pi your-project/

Gemini CLI:

cp -r dist/gemini/.gemini your-project/

Note: Gemini CLI skills require setup:

  1. Install preview version: npm i -g @google/gemini-cli@preview
  2. Run /settings and enable "Skills"
  3. Run /skills list to verify installation

Learn more about Gemini CLI skills

Codex CLI:

# Project-local
cp -r dist/agents/.agents your-project/
mkdir -p your-project/.codex
cp dist/codex/.codex/hooks.json your-project/.codex/hooks.json

# Or install the skill user-wide. Copy .codex/hooks.json into each project
# where you want the design hook to run.
mkdir -p ~/.agents/skills
cp -r dist/agents/.agents/skills/* ~/.agents/skills/

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:

cp -r dist/github/.github your-project/

Trae:

# Trae China (domestic version)
cp -r dist/trae/.trae-cn/skills/* ~/.trae-cn/skills/

# Trae International
cp -r dist/trae/.trae/skills/* ~/.trae/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:

# Project-specific
cp -r dist/rovo-dev/.rovodev your-project/

# Or global (applies to all projects)
cp -r dist/rovo-dev/.rovodev/skills/* ~/.rovodev/skills/

Qoder:

# Project-specific
cp -r dist/qoder/.qoder your-project/

# Or global (applies to all projects)
cp -r dist/qoder/.qoder/skills/* ~/.qoder/skills/

Mistral Vibe:

# Project-specific
cp -r dist/vibe/.vibe your-project/

# Or global (applies to all projects)
cp -r dist/vibe/.vibe/skills/* ~/.vibe/skills/

Grok Build:

# Project-specific
cp -r dist/grok/.grok your-project/

# Or global (applies to all projects)
cp -r dist/grok/.grok/skills/* ~/.grok/skills/

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:

# Project-specific
cp -r dist/antigravity/.agent your-project/

# Or global (applies to all projects)
mkdir -p ~/.gemini/config/skills
cp -r dist/antigravity/.agent/skills/* ~/.gemini/config/skills/

Usage

Once installed, every command runs through the single /impeccable skill:

/impeccable audit        # Find issues
/impeccable polish       # Final cleanup
/impeccable distill      # Remove complexity
/impeccable critique     # Full design review

Type /impeccable alone to see the full command list.

Most commands accept an optional argument to focus on a specific area:

/impeccable audit the header
/impeccable polish the checkout form

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:

# impeccable-ignore-start
# Ephemeral output, runtime state, and per-dev overrides.
# Unanchored: .impeccable may sit at the repo root or under a nested
# workspace (apps/web/.impeccable/...); anchored patterns would miss it.
# Shared artifacts stay tracked: config.json, live/config.json,
# design.json, critique/*.md.
.impeccable/config.local.json
.impeccable/hook.cache.json
.impeccable/hook.pending.json
.impeccable/*.png
.impeccable/live/server.json
.impeccable/live/sessions/
.impeccable/live/previews/
.impeccable/live/annotations/
.impeccable/live/cache/
.impeccable/live/manual-edit-apply-transaction.json
.impeccable/live/manual-edit-events.jsonl
.impeccable/live/manual-edit-evidence/
.impeccable/live/pending-manual-edits.json
.impeccable/live/deferred-svelte-component-accepts.json
.impeccable/live/*.png
# impeccable-ignore-end

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:

npx impeccable install
npx impeccable update

CLI

Impeccable includes a standalone CLI for detecting anti-patterns without an AI harness:

npx impeccable detect src/                   # scan a directory
npx impeccable detect index.html             # scan an HTML file
npx impeccable detect https://example.com    # scan a URL (Puppeteer)
npx impeccable detect --json .               # CI-friendly JSON output
npx impeccable detect --no-config src/       # raw scan, ignoring project config/context
npx impeccable ignores list                  # show detector ignores
npx impeccable ignores add-file "src/legacy/**"
npx impeccable ignores add-value overused-font Inter --reason "Brand font"

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

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

View on GitHub

Recent activity

commits and pull requests

Releases and announcements

41 total
  1. Skill 4.0.4skill-v4.0.4Jul 30, 2026266 downloads

    - **Direction by dice, not by taste.** The model no longer picks its own favorite. An outside seed names which of its grounded directions must be taken seriously and deals six challenger worlds beside it, so the same brief stops landing on the same three fonts over a cream background. Every roll prints a key that reproduces it, and a re-roll clears the table rather than rewording what you turned down. - **188 reviewed worlds, dealt as challengers.** These are not templates. A world competes against the directions the model derived from your product and wins only on merit, which is how it behaves in practice: strong cultural material beats the deck, thin categories lose to it. Ratings weight the draw, the category default never enters it, and the pool is served by a public roll API. - **No command to pick. Just say what you want.** Impeccable now works out what kind of job it is on its own: a blank slate, a whole new page inside an existing product, a section added to a page that already works, a redesign, or a scoped refinement. Each one gets a different amount of freedom, which is the part that used to go wrong. A redesign treats the old look as evidence and replaces it, rather

  2. Extension 1.3.1ext-v1.3.1Jul 30, 2026169 downloads

    - **The detector sees whole pages again.** Ships the engine that resolves versioned stylesheet links (`styles.css?v=3`) instead of going blind on them, catches standard-tracked kickers that slipped under the old 1px tracking floor, and retires the `single-font` rule.

  3. CLI 3.5.0cli-v3.5.0Jul 30, 2026

    - **Documentation stops flagging itself.** Fifteen page-level checks used to scan raw source, so prose about CSS, code samples, and comments could trip rules like gradient-text on sites that write about design. Each check is now scoped to what it actually means: real style carriers, class attributes, or rendered text. A changelog documenting a detector rule no longer triggers it, in the CLI and the browser paths both. - **Versioned stylesheets no longer blind the scan.** A page linking `styles.css?v=3` resolved the query string as part of the file path, so the lookup failed silently and every element-level check ran against unstyled markup: one finding on a page that carries eighteen. Stylesheet hrefs now strip query and hash before resolving. - **The kicker net catches standard tracking.** The most common authored kicker, uppercase at 12px with 0.08em letter-spacing, computes to a fraction under the rule's old 1px tracking floor and slipped through. The floor is now proportional to font size, and the exact shape that escaped is pinned in the fixture suite. - **Retired: `single-font`.** One family with weight and size contrast carrying the hierarchy is a legitimate type system,

  4. Skill 4.0.3skill-v4.0.3Jul 28, 2026113 downloads

    - **Direction by dice, not by taste.** The model no longer picks its own favorite. An outside seed names which of its grounded directions must be taken seriously and deals six challenger worlds beside it, so the same brief stops landing on the same three fonts over a cream background. Every roll prints a key that reproduces it, and a re-roll clears the table rather than rewording what you turned down. - **188 reviewed worlds, dealt as challengers.** These are not templates. A world competes against the directions the model derived from your product and wins only on merit, which is how it behaves in practice: strong cultural material beats the deck, thin categories lose to it. Ratings weight the draw, the category default never enters it, and the pool is served by a public roll API. - **No command to pick. Just say what you want.** Impeccable now works out what kind of job it is on its own: a blank slate, a whole new page inside an existing product, a section added to a page that already works, a redesign, or a scoped refinement. Each one gets a different amount of freedom, which is the part that used to go wrong. A redesign treats the old look as evidence and replaces it, rather

  5. Extension 1.3.0ext-v1.3.0Jul 28, 202679 downloads

    - **The updated detector, in your browser.** The extension ships the current rule engine: the new `kicker-above-heading` ban, the `radial-spotlight-glow` rule, stylesheet stripe scanning, and the latest false-positive hardening for shadowed form ids, clipped-text gradients, and non-rendered text.

Commits per week

last 52 weeks
1740Week of 2025-08-09: 0 commitsWeek of 2025-08-16: 0 commitsWeek of 2025-08-23: 0 commitsWeek of 2025-08-30: 0 commitsWeek of 2025-09-06: 0 commitsWeek of 2025-09-13: 0 commitsWeek of 2025-09-20: 0 commitsWeek of 2025-09-27: 0 commitsWeek of 2025-10-04: 0 commitsWeek of 2025-10-11: 0 commitsWeek of 2025-10-18: 0 commitsWeek of 2025-10-25: 0 commitsWeek of 2025-11-01: 0 commitsWeek of 2025-11-09: 1 commitsWeek of 2025-11-16: 5 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 3 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 36 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 42 commitsWeek of 2026-01-11: 13 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 23 commitsWeek of 2026-03-08: 18 commitsWeek of 2026-03-15: 83 commitsWeek of 2026-03-22: 24 commitsWeek of 2026-03-29: 46 commitsWeek of 2026-04-05: 113 commitsWeek of 2026-04-12: 41 commitsWeek of 2026-04-19: 96 commitsWeek of 2026-04-26: 48 commitsWeek of 2026-05-03: 8 commitsWeek of 2026-05-10: 14 commitsWeek of 2026-05-17: 4 commitsWeek of 2026-05-24: 33 commitsWeek of 2026-05-31: 34 commitsWeek of 2026-06-07: 35 commitsWeek of 2026-06-14: 46 commitsWeek of 2026-06-21: 16 commitsWeek of 2026-06-28: 21 commitsWeek of 2026-07-05: 63 commitsWeek of 2026-07-12: 102 commitsWeek of 2026-07-19: 152 commitsWeek of 2026-07-26: 174 commitsWeek of 2026-08-02: 43 commitsAug 9, 2025Aug 2, 2026
1.3K commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 1 commitsSun 1:00 — 5 commitsSun 2:00 — 2 commitsSun 3:00 — 0 commitsSun 4:00 — 1 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 0 commitsSun 8:00 — 0 commitsSun 9:00 — 1 commitsSun 10:00 — 0 commitsSun 11:00 — 3 commitsSun 12:00 — 4 commitsSun 13:00 — 4 commitsSun 14:00 — 4 commitsSun 15:00 — 7 commitsSun 16:00 — 3 commitsSun 17:00 — 11 commitsSun 18:00 — 29 commitsSun 19:00 — 20 commitsSun 20:00 — 19 commitsSun 21:00 — 13 commitsSun 22:00 — 3 commitsSun 23:00 — 1 commitsMon 0:00 — 3 commitsMon 1:00 — 2 commitsMon 2:00 — 1 commitsMon 3:00 — 4 commitsMon 4:00 — 1 commitsMon 5:00 — 3 commitsMon 6:00 — 0 commitsMon 7:00 — 2 commitsMon 8:00 — 3 commitsMon 9:00 — 12 commitsMon 10:00 — 23 commitsMon 11:00 — 15 commitsMon 12:00 — 11 commitsMon 13:00 — 23 commitsMon 14:00 — 13 commitsMon 15:00 — 19 commitsMon 16:00 — 22 commitsMon 17:00 — 12 commitsMon 18:00 — 16 commitsMon 19:00 — 10 commitsMon 20:00 — 5 commitsMon 21:00 — 11 commitsMon 22:00 — 7 commitsMon 23:00 — 4 commitsTue 0:00 — 16 commitsTue 1:00 — 16 commitsTue 2:00 — 9 commitsTue 3:00 — 2 commitsTue 4:00 — 4 commitsTue 5:00 — 0 commitsTue 6:00 — 3 commitsTue 7:00 — 1 commitsTue 8:00 — 7 commitsTue 9:00 — 11 commitsTue 10:00 — 17 commitsTue 11:00 — 13 commitsTue 12:00 — 4 commitsTue 13:00 — 10 commitsTue 14:00 — 22 commitsTue 15:00 — 27 commitsTue 16:00 — 25 commitsTue 17:00 — 31 commitsTue 18:00 — 26 commitsTue 19:00 — 12 commitsTue 20:00 — 9 commitsTue 21:00 — 5 commitsTue 22:00 — 6 commitsTue 23:00 — 13 commitsWed 0:00 — 21 commitsWed 1:00 — 9 commitsWed 2:00 — 4 commitsWed 3:00 — 1 commitsWed 4:00 — 0 commitsWed 5:00 — 9 commitsWed 6:00 — 2 commitsWed 7:00 — 8 commitsWed 8:00 — 6 commitsWed 9:00 — 25 commitsWed 10:00 — 31 commitsWed 11:00 — 25 commitsWed 12:00 — 16 commitsWed 13:00 — 21 commitsWed 14:00 — 28 commitsWed 15:00 — 9 commitsWed 16:00 — 10 commitsWed 17:00 — 11 commitsWed 18:00 — 9 commitsWed 19:00 — 3 commitsWed 20:00 — 7 commitsWed 21:00 — 6 commitsWed 22:00 — 5 commitsWed 23:00 — 7 commitsThu 0:00 — 3 commitsThu 1:00 — 0 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 3 commitsThu 5:00 — 4 commitsThu 6:00 — 0 commitsThu 7:00 — 1 commitsThu 8:00 — 11 commitsThu 9:00 — 13 commitsThu 10:00 — 13 commitsThu 11:00 — 16 commitsThu 12:00 — 3 commitsThu 13:00 — 12 commitsThu 14:00 — 9 commitsThu 15:00 — 14 commitsThu 16:00 — 13 commitsThu 17:00 — 15 commitsThu 18:00 — 7 commitsThu 19:00 — 6 commitsThu 20:00 — 4 commitsThu 21:00 — 5 commitsThu 22:00 — 0 commitsThu 23:00 — 1 commitsFri 0:00 — 1 commitsFri 1:00 — 1 commitsFri 2:00 — 1 commitsFri 3:00 — 1 commitsFri 4:00 — 1 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 2 commitsFri 9:00 — 11 commitsFri 10:00 — 12 commitsFri 11:00 — 7 commitsFri 12:00 — 10 commitsFri 13:00 — 13 commitsFri 14:00 — 7 commitsFri 15:00 — 5 commitsFri 16:00 — 11 commitsFri 17:00 — 22 commitsFri 18:00 — 21 commitsFri 19:00 — 13 commitsFri 20:00 — 4 commitsFri 21:00 — 1 commitsFri 22:00 — 2 commitsFri 23:00 — 12 commitsSat 0:00 — 13 commitsSat 1:00 — 7 commitsSat 2:00 — 1 commitsSat 3:00 — 2 commitsSat 4:00 — 2 commitsSat 5:00 — 1 commitsSat 6:00 — 0 commitsSat 7:00 — 1 commitsSat 8:00 — 1 commitsSat 9:00 — 1 commitsSat 10:00 — 1 commitsSat 11:00 — 1 commitsSat 12:00 — 3 commitsSat 13:00 — 2 commitsSat 14:00 — 2 commitsSat 15:00 — 4 commitsSat 16:00 — 9 commitsSat 17:00 — 14 commitsSat 18:00 — 15 commitsSat 19:00 — 17 commitsSat 20:00 — 4 commitsSat 21:00 — 3 commitsSat 22:00 — 3 commitsSat 23:00 — 4 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits1,137 (80%)
Community commits284 (20%)

1,421 commits in total over the last year.

DateListRankStars gained
Aug 7, 2026monthly#12+12,655
Aug 6, 2026monthly#11+12,331
Aug 5, 2026monthly#12+11,861
Aug 4, 2026monthly#14+11,471
Aug 3, 2026monthly#14+11,349
Aug 2, 2026monthly#11+11,229
Aug 1, 2026monthly#14+11,096
Jul 29, 2026daily#5+847
Jul 28, 2026daily#5+847
Jul 27, 2026daily#7+413
Jul 25, 2026daily#16+4
Jul 24, 2026daily#17+4
Jul 18, 2026daily#22+3
Jul 13, 2026daily#25+3
Mar 14, 2026daily#18+228
  • react/react

    The library for web and native user interfaces.

    247.1K stars · JavaScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    238.5K stars · JavaScript

  • affaan-m/ECC

    The agent harness performance optimization system. Skills, instincts, memory, security, and research-first development for Claude Code, Codex, Opencode, Cursor and beyond.

    234.7K stars · JavaScript

  • vercel/next.js

    The React Framework

    141.7K stars · JavaScript

  • DietrichGebert/ponytail

    Makes your AI agent think like the laziest senior dev in the room. The best code is the code you never wrote.

    98.1K stars · JavaScript

  • JuliusBrussee/caveman

    🪨 why use many token when few token do trick — Claude Code skill that cuts 65% of tokens by talking like caveman

    96.7K stars · JavaScript