shape — Claude Code skill: wireframe before code
A wireframe-first pass that turns a vague screen brief into an ASCII layout, state list, content inventory and open questions before any code is written.
npx skills add educlopez/ui-craft --skill shape -a claude-codeWhat shape does
shape is one lens of the ui-craft skill set. It runs before the build phase and produces a shape artifact, not JSX. The agent starts with 3–5 clarifying questions: what the primary user action is, what data is visible by default versus hidden behind a click, what success looks like, and who the primary user is. Guessing is not allowed here.
From there it builds a content inventory with P0/P1/P2 priorities, sketches an ASCII layout for desktop and mobile, enumerates the states the screen must handle (idle, loading, empty, error, partial, conflict, offline, success), and lists open questions about accent color, typography, breakpoints, stack and data source. At CRAFT_LEVEL ≥ 7 it adds motion shape and a typography hierarchy plan; at CRAFT_LEVEL ≤ 4 the state list shrinks to idle/loading/error.
The skill runs as the /shape command and can sit inside the wider ui-craft pipeline. If ui-craft is also installed, shape reads its SKILL.md first to apply Discovery and Craft Test. Output is print-only by default — shape may offer to persist it to .ui-craft/spec.md as a ## Surface: <name> section, but only writes the file after you explicitly confirm. No component code is produced at this step.
What it helps with
- break a screen into layout regions before writing components
- pin down the primary user action and success criteria with the requester
- build a content inventory with P0/P1/P2 priorities
- enumerate screen states so empty and error are not forgotten
- list open questions about color, type and breakpoints
Example prompts for the agent
- /shape new user onboarding screen
- /shape dashboard with metrics and a recent activity list
- /shape checkout form — the brief is still vague
How to install shape
1Skills CLI (Vercel)
npx skills add educlopez/ui-craft --skill shape -a claude-code2Manually: put the files in place
~/.claude/skills/shape/SKILL.mdCopy the whole skill folder; for one project use .claude/skills/shape/
1Skills CLI (Vercel)
npx skills add educlopez/ui-craft --skill shape -a codex2Manually: put the files in place
.agents/skills/shape/SKILL.mdFor all projects use ~/.agents/skills/
1Skills CLI (Vercel)
npx skills add educlopez/ui-craft --skill shape -a cursor2Manually: put the files in place
.cursor/skills/shape/SKILL.mdCursor also reads .agents/skills/ and .claude/skills/
1GitHub CLI
gh skill install educlopez/ui-craft shape2Manually: put the files in place
.github/skills/shape/SKILL.md1Skills CLI (Vercel)
npx skills add educlopez/ui-craft --skill shape -a gemini-cli2Platform CLI
gemini skills install https://github.com/educlopez/ui-craft --path cli/assets/codex/skills/shapeManually: put the files in place
.devin/skills/shape/SKILL.mdThe legacy .windsurf/skills/ path still works
Skills CLI (Vercel)
npx skills add educlopez/ui-craft --skill shape -a opencodeClaude.ai
Zip the folder and upload it in Settings → Capabilities → Skills
Step by step, with commands for each platform: How to install skills in Claude Code: five ways
Questions about shape
How do I install shape in Claude?
Run npx skills add educlopez/ui-craft --skill shape -a claude-code. The skill lands at ~/.claude/skills/shape/SKILL.md.
What does shape do?
It runs a wireframe-first pass: clarifying questions, a content inventory, an ASCII layout for desktop and mobile, a state list and open questions. No code is written at this stage.
What does shape need to work?
It references files from the ui-craft set, such as references/state-design.md and references/spec.md. If ui-craft is installed too, shape reads its SKILL.md first to apply Discovery and Craft Test.
Source text
SKILL.md · MIT
--- name: shape description: "Wireframe-first pass — outputs an ASCII layout + state list + content inventory + question list before any code. Use when starting a new screen from scratch or when the user's brief is still ambiguous. Invoke when the user asks for shape on their UI, or mentions 'shape' alongside design / UI / frontend work." --- <!-- HARNESS MIRROR — do not edit here. Canonical source: skills/ or commands/. After editing source, copy into cli/assets/<harness>/ and repo-root harness mirrors. --> **Context:** this sub-skill is one lens of the broader `ui-craft` skill. If the `ui-craft` skill is also installed, read its SKILL.md first for Discovery + Anti-Slop + Craft Test, then apply the specific lens below. Shape the UI for `$ARGUMENTS` before writing code. Load the `ui-craft` skill. This command produces a **shape artifact**, not JSX. The point is to force low-fi thinking — content inventory, layout regions, state coverage, open questions — before any component is written. Skipping this step is how generic AI UIs get built: straight to hi-fi, no discovery, every screen looks the same. **Step 1 — Clarify (3-5 questions).** Ask the user before shaping. Don't guess. Minimum questions: - What's the **primary user action** on this screen? (One verb, one object.) - What data is **visible by default** vs **hidden behind a click or tab**? - What does **success** look like — a state, a redirect, a toast? - Who's the **primary user** — first-timer, power user, mobile-first? **Step 2 — Content inventory.** Bullet list of every piece of content that will appear. Annotate each by priority: - **P0** — must be visible on first paint. Cut it and the screen fails. - **P1** — one click away (tab, accordion, drawer). - **P2** — settings-level; rarely accessed. Example: ``` - P0 Headline (one line, the value prop) - P0 Primary CTA - P0 Hero chart / metric - P1 Secondary nav tabs - P1 Recent activity list - P2 Export / integrations menu ``` **Step 3 — ASCII layout.** Low-fi sketch showing regions. No specific copy, no colors, no font sizes. One desktop variant + one mobile variant. Use box characters: ``` Desktop ┌──────────────────────────────────────────────┐ │ [logo] [nav] [user] │ ├──────────────────────────────────────────────┤ │ ┌────────────────┐ ┌───────────────────┐ │ │ │ Headline + sub │ │ │ │ │ │ │ │ Hero visual │ │ │ │ [Primary CTA] │ │ │ │ │ └────────────────┘ └───────────────────┘ │ │ │ │ ── Social proof row ── │ │ │ │ ┌─── Feature 1 ───┐ ┌─── Feature 2 ───┐ │ │ └─────────────────┘ └─────────────────┘ │ └──────────────────────────────────────────────┘ Mobile ┌──────────────────┐ │ [logo] [☰] │ ├──────────────────┤ │ Headline + sub │ │ │ │ [Primary CTA] │ │ │ │ ┌── Hero ──┐ │ │ └──────────┘ │ │ │ │ Social proof │ │ │ │ Feature 1 │ │ Feature 2 │ └──────────────────┘ ``` Asymmetry is fine and often better — don't force center-everything. **Step 4 — State list.** Enumerate the states this screen must handle. Point at [references/state-design.md](../skills/ui-craft/references/state-design.md) for the contracts. - **idle** — default state, data present. - **loading** — skeletons that mirror final layout, 200ms delay before showing. - **empty** — first-run or no data; doubles as onboarding. - **error** — specific cause + recovery action + support ID. - **partial** — some data loaded, some failed (e.g., one widget erred). - **conflict** — user-edit collision (rare but load-bearing on collaborative surfaces). - **offline** — queue writes, reconcile on reconnect. - **success** — confirmation state after the primary action completes. Mark each as **required** / **optional (why)** / **N/A**. **Step 5 — Open questions.** Do NOT start coding until these are answered. Default set: - Accent color — brand-defined, or to be chosen? (See Discovery in `SKILL.md`.) - Typography — existing tokens, or new system? (Reference `typography.md`.) - Responsive breakpoints — what's the minimum supported width? - Stack — CSS only, or Motion / GSAP / Three.js? (Only load `stack.md` if the user opts in.) - Data source — real API ready, or mock for shape? - Keyboard / a11y requirements — anything beyond the baseline from `accessibility.md`? **Knob awareness.** - At `CRAFT_LEVEL ≥ 7`, add two more sections: - **Motion shape** — which elements enter, in what order, with what stagger. Pick from the duration scale in `references/motion.md`. - **Typography hierarchy plan** — display / headline / body / label sizes and weights, before code. - At `CRAFT_LEVEL ≤ 4`, strip Step 4 to `idle / loading / error` only. Skip the motion shape. **Step 6 — Offer to persist to `.ui-craft/spec.md` (opt-in).** After printing all five steps, offer to write the output as a spec section: > "Write this shape to `.ui-craft/spec.md` as `## Surface: <name>`? (Persists the composition choice, layout, and acceptance bar for the build phase.)" - **User confirms →** format the output as a `## Surface: <name>` section following the template in `../skills/ui-craft/references/spec.md`, then write or append to `.ui-craft/spec.md`. Confirm in one line: "Written to `.ui-craft/spec.md` → `## Surface: <name>`." - **User declines →** do not write any file. The printed output stands. Note: "spec.md not written — the pipeline continues without a persisted acceptance bar." Print-only is the default when `/shape` is run standalone. Step 6 is the offer; it does not execute unless the user explicitly confirms. **Output contract.** - Produce a single Markdown block with all five steps, in order. Step 6 is the optional offer that follows. - Do **NOT** write JSX, CSS, or component code in this command. - End the output with: _"Ready to build? Review the shape, confirm the open questions, then run `/ui-craft:audit` (or use Build mode) once the code exists."_ **Next step:** `/craft` — build the surface you just wireframed (rung 1).
© educlopez · MIT · educlopez/ui-craft