Generated banner for Impeccable
Generated logo for Impeccable

Impeccable

Paul BakausCommunityCreated by Paul Bakaus

  • Skill
  • Workflow
  • Design and creative
  • Apache-2.0
  • Low risk
  • Has scripts

From the author

Use to design, redesign, critique, audit, polish or animate a frontend: websites, landing pages, dashboards, app UI, components, native iOS/Android screens, or a design system (DESIGN.md).
— the description by Paul Bakaus

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

Impeccable provides a structured approach to designing, auditing, and refining frontend interfaces including websites, dashboards, and mobile applications. It operates by establishing product context through documentation and applying specific design modes—Persuade, Operate, Read, and Experience—to guide the visual and functional direction of a project. The skill supports a wide range of tasks from initial planning and documentation to technical audits, visual refinements, and animation, ensuring that design changes remain consistent with the established visual world.

What it does

  • Audits UI for accessibility, performance, and responsive behavior.
  • Generates design documentation from existing project code.
  • Refines visual elements through commands like colorize, typeset, and layout.
  • Provides tools to plan UX and UI before implementation.
  • Manages design system tokens and component extraction.
  • Supports iterative design through live variant generation and testing.

When to use it

  • When you need to perform a UX critique or technical audit of an existing interface.
  • When starting a new design surface or defining a new visual world.
  • When you need to polish or refine UI components before a release.
  • When you need to adapt an interface for different screen sizes or platforms.
  • When you need to add purposeful animations or improve typography hierarchy.

Advantages

  • Provides a consistent framework for design decisions across different project types.
  • Integrates technical audits directly into the design workflow.
  • Supports specific modes to align design output with user intent.
  • Enables structured documentation of product and design context.
  • Offers granular control over UI refinements through specialized commands.

Usage examples

“impeccable audit src/components/Dashboard.tsx”
The agent performs a technical quality check on the dashboard component, reporting on accessibility, performance, and responsiveness.
“impeccable polish src/landing-page.css”
The agent executes a final quality pass on the landing page styles to ensure visual consistency and adherence to the design system.
“impeccable animate hero-section”
The agent applies purposeful motion and animation to the specified hero section based on the project's design mode.
“impeccable init”
The agent captures the current project context and creates a PRODUCT.md file to serve as the foundation for future design work.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/pbakaus/impeccable/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip impeccable.zip -d .agents/skills

Documentation by Paul Bakaus

This skill gives you the tools and permission to make design that earns the name out-of-distribution craft. Work as an award-winning design director would: production-grade code, a clear POV, a deep grasp of what the client and its users need, and exceptional craft.

Core principles:

  • Finish the job. No hedging, no shortcuts: the deliverable is complete, except assets the user must provide.

  • Scale ambition to the surface's mode (see Modes). Persuade and Experience get full commitment: bold, distinct work with a point of view. On Operate and Read, ambition shows as precision and restraint, and patterns the visitor already knows earn their place.

  • Verify by looking at the rendered result at the sizes it ships at, and batch the checks: fix what one look shows before looking again, rather than screenshotting after every tweak.

Setup

  1. Run "${CLAUDE_SKILL_DIR}/scripts/impeccable" context once per session, where ${CLAUDE_SKILL_DIR} is the directory that contains this SKILL.md (the skill folder, not a plugin root two levels above it); keep cwd at the user's project. Every "${CLAUDE_SKILL_DIR}/scripts/impeccable" <verb> command in this skill and its references resolves against that base directory. In reference files, replace the skill-base-dir placeholder with this directory before running commands; it is not a shell variable. On a Windows shell without sh, call & "${CLAUDE_SKILL_DIR}/scripts/impeccable.cmd" instead. The launcher runs a self-contained binary that ships next to it or is downloaded once on first run; no Node or other runtime is required. Pass a named source file or route as --target <path>. It loads PRODUCT.md, DESIGN.md, the matching surface brief, and native-platform guidance when applicable; follow its directives and do not rerun it.

  2. Load the request's playbook: its Commands-table reference for an explicit/implied sub-command, or reference/new-work.md for a new surface or replacement visual world. Inspect target and incumbent visual truth before editing. When the app cannot run, start with committed visual-regression goldens or screenshot fixtures; verify target and freshness against current tokens, CSS, components, or assets, resolve conflicts, and compare theme/variant captures.

  3. After resolving analysis and direction, read reference/craft-floor.md immediately before any UI edit, including small refinements. It carries the quality floor, the absolute bans, and the reflexes no detector catches. Do not load it for planning-only work.

