* Resolve {{scripts_path}} in the agent bodies Codex ships
Three code paths emit an agent body: the degraded fallback reference, the
.toml nested inside the skill for Codex, and the native agent file. Only the
nested .toml skipped placeholder substitution and rule-marker stripping, so
the codex and .agents dists shipped `node {{scripts_path}}/embed-prompt.mjs`
verbatim in the asset producer, and every caller had to substitute the token
itself at load time.
All three now render through renderAgentBody(), and the new regression test
asserts a runnable embed-prompt command on each emitted surface plus a
synthetic agent proving markers and placeholders resolve in the nested .toml.
Prepared by an AI agent (Claude Code) under pbakaus's instruction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Give the finish reviewer's screenshots one fixed address
The Input Contract asked for "desktop and mobile screenshot paths captured by
the parent" and named none, so each session invented a filename and the
verdict pass went looking for a recapture that was never written there. Two
reviewer passes burned on that in the eval runs.
The parent now captures and recaptures to .impeccable/review/desktop.png and
.impeccable/review/mobile.png, and the reviewer reads those two first,
treating a brief-named path as the fallback for a parent that wrote elsewhere.
Prepared by an AI agent (Claude Code) under pbakaus's instruction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Lead Setup with the base directory the runtime reports
The rendered claude and codex skills opened with
`node .claude/skills/impeccable/scripts/context.mjs`, a project-relative path
that resolves in this repo and in nothing a user installs: a personal or
plugin install puts the scripts outside the project entirely. The working form
was already in the text, parenthesized, after the one that fails.
Setup now leads with `node <skill-base-dir>/scripts/context.mjs` and says once
that the base directory resolves every scripts-path command in the skill and
its references, leaving the project-relative path as the fallback for runtimes
that report no base directory.
Prepared by an AI agent (Claude Code) under pbakaus's instruction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Answer the Copilot review: brittle model assertion, missing review dir
Assert that {{model}} resolved rather than that it resolved to "GPT", which
belongs to PROVIDER_PLACEHOLDERS and can change without touching what the test
guards. And have the parent create .impeccable/review/ when the harness does
not, so a fresh project's first capture has somewhere to land.
Prepared by an AI agent (Claude Code) under pbakaus's instruction.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* Make the review-screenshot contract directory-based, not web-viewport-named
Two amendments to the recapture contract from review feedback:
1. The canonical location is the directory .impeccable/review/, one file
per captured viewport; desktop.png and mobile.png are the web case,
not the contract. Baking web-viewport names into the reviewer's spec
would have hardened a web assumption into paths that a native
(ios/android/adaptive) build cannot honestly write.
2. Precedence restored to explicit-beats-convention: paths the calling
brief names are authoritative when the files exist; the canonical
directory is where the reviewer looks when the brief names none or a
named path is missing. This avoids stale canonical files from an
earlier run silently winning over fresh explicit paths. The observed
failure (the verdict round inventing a round-stamped filename) stays
fixed: recapture happens over the same files, and invented filenames
are still called out as pointing at nothing.
Assisted-by: Claude Code
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
11 KiB
name, description, argument-hint, user-invocable, allowed-tools, license
| name | description | argument-hint | user-invocable | allowed-tools | license | ||
|---|---|---|---|---|---|---|---|
| impeccable | Use when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a frontend interface. Covers websites, landing pages, dashboards, product UI, app shells, components, forms, settings, onboarding, and empty states. Handles UX review, visual hierarchy, information architecture, cognitive load, accessibility, performance, responsive behavior, theming, anti-patterns, typography, fonts, spacing, layout, alignment, color, motion, micro-interactions, UX copy, error states, edge cases, i18n, and reusable design systems or tokens. Also use for bland designs that need to become bolder or more delightful, loud designs that should become quieter, live browser iteration on UI elements, or ambitious visual effects that should feel technically extraordinary. Not for backend-only or non-UI tasks. | [{{command_hint}}] [target] | true |
|
Apache 2.0 |
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.
Core principles:
- Go all out. No hedging, no shortcuts. The deliverable must be complete (except assets the user must provide).
- Dream big and bold. Distinct, beautiful, outstanding and highly inspiring work.
- Verify in bounded passes, not a loop, and the ceiling covers the whole cycle: screenshots, defect scans, micro-edits, and rebuilds alike. Build fully, inspect once with a batched round (desktop and mobile together), fix everything it shows in one batch, confirm with at most one more round, and stop polishing. Open-ended self-QA burns the user's money doing worse what the finish handoffs do better.
Setup
- Run
node <skill-base-dir>/scripts/context.mjsonce 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 everynode {{scripts_path}}/...command in this skill and its references, and{{scripts_path}}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. - 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 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.
- After analysis and direction are resolved, load 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.
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.
- 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
| Command | Category | Description | Reference |
|---|---|---|---|
craft [feature] |
Build | Deprecated alias for an ordinary new-work request | reference/craft.md |
shape [feature] |
Build | Plan UX/UI before writing code | reference/shape.md |
init |
Build | Capture durable product context in PRODUCT.md | reference/init.md |
document |
Build | Generate DESIGN.md from existing project code | reference/document.md |
extract [target] |
Build | Pull reusable tokens and components into design system | reference/extract.md |
critique [target] |
Evaluate | UX design review with heuristic scoring | reference/critique.md |
audit [target] |
Evaluate | Technical quality checks (a11y, perf, responsive) | reference/audit.md · native: reference/audit.native.md |
polish [target] |
Refine | Final quality pass before shipping | reference/polish.md |
bolder [target] |
Refine | Amplify safe or bland designs | reference/bolder.md |
quieter [target] |
Refine | Tone down aggressive or overstimulating designs | reference/quieter.md |
distill [target] |
Refine | Strip to essence, remove complexity | reference/distill.md |
harden [target] |
Refine | Production-ready: errors, i18n, edge cases | reference/harden.md |
onboard [target] |
Refine | Design first-run flows, empty states, activation | reference/onboard.md |
animate [target] |
Enhance | Add purposeful animations and motion | reference/animate.md |
colorize [target] |
Enhance | Add strategic color to monochromatic UIs | reference/colorize.md |
typeset [target] |
Enhance | Improve typography hierarchy and fonts | reference/typeset.md |
layout [target] |
Enhance | Fix spacing, rhythm, and visual hierarchy | reference/layout.md |
delight [target] |
Enhance | Add personality and memorable touches | reference/delight.md |
overdrive [target] |
Enhance | Push past conventional limits | reference/overdrive.md |
clarify [target] |
Fix | Improve UX copy, labels, and error messages | reference/clarify.md |
adapt [target] |
Fix | Adapt for different devices and screen sizes | reference/adapt.md · native: reference/adapt.native.md |
optimize [target] |
Fix | Diagnose and fix UI performance | reference/optimize.md |
live |
Iterate | Visual variant mode: pick elements in the browser, generate alternatives | reference/live.md |
Routing:
- No argument: read routing.md and present its context-aware menu; never auto-run a command.
- Explicit or clearly implied command: load its reference (native variant on native platforms) and follow it. Ask once if two commands fit.
- 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 context.mjs directs, offering init afterward rather than blocking on it.
teachaliasesinit.craftis a deprecated alias for ordinary new-work and adds nothing.shapeowns task discovery, then enters new-work only for visual-world and surface-concept decisions.
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 {{scripts_path}}/pin.mjs <pin|unpin> <command> creates or removes a standalone {{command_prefix}}<command> shortcut. Report the script's result concisely; relay stderr verbatim on error.
Hooks: {{command_prefix}}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: {{command_prefix}}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.