Agent skill

UI Component Spec Designer

by plugin87 in plugin87/ux-ui-agent-skills

Writes a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code.

MITAuto-check passedFrontend & Design

Install UI Component Spec Designer

skills CLI
$ npx skills add plugin87/ux-ui-agent-skills --skill design-component -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install plugin87/ux-ui-agent-skills design-component --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/plugin87/ux-ui-agent-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/design-component .claude/skills/design-component && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
design-component
GitHub stars
1.5k
Token cost
~2.8k tokens
SKILL.md length
1,237 words
Files
1
Skills in repo
23
Repo updated
First seen
Licence
MIT

At a glance

Writes a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code.

  • Works in 6 steps: Read .claude/rules/components.md →… → Check if it already exists:… → Pull the ARIA pattern from… → …
  • Designing a new component at the spec level before building it
  • SKILL.md covers Steps, Output, Accuracy — verify every state,… and Gates prove contrast/a11y —…, plus 5 more sections
  • Calls node, npx and python3

What it does

Given a component such as a button, tabs, toast, combobox or modal, this skill produces a spec in the project's existing format. It first checks whether the component is already documented in the kit's component files, then pulls the matching ARIA pattern and the contrast and target-size rules from the accessibility references, and maps every value to the token JSON files for sizes and states.

The finished spec contains an anatomy diagram, a variants table, a sizes table, all applicable states, the token mapping, and role, keyboard and screen reader behavior, plus a note on rendering through the framework adapter protocol. An optional Python script scaffolds a stub to fill in. When code is produced, the agent is expected to build a harness that renders each variant in each state and to run the contrast check script, reporting its real output.

The skill reads files from the surrounding kit, so it checks for them first. If only the skill folders were installed, it tells you to run the kit's init command or install the plugin, then stops. For framework code it points to a separate design-code skill.

When your agent uses it

  • Designing a new component at the spec level before building it
  • Documenting an existing button, input or modal with variants and states
  • Checking that a component spec covers keyboard and screen reader behavior

Example prompts

  • “Design a combobox component spec with all its states and token mapping.”
  • “Write the spec for a toast notification, including ARIA roles and keyboard behavior.”
  • “Document our date picker with variants, sizes and focus handling.”

Requirements

  • The ux-ui-agent-skills kit with its tokens, components and accessibility files
  • Python 3 and Node.js for the scaffold and state-check scripts

Workflow steps