Launcher unavailable: On refusal or failure, send a separate message before the next tool call: “Context loading did not run; I’ll read the existing project context directly.” Then read existing PRODUCT.md and DESIGN.md without inventing missing context, follow applicable steps 2–3, including reading reference/craft-floor.md immediately before any UI edit, and continue through permitted tools. This applies to planning and editing; launcher failure alone does not block either.

How to design

  • The brief wins. Honor pinned aesthetics, eras, materials, fonts, and palettes even when they conflict with a saturated-pattern warning. Redirecting a clear brief toward your taste is failure.

  • Refinement preserves; redesign replaces. Refinement keeps the incumbent identity, behavior, copy, and everything outside scope. Ask before replacing factual copy or adding claims. Redesign keeps product truth, content, function, native affordances, and constraints, but treats the old look as evidence and anti-reference; choose a replacement world in new-work and replace DESIGN.md. Never split the difference into polish on the discarded look.

  • Loaded symbols stay out of the decoration. A subject's world does not license emblems tied to militarism, supremacy, or hate movements as motifs, badges, or ornament, such as the Rising Sun flag's rays, the Confederate battle flag, or Nazi-era insignia and their stylised variants; reach for that world's neutral forms instead. Content that documents such a symbol as fact stays as it is.

  • Visual authority is evidence, not a filename. Missing DESIGN.md alone does not make a project greenfield; new-work decides whether to preserve, expand, or replace the incumbent world.

Modes

The mode names what the visitor's success looks like on this surface.

  • Persuade: the visitor decides and acts; design is the product. Landing pages, marketing, campaigns, pricing. Earn attention and action. Ship real imagery when the brief needs it; follow the committed world, not category habit.

  • Operate: the visitor completes a task. App UI, dashboards, editors, admin, settings, tools. Scanability, consistency, native expectations, and the real usage scene outrank expression. Brand lives in precise details.

  • Read: the visitor understands something. Docs, articles, guides, help, changelogs. Structure for comprehension, then make the reading experience worth staying in.

  • Experience: the visitor is inside the work itself. Portfolios, galleries, showcases. Let the artifact lead from the first viewport; the interface recedes.

Choose the mode from the requested surface, not the product, and persist it only in that surface brief. A tool's landing page is still Persuade; a fashion house's documentation is still Read; a docs index is Read, not Persuade. See new-work.md for new surfaces and operate.md for deeper Operate/Read guidance.

Commands

CommandCategoryDescriptionReference
craft [feature]BuildDeprecated alias for an ordinary new-work requestreference/craft.md
shape [feature]BuildPlan UX/UI before writing codereference/shape.md
initBuildCapture durable product context in PRODUCT.mdreference/init.md
documentBuildGenerate DESIGN.md from existing project codereference/document.md
extract [target]BuildPull reusable tokens and components into design systemreference/extract.md
critique [target]EvaluateUX design review with heuristic scoringreference/critique.md
audit [target]EvaluateTechnical quality checks (a11y, perf, responsive)reference/audit.md · native: reference/audit.native.md
polish [target]RefineFinal quality pass before shippingreference/polish.md
bolder [target]RefineAmplify safe or bland designsreference/bolder.md
quieter [target]RefineTone down aggressive or overstimulating designsreference/quieter.md
distill [target]RefineStrip to essence, remove complexityreference/distill.md
harden [target]RefineProduction-ready: errors, i18n, edge casesreference/harden.md
onboard [target]RefineDesign first-run flows, empty states, activationreference/onboard.md
animate [target]EnhanceAdd purposeful animations and motionreference/animate.md
colorize [target]EnhanceAdd strategic color to monochromatic UIsreference/colorize.md
typeset [target]EnhanceImprove typography hierarchy and fontsreference/typeset.md
layout [target]EnhanceFix spacing, rhythm, and visual hierarchyreference/layout.md
delight [target]EnhanceAdd personality and memorable touchesreference/delight.md
overdrive [target]EnhancePush past conventional limitsreference/overdrive.md
clarify [target]FixImprove UX copy, labels, and error messagesreference/clarify.md
adapt [target]FixAdapt for different devices and screen sizesreference/adapt.md · native: reference/adapt.native.md
optimize [target]FixDiagnose and fix UI performancereference/optimize.md
liveIterateVisual variant mode: pick elements in the browser, iterate on alternativesreference/live.md
generate [n] [action] [element]IterateVariants, versions, or alternatives of a named element to choose from in the live browser; no manual pickingreference/generate.md

