Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion plugin/agents/impeccable-asset-producer.md
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ Ask blockers once, globally. Missing source path/crops or output directory block

7. Remove baked-in UI text, navigation, buttons, body copy, and mock chrome unless the text is part of the asset.
8. Think through the final DOM/CSS representation before generating. If CSS will own radius, clipping, shadows, borders, perspective, responsive cropping, captions, or card frames, do not bake those into the bitmap.
9. Save outputs non-destructively in the requested project directory, and leave the intent with the file: after every generation, run `node .claude/skills/impeccable/scripts/embed-prompt.mjs <asset> --prompt "<the prompt used>"` so the prompt is embedded in the image itself, because the build thread composes what you made and needs to know what it is looking at, and the embedding survives copies where sidecars get lost.
9. Save outputs non-destructively in the requested project directory, and leave the intent with the file: after every generation, run `node <skill-base-dir>/scripts/embed-prompt.mjs <asset> --prompt "<the prompt used>"` so the prompt is embedded in the image itself, because the build thread composes what you made and needs to know what it is looking at, and the embedding survives copies where sidecars get lost.
10. Compare each output against its source crop, opening every image by its workspace-relative path; sandboxed viewers reject absolute paths. If a review/QA tool is available, run it before the final manifest, then retry each major/fatal finding once before finalizing.