6 steps, taken from the first numbered list in SKILL.md.

  1. Read .claude/rules/components.md → "Component Quality Bar" (the 8-state table) and "Atomic Design"; the always-on 8-state table is in…
  2. Check if it already exists: ${CLAUDE_SKILL_DIR}/../../../components/atoms.md, molecules.md, organisms.md, templates.md, navigation.md…
  3. Pull the ARIA pattern from ${CLAUDE_SKILL_DIR}/../../../accessibility/aria-patterns.md and contrast/target rules from…
  4. Map every value to tokens (${CLAUDE_SKILL_DIR}/../../../tokens/*.json) — sizes via sizing.json, states via states.json.
  5. Apply visual judgment from ${CLAUDE_SKILL_DIR}/../../../taste/design-taste.md (states, focus, no slop).
  6. Optional fast start: python3 ${CLAUDE_SKILL_DIR}/../../../scripts/scaffold_component.py "" to emit a stub, then fill it in.

What it can do on your machine

Read from SKILL.md and the folder at commit 14f8d44. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • node
    • npx
    • python3

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

UI Component Spec Designer loads about 2.8k tokens when it runs. Until then it costs about 90 tokens; SKILL.md has 1,237 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~90
When it runs · the whole SKILL.md, loaded when a task matches
~2.8k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from plugin87/ux-ui-agent-skills at commit 14f8d44, republished under its MIT licence (© plugin87). 1,237 words, ~2,772 tokens.

Download SKILL.mdSave it as .claude/skills/design-component/SKILL.md (or your agent's skills folder).
name
design-component
description
Design a UI component spec to the house quality bar — anatomy, variants, sizes, the 8 states, token mapping, and accessibility. Use when the user wants to design or document a component (button, input, tabs, toast, combobox, date picker, modal, etc.) at the spec level before or alongside code. For generating framework code, use design-code.

Skill: Design Component

Step 0 — is the kit here? This skill reads files from the kit. Check once: ls ${CLAUDE_SKILL_DIR}/../../../tokens >/dev/null 2>&1 && echo KIT_OK || echo KIT_MISSING On KIT_MISSING only the skill folders were installed, which is what npx skills add does. Say so plainly, point the user at npx ux-ui-agent-skills init or the plugin install, and stop. Do not guess the contents of a file you could not open.

Produce a complete component specification matching the project format.

Steps

  1. Read .claude/rules/components.md → "Component Quality Bar" (the 8-state table) and "Atomic Design"; the always-on 8-state table is in CLAUDE.md → Non-Negotiables.
  2. Check if it already exists: ${CLAUDE_SKILL_DIR}/../../../components/atoms.md, molecules.md, organisms.md, templates.md, navigation.md, feedback.md, forms-advanced.md, overlays.md. Match the existing spec format.
  3. Pull the ARIA pattern from ${CLAUDE_SKILL_DIR}/../../../accessibility/aria-patterns.md and contrast/target rules from ${CLAUDE_SKILL_DIR}/../../../accessibility/wcag-checklist.md.
  4. Map every value to tokens (${CLAUDE_SKILL_DIR}/../../../tokens/*.json) — sizes via sizing.json, states via states.json.
  5. Apply visual judgment from ${CLAUDE_SKILL_DIR}/../../../taste/design-taste.md (states, focus, no slop).
  6. Optional fast start: python3 ${CLAUDE_SKILL_DIR}/../../../scripts/scaffold_component.py "<Name>" to emit a stub, then fill it in.

Output

Spec with: anatomy diagram, variants table, sizes table, all 8 applicable states, token mapping, accessibility (role/keyboard/SR), and a note to render via ${CLAUDE_SKILL_DIR}/../../../frameworks/adapter-protocol.md.

Accuracy — verify every state, don't assume (mandatory when code is produced)

A component is only "correct" when every variant × state renders right — not just the resting default. Build a states harness: render the component in each applicable state (default, hover, focus, active, disabled, loading aria-busy, error aria-invalid, selected aria-pressed/aria-selected) × each variant in one HTML file (see ${CLAUDE_SKILL_DIR}/../../../examples/component-states/button.html). Then RUN the gates and report their real output (CLAUDE.md → Verification Protocol):

  • node ${CLAUDE_SKILL_DIR}/../../../scripts/verify_states.mjs <harness> [--dark] — contrast of every element in default/hover/focus
  • node ${CLAUDE_SKILL_DIR}/../../../scripts/axe_audit.mjs <harness> [--dark] — ARIA/role/name/label correctness
  • node ${CLAUDE_SKILL_DIR}/../../../scripts/measure_render.mjs <harness> [--dark] — every text element AA
  • overlays/modals also: node ${CLAUDE_SKILL_DIR}/../../../scripts/verify_focustrap.mjs <harness> --open=<trigger> Every state must pass in light AND dark before the component is "done". Never claim a state is correct without a gate proving it.

Gates prove contrast/a11y — they do NOT prove pixels. RENDER AND LOOK.

The contrast/axe gates pass while the UI is still visibly broken: a checkbox that doesn't toggle, a dash sitting at the bottom of its box, a checkmark and an indeterminate dash with mismatched stroke weight, a control that's too heavy. You must screenshot the harness and inspect it before claiming done — for every state, and after interaction. Playwright + system Chrome:

js
const b = await chromium.launch({channel:'chrome'});
const p = await b.newPage({deviceScaleFactor:4});
await p.goto('file://'+abs); await p.addStyleTag({content:'*{transition:none!important}'});
await p.mouse.move(2000,2000);                 // park pointer OFF the component
await p.locator('.stack').first().screenshot({path:'/tmp/x.png'});

Read the PNG. Then look for, specifically:

  • Functional: click each interactive element and assert the state actually changed (await loc.click(); expect(await loc.isChecked())). A custom control whose overlay box covers the real <input> will not toggle unless the box has pointer-events:none (or an enclosing <label> forwards the click).
  • Geometry: glyphs centered, not stacked/offset. If a display:grid box holds an opacity:0 sibling plus a ::after, the pseudo lands in row 2 → use display:none on the hidden sibling, or one container child.
  • Stroke consistency: a checkmark and its indeterminate dash must use the same rendering method (one <svg>, two <path> toggled by state — same stroke-width), never an svg check vs a CSS ::after rect (they read as different weights).
  • Transition artifact: screenshot WITHOUT disabling transitions and a just-clicked control looks half-faded mid-animation — that is not a bug. Always disable transitions and park the pointer before judging a state.

Consistency across files is non-negotiable. The same component (e.g. checkbox) must use byte-identical CSS + markup in every harness/page. A checkbox that looks thin in form-controls and heavy (native accent-color) in data-table is a bug. Factor one pattern, reuse it verbatim.

Verified custom checkbox/radio pattern (thin, token-driven, gated + eyeballed)

Real <input> underneath (keeps native a11y + keyboard); a drawn .box overlay with pointer-events:none; check + dash as two <path> in one <svg> toggled by :checked / :indeterminate; 1.5px border-strong, .25rem radius, .62rem glyph, stroke-width:2 round caps. Reference: ${CLAUDE_SKILL_DIR}/../../../examples/component-states/form-controls.html and data-table.html (select-all uses indeterminate). Native accent-color renders too heavy — do not use it when the house look is "thin".

Responsive — every component, no sideways scroll (gated)

Build mobile-first; a fixed-px width that can't shrink is a bug. Run node ${CLAUDE_SKILL_DIR}/../../../scripts/verify_responsive.mjs <file|dir> — it loads each harness at 280/320/414px and fails on any horizontal overflow. The four recurring causes and their fixes:

  • fixed inline-size:Npx → inline-size:100%;max-inline-size:Npx (cap, don't pin).
  • <ul>/<ol> default 40px inline-start padding (a *{margin:0} reset does NOT clear padding) → padding:0;margin:0 on every list. This also silently mis-aligns a list's edge vs a sibling block (looks like unequal widths) — same fix.
  • non-wrapping flex rows (breadcrumb, stepper, tabs) → flex-wrap:wrap, or for tabs overflow-x:auto + .tab{flex:none}.
  • grid minmax(Npx,1fr) min larger than viewport → minmax(min(Npx,100%),1fr).
Show full SKILL.md (503 more words)Show less

Motion — tokenized, real easing, animate the thing that moves

Timing/easing are tokens (--duration-fast|normal|slow, --ease-out|in|in-out|emphasized in the theme; --transition-micro = fast ease-out). Never hardcode ms/curves. A component that toggles open/closed must animate its height, not just rotate a chevron — collapse via hidden/display:none alone reads as "rigid, no transition". Smooth-height pattern (no JS measuring): wrap content in an inner that clips overflow, animate the grid track:

css
.panel{display:grid;grid-template-rows:0fr;transition:grid-template-rows var(--duration-normal) var(--ease-emphasized)}
.panel.open{grid-template-rows:1fr}
.panel > .inner{overflow:hidden;min-block-size:0}

Keep a11y: expand = remove hidden then add .open next frame; collapse = remove .open, set hidden on transitionend. Reference: accordion in ${CLAUDE_SKILL_DIR}/../../../examples/component-states/overlays.html. Always honor @media(prefers-reduced-motion:reduce){…transition:none}.

Layout — fill the space, don't ship AI-empty filler

  • auto-fit, never auto-fill for card grids. auto-fill keeps empty phantom tracks so 3 cards cluster left with a void on the right; auto-fit collapses empties so cards stretch to fill the row. Always repeat(auto-fit,minmax(min(Npx,100%),1fr)).
  • Equal-height panels in a row: align-items:stretch on the grid, AND make the shorter panel's body fill — .panel{display:flex;flex-direction:column} + the inner region flex:1. A child sized with block-size:% (e.g. chart bars) needs a definite-height ancestor (a flex:1 box or explicit height), or the % resolves to 0 and the element collapses. Wrap the bar in a flex:1 .barbox and give the bar block-size:% of that.
  • A main region that's 80% whitespace reads as machine-generated. Fill a dashboard with real, plausible content (stats row + activity list + a chart), not one lonely widget. Intentional density is the difference between "designed" and "AI slop".
  • Trailing gap in a toolbar/header: a flex item with flex:1 capped by max-inline-size stops growing and leaves empty space after the last item. Push the right-hand cluster with margin-inline-start:auto on its first element.
  • Mobile nav must not overlap. Putting the sidebar and main in the same grid area makes an opened sidebar paint over content. On mobile switch the shell to display:block so opening the sidebar pushes main down. Reference: ${CLAUDE_SKILL_DIR}/../../../examples/component-states/app-shell.html.

Icons — real lucide, referenced by name (never hand-draw paths)

Hand-approximated SVG path data renders as broken glyphs (a help "?" became a dot; settings became a hamburger). Use verbatim lucide paths, referenced by name via an injected <symbol> sprite — ${CLAUDE_SKILL_DIR}/../../../examples/component-states/icons.js defines each icon once and <svg class="ico" aria-hidden="true"><use href="#i-NAME"/></svg> uses it. No per-use path duplication, no network, offline + gate-safe. Add a new icon to icons.js once; never paste raw paths into markup. (Inline lucide is acceptable only if the path is copied verbatim from lucide.) .ico{stroke:currentColor;fill:none;stroke-width:2} — color via currentColor.

Graphical / icon-only controls (3:1, theme-stable)

A no-text control (carousel dot, kebab, icon button) is held to 3:1 (WCAG 1.4.11), not 4.5 — verify_states applies this automatically when an element has no direct text node. Two traps it catches:

  • An empty <button> keeps the UA color:buttontext (≈black) regardless of theme → set its color to the actual indicator color and drive the visual via currentColor (e.g. dot is a ::before{background:currentColor}), so the gate measures the real thing.
  • Theme-flipping tokens (--color-chart-N, --color-surface-brand) invert between light/dark; white text or a teal indicator on them passes in one mode and fails the other. Use dark-aware values (override in [data-theme="dark"]) or stable tokens (--color-action-primary, --color-text-link which adapts) for avatars, active dots, and selected states.

© plugin87, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in .claude/skills/design-component of plugin87/ux-ui-agent-skills.

Open the folder on GitHubat commit 14f8d44

Compare with similar skills

UI Component Spec Designer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

UI Component Spec Designer compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
UI Component Spec Designer this skillplugin87/ux-ui-agent-skills1.5k—~2.8kAutomated safety check: PassMIT
Material Design 3 UI/UX Guideskydashnet/material-design-3-ui-skill130—~3kAutomated safety check: PassMIT
UI Design Systemtry-works/role-model117—~5kAutomated safety check: PassMIT
Applying UI Design Systemtelagod/code-abyss244—~538Automated safety check: PassMIT
Design System Starteraiskillstore/marketplace430—~3.8kAutomated safety check: PassNone
Design Dnazanwei/design-dna1.9k1 repos~2.1kAutomated safety check: PassMIT

Similar skills

  • Material Design 3 UI/UX Guide

    skydashnet/material-design-3-ui-skill

    Guides designing, reviewing or implementing interfaces that follow Google's Material Design 3 system: semantic tokens, component states, adaptive layout and accessibility.

    130 GitHub stars~3k tokensUpdated 7 days ago
    Frontend & DesignAuto-check passed
  • UI Design System

    try-works/role-model

    React UI component systems with TailwindCSS + Radix + shadcn/ui.

    117 GitHub stars~5k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Applying UI Design System

    telagod/code-abyss

    Frontend UI design system selector and implementation guide covering Glassmorphism, Liquid Glass (Apple-style), Neubrutalism, and Claymorphism.

    244 GitHub stars~538 tokensUpdated 2 mo ago
    Frontend & DesignAuto-check passed
  • Design System Starter

    aiskillstore/marketplace

    A skill your agent uses when creating or evolving design systems for applications.

    430 GitHub stars~3.8k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Design Dna

    zanwei/design-dna

    Extract, define, and apply design DNA across three dimensions: design system (tokens), design style (qualitative feel), and visual effects (Canvas, WebGL, 3D, particles, shaders, scroll effects…

    1.9k GitHub starsUsed in 1 repo~2.1k tokens
    Frontend & DesignAuto-check passed
  • UI/UX Design System Advisor

    Galaxy-Dawn/claude-scholar

    Turns a vague UI request into a concrete design system with style, palette, typography and layout guidance from a search script, plus stack-specific implementation advice.

    5.7k GitHub starsUsed in 1 repo~1.1k tokens
    Frontend & DesignAuto-check passed

More from plugin87/ux-ui-agent-skills

All 23 skills in this repo
  • Data-Dense Dashboard Designer

    plugin87/ux-ui-agent-skills

    Lays out dense analytics or trading-terminal screens in banded sections with hand-drawn SVG charts, instead of a wall of identical stat cards.

    1.5k GitHub stars~2.6k tokensUpdated today
    Auto-check passed
  • Design Project Scaffold

    plugin87/ux-ui-agent-skills

    Creates a new design-product project from the kit's product-design template, then installs the engine folders and the Playwright dependency that the quality gates need.

    1.5k GitHub stars~1.1k tokensUpdated today
    Auto-check passed
  • Accessibility Audit

    plugin87/ux-ui-agent-skills

    Audits a UI or design against WCAG 2.2 and ARIA patterns and returns findings with the criterion, severity and a specific fix for each.

    1.5k GitHub stars~542 tokensUpdated today
    Auto-check passed
  • Apply Aesthetic

    plugin87/ux-ui-agent-skills

    Applies a chosen visual direction, an archetype or one of 138 named design systems, by remapping design tokens, then checks contrast before it finishes.

    1.5k GitHub stars~597 tokensUpdated today
    Auto-check passed
  • Brand Kit Design Tokens

    plugin87/ux-ui-agent-skills

    Builds a from-scratch brand design system as three-tier DTCG tokens plus one theme.css with light and dark modes, checked against WCAG contrast rules.

    1.5k GitHub stars~809 tokensUpdated today
    Auto-check passed
  • Design Code for Any Framework

    plugin87/ux-ui-agent-skills

    Generates complete, accessible, token-driven UI component code for a chosen framework such as React with Tailwind, SwiftUI, Vue, Flutter or Jetpack Compose.

    1.5k GitHub stars~1.7k tokensUpdated today
    Auto-check passed

Questions about UI Component Spec Designer

What does UI Component Spec Designer do?

Writes a complete UI component spec with anatomy, variants, sizes, eight interaction states, design-token mapping and accessibility notes before or alongside code. Given a component such as a button, tabs, toast, combobox or modal, this skill produces a spec in the project's existing format. It first checks whether the component is already documented in the kit's component files, then pulls the matching ARIA pattern and the contrast and target-size rules from the accessibility references, and maps every value to the token JSON files for sizes and states.

When should I use UI Component Spec Designer?

UI Component Spec Designer fits situations like: designing a new component at the spec level before building it; documenting an existing button, input or modal with variants and states; checking that a component spec covers keyboard and screen reader behavior.

How do I install UI Component Spec Designer in Claude Code?

Run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a claude-code`. Or copy the skill folder (.claude/skills/design-component in plugin87/ux-ui-agent-skills) into .claude/skills/design-component in your project. Claude Code loads it when a task matches its description.

How do I install UI Component Spec Designer in Codex?

Run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a codex`. Or copy the skill folder (.claude/skills/design-component in plugin87/ux-ui-agent-skills) into .agents/skills/design-component in your project. Codex loads it when a task matches its description.

Can I use UI Component Spec Designer in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add plugin87/ux-ui-agent-skills --skill design-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/design-component, .gemini/skills/design-component, .github/skills/design-component and .opencode/skills/design-component in your project.

What does UI Component Spec Designer need to run?

Going by SKILL.md and its folder, UI Component Spec Designer needs the command-line tools its instructions call (node, npx and python3). Our summary lists: The ux-ui-agent-skills kit with its tokens, components and accessibility files; Python 3 and Node.js for the scaffold and state-check scripts.

Does UI Component Spec Designer access the network?

SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is UI Component Spec Designer safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does UI Component Spec Designer use?

UI Component Spec Designer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does UI Component Spec Designer use?

About 2.8k tokens (SKILL.md is roughly 11k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to UI Component Spec Designer?

Skills that share tags, products or a category with UI Component Spec Designer: Material Design 3 UI/UX Guide (skydashnet/material-design-3-ui-skill, 130 stars), UI Design System (try-works/role-model, 117 stars), Applying UI Design System (telagod/code-abyss, 244 stars) and Design System Starter (aiskillstore/marketplace, 430 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains UI Component Spec Designer?

plugin87 (a GitHub user) maintains it in plugin87/ux-ui-agent-skills, which has 1,543 GitHub stars. The repository holds 23 skills in this directory. The repository was last updated on October 7, 2026.

Source: plugin87/ux-ui-agent-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.