Routing:

  • No argument: read routing.md and present its context-aware menu; never auto-run a command.

  • Explicit or clearly implied request to run a command: load its reference (native variant on native platforms) and follow it. Ask once if two commands fit.

  • Workflow or command-selection question: read Workflow questions.

  • Otherwise: treat the request as general design work. Missing PRODUCT.md routes a new surface or replacement world through init, then new-work; a narrow refinement of existing code proceeds on the incumbent implementation as impeccable context directs, offering init afterward rather than blocking on it.

  • teach aliases init. craft is a deprecated alias for ordinary new-work and adds nothing. shape owns task discovery, then enters new-work only for visual-world and surface-concept decisions.

After init writes PRODUCT.md, resume without rerunning impeccable context; init loads the native platform reference itself when the platform it recorded is ios, android, or adaptive.

Pin / Unpin: "${CLAUDE_SKILL_DIR}/scripts/impeccable" pin <pin|unpin> <command> creates or removes a standalone /<command> shortcut. Report the script's result concisely; relay stderr verbatim on error.

Hooks: /impeccable hooks <on|off|status|ignore-rule|ignore-file|ignore-value|reset> manages the design detector hook for this project (auto-runs the detector after UI file edits and surfaces findings). Load reference/hooks.md when the user invokes it with any argument.

Doctor: /impeccable doctor reports and repairs drift between this project's Impeccable artifacts (PRODUCT.md, DESIGN.md and its sidecar, config, surface briefs, the hook) and what this version reads. Load reference/doctor.md when the user invokes it, or when they ask what is out of date, stale, or needs refreshing. A CONTEXT_STALE directive in Setup's output is the cheap subset of the same report; act on it there per its own instructions rather than running doctor unasked.

Never repair drift as a side effect of a design task. A CONTEXT_STALE finding is reported, not acted on, unless the user asks. The one exception is a finding marked auto, which the next write to that file performs anyway.

Files

reference/document.md

Generate a DESIGN.md file at the project root that captures the current visual design system, so AI agents generating new screens stay on-brand.

DESIGN.md follows the official DESIGN.md format spec: optional YAML frontmatter carrying machine-readable design tokens, followed by up to eight markdown sections in a fixed order. Tokens are normative; prose provides context for how to apply them. Sections may be omitted when not relevant, but those present stay in the specified order. Use the canonical headings below so the file remains portable across DESIGN.md-aware tools.

The frontmatter: token schema

The YAML frontmatter is the machine-readable layer. It's what Stitch's linter validates and what the live panel renders tiles from. Keep it tight; every entry should correspond to a token the project actually uses.

---
name: <project title>
description: <one-line tagline>
colors:
  primary: "#b8422e"
  neutral-bg: "#faf7f2"
  # ...one entry per extracted color; key = descriptive slug
typography:
  display:
    fontFamily: "Cormorant Garamond, Georgia, serif"
    fontSize: "4.5rem"
    fontWeight: 300
    lineHeight: 1
    letterSpacing: "0em"
  body:
    # ...
rounded:
  sm: "4px"
  md: "8px"
spacing:
  sm: "8px"
  md: "16px"
components:
  button-primary:
    backgroundColor: "{colors.primary}"
    textColor: "{colors.neutral-bg}"
    rounded: "{rounded.sm}"
    padding: "16px 48px"
  button-primary-hover:
    backgroundColor: "{colors.primary-deep}"
---

Rules that matter:

  • Token refs use {path.to.token} (e.g. {colors.primary}, {rounded.md}). Components may reference primitives; primitives may not reference each other.

  • Colors accept any valid CSS color string. Hex is the recommended default for portability, but preserve an incumbent rgb(), hsl(), oklch(), wide-gamut, or mixed-color value when it is the project's normative source. Never split the source of truth without explicit reason.

  • Component sub-tokens are limited to 8 props: backgroundColor, textColor, typography, rounded, padding, size, height, width. Shadows, motion, focus rings, backdrop-filter: none of those fit. Carry them in the sidecar (Step 4b).

  • Scale keys are open-ended. Use whatever names the project already uses (oxblood-deep, surface-container-low). Don't rename to Material defaults.

  • Variants are naming convention, not schema. button-primary / button-primary-hover / button-primary-active as sibling keys.

The markdown body: eight sections (canonical order)

  1. ## Overview

  2. ## Colors

  3. ## Typography

  4. ## Layout

  5. ## Elevation & Depth

  6. ## Shapes

  7. ## Components

  8. ## Do's and Don'ts