Use `texture/pattern extraction` only when the source region is already clean enough to sample as texture. If UI, cards, labels, headings, body copy, or footer chrome must be removed to make a reusable texture or background, classify it as crop-derived cleanup or clean-plate work.
Expand Down
6 changes: 3 additions & 3 deletions plugin/skills/impeccable/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ argument-hint: "[shape · audit|critique · animate|bolder|colorize|delight|layo
license: Apache 2.0
allowed-tools:
- Bash(npx impeccable *)
- Bash(node .claude/skills/impeccable/scripts/*)
- Bash(node */skills/impeccable/scripts/*)
Comment thread
greptile-apps[bot] marked this conversation as resolved.
Outdated
---

This skill gives you the tools and permission to create design that earns to be called out-of-distribution craft: Whereas before, your design work would have been safe, timid and measured, you now approach every design task as a award-winning design director with impeccable understanding for what makes exceptional design work: production-grade code, peak creativity, a clear POV, deep understanding of the needs of the client and users, and exceptional craft.
Expand All @@ -19,7 +19,7 @@ Core principles:

## Setup

1. Run `node <skill-base-dir>/scripts/context.mjs` once per session, where `<skill-base-dir>` is the loaded base directory the runtime reports for this skill; keep cwd at the user's project. That base directory resolves every `node .claude/skills/impeccable/scripts/...` command in this skill and its references, and `.claude/skills/impeccable/scripts` is the fallback only when the runtime reports no base directory. 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.
1. Run `node <skill-base-dir>/scripts/context.mjs` once per session, where `<skill-base-dir>` is the loaded base directory the runtime reports for this skill; keep cwd at the user's project. Every `node <skill-base-dir>/scripts/...` command in this skill and its references resolves against that base directory. 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. Before acting, load the one playbook that owns the request: the Commands table's reference for an explicit or clearly implied sub-command, or [reference/new-work.md](reference/new-work.md) for a new surface or replacement visual world. Then inspect the target and at least one representative source of incumbent visual truth (tokens, theme, CSS, component, or asset) before editing.
3. After analysis and direction are resolved, load [reference/craft-floor.md](reference/craft-floor.md) immediately before editing UI. It carries the quality floor, the absolute bans, and the reflexes no detector catches. Do not load it for planning-only work.

Expand Down Expand Up @@ -77,7 +77,7 @@ Routing:

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

**Pin / Unpin:** `node .claude/skills/impeccable/scripts/pin.mjs <pin|unpin> <command>` creates or removes a standalone `/<command>` shortcut. Report the script's result concisely; relay stderr verbatim on error.
**Pin / Unpin:** `node <skill-base-dir>/scripts/pin.mjs <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](reference/hooks.md) when the user invokes it with any argument.

Expand Down
10 changes: 5 additions & 5 deletions plugin/skills/impeccable/reference/critique.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ Resolve one stable target, run two independent assessments, synthesize a design
- "this page" -> the current URL or source file
2. **Confirm the target slugs cleanly**:
```bash
node .claude/skills/impeccable/scripts/critique-storage.mjs slug "<resolved-path-or-url>"
node <skill-base-dir>/scripts/critique-storage.mjs slug "<resolved-path-or-url>"
```
Every later command also accepts the resolved target directly and derives the same slug internally; never hand-write a slug. If this exits non-zero, skip persistence and trend for this run, but continue the critique.
3. **Read `.impeccable/critique/ignore.md`** if it exists. Drop matching findings silently; it is the only prior-run input critique consumes.
Expand Down Expand Up @@ -57,7 +57,7 @@ Run the bundled detector and browser visualization evidence. Assessment B is man

CLI scan:
```bash
node .claude/skills/impeccable/scripts/detect.mjs --json [target]
node <skill-base-dir>/scripts/detect.mjs --json [target]
```

- Pass markup files/directories as `[target]`; do not pass CSS-only files.
Expand All @@ -71,7 +71,7 @@ Browser visualization is required for a viewable target when browser automation
1. Create a fresh tab and navigate. Prefer the harness's native/browser-canvas screenshot path before hand-rolling a Playwright/Puppeteer script; only fall back to a custom script when no native browser tool is exposed.
2. Preflight mutable injection by setting `document.title` and appending a `<script>` tag. Read-only evaluate APIs do not count.
3. If mutation is unavailable, skip live server, browser presentation, and injection; report fallback signal.
4. If mutation is available, start `node .claude/skills/impeccable/scripts/live-server.mjs --background`, present the browser if supported, label `[Human]`, scroll top, inject `http://localhost:PORT/detect.js`, wait 2-3 seconds, read `impeccable` console messages, then stop the live server.
4. If mutation is available, start `node <skill-base-dir>/scripts/live-server.mjs --background`, present the browser if supported, label `[Human]`, scroll top, inject `http://localhost:PORT/detect.js`, wait 2-3 seconds, read `impeccable` console messages, then stop the live server.
5. For multi-view targets, inject on 3-5 representative pages.

Return: CLI findings JSON/counts, browser console findings if applicable, false positives, and skipped/failed browser steps with concrete reasons.
Expand Down Expand Up @@ -183,15 +183,15 @@ Skip this step if the Setup slug was null (vague or root-level target).
2. **Pass the structured metadata** through `IMPECCABLE_CRITIQUE_META` (JSON), then run the write command:
```bash
IMPECCABLE_CRITIQUE_META='{"target":"<user phrasing>","total_score":<n>,"max_score":<n>,"na_heuristics":"<comma-separated numbers, or empty>","p0_count":<n>,"p1_count":<n>}' \
node .claude/skills/impeccable/scripts/critique-storage.mjs write "<resolved target>" <body-file>
node <skill-base-dir>/scripts/critique-storage.mjs write "<resolved target>" <body-file>
```
`max_score` is the applicable maximum from the heuristic table (40 when every heuristic applied), so a later run can tell a renormalized total from a full one. The helper prints the absolute path it wrote.

3. **Delete the temp body file** after the write attempt completes, whether the write succeeded or failed. If deletion fails, mention `temp-file cleanup failed: <reason>` briefly in the final output, but do not block the critique.

4. **Read the trend** for context:
```bash
node .claude/skills/impeccable/scripts/critique-storage.mjs trend "<resolved target>" 5
node <skill-base-dir>/scripts/critique-storage.mjs trend "<resolved target>" 5
```
This returns a JSON array of the last 5 frontmatter entries (including the one you just wrote).

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ Ask blockers once, globally. Missing source path/crops or output directory block

7. Remove baked-in UI text, navigation, buttons, body copy, and mock chrome unless the text is part of the asset.
8. Think through the final DOM/CSS representation before generating. If CSS will own radius, clipping, shadows, borders, perspective, responsive cropping, captions, or card frames, do not bake those into the bitmap.
9. Save outputs non-destructively in the requested project directory, and leave the intent with the file: after every generation, run `node .claude/skills/impeccable/scripts/embed-prompt.mjs <asset> --prompt "<the prompt used>"` so the prompt is embedded in the image itself, because the build thread composes what you made and needs to know what it is looking at, and the embedding survives copies where sidecars get lost.
9. Save outputs non-destructively in the requested project directory, and leave the intent with the file: after every generation, run `node <skill-base-dir>/scripts/embed-prompt.mjs <asset> --prompt "<the prompt used>"` so the prompt is embedded in the image itself, because the build thread composes what you made and needs to know what it is looking at, and the embedding survives copies where sidecars get lost.
10. Compare each output against its source crop, opening every image by its workspace-relative path; sandboxed viewers reject absolute paths. If a review/QA tool is available, run it before the final manifest, then retry each major/fatal finding once before finalizing.

Use `texture/pattern extraction` only when the source region is already clean enough to sample as texture. If UI, cards, labels, headings, body copy, or footer chrome must be removed to make a reusable texture or background, classify it as crop-derived cleanup or clean-plate work.
Expand Down
4 changes: 2 additions & 2 deletions plugin/skills/impeccable/reference/doctor.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ Three kinds of drift travel under "out of date". Keep them apart:
## Step 1: Run the pass

```
node .claude/skills/impeccable/scripts/doctor.mjs --json
node <skill-base-dir>/scripts/doctor.mjs --json
```

Add `--target <path>` when the user named a workspace, file, or route in a monorepo. Without it the report describes the repo root, and in a monorepo that is often the wrong project.
Expand All @@ -26,7 +26,7 @@ An empty `findings` array is the good outcome. Say so in one line and stop.

The severity says what should happen, not how bad it is.

- **`auto`** carries no decision. Run `node .claude/skills/impeccable/scripts/doctor.mjs --fix` once to apply these, then report what it moved in one line. Do not ask permission first, and do not ask about them afterward.
- **`auto`** carries no decision. Run `node <skill-base-dir>/scripts/doctor.mjs --fix` once to apply these, then report what it moved in one line. Do not ask permission first, and do not ask about them afterward.
- **`mention`** needs the user to know but not to decide anything now. State each one in a sentence with its offered fix.
- **`route`** needs a specific command. Name the command and the gap it would close. Run it only if the user asks in this turn; `init` and `document` are conversations, not repairs you perform unattended.

Expand Down
12 changes: 6 additions & 6 deletions plugin/skills/impeccable/reference/hooks.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ The first argument is the action. Defaults to `status`.
2. Invoke the admin script and pass the user's output through verbatim:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs <action> [args...]
node <skill-base-dir>/scripts/hook-admin.mjs <action> [args...]
```

3. If `<action>` is `off`, follow up with a one-line note: "Done. New edits will not trigger the design hook in this project until you run `/impeccable hooks on`."
Expand All @@ -64,32 +64,32 @@ Prefer the narrowest exception:
Example value-specific exception:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs ignore-value overused-font Inter --shared --reason "User confirmed Inter is intentional"
node <skill-base-dir>/scripts/hook-admin.mjs ignore-value overused-font Inter --shared --reason "User confirmed Inter is intentional"
```

Example intentional motion exception:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs ignore-value bounce-easing bounce-ball --shared --reason "User confirmed ball bounce animation is intentional"
node <skill-base-dir>/scripts/hook-admin.mjs ignore-value bounce-easing bounce-ball --shared --reason "User confirmed ball bounce animation is intentional"
```

Example whole-rule font exception:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs ignore-rule overused-font --all-values --reason "User asked to ignore overused fonts generally"
node <skill-base-dir>/scripts/hook-admin.mjs ignore-rule overused-font --all-values --reason "User asked to ignore overused fonts generally"
```

Example one-rule-in-one-file exception, for a file that is still worth reviewing
for everything else:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs ignore-value design-system-font-size "*" --file "src/overlay/widget.js" --reason "Injected widget builds its own type scale; DESIGN.md's ramp describes the site"
node <skill-base-dir>/scripts/hook-admin.mjs ignore-value design-system-font-size "*" --file "src/overlay/widget.js" --reason "Injected widget builds its own type scale; DESIGN.md's ramp describes the site"
```

Example whole-file exception, for a file that is out of scope entirely:

```bash
node .claude/skills/impeccable/scripts/hook-admin.mjs ignore-file "src/legacy/Card.tsx"
node <skill-base-dir>/scripts/hook-admin.mjs ignore-file "src/legacy/Card.tsx"
```

## Constraints
Expand Down
2 changes: 1 addition & 1 deletion plugin/skills/impeccable/reference/layout.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ When a sub-agent tool is available and permitted, run these independently; other
2. **Mechanical scan:** run:

```bash
node .claude/skills/impeccable/scripts/detect.mjs --json --scope layout [target files or dirs]
node <skill-base-dir>/scripts/detect.mjs --json --scope layout [target files or dirs]
```

Also inspect arbitrary spacing, overflow, stacking, and container behavior the detector cannot resolve. Keep mechanical evidence out of the first assessment, then synthesize both passes before editing. A clean scan cannot prove hierarchy or rhythm.
Expand Down
2 changes: 1 addition & 1 deletion plugin/skills/impeccable/reference/live-setup.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ On every boot the project is scanned for HTML files under common page roots (`pu
If `config.cspChecked === true`, skip this whole section; the user was already asked once.

```bash
node .claude/skills/impeccable/scripts/detect-csp.mjs
node <skill-base-dir>/scripts/detect-csp.mjs
```

Output `{ shape, signals }`; the shape names the *patch mechanism*, so one template covers many frameworks:
Expand Down
Loading