/iblai-vibe-design
Builds and refines shippable frontend interfaces for ibl.ai apps: real working code, decisive design calls, and craft that holds up under inspection.
BRAND.md
is the default design system (colors, typography, spacing, radius, shadows,
component style). When the project already carries its own design system
(a v0 export, a custom theme, a partner-branded shell, a DESIGN.md/PRODUCT.md),
defer to that instead. See ibl.ai design defaults below.
Setup
Project-scoped skill. Scripts are invoked by the relative path
node .claude/skills/iblai-vibe-design/scripts/<x>.mjs, resolved against the
project root (cwd). The skill must live at
<project>/.claude/skills/iblai-vibe-design/ (the skills/ → .claude/skills/
symlink that vibe sets up at install). A user-global
(~/.claude/skills/) or plugin install will not resolve these paths —
install per-project. Script state (.impeccable/, live/, critique/)
is also written under the project root by design.
Run all three before touching design work or editing files:
- Pull project context (PRODUCT.md / DESIGN.md) with the loader script.
- Determine the register, then open its matching reference (brand.md or product.md).
- When the user invoked a sub-command (
craft, shape, audit, ...), open that command's reference file as well. Not optional: running craft without craft.md loaded drops the shape-and-confirm step the user is counting on.
Skip any of these and the result turns generic, blind to the project.
1. Context gathering
Two files, matched case-insensitively. By default the loader reads the project root, then falls back to .agents/context/ and docs/ when the root has neither. Point it elsewhere with IMPECCABLE_CONTEXT_DIR=path/to/dir (absolute, or relative to cwd).
- PRODUCT.md: required. Audience, brand, tone, anti-references, strategic principles.
- DESIGN.md: optional but strongly recommended. Color, typography, elevation, components.
Fetch both in a single call:
node .claude/skills/iblai-vibe-design/scripts/load-context.mjs
Read the whole JSON payload. Don't route it through head, tail, grep, or jq. Its contextDir field reports where the files resolved from.
Already have this output earlier in the session? Don't re-run it. Reload only after /iblai-vibe-design teach or /iblai-vibe-design document (both rewrite the files), or after the user hand-edits one.
/iblai-vibe-design live already warms context through live.mjs; once live.mjs has run, skip load-context.mjs for the rest of the session.
When PRODUCT.md is absent, empty, or still a placeholder ([TODO] markers, under 200 chars): run /iblai-vibe-design teach first, then pick the user's original task back up with the fresh context. If that task was /iblai-vibe-design craft, re-enter through /iblai-vibe-design shape before any implementation work.
If DESIGN.md is missing, don't nudge and then work blind. Resolve a design
system in this order (first match wins), nudge once per session
("Run /iblai-vibe-design document for a project-specific DESIGN.md"), then proceed:
- The project's own tokens (see detection table below).
- The ibl.ai BRAND.md defaults.
ibl.ai design defaults (BRAND.md fallback)
With no DESIGN.md present, first check whether the project already defines
its own visual language. If it does, the project's tokens win — never
paper over them with ibl.ai brand defaults.
| Signal |
Where to look |
What it means |
components.json with shadcn entries |
repo root |
shadcn/ui (often v0). Match its style, baseColor, cssVariables. |
components/ui/ populated |
components/ui/*.tsx |
shadcn primitives installed. Reuse them; don't add a parallel UI lib. |
| Custom CSS vars beyond shadcn defaults |
app/globals.css, styles/globals.css |
--primary, --brand-*, custom radius/shadow tokens define the palette. Bind to these, not ibl.ai hex. |
tailwind.config.* extends colors/fonts |
repo root |
theme.extend.colors/fontFamily carry intent. Match them. |
Tailwind v4 @theme { } block |
globals.css |
Same as above for Tailwind v4. |
Custom font via next/font |
app/layout.tsx |
Don't replace it. Inherit it. |
| Existing app shell |
components/{navbar,sidebar,header,app-shell}.tsx |
Plug into it; don't add a second shell. |
BRAND.md / DESIGN.md / design-tokens.* |
repo root, docs/, lib/ |
The project documents its own language. Read it first. |
If none of those signals are present, the project has no design
system — adopt the ibl.ai
BRAND.md
as the DESIGN.md for this session: its color palette (primary #0058cc,
brand gradient linear-gradient(135deg, #00b0ef, #0058cc)), system
sans-serif stack, spacing/radius/shadow scales, shadcn new-york +
neutral + Lucide component style, and the Apple-inspired layout
language. Give BRAND.md tokens the same authority a DESIGN.md would
carry — the shared design laws below still stack on top.
State what you resolved in one line before designing:
Using ibl.ai BRAND.md defaults (no project design system detected).
or
Detected shadcn-new-york + custom --primary. Binding to project tokens, not ibl.ai defaults.
2. Register
Each design task is one of two: brand (marketing, landing, campaign, long-form content, portfolio: the design IS the product) or product (app UI, admin, dashboard, tool: the design SERVES the product).
Settle this before designing. Precedence: (1) a cue in the task wording ("landing page" vs "dashboard"); (2) the surface in focus (the page, file, or route under work); (3) the register field in PRODUCT.md. First match wins.
When PRODUCT.md carries no register field (older files), infer it once from its "Users" and "Product Purpose" sections and cache that value for the session. Recommend /iblai-vibe-design teach so the field gets recorded explicitly.
Open the matching reference: reference/brand.md or reference/product.md. The shared design laws below hold for both.
Shared design laws
These hold for every design, in both registers. Let implementation effort track the aesthetic: maximalism wants elaborate code, minimalism wants precision. Interpret with intent. Diverge between projects; never keep landing on the same choices. Claude is capable of extraordinary work here. Don't hold back.
Color
- Work in OKLCH. Pull chroma down as lightness approaches 0 or 100; high chroma at the extremes reads garish.
- Never
#000 or #fff. Bias every neutral toward the brand hue (chroma 0.005–0.01 is plenty).
- Choose a color strategy before choosing colors. Four points on the commitment axis:
- Restrained: tinted neutrals + one accent ≤10%. Product default; brand minimalism.
- Committed: one saturated color owns 30–60% of the surface. Brand default for identity-led pages.
- Full palette: 3–4 named roles, each placed on purpose. Brand campaigns; product data viz.
- Drenched: the surface IS the color. Brand heroes and campaign pages.
- The "one accent ≤10%" cap is Restrained only. Committed / Full palette / Drenched blow past it on purpose. Don't reflexively flatten every design back to Restrained.
Theme
Dark vs. light is never automatic. Not dark "because tools look cool dark." Not light "to play it safe."
Before deciding, write one sentence of physical scene: who uses this, where, under what ambient light, in what mood. If the sentence doesn't force the answer, it isn't concrete enough; add detail until it does.
"Observability dashboard" forces nothing. "SRE glancing at incident severity on a 27-inch monitor at 2am in a dim room" forces it. Reason from the sentence, not the category.
Typography
- Keep body measure at 65–75ch.
- Build hierarchy from scale + weight contrast (≥1.25 ratio between steps). No flat scales.
Layout
- Vary spacing for rhythm. Identical padding everywhere is monotony.
- Cards are the lazy default. Use them only when they're genuinely the best affordance. Nested cards are always wrong.
- Don't box everything in a container. Most things don't need one.
Motion
- Never animate CSS layout properties.
- Ease out on exponential curves (ease-out-quart / quint / expo). No bounce, no elastic.
Absolute bans
Match and refuse. About to write any of these? Rebuild the element with a different structure.
- Side-stripe borders. A
border-left or border-right over 1px used as a colored accent on cards, list items, callouts, or alerts. Never deliberate. Replace with full borders, background tints, leading numbers/icons, or nothing.
- Gradient text.
background-clip: text over a gradient background. Decoration, never signal. Use one solid color. Carry emphasis with weight or size.
- Glassmorphism as default. Decorative blur and glass cards. Rare and deliberate, or absent.
- The hero-metric template. Huge number, tiny label, supporting stats, gradient accent. The SaaS cliché.
- Identical card grids. Equal-size cards of icon + heading + text, repeated without end.
- Modal as first thought. A modal is usually the lazy route. Exhaust inline / progressive options first.
Copy
- Every word pays rent. No restated headings, no intro that echoes the title.
- No em dashes. Use commas, colons, semicolons, periods, or parentheses. The
-- substitute is out too.
The AI slop test
If a viewer could glance at the interface and say "AI made that" with no doubt, it failed. Cross-register tells are the absolute bans above. Register-specific tells live in each reference.
Category-reflex check. Run it at two altitudes; the second catches what the first misses.
- First-order: if the theme + palette are guessable from the category alone ("observability → dark blue", "healthcare → white + teal", "finance → navy + gold", "crypto → neon on black"), that's the first training-data reflex. Rework the scene sentence and color strategy until the domain no longer gives the answer away.
- Second-order: if the aesthetic family is guessable from category-plus-anti-references ("AI workflow tool that's not SaaS-cream → editorial-typographic", "fintech that's not navy-and-gold → terminal-native dark mode"), that's the trap one tier down: the first reflex was dodged, the second wasn't. Rework until neither answer is obvious. The brand register's reflex-reject aesthetic lanes list catches the currently-saturated families.
Commands
| Command |
Category |
Description |
Reference |
craft [feature] |
Build |
Shape first, then build a feature end to end |
reference/craft.md |
shape [feature] |
Build |
Plan UX and UI before any code |
reference/shape.md |
teach |
Build |
Establish PRODUCT.md and DESIGN.md context |
reference/teach.md |
document |
Build |
Derive DESIGN.md from existing project code |
reference/document.md |
extract [target] |
Build |
Lift reusable tokens and components into the design system |
reference/extract.md |
critique [target] |
Evaluate |
UX review with heuristic scoring |
reference/critique.md |
audit [target] |
Evaluate |
Technical quality checks: a11y, perf, responsive |
reference/audit.md |
polish [target] |
Refine |
Last quality pass before shipping |
reference/polish.md |
bolder [target] |
Refine |
Amplify timid or bland designs |
reference/bolder.md |
quieter [target] |
Refine |
Calm aggressive or overstimulating designs |
reference/quieter.md |
distill [target] |
Refine |
Strip to essentials, cut complexity |
reference/distill.md |
harden [target] |
Refine |
Production-ready: error states, i18n, edge cases |
reference/harden.md |
onboard [target] |
Refine |
Design first-run flows, empty states, and activation |
reference/onboard.md |
animate [target] |
Enhance |
Add purposeful motion and micro-interactions |
reference/animate.md |
colorize [target] |
Enhance |
Inject strategic color into monochromatic UIs |
reference/colorize.md |
typeset [target] |
Enhance |
Sharpen typographic hierarchy and font choices |
reference/typeset.md |
layout [target] |
Enhance |
Repair spacing, rhythm, and visual hierarchy |
reference/layout.md |
delight [target] |
Enhance |
Add personality and memorable detail |
reference/delight.md |
overdrive [target] |
Enhance |
Push well past conventional limits |
reference/overdrive.md |
clarify [target] |
Fix |
Tighten UX copy, labels, and error messages |
reference/clarify.md |
adapt [target] |
Fix |
Adapt across devices and screen sizes |
reference/adapt.md |
optimize [target] |
Fix |
Diagnose and resolve UI performance issues |
reference/optimize.md |
live |
Iterate |
Visual variant mode: select elements in the browser, generate alternatives |
reference/live.md |
Two management commands round it out: pin <command> and unpin <command>, covered below.
Routing rules
- No argument: present the table above as the command menu, grouped by category, and ask what they'd like to do.
- First word matches a command: open its reference file and follow it. Everything after the command name is the target.
- First word matches nothing: treat it as a general design request. Apply setup, the shared design laws, and the loaded register reference, with the full argument as context.
Setup (context gathering, register) is already done by this point; sub-commands don't re-invoke /iblai-vibe-design.
When the first word is craft, setup still runs first, but reference/craft.md drives the rest of the flow. If setup triggers teach as a blocker, finish teach, refresh context, then resume the original command and target.
Pin / Unpin
Pin registers a standalone shortcut so /<command> runs /iblai-vibe-design <command> directly. Unpin removes it. The script writes into every harness directory present in the project.
node .claude/skills/iblai-vibe-design/scripts/pin.mjs <pin|unpin> <command>
<command> is any entry from the table above. Report the script's result tersely: confirm the new shortcut on success, relay stderr verbatim on error.
1---2name: iblai-vibe-design3description: 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. Falls back to the ibl.ai BRAND.md design system when the project has none. Not for backend-only or non-UI tasks.4license: Apache-2.0. Based on Anthropic's frontend-design skill (https://5---67# /iblai-vibe-design89Builds and refines shippable frontend interfaces for ibl.ai apps: real working code, decisive design calls, and craft that holds up under inspection.1011[BRAND.md](https://raw.githubusercontent.com/iblai/vibe/refs/heads/main/BRAND.md)12is the **default** design system (colors, typography, spacing, radius, shadows,13component style). When the project already carries its own design system14(a v0 export, a custom theme, a partner-branded shell, a `DESIGN.md`/`PRODUCT.md`),15**defer to that instead**. See [ibl.ai design defaults](#iblai-vibe-design-defaults-brandmd-fallback) below.1617## Setup1819> **Project-scoped skill.** Scripts are invoked by the relative path20> `node .claude/skills/iblai-vibe-design/scripts/<x>.mjs`, resolved against the21> project root (cwd). The skill must live at22> `<project>/.claude/skills/iblai-vibe-design/` (the `skills/` → `.claude/skills/`23> symlink that vibe sets up at install). A user-global24> (`~/.claude/skills/`) or plugin install will not resolve these paths —25> install per-project. Script state (`.impeccable/`, `live/`, `critique/`)26> is also written under the project root by design.2728Run all three before touching design work or editing files:29301. Pull project context (PRODUCT.md / DESIGN.md) with the loader script.312. Determine the register, then open its matching reference (brand.md or product.md).323. **When the user invoked a sub-command (`craft`, `shape`, `audit`, ...), open that command's reference file as well.** Not optional: running `craft` without `craft.md` loaded drops the shape-and-confirm step the user is counting on.3334Skip any of these and the result turns generic, blind to the project.3536### 1. Context gathering3738Two files, matched case-insensitively. By default the loader reads the project root, then falls back to `.agents/context/` and `docs/` when the root has neither. Point it elsewhere with `IMPECCABLE_CONTEXT_DIR=path/to/dir` (absolute, or relative to cwd).3940- **PRODUCT.md**: required. Audience, brand, tone, anti-references, strategic principles.41- **DESIGN.md**: optional but strongly recommended. Color, typography, elevation, components.4243Fetch both in a single call:4445```bash46node .claude/skills/iblai-vibe-design/scripts/load-context.mjs47```4849Read the whole JSON payload. Don't route it through `head`, `tail`, `grep`, or `jq`. Its `contextDir` field reports where the files resolved from.5051Already have this output earlier in the session? Don't re-run it. Reload only after `/iblai-vibe-design teach` or `/iblai-vibe-design document` (both rewrite the files), or after the user hand-edits one.5253`/iblai-vibe-design live` already warms context through `live.mjs`; once `live.mjs` has run, skip `load-context.mjs` for the rest of the session.5455When PRODUCT.md is absent, empty, or still a placeholder (`[TODO]` markers, under 200 chars): run `/iblai-vibe-design teach` first, then pick the user's original task back up with the fresh context. If that task was `/iblai-vibe-design craft`, re-enter through `/iblai-vibe-design shape` before any implementation work.5657If DESIGN.md is missing, don't nudge and then work blind. Resolve a design58system in this order (first match wins), nudge once per session59(*"Run `/iblai-vibe-design document` for a project-specific DESIGN.md"*), then proceed:60611. The project's own tokens (see detection table below).622. The ibl.ai **BRAND.md** defaults.6364### ibl.ai design defaults (BRAND.md fallback)6566With no DESIGN.md present, first check whether the project already defines67its own visual language. **If it does, the project's tokens win** — never68paper over them with ibl.ai brand defaults.6970| Signal | Where to look | What it means |71|--------|---------------|----------------|72| `components.json` with shadcn entries | repo root | shadcn/ui (often v0). Match its `style`, `baseColor`, `cssVariables`. |73| `components/ui/` populated | `components/ui/*.tsx` | shadcn primitives installed. Reuse them; don't add a parallel UI lib. |74| Custom CSS vars beyond shadcn defaults | `app/globals.css`, `styles/globals.css` | `--primary`, `--brand-*`, custom radius/shadow tokens define the palette. Bind to these, not ibl.ai hex. |75| `tailwind.config.*` extends colors/fonts | repo root | `theme.extend.colors/fontFamily` carry intent. Match them. |76| Tailwind v4 `@theme { }` block | `globals.css` | Same as above for Tailwind v4. |77| Custom font via `next/font` | `app/layout.tsx` | Don't replace it. Inherit it. |78| Existing app shell | `components/{navbar,sidebar,header,app-shell}.tsx` | Plug into it; don't add a second shell. |79| `BRAND.md` / `DESIGN.md` / `design-tokens.*` | repo root, `docs/`, `lib/` | The project documents its own language. Read it first. |8081**If none of those signals are present**, the project has no design82system — adopt the ibl.ai83[BRAND.md](https://raw.githubusercontent.com/iblai/vibe/refs/heads/main/BRAND.md)84as the DESIGN.md for this session: its color palette (primary `#0058cc`,85brand gradient `linear-gradient(135deg, #00b0ef, #0058cc)`), system86sans-serif stack, spacing/radius/shadow scales, shadcn `new-york` +87`neutral` + Lucide component style, and the Apple-inspired layout88language. Give BRAND.md tokens the same authority a DESIGN.md would89carry — the shared design laws below still stack on top.9091State what you resolved in one line before designing:9293> Using ibl.ai BRAND.md defaults (no project design system detected).9495or9697> Detected shadcn-new-york + custom `--primary`. Binding to project tokens, not ibl.ai defaults.9899### 2. Register100101Each design task is one of two: **brand** (marketing, landing, campaign, long-form content, portfolio: the design IS the product) or **product** (app UI, admin, dashboard, tool: the design SERVES the product).102103Settle this before designing. Precedence: (1) a cue in the task wording ("landing page" vs "dashboard"); (2) the surface in focus (the page, file, or route under work); (3) the `register` field in PRODUCT.md. First match wins.104105When PRODUCT.md carries no `register` field (older files), infer it once from its "Users" and "Product Purpose" sections and cache that value for the session. Recommend `/iblai-vibe-design teach` so the field gets recorded explicitly.106107Open the matching reference: [reference/brand.md](reference/brand.md) or [reference/product.md](reference/product.md). The shared design laws below hold for both.108109## Shared design laws110111These hold for every design, in both registers. Let implementation effort track the aesthetic: maximalism wants elaborate code, minimalism wants precision. Interpret with intent. Diverge between projects; never keep landing on the same choices. Claude is capable of extraordinary work here. Don't hold back.112113### Color114115- Work in OKLCH. Pull chroma down as lightness approaches 0 or 100; high chroma at the extremes reads garish.116- Never `#000` or `#fff`. Bias every neutral toward the brand hue (chroma 0.005–0.01 is plenty).117- Choose a **color strategy** before choosing colors. Four points on the commitment axis:118 - **Restrained**: tinted neutrals + one accent ≤10%. Product default; brand minimalism.119 - **Committed**: one saturated color owns 30–60% of the surface. Brand default for identity-led pages.120 - **Full palette**: 3–4 named roles, each placed on purpose. Brand campaigns; product data viz.121 - **Drenched**: the surface IS the color. Brand heroes and campaign pages.122- The "one accent ≤10%" cap is Restrained only. Committed / Full palette / Drenched blow past it on purpose. Don't reflexively flatten every design back to Restrained.123124### Theme125126Dark vs. light is never automatic. Not dark "because tools look cool dark." Not light "to play it safe."127128Before deciding, write one sentence of physical scene: who uses this, where, under what ambient light, in what mood. If the sentence doesn't force the answer, it isn't concrete enough; add detail until it does.129130"Observability dashboard" forces nothing. "SRE glancing at incident severity on a 27-inch monitor at 2am in a dim room" forces it. Reason from the sentence, not the category.131132### Typography133134- Keep body measure at 65–75ch.135- Build hierarchy from scale + weight contrast (≥1.25 ratio between steps). No flat scales.136137### Layout138139- Vary spacing for rhythm. Identical padding everywhere is monotony.140- Cards are the lazy default. Use them only when they're genuinely the best affordance. Nested cards are always wrong.141- Don't box everything in a container. Most things don't need one.142143### Motion144145- Never animate CSS layout properties.146- Ease out on exponential curves (ease-out-quart / quint / expo). No bounce, no elastic.147148### Absolute bans149150Match and refuse. About to write any of these? Rebuild the element with a different structure.151152- **Side-stripe borders.** A `border-left` or `border-right` over 1px used as a colored accent on cards, list items, callouts, or alerts. Never deliberate. Replace with full borders, background tints, leading numbers/icons, or nothing.153- **Gradient text.** `background-clip: text` over a gradient background. Decoration, never signal. Use one solid color. Carry emphasis with weight or size.154- **Glassmorphism as default.** Decorative blur and glass cards. Rare and deliberate, or absent.155- **The hero-metric template.** Huge number, tiny label, supporting stats, gradient accent. The SaaS cliché.156- **Identical card grids.** Equal-size cards of icon + heading + text, repeated without end.157- **Modal as first thought.** A modal is usually the lazy route. Exhaust inline / progressive options first.158159### Copy160161- Every word pays rent. No restated headings, no intro that echoes the title.162- **No em dashes.** Use commas, colons, semicolons, periods, or parentheses. The `--` substitute is out too.163164### The AI slop test165166If a viewer could glance at the interface and say "AI made that" with no doubt, it failed. Cross-register tells are the absolute bans above. Register-specific tells live in each reference.167168**Category-reflex check.** Run it at two altitudes; the second catches what the first misses.169170- **First-order:** if the theme + palette are guessable from the category alone ("observability → dark blue", "healthcare → white + teal", "finance → navy + gold", "crypto → neon on black"), that's the first training-data reflex. Rework the scene sentence and color strategy until the domain no longer gives the answer away.171- **Second-order:** if the aesthetic family is guessable from category-plus-anti-references ("AI workflow tool that's not SaaS-cream → editorial-typographic", "fintech that's not navy-and-gold → terminal-native dark mode"), that's the trap one tier down: the first reflex was dodged, the second wasn't. Rework until neither answer is obvious. The brand register's [reflex-reject aesthetic lanes](reference/brand.md) list catches the currently-saturated families.172173## Commands174175| Command | Category | Description | Reference |176|---|---|---|---|177| `craft [feature]` | Build | Shape first, then build a feature end to end | [reference/craft.md](reference/craft.md) |178| `shape [feature]` | Build | Plan UX and UI before any code | [reference/shape.md](reference/shape.md) |179| `teach` | Build | Establish PRODUCT.md and DESIGN.md context | [reference/teach.md](reference/teach.md) |180| `document` | Build | Derive DESIGN.md from existing project code | [reference/document.md](reference/document.md) |181| `extract [target]` | Build | Lift reusable tokens and components into the design system | [reference/extract.md](reference/extract.md) |182| `critique [target]` | Evaluate | UX review with heuristic scoring | [reference/critique.md](reference/critique.md) |183| `audit [target]` | Evaluate | Technical quality checks: a11y, perf, responsive | [reference/audit.md](reference/audit.md) |184| `polish [target]` | Refine | Last quality pass before shipping | [reference/polish.md](reference/polish.md) |185| `bolder [target]` | Refine | Amplify timid or bland designs | [reference/bolder.md](reference/bolder.md) |186| `quieter [target]` | Refine | Calm aggressive or overstimulating designs | [reference/quieter.md](reference/quieter.md) |187| `distill [target]` | Refine | Strip to essentials, cut complexity | [reference/distill.md](reference/distill.md) |188| `harden [target]` | Refine | Production-ready: error states, i18n, edge cases | [reference/harden.md](reference/harden.md) |189| `onboard [target]` | Refine | Design first-run flows, empty states, and activation | [reference/onboard.md](reference/onboard.md) |190| `animate [target]` | Enhance | Add purposeful motion and micro-interactions | [reference/animate.md](reference/animate.md) |191| `colorize [target]` | Enhance | Inject strategic color into monochromatic UIs | [reference/colorize.md](reference/colorize.md) |192| `typeset [target]` | Enhance | Sharpen typographic hierarchy and font choices | [reference/typeset.md](reference/typeset.md) |193| `layout [target]` | Enhance | Repair spacing, rhythm, and visual hierarchy | [reference/layout.md](reference/layout.md) |194| `delight [target]` | Enhance | Add personality and memorable detail | [reference/delight.md](reference/delight.md) |195| `overdrive [target]` | Enhance | Push well past conventional limits | [reference/overdrive.md](reference/overdrive.md) |196| `clarify [target]` | Fix | Tighten UX copy, labels, and error messages | [reference/clarify.md](reference/clarify.md) |197| `adapt [target]` | Fix | Adapt across devices and screen sizes | [reference/adapt.md](reference/adapt.md) |198| `optimize [target]` | Fix | Diagnose and resolve UI performance issues | [reference/optimize.md](reference/optimize.md) |199| `live` | Iterate | Visual variant mode: select elements in the browser, generate alternatives | [reference/live.md](reference/live.md) |200201Two management commands round it out: `pin <command>` and `unpin <command>`, covered below.202203### Routing rules2042051. **No argument**: present the table above as the command menu, grouped by category, and ask what they'd like to do.2062. **First word matches a command**: open its reference file and follow it. Everything after the command name is the target.2073. **First word matches nothing**: treat it as a general design request. Apply setup, the shared design laws, and the loaded register reference, with the full argument as context.208209Setup (context gathering, register) is already done by this point; sub-commands don't re-invoke `/iblai-vibe-design`.210211When the first word is `craft`, setup still runs first, but [reference/craft.md](reference/craft.md) drives the rest of the flow. If setup triggers `teach` as a blocker, finish teach, refresh context, then resume the original command and target.212213## Pin / Unpin214215**Pin** registers a standalone shortcut so `/<command>` runs `/iblai-vibe-design <command>` directly. **Unpin** removes it. The script writes into every harness directory present in the project.216217```bash218node .claude/skills/iblai-vibe-design/scripts/pin.mjs <pin|unpin> <command>219```220221`<command>` is any entry from the table above. Report the script's result tersely: confirm the new shortcut on success, relay stderr verbatim on error.