Omit irrelevant sections rather than filling them with invented rules. Put responsive layout in Layout, depth in Elevation & Depth, radius and form language in Shapes, and per-component behavior in Components. Unknown sections are preserved by the format, but new visual guidance should use the canonical structure whenever it fits.

When to run

  • New-work found a coherent incumbent visual system but no DESIGN.md.

  • The first implementation of a new world is complete and its provisional decisions need to be carbonized.

  • An existing DESIGN.md is stale (the design has drifted).

  • Before a large redesign, to capture the current state as a reference.

If a DESIGN.md already exists, do not silently overwrite it. Show the user the existing file first. Ask with the AskUserQuestion tool and wait for the answer before continuing. The choice is refresh, overwrite, or merge.

Two paths

  • Scan mode (default): the project has design tokens, components, or rendered output. Extract, then confirm descriptive language. Use when there's code to analyze.

  • Seed mode: the project is pre-implementation. Ensure PRODUCT.md exists, then reuse new-work's visual-world workshop and write its directional DESIGN.md seed. Re-run in scan mode once there's code.

Decide by scanning first (Scan mode Step 1). If the scan finds no tokens, no component files, and no rendered site, offer seed mode; don't silently switch. /impeccable document --seed requests new-work's world workshop, but it does not authorize replacing coherent code: when an incumbent system exists, offer scan mode or route an explicit identity-replacement request through new-work.

Scan mode (approach C: auto-extract, then confirm descriptive language)

Step 1: Find the design assets

Search the codebase in priority order:

  1. CSS custom properties: grep for --color-, --font-, --spacing-, --radius-, --shadow-, --ease-, --duration- declarations in CSS files (usually src/styles/, public/css/, app/globals.css, etc.). Record name, value, and the file it's defined in.

  2. Tailwind config: if tailwind.config.{js,ts,mjs} exists, read the theme.extend block for colors, fontFamily, spacing, borderRadius, boxShadow.

  3. CSS-in-JS theme files: styled-components, emotion, vanilla-extract, stitches; look for theme.ts, tokens.ts, or equivalent.

  4. Design token files: tokens.json, design-tokens.json, Style Dictionary output, W3C token community group format.

  5. Component library: scan the main button, card, input, navigation, dialog components. Note their variant APIs and default styles.

  6. Global stylesheet: the root CSS file usually has the base typography and color assignments.

  7. Visible rendered output: if browser automation tools are available, load the live site and sample computed styles from key elements (body, h1, a, button, .card). This catches values that tokens miss.

Step 2: Auto-extract what can be auto-extracted

Build a structured draft from the discovered tokens. For each token class:

  • Colors: Group into Primary / Secondary / Tertiary / Neutral (the Material-derived roles Stitch uses). If the project only has one accent, express it as Primary + Neutral; omit Secondary and Tertiary rather than inventing them.

  • Typography: Map observed sizes and weights to the Material hierarchy (display / headline / title / body / label). Note font-family stacks and the scale ratio.

  • Elevation: Catalogue the shadow vocabulary. If the project is flat and uses tonal layering instead, that's a valid answer; state it explicitly.

  • Components: For each common component (button, card, input, chip, list item, tooltip, nav), extract shape (radius), color assignment, hover/focus treatment, internal padding.

  • Layout + spacing: Extract grid, container, breakpoint, rhythm, and density behavior into Layout.

  • Shapes: Extract radius, corner, border, clipping, and recurring form behavior into Shapes.

Step 2b: Stage the frontmatter

From the auto-extracted tokens, draft the YAML frontmatter now (you'll write it at the top of DESIGN.md in Step 4). This is the machine-readable layer: what the live panel and Stitch's linter consume.

  • Colors: one entry per extracted color. Key = descriptive slug (oxblood-deep, editorial-magenta, not blue-800). Value = whichever format the project treats as canonical (OKLCH or hex; see the frontmatter rules above). Don't split the source of truth: one format in the frontmatter, don't redefine the same token in prose with a different value.

  • Typography: one entry per role (display, headline, title, body, label). Typography is an object; include only the props that are real for the project (fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, fontFeature, fontVariation).

  • Rounded / Spacing: whatever scale steps the project actually uses, keyed by whatever scale name the project uses (sm / md / lg, or surface-sm, or numeric steps).

  • Components: one entry per variant (button-primary, button-primary-hover, button-ghost). Reference primitives via {colors.X}, {rounded.Y}. If a variant needs a property Stitch's 8-prop set doesn't cover (shadow, focus ring, backdrop-filter), carry the full snippet in the sidecar instead.

Skip anything the project doesn't have. Empty scale keys or fabricated tokens pollute the spec.

Step 3: Ask the user for qualitative language

The following require creative input that cannot be auto-extracted. Ask them in two structured rounds of no more than three questions each (or the harness's lower limit), waiting between rounds:

  • Creative North Star: a single named metaphor for the whole system ("The Editorial Sanctuary", "The Golden State Curator", "The Lab Notebook"). Offer 2-3 options that honor PRODUCT.md's brand personality.

  • Overview voice: mood adjectives, aesthetic philosophy in 2-3 sentences, and any confirmed visual anti-reference.

  • Color character (for auto-extracted colors): descriptive names ("Deep Muted Teal-Navy", not "blue-800"). Suggest 2-3 options per key color based on hue/saturation.

  • Elevation philosophy: flat/layered/lifted. If shadows exist, is their role ambient or structural?

  • Component philosophy: the feel of buttons, cards, inputs in one phrase ("tactile and confident" vs. "refined and restrained").

Carry a line from PRODUCT.md only when it is a durable brand commitment that actually constrains the visual system. Page strategy and surface concepts do not belong here.

Step 4: Write DESIGN.md

The file opens with the YAML frontmatter staged in Step 2b (schema documented at the top of this reference), then the markdown body using the canonical structure below.

---
name: [Project Title]
description: [one-line tagline]
colors:
  # ... staged frontmatter from Step 2b
---

# Design System: [Project Title]

## Overview

**Creative North Star: "[Named metaphor in quotes]"**

[2-3 paragraph holistic description: personality, density, and aesthetic philosophy. Start from the North Star and work outward. State only confirmed visual rejections. End with a short **Key Characteristics:** bullet list.]

## Colors

[Describe the palette character in one sentence.]

### Primary
- **[Descriptive Name]** (#HEX / oklch(...)): [Where and why this color is used. Be specific about context, not just role.]

### Secondary (optional; omit if the project has only one accent)
- **[Descriptive Name]** (#HEX): [Role.]

### Tertiary (optional)
- **[Descriptive Name]** (#HEX): [Role.]

### Neutral
- **[Descriptive Name]** (#HEX): [Text / background / border / divider role.]
- [...]

### Named Rules (optional, powerful)
**The [Rule Name] Rule.** [Short, forceful prohibition or doctrine, e.g. "The One Voice Rule. The primary accent is used on ≤10% of any given screen. Its rarity is the point."]

## Typography

**Display Font:** [Family] (with [fallback])
**Body Font:** [Family] (with [fallback])
**Label/Mono Font:** [Family, if distinct]

**Character:** [1-2 sentence personality description of the pairing.]

### Hierarchy
- **Display** ([weight], [size/clamp], [line-height]): [Purpose; where it appears.]
- **Headline** ([weight], [size], [line-height]): [Purpose.]
- **Title** ([weight], [size], [line-height]): [Purpose.]
- **Body** ([weight], [size], [line-height]): [Purpose. Include max line length like 65–75ch if relevant.]
- **Label** ([weight], [size], [letter-spacing], [case if uppercase]): [Purpose.]

### Named Rules (optional)
**The [Rule Name] Rule.** [Short doctrine about type use.]

## Layout

[Describe the grid or spatial model, container behavior, density, responsive changes, and the spacing rhythm. Include exact values only when observed.]

## Elevation & Depth

[One paragraph: does this system use shadows, tonal layering, or a hybrid? If "no shadows", say so explicitly and describe how depth is conveyed instead.]

### Shadow Vocabulary (if applicable)
- **[Role name]** (`box-shadow: [exact value]`): [When to use it.]
- [...]

### Named Rules (optional)
**The [Rule Name] Rule.** [e.g. "The Flat-By-Default Rule. Surfaces are flat at rest. Shadows appear only as a response to state (hover, elevation, focus)."]

## Shapes

[Describe the form language: corner/radius strategy, borders, clipping, and any recurring silhouette or geometry.]

## Components

For each component, lead with a short character line, then specify shape, color assignment, states, and any distinctive behavior.

### Buttons
- **Shape:** [radius described, exact value in parens]
- **Primary:** [color assignment + padding, in semantic + exact terms]
- **Hover / Focus:** [transitions, treatments]
- **Secondary / Ghost / Tertiary (if applicable):** [brief description]

### Chips (if used)
- **Style:** [background, text color, border treatment]
- **State:** [selected / unselected, filter / action variants]

### Cards / Containers
- **Corner Style:** [radius]
- **Background:** [colors used]
- **Shadow Strategy:** [reference Elevation section]
- **Border:** [if any]
- **Internal Padding:** [scale]

### Inputs / Fields
- **Style:** [stroke, background, radius]
- **Focus:** [treatment, e.g. glow, border shift, etc.]
- **Error / Disabled:** [if applicable]

### Navigation
- **Style, typography, default/hover/active states, mobile treatment.**

### [Signature Component] (optional; if the project has a distinctive custom component worth documenting)
[Description.]

## Do's and Don'ts

Concrete visual guardrails grounded in the incumbent implementation or the user's chosen world. Lead each with "Do" or "Don't" and include exact values only when established. Do not turn a task-specific concept or surface strategy into a system-wide prohibition.

### Do:
- **Do** [specific prescription with exact values / named rule].
- **Do** [...]

### Don't:
- **Don't** [specific prohibition confirmed by the incumbent system or the user].
- **Don't** [...]
- **Don't** [...]
Step 4b: Write .impeccable/design.json sidecar (extensions only)

The frontmatter owns token primitives (colors, typography, rounded, spacing, components). The sidecar at .impeccable/design.json carries what Stitch's schema can't hold: tonal ramps per color, shadow/elevation tokens, motion tokens, breakpoints, full component HTML/CSS snippets (the panel renders these into a shadow DOM), and narrative (north star, rules, do's/don'ts). It extends the frontmatter, it doesn't duplicate it.

Regenerate the sidecar whenever you regenerate root DESIGN.md. If the user only asks to refresh the sidecar (e.g., from the live panel's stale-hint), preserve DESIGN.md and write only .impeccable/design.json.

Schema
{
  "schemaVersion": 2,
  "generatedAt": "ISO-8601 string",
  "title": "Design System: [Project Title]",
  "extensions": {
    "colorMeta": {
      "primary":        { "role": "primary",  "displayName": "Editorial Magenta", "canonical": "oklch(60% 0.25 350)", "tonalRamp": ["...", "...", "..."] },
      "cool-paper": { "role": "neutral",  "displayName": "Cool Paper",    "canonical": "oklch(96% 0.005 230)", "tonalRamp": ["...", "...", "..."] }
    },
    "typographyMeta": {
      "display": { "displayName": "Display", "purpose": "Hero headlines only." }
    },
    "shadows": [
      { "name": "ambient-low", "value": "0 4px 24px rgba(0,0,0,0.12)", "purpose": "Diffuse hover glow under accent elements." }
    ],
    "motion": [
      { "name": "ease-standard", "value": "cubic-bezier(0.4, 0, 0.2, 1)", "purpose": "Default easing for state transitions." }
    ],
    "breakpoints": [
      { "name": "sm", "value": "640px" }
    ]
  },
  "components": [
    {
      "name": "Primary Button",
      "kind": "button | input | nav | chip | card | custom",
      "refersTo": "button-primary",
      "description": "One-line what and when.",
      "html": "<button class=\"ds-btn-primary\">SAVE CHANGES</button>",
      "css": ".ds-btn-primary { background: #191c1d; color: #fff; padding: 16px 48px; letter-spacing: 0.05em; text-transform: uppercase; font-weight: 500; border: none; border-radius: 0; transition: background 0.2s, transform 0.2s; } .ds-btn-primary:hover { background: oklch(60% 0.25 350); transform: translateY(-2px); }"
    }
  ],
  "narrative": {
    "northStar": "The Editorial Sanctuary",
    "overview": "2-3 paragraphs of the philosophy, pulled from DESIGN.md Overview section.",
    "keyCharacteristics": ["...", "..."],
    "rules": [{ "name": "The One Voice Rule", "body": "...", "section": "colors|typography|elevation" }],
    "dos":   ["Do use ..."],
    "donts": ["Don't use ..."]
  }
}

What changed from schemaVersion 1. The old sidecar carried token primitive arrays (tokens.colors[], tokens.typography[], etc.). Those values now live in the frontmatter. The sidecar only carries metadata that can't live in the frontmatter (tonal ramps, canonical OKLCH when the hex is an approximation, display names, role hints), keyed by the frontmatter token name (colorMeta.<token-name>, typographyMeta.<token-name>). Components still carry full HTML/CSS because Stitch's 8-prop set can't hold them.

Component translation rules

The html and css fields must be self-contained, drop-in snippets that render correctly when injected into a shadow DOM. The panel applies them directly: no post-processing, no framework runtime.

  1. Tailwind expansion. If the source uses Tailwind (className="bg-primary text-white rounded-lg px-6 py-3"), expand every utility to literal CSS properties in the css string. Do not reference Tailwind classes; do not assume a Tailwind CSS bundle is loaded. Each component is self-contained.

  2. Token resolution. If the project exposes tokens as CSS custom properties on :root (e.g. --color-primary, --radius-md), reference them via var(--color-primary); they inherit through the shadow DOM and stay live-bound. If tokens live only in JS theme objects (styled-components, CSS-in-JS), resolve to literal values at generation time.

  3. Icons. Inline as SVG. Do not reference Lucide/Heroicons packages, icon fonts, or <img src="...">. A typical icon is 16-24px; copy the SVG path data directly.

  4. States. Include :hover, :focus-visible, and (if meaningful) :active rules inline. A static default-only snapshot makes the panel feel dead. Hover + focus rules in the CSS make it feel alive.

  5. Reset bloat. Extract only the component's distinctive CSS (background, color, padding, border-radius, typography, transition). Skip universal resets (box-sizing: border-box, line-height: inherit, -webkit-font-smoothing). The panel already has a neutral canvas; don't re-ship resets.

  6. Scoped class names. Prefix every class with ds- (e.g. ds-btn-primary, ds-input-search) so component CSS doesn't collide with other components' CSS in the same shadow DOM.

What to include

Aim for a tight set of 5-10 components that best represent the visual system:

  • Canonical primitives (always include if the project has them): button (each variant as a separate component entry), input/text field, navigation, chip/tag, card.

  • Signature components (include if distinctive): the recurring custom patterns that actually define the implemented system.

  • Skip the rest. Utility components, form building blocks, wrapper layouts: not worth documenting unless visually distinctive.

If the project has no component library yet (bare landing page, new project), synthesize canonical primitives from the tokens using best-practice defaults consistent with the DESIGN.md's rules. Every .impeccable/design.json has something to render, even on day zero.

Tonal ramps

For each color token, generate an 8-step tonalRamp array: dark to light, same hue, chroma reduced near white and black, stepped lightness from ~15% to ~95%. The panel renders this as a strip under the swatch. If the project already defines a tonal scale (Material surface-container-low family, Tailwind-style blue-50..blue-900), use those values. Otherwise synthesize in OKLCH.

Narrative mapping

Pull directly from the DESIGN.md you just wrote:

  • narrative.northStar → the **Creative North Star: "..."** line from Overview

  • narrative.overview → the philosophy paragraphs from Overview

  • narrative.keyCharacteristics → the bulleted **Key Characteristics:** list

  • narrative.rules → every **The [Name] Rule.** [body] across all sections, tagged with section

  • narrative.dos / narrative.donts → the bullet lists from Do's and Don'ts verbatim

Do not reword. The panel shows these as secondary collapsible context; the same voice that's in the Markdown carries through.

Step 5: Confirm and refine
  1. Show the user the full DESIGN.md you wrote. Briefly highlight the non-obvious creative choices (descriptive color names, atmosphere language, named rules).

  2. Mention that .impeccable/design.json was also written alongside; the live panel will now render this project's actual button/input/nav primitives instead of generic approximations.

  3. Offer to refine any section: "Want me to revise a section, add component patterns I missed, or adjust the atmosphere language?"

Your own write is the freshest source; subsequent commands in this session don't need a reload.

Seed mode

For projects with no visual system to extract yet. Produces a user-chosen visual-world scaffold, not a fabricated token spec.

Step 1: Route through new-work's workshop

PRODUCT.md is the prerequisite. If it is missing, load init.md and complete its product interview first. Do not create a visual identity without durable product context.

If PRODUCT.md exists, load new-work.md and resolve visual authority. Seed mode requires a concrete first surface: use the target the user named, or ask what they want to make first. Run new-work's Create or replace the visual world flow, then Commit the world, so the visual world and its first expression are chosen together. Stop after the directional DESIGN.md seed and surface brief; do not implement. A structured simulated user counts as the user and must get the same choice.

If new-work already completed the workshop in this session, use its chosen direction directly. Do not ask again.

Step 2: Write seed DESIGN.md

Use the canonical section order from Scan mode. Populate the selected workshop direction and leave unresolved implementation facts as honest placeholders. The seed commits a world and its invariants; it does not pretend implementation tokens already exist.

Lead the file with:

<!-- SEED: established with the user before implementation; re-run /impeccable document once there's code to capture the actual tokens and components. -->

Per-section guidance in seed mode:

  • Overview: the chosen design thesis, layout behavior, material character, imagery stance, motion grammar, and reusable signature. Keep the selected first-surface expression in its surface brief; do not promote its composition into the global world.

  • Colors: the selected palette strategy and roles. Include values only when the user, an existing asset, or new-work's exploration established them; otherwise mark them [to be resolved during implementation].

  • Typography: the selected type character and role relationship. Include font names only when established; otherwise mark the pairing [to be resolved during implementation].

  • Layout: the selected spatial grammar and responsive behavior, without pretending exact measurements are settled.

  • Elevation & Depth: the selected material and depth behavior, stated as an invariant rather than inferred from a generic preset.

  • Shapes: the selected form and corner language.

  • Components: omit entirely; no components exist yet.

  • Do's and Don'ts: record the durable guardrails confirmed during the world choice, not task-local refusals.

Seed mode writes a minimal frontmatter with name and description only; no colors, typography, rounded, spacing, or components yet. Real tokens land on the next Scan-mode run. Skip the .impeccable/design.json sidecar in seed mode for the same reason: nothing to render.

Step 3: Confirm
  1. Show the seed DESIGN.md. Call out that it is a seed (the marker is the literal commitment).

  2. Tell the user: "Re-run /impeccable document once you have some code. That pass will extract real tokens and generate the sidecar."

Your own write is the freshest source; no reload needed.

Style guidelines

  • Frontmatter first, prose second. Tokens go in the YAML frontmatter; prose contextualizes them. Don't redefine a token value in two places; the frontmatter is normative.

  • Carry only durable product constraints. A binding logo, identity asset, accessibility need, or brand commitment from PRODUCT.md may constrain DESIGN.md. Surface strategy stays in its surface brief.

  • Match the spec. Use its eight canonical sections in order and omit any that are irrelevant. Put motion guidance with the world or component it affects rather than creating a token group the schema does not support.

  • Descriptive > technical: "Gently curved edges (8px radius)" > "rounded-lg". Include the technical value in parens, lead with the description.

  • Functional > decorative: for each token, explain WHERE and WHY it's used, not just WHAT it is.

  • Exact values in parens: hex codes, px/rem values, font weights; always the number in parens alongside the description.

  • Use Named Rules: **The [Name] Rule.** [short doctrine]. These are memorable, citable, and much stickier for AI consumers than bullet lists. Stitch's own outputs use them heavily ("The No-Line Rule", "The Ghost Border Fallback"). Aim for 1-3 per section.

  • Be decisive where evidence is decisive. Use hard language for actual invariants and softer language for provisional guidance.

  • Use concrete audit tests only when they are grounded in the observed system or a confirmed user decision. A one-sentence test beats a paragraph of principle.

  • Reference PRODUCT.md selectively. Product truth explains why the world fits; it does not supply page composition or a visual don't-list by default.

  • Group colors by role, not by hex-order or hue-order. Primary / Secondary / Tertiary / Neutral is the spec ordering.

Pitfalls

  • Don't paste raw CSS class names. Translate to descriptive language.

  • Don't extract every token. Stop at what's actually reused; one-offs pollute the system.

  • Don't invent components that don't exist. If the project only has buttons and cards, only document those.

  • Don't overwrite an existing DESIGN.md without asking.

  • Don't duplicate content from PRODUCT.md. DESIGN.md is strictly visual.

  • Don't replace canonical sections with near-synonyms. Put layout and responsive behavior in Layout; put motion with the affected world or component.

  • Don't rename sections even slightly. "Colors" not "Color Palette & Roles". "Typography" not "Typography Rules". Tooling parsing depends on exact headers.

  • Don't duplicate token values between frontmatter and prose. If a color is in colors.primary as hex, the prose can name it and describe its role but should not reassert a different hex. The frontmatter is normative.

  • Don't invent frontmatter token groups outside Stitch's schema (no motion:, breakpoints:, shadows: at the top level). Stitch's Zod schema only accepts colors, typography, rounded, spacing, components. Anything else belongs in the sidecar's extensions.

Requirements and compatibility

Written for: Claude Code

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Needs: Claude Code frontmatter, Needs Node.js

Security

What our scanner noticed· Low risk

  • Scripts that your agent may run

This skill includes scripts that your agent may run. Read them before you use it.

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Paul Bakaus
Publisher
Paul Bakaus (Community)
Source
pbakaus/impeccable · plugin/skills/impeccable · commit 687bc38
Licence
Apache License 2.0 (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • NOTICE (added by AutoGineer from NOTICE.md)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Paul Bakaus or Paul Bakaus.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download impeccable.zip