wireframe — скилл для Claude Code: каркасы экранов до визуала
Проектирует структуру экранов: что на них есть, где стоит и что важнее. Пригодится, пока макет ещё дешёво переделать.
npx skills add ghaida/intent --skill wireframe -a claude-codeЧто делает wireframe
Скилл отвечает на три вопроса про экран: что на нём есть, где каждая вещь стоит и что самое важное. Четвёртый вопрос — как это выглядит — он намеренно не трогает. Показать человеку цветной макет, и он заговорит про шрифт; показать каркас, и он заговорит о том, те ли вещи вообще попали на экран.
Работает на трёх уровнях. Эскиз-виньетка — один механизм из настоящих элементов интерфейса, в натуральную величину, с подписью; десять таких идей за десять минут отвечают на вопрос «какой механизм?». Полностраничный каркас — вся структура экрана с реальными подписями и иерархией, серые плашки вместо картинок, живые поля и кнопки. Прототип — тот же каркас, но кликабельный: настоящие кнопки ведут на следующие экраны по логике из /journey.
Скилл входит в систему Intent и делит работу с соседями: поток экранов — у /journey, структура информации — у /organize, тексты — у /articulate. Визуальный дизайн вне системы, и скилл прямо говорит, где останавливается. Содержимое обрезано, поэтому про остальные части системы судить не берусь.
Какие задачи решает
- разложить экран по зонам до того, как начнётся визуальный дизайн
- сравнить несколько разных механизмов одного экрана на одном борде
- превратить описанный флоу в набор связанных экранов
- собрать кликабельный прототип из каркасов и пройти его как пользователь
- проверить структуру дашборда или страницы настроек до стилизации
Примеры запросов агенту
- набросай каркас дашборда: что где стоит и что важнее
- сделай эскизы экрана настроек, несколько разных вариантов
- собери кликабельный прототип по этому флоу
Как установить wireframe
1Через Skills CLI (Vercel)
npx skills add ghaida/intent --skill wireframe -a claude-code2Вручную: положить файлы
~/.claude/skills/wireframe/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/wireframe/
1Через Skills CLI (Vercel)
npx skills add ghaida/intent --skill wireframe -a codex2Вручную: положить файлы
.agents/skills/wireframe/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add ghaida/intent --skill wireframe -a cursor2Вручную: положить файлы
.cursor/skills/wireframe/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install ghaida/intent wireframe2Вручную: положить файлы
.github/skills/wireframe/SKILL.md1Через Skills CLI (Vercel)
npx skills add ghaida/intent --skill wireframe -a gemini-cli2Командой платформы
gemini skills install https://github.com/ghaida/intent --path skills/wireframeВручную: положить файлы
.devin/skills/wireframe/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add ghaida/intent --skill wireframe -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора18
Похожие
Рядом в теме «Дизайн»
Всё по теме «Дизайн» →Вопросы о wireframe
Как установить wireframe в Claude?
Выполните npx skills add ghaida/intent --skill wireframe -a claude-code. После этого скилл лежит в ~/.claude/skills/wireframe/SKILL.md.
Что делает скилл wireframe?
Проектирует структуру экранов: что на них есть, где стоит и что самое важное. Выдаёт эскизы-виньетки, полностраничные серые каркасы с реальными подписями и кликабельные прототипы.
Чем wireframe отличается от /journey и /organize?
/journey отвечает за поток между экранами, /organize — за структуру информации, а wireframe занимается самим экраном. Если каркас вскрыл проблему флоу, её возвращают в /journey.
Исходный текст
SKILL.md · CC0-1.0
---
name: wireframe
description: >
Design the structural anatomy of screens at wireframe fidelity — what goes
where and why, before anyone argues about how it looks. Part of the Intent
design strategy system. Produces lo-fi idea boards for divergent
exploration, complete interactive grayscale wireframes with real labels and
real hierarchy, and click-through prototypes that materialize flow logic
from /journey. Trigger on: wireframe, wireframes, wireframing, thumbnails,
"sketch the screen", "lay out this page", "what goes where on this screen",
screen layout, page structure, lo-fi, mid-fi, click-through prototype, wireflow,
"wireframe the dashboard", or any request to design the structure of a
screen before its visual design. The flow through screens belongs to
/journey; the information structure belongs to /organize; the words belong
to /articulate — this skill owns the screen itself.
version: 1.7.2
user-invocable: true
---
# Wireframe
## Overview
You design the structural anatomy of screens. Your scope is the screen itself — what exists on it, where it sits, and how prominent it is — at a fidelity where structure is still cheap to change. Wireframing is the discipline of making layout decisions visible and arguable before visual design makes them expensive and personal.
A wireframe answers three questions about a screen: What is on it? Where does each thing sit? What is most important? It deliberately refuses to answer a fourth — what does it look like? — because answering it too early changes what stakeholders critique. Show someone a styled mockup and they discuss the font. Show them a wireframe and they discuss whether the right things are on the screen at all.
**Trigger this skill when users ask about:**
- Wireframing any screen, page, or view ("wireframe the dashboard", "sketch the settings page")
- Screen layout and structure ("what goes where", "lay out this page", "how should this screen be organized")
- Thumbnail exploration — many quick structural ideas for the same problem
- Turning a defined flow into screens ("materialize this flow", "wireframe these steps")
- Click-through prototypes assembled from wireframes
- Structural review before visual design ("is this layout right before we style it?")
## Skill family
You work alongside complementary skills that handle interconnected concerns:
- **`/journey`** — Defines the flow logic your screens live in: what screens exist, in what order, with what decision points. You materialize their flows as wireframed screens and wire prototypes from their flow logic. When wireframing reveals a flow problem — a screen doing two jobs, a missing step, an impossible decision point — hand it back to them.
- **`/organize`** — Structures the information your screens present. They decide the taxonomy, navigation model, and labeling system; you place that structure on actual screens. If users won't be able to find things, the problem is theirs; if things are findable but the screen is illegible, it's yours.
- **`/articulate`** — Designs the words. Your wireframes carry real labels and real content — never lorem ipsum — but voice, tone, and final copy are theirs. Write plausible, honest copy with no flag; what their pass should revisit, say in the reply.
- **`/specify`** — Packages the approved design for the build. Your wireframes are the handoff itself, referenced from the package's entry page; you do not write implementation documentation.
- **`/evaluate`** — Assesses screens against heuristics. Invite them onto full-page wireframes before structure freezes — structural problems found at wireframe fidelity cost nothing to fix.
- **`/fortify`** — Stress-tests what you wireframe. Every full-page wireframe of a stateful screen should prompt their question: what does this screen look like empty, loading, erroring, overflowing?
- **`/include`** — Audits for accessibility. Structure decides accessibility earlier than style does — reading order, zone hierarchy, and touch target placement are wireframe decisions, not visual ones.
- **`/philosopher`** — A cross-cutting cognitive mode. Enter when every idea you sketch is the same mechanism you've seen a thousand times, when the "obvious" structure mirrors the org chart instead of the user's task, or when the user says "sit with this."
Visual design — color palettes, typography, styling, brand expression — is outside the Intent system. You stop where it starts, and you say so explicitly when you stop.
## Fidelity doctrine
Fidelity in this skill means **scope, never abstraction** — and never visual polish. Every rung draws from the same design system at natural size, with real labels and working controls. Nothing is ever drawn vaguer, smaller, or more diagrammatic to signal "early": everything is real, it's just grayscale. What changes between rungs is how much of the product a frame commits to — a focused fragment, a complete screen, or a walkable sequence.
### The ladder
**Thumbnail (lo-fi) — the idea vignette.** One idea, shown as the focused piece of real UI where it lives: the price field with its "Free" chip, the notification card with its claim button, the porch-pickup switch with its time chips. The fragment is built from the same kit at natural size and staged centered on a muted panel, with a caption: a title and one breath of description. The vignette contains only real UI; the caption is annotation-layer narration. Its job is divergence at the **mechanism level**: many structurally different answers to one problem, compared as a board of ideas. Ten vignettes that take ten minutes beat one full screen that takes an hour, when the question is "which mechanism?"
**Full-page wireframe (mid-fi)** — A realistic and detailed UI design that shows full-size screen structure with realistic content, clear and simple typography, and gray boxes for images. Every element that will exist on the screen exists in the wireframe, with real labels and real hierarchy expressed through size, weight, and placement — and it is **interactive**: inputs accept typing, buttons hover and press, chips and switches toggle. No visual design beyond the system: the grayscale ramp, the system's fixed accent on primary actions and selection states, one neutral font. Its job is convergence: resolve every "what goes where" decision so the screen can be critiqued as a structure that already feels like the product.
**Prototype** — Not a third kind of drawing: a **view** of the mid-fi artifact in which the wireframes themselves become the prototype. The real trigger elements — the actual button, the actual list row — are clickable and navigate to the screens they lead to, following flow logic defined with `/journey`. Its job is simulation: walking the structure as a user would, to test whether the screens work as a sequence — before anything is built or styled.
### Choosing a rung
Match the rung to the decision being asked:
| The question on the table | Rung |
|---|---|
| "Which mechanism should solve this problem?" | Thumbnails — a board of them |
| "Is everything this screen needs present and correctly weighted?" | Full-page wireframe |
| "Does this sequence of screens work as a task?" | Prototype view |
| "Does it look right?" | Not this skill — that's visual design |
Never present a higher rung than the decision requires. If the team hasn't agreed on the mechanism, full-page wireframes are premature. If they haven't agreed on the flow, a prototype is premature.
### When fidelity misleads
More fidelity is not more progress. Four failure modes to name and refuse:
- **The polish critique trap.** Styled artifacts invite styling feedback. Present a screen with chosen fonts and colors, and the conversation becomes about fonts and colors — the structural questions never get asked. The locked grayscale system is not a limitation; it is what keeps the critique pointed at structure.
- **The done-looking artifact.** A finished-looking screen makes people hesitate to challenge it. These wireframes deliberately look real — so the provisional signal comes from the framing, not from fake sketchiness: the artifact names itself wireframes (board title, filename), and you name it out loud. "These are wireframes — the structure is up for debate; the styling doesn't exist yet."
- **The premature convergence.** Jumping straight to one full-page wireframe skips the divergence that idea boards exist for. The first mechanism you draw is rarely the best one; it is just the most familiar one.
- **The fidelity mismatch.** Presenting an idea board when the stakeholder needs to verify completeness wastes the meeting; presenting a prototype when the team hasn't agreed on screen structure invites rework. Say in the reply what feedback the rung is for: "React to the mechanisms, not the details." The title says what the artifact is.
## Wireframe language
Every artifact this skill produces is built from a shared visual vocabulary with **three layers that never blend**. A viewer must never mistake chrome for proposal, or notes for content. The language is carried by this skill's reference files — they are the law, and their code comments are the rationale:
- `references/design-system.css` — the wireframe content kit: tokens, palette, components, states
- `references/viewer.css` — the container chrome: stage, frames, plates, views
- `references/viewer.js` — the container behavior: view toggle, slideshow, theme, prototype navigation
- `references/styleguide.html` — the kit rendered as a browsable styleguide (open it to *see* the system)
The language is identical across all three output modes — a wireframe looks like the same wireframe whether it renders in HTML, Figma, or pencil.
### Layer 1 — Container (presentation chrome)
The stage every artifact sits on (source of truth: `references/viewer.css`). One vignette or a six-screen wireflow renders on the same chrome:
- **Backdrop:** the Intent website's own neutrals — the container reads as a page from the same design system as the site. The chrome follows the site's language: cool-tinted tokens, the same absolute 4px grid as the kit, and the site's typography — General Sans 700 for the board title, Hanken Grotesk for notes, SF Mono for plates and labels (brand fonts referenced by name with system fallbacks, never loaded from a CDN — self-containment wins over font fidelity). The chrome stays **monochrome**: indigo belongs to the wireframes' accent and the annotation layer, never to chrome. The board header is the title alone, an `h1` at display size. No line beneath it describes the board, its devices, their sizes or the scale they are drawn at; the screens show that.
- **Frame:** each wireframe sits in its own hairline-bordered card. A mid-fi frame's **title plate** — the screen's name — floats *above* the card as a separate chrome caption, the way a canvas tool labels its frames. No rung word on the plate: the artifact's filename and stage already say it's a wireframe. The plate is never visually attached to the wireframe: no shared border, no shared background — a screen header inside the wireframe must never be mistakable for chrome, and vice versa. The plate uses a small uppercase monospace label style that never appears inside wireframe content. Lo-fi frames carry no plate — the vignette's own idea caption (title, description) is their label.
- **Sections:** frames group under user-defined section headers — "Onboarding flow", "Checkout flow", "Round 2 explorations" — named at generation time. Section headers are chrome, styled like plates. Long multi-section boards may add the sticky **section index** sidebar (the site's 180px-rail convention; it's in `viewer.css`).
- **One rung per artifact.** Idea boards and full-page wireframes belong to different project stages — divergent exploration vs resolved structure — and never share a page. Lo-fi ships as its own artifact (`wireframes-<topic>-thumbnails.html`); full-page wireframes and prototypes ship as another (`wireframes-<topic>.html`). Rejected candidates stay on the idea board — the board itself, captions and all, is the decision record. **Idea boards carry no notes rail and no decision note: the caption is the annotation, and the board stays a clean grid.**
- **View modes (HTML):** the container is a viewer with a toggle in its chrome:
- **Grid** (default) — all frames, grouped by section. In a lo-fi artifact vignettes flow several per row; in a wireframe artifact frames sit larger, one or two per row. A section's notes sit as a right sidebar beside its frames — the record reads alongside the screens, never below them.
- **Slideshow** — a fixed stage, not a long page: the page stops scrolling and the active frame centers and scales *down* to fit the viewport whole (plate included, never scaled up), with the notes rail as a bounded column beside it. The frame **page-centers** when its width stays clear of the rail (viewer.js decides); the stage stays bare — the frame is the only thing on it. Prev/next controls, keyboard arrows (a quiet sentence-case hint in the navigator row says so), position indicator, section-aware order; the navigator row sits between header and stage and doubles as the section header line — section name and position grouped on the left as one wayfinding phrase, controls on the right; the plate carries only the screen's name. **Bounds are real:** the sequence never wraps — prev disables at the first frame, next at the last; the ends of a flow are information. The stage for design reviews — a frame must never run off the bottom of the screen.
- **The reviewer's place is never lost.** Clicking a frame's plate in grid opens *that* frame in slides; leaving slides restores the grid scroll position; the current view + frame mirror into `location.hash` (`#slides-2`, `#proto-1`) so any review state is linkable — "look at slide 2" is a URL, not directions.
- **Theme** — a light ⇄ dark toggle. Precedence: the reviewer's own last choice (localStorage) wins, then an authored `data-theme` on `<body>` (a presenter's choice survives the room's OS), then the OS preference. The half-tone swatch leads with the current mode — it reads as state. Both ramps ship in every HTML artifact. The toggle ships in a standalone artifact; when the artifact is made for a host app that sets the look (the request says so, or the host's instructions do), omit the toggle control and pin `data-theme` on `<body>` to the theme the host names. Visually distinct from the view tabs — it's a mode switch on the stage, not a way of looking at the frames: a borderless control, separated from the view group. Figma and pencil artifacts are single-theme — the ask-first step records which.
- **Prototype** (only when requested) — one screen at a time on the same fitted stage, annotations hidden, and the wireframes themselves interactive: activating a trigger element (the real button, the real row — click, or Tab + Enter/Space) navigates to the screen it leads to, following the flow logic. **Navigation is flow-shaped, not document-shaped:** ←/prev steps back through *visited* screens, Restart returns to the flow's entry, and sequential paging (next, the linear position) hides — arrows that walk document order would let a reviewer traverse paths the flow never connects. Only the wired triggers are tabbable; the mock's unwired controls leave the tab order, and a dead tap flashes a hairline "nothing here" acknowledgment. Hovered triggers show the same hairline ring — wired controls distinguish themselves from decoration. The view instructs itself: the navigator row carries a one-line sentence-case hint — the demo moment must never be an unlabeled room.
- **Wireflow arrows** connecting screens render on the backdrop, between frames — flow logic lives in the container layer, never inside a screen.
- In Figma, the container maps to sections and frame layout on canvas; in pencil, to grouped frames. Slideshow falls to those tools' native presentation modes.
**Slideshow is not prototype.** Slideshow pages through frames in section order — a presentation. Prototype view makes the wireframes themselves the simulation — the actual trigger elements are clickable and navigate the flow. Slideshow is always available; prototype view exists only when the user asked for a prototype. Both ride the same single HTML artifact.
### Layer 2 — Wireframe content (the kit)
Source of truth: `references/design-system.css`. Wireframe content uses its variables and classes, and nothing else.
**The palette** — a five-role grayscale ramp, one working accent, one semantic exception:
| Variable | Light | Dark | Used for |
|---|---|---|---|
| `--w-canvas` | `#ffffff` | `#1a1a20` | the screen's own background |
| `--w-surface` | `#f4f4f6` | `#232329` | cards, panels, filled regions |
| `--w-border` | `#d6d6dd` | `#3a3a44` | outlines, dividers, input boxes |
| `--w-ink2` | `#62626b` | `#9a9aa6` | supporting text (guardrail: ≥4.7:1 on surface) |
| `--w-ink1` | `#26262e` | `#e8e8ee` | headings, labels, body text |
| `--w-accent` | `#4338ca` | `#7c6ff0` | primary actions + selection states, nothing else |
| `--w-accent-soft` | `#edebfc` | `#2d2a4e` | tinted surfaces paired with accent/ink text |
| `--w-error` | `#b42318` | `#f97066` | invalid states ONLY — never decorative, never emphasis |
The Intent indigo accent marks **what is primary and what is selected** — filled primary buttons, active chips, checked checkboxes and radios, switched-on switches, focus rings, the active tab underline. It expresses interaction state, not visual design: it is the system's fixed accent, not a color choice on offer. Everything else stays in the ramp — if a tone isn't telling the user "this is the primary action", "this is selected", or "this is invalid", it stays gray. The annotation layer shares the same indigo but speaks in its own shapes (numbered markers, the notes rail), never in controls.
**The token law.** Every size, margin, gap, padding, radius, control height, icon size, type size, and line-height comes from the kit's tokens — spacing `--sp-N` = N×4px (up to 92), control heights 32/40/48, icons 16/20/24/32, radii 2/4/8/full. **Raw pixel values in artifact markup are a violation.** The 4px grid is absolute.
**The type scale** — grid-locked size/line-height pairs with legible floors (nothing under 11px): `t-caption` 11/16 · `t-small` 13/20 · `t-body` and `t-body-strong` 14/20 · `t-heading` 16/20 · `t-title` 18/24 · `t-display` 22/28. One neutral system font (`--wf-font: system-ui` — never the brand fonts, which belong to the chrome); size and weight express hierarchy, never typeface.
**Glyphs — two roles, one rule.** Functional icons (chevron, search, check, ×, plus, bell, camera, alert, back-arrow, info) are drawn SVG, alpha-masked so they render in currentColor: `.glyph .gl-search` etc. **Never use text characters (▾, ×, ⚙) as control glyphs.** The featureless `.icon` circle is the placeholder for app-specific icons that aren't decided yet. An icon-only button (`.btn-icon`) always carries an `aria-label`.
**The component baseline** — the kit covers the real anatomy of screens, all with working states:
| Element | Kit vocabulary |
|---|---|
| Buttons | `.btn` + `.btn-primary` (accent-filled) / `.btn-secondary` (bordered) / `.btn-ghost`, sizes `.btn-sm`/`.btn-lg`, `.btn-block`, `.btn-icon` + aria-label |
| Form fields | `.field` > `.field-label` + `.input`/`.textarea`/`.select` + `.field-hint`; `.search` (input + leading glyph); invalid = `.error` class + `.field-error` line with `gl-alert` |
| Choices | `.choice` rows: native checkbox / radio (accent when checked); switch = **`button.switch[role=switch]`**, never a styled checkbox |
| Chips / tabs | `.chip` (accent-filled when active), `.tabs` > `.tab-item` (accent underline), `.tabbar` > `.tab` (mobile bottom bar) |
| Bars | `.appbar` — back glyph, title, contextual actions |
| Objects | `.avatar` (sm/md/lg), `.media` (light gray block — surface fill, hairline border, no crossed lines), `.badge` (+ `-muted`/`-accent`), `.link`, `.divider` |
| Collections | `.card` (+ `.interactive`) > `.media` + `.card-body`; `.list` > `.list-row`; native `<table>` with real headers and real rows |
| Overlays | `.scrim` + `.modal` (+ `.modal-actions`), `.sheet` + `.sheet-handle`, `.toast` — elevation is **a scrim plus a hairline border, no glow shadows** |
| Alerts | `.callout` > `.glyph` + `.callout-body` (`.callout-title` + `.callout-text`) — persistent in-page note, the toast's standing counterpart. Neutral default, `.accent` for emphasis, `.error` for the ramp's one semantic exception. **Severity reads from glyph + copy, never hue** (the ramp has no success/warning color); never a left accent stripe |
| Loading | `.skeleton` for content; `.spinner` only inside controls, always with an honest label ("Posting…") — the label carries the state, motion just reinforces it, and reduced-motion users get a static treatment |
| Layout | `.row`, `.stack`, `.text-stack` (a name/title over a sub-line as one identity unit — collapses leading to a single grid step), `.grow`, `.grid-2`, `.grid-3`, `.screen-body` |
| Vignettes | `.vignette` (+ `.dots` — a **board-level** grid option, all vignettes or none, only when the dots mean something) > `.float`; `.idea-caption` > `.idea-title` + `.idea-desc` |
**The completeness test.** A mid-fi wireframe is a grayscale version of the full product screen — not an enlarged fragment. If the real screen would have it, the wireframe has it: status and navigation bars, tab bars, search fields, filter chips, icons (placeholders where undecided), avatars, timestamps, counts, secondary actions, footers. Density matches reality — a marketplace grid shows six listings with sellers and distances, not two bare cards; a feed shows the fold and what's below it. The test: screenshot the real product, desaturate it, strip the brand typography — your wireframe should have the same amount of stuff in the same places.
**Real controls.** Wireframes are built from native interactive elements — `<button>`, `<input>`, `<textarea>` — never divs painted to look like controls. Text inputs focus and accept typing, buttons respond to hover and press, chips and switches toggle, tabs react. Interaction states are mandatory and live in the kit: hover, focus (2px accent ring), press, disabled, invalid, loading. Interactivity is not polish — it's structural truth about what the screen *does* — so it belongs at this rung; only visual styling is withheld.
### Layer 3 — Annotation (accent meta-layer)
Notes about the design, never part of it:
- **Numbered markers** — small accent-colored circles with white numerals, placed on the wireframe; each pairs with a note in a rail in the container margin. **Notes are per wireframe, never one consolidated list:** markers number per frame (each wireframe restarts at 1), and each frame's notes live in a `.note-group` carrying `data-for="<frame-id>"`, headed by a `.note-frame` line naming the frame. Grid view shows every group as the section's record, in a right sidebar beside the frames; slides view shows only the active frame's group. Section-level notes sit outside any group and always show. **The notes rail is a mid-fi feature** — idea boards carry no rail; their captions are the annotation. Anchor markers to the element they annotate (a `position: relative` container, token offsets) — never frame-level percentage positions that drift over the content.
- **Idea captions** — on lo-fi vignettes, the caption's title carries the annotation accent: the caption narrates the board, it isn't UI.
- **Flow indicators** — "links to →" labels on wireflow arrows.
(Prototype interactivity is not an annotation overlay — it lives on the wireframe's own trigger elements and is invisible by design; see the Prototype view.)
Annotation uses **one accent: Intent indigo by default (`--note`), overridable by the user at generation time** ("use green for annotations"). The override swaps `--note` only — the kit's content accent (`--w-accent`) is fixed. Annotation shapes are how the layer stays distinct from content even though they share the default indigo: markers and rail text, never buttons, never fills. If the user's requested accent collides with grayscale legibility, say so and suggest an alternative.
## Visualization & output
For this skill the artifact is the deliverable. After the structural thinking is done — never before — produce wireframes in the format the user chooses.
### Ask first
Open with this question, with HTML as the default:
> Where should these wireframes live?
>
> - **HTML** (default) — self-contained file per fidelity stage: grid/slideshow viewer, optional click-through prototype
> - **Figma** — frames and sections in your Figma file via MCP
> - **pencil** — frames in pencil.dev via MCP
> - **No** — markdown structure spec only
Skip the question if the request already states a preference — "in figma", "in pencil", "html", "just describe it", "no wireframes" preempt the prompt. If the user says yes without naming a format, default to HTML. Ask for section names if sets aren't already implied by the flow ("Should I group these as Onboarding / Checkout, or differently?").
If the user picks **Figma or pencil**, also ask: **light or dark wireframes?** Those canvases are single-theme — use the chosen column of the palette throughout. HTML needs no theme question; it ships both ramps with an in-page toggle, unless the artifact is for a host app that sets the look, in which case the toggle is omitted and `data-theme` pinned to the host's theme.
### HTML output
Write **one self-contained file per rung** — `wireframes-<topic>-thumbnails.html` for the lo-fi idea board, `wireframes-<topic>.html` for full-page wireframes and prototypes — to the working directory and open it. Never mix rungs in one file: they serve different project stages. No external `<link>`, `<script src>`, fonts, or images — inline `<style>` and inline `<script>` only.
**Embed the system verbatim.** Read these three files from this skill's `references/` directory and paste their full contents into the artifact — never retype them, never improvise replacements, never trim "unused" parts (the next iteration uses them):
1. `references/design-system.css` → into `<style>`, first
2. `references/viewer.css` → into the same `<style>`, after it
3. `references/viewer.js` → into `<script>` before `</body>`
(If your platform has inlined these reference files below this document, embed that copy.) After the two stylesheets, add per-artifact layout CSS — screen-specific grids, zone sizing, marker positions — using kit tokens for every value. Raw pixels are a violation; so is restyling a kit class.
**Structure template** — fill with real screens:
```html
<!-- in <head>: a data-URI favicon (no 404 noise in the console) —
the annotation marker is the mark:
<link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3E%3Ccircle cx='8' cy='8' r='6' fill='%234338ca'/%3E%3C/svg%3E">
-->
<!-- data-theme pins the authored theme; OMIT it to follow the viewer's
OS preference. A pinned theme survives the presentation room. -->
<body data-view="grid" data-theme="light">
<header class="board-header">
<div class="board-id">
<h1 class="board-title">[PROJECT] — wireframes</h1>
</div>
<div class="board-controls">
<nav class="view-toggle" aria-label="View">
<button data-setview="grid" aria-pressed="true">Grid</button>
<button data-setview="slides" aria-pressed="false">Slides</button>
<!-- Include ONLY when a prototype was requested: -->
<button data-setview="proto" aria-pressed="false">Prototype</button>
</nav>
<!-- Omit for a host app that sets the look; pin data-theme on <body> instead -->
<button class="theme-toggle" data-toggle-theme>
<span class="swatch" aria-hidden="true"></span><span class="theme-label">Dark</span>
</button>
</div>
</header>
<!-- in the stage views this row replaces the section label:
name · position grouped left, controls right. Each view carries
its own quiet hint; proto swaps sequential next for Restart -->
<nav class="slide-nav">
<span class="slide-section">[SECTION NAME]</span>
<span class="slide-pos">1/1</span>
<span class="nav-hint slides-hint">← → to page · Esc returns to grid</span>
<span class="nav-hint proto-hint">Tap live controls to navigate · ← steps back · Esc returns to grid</span>
<button data-prev aria-label="Previous"></button>
<button data-next aria-label="Next"></button>
<button data-restart>Restart</button>
</nav>
<section class="board-section" data-section="[SECTION NAME]">
<h2 class="section-label">[SECTION NAME]</h2>
<div class="frame-grid">
<!-- mid-fi frame: plate above (an h3 — screen readers jump frame
to frame by heading; viewer.js makes it the click-to-open-in-
slides handle), complete interactive screen inside -->
<article class="frame" id="scr-[slug]" style="width: [VIEWPORT]px">
<h3 class="frame-plate">
<span>[SCREEN NAME]</span>
</h3>
<div class="wf" style="position: relative;">
<!-- the full screen, kit vocabulary only. Controls are NATIVE
elements — <button class="btn btn-primary">, <input
class="input">, <button class="chip"> — never painted divs.
When a prototype was requested, put data-go="scr-[target-slug]"
directly on the real trigger elements. -->
<!-- annotation markers (absolute-positioned, token offsets): -->
<div class="note-marker" style="top: …; left: …;">1</div>
</div>
</article>
<!-- lo-fi frame: no plate — the idea caption is the label -->
<article class="frame" style="width: 360px">
<div class="wf">
<...
© ghaida · CC0-1.0 · ghaida/intent