Agent skill

Design

by popmechanic in popmechanic/VibesOS

Self-contained design transformer — invoke directly, do not decompose.

MITAuto-check: notesFrontend & Design

Install Design

skills CLI
$ npx skills add popmechanic/VibesOS --skill design -a claude-code

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

GitHub CLI
$ gh skill install popmechanic/VibesOS design --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/popmechanic/VibesOS.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/design .claude/skills/design && 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
GitHub stars
136
Token cost
~2.5k tokens
SKILL.md length
785 words
Files
1
Skills in repo
7
Repo updated
First seen
Licence
MIT

At a glance

Self-contained design transformer — invoke directly, do not decompose.

  • Works in 5 steps: Read the Design Reference → Identify Dynamic Content → Create the React Component → …
  • User provides a design.html
  • SKILL.md covers Core Principle, When to Use This Skill, The Transformation is Mechanical and Workflow, plus 6 more sections
  • Calls bun

What it does

Design is an agent skill from popmechanic/VibesOS. Self-contained design transformer — invoke directly, do not decompose. Transforms a design reference HTML file into a Vibes app. Use when user provides a design.html, mockup, or static prototype to match exactly.

Its SKILL.md is about 2.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Frontend & Design. It works with React. The repository describes itself as: A GUI for Claude Code that makes it easy to vibe code simple, un-hackable apps. The licence is MIT.

When your agent uses it

  • User provides a design.html
  • Static prototype to match exactly

Example prompts

  • “/design”

Requirements

  • Pre-approved tools (allowed-tools): Read, Write, Bash, AskUserQuestion

Workflow steps

5 steps, taken from the step headings in SKILL.md.

  1. Read the Design Reference
  2. Identify Dynamic Content
  3. Create the React Component
  4. Handle Dark Mode Override (If Needed)
  5. Assemble and Test

What it can do on your machine

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

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Write
    • Bash
    • AskUserQuestion

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • bun

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

  • Network

    No URLs in SKILL.md.

    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

Design loads about 2.5k tokens when it runs. Until then it costs about 55 tokens; SKILL.md has 785 words of instructions outside code blocks.

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

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: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Write, Bash, AskUserQuestion

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 popmechanic/VibesOS at commit 5baf8a2, republished under its MIT licence (© popmechanic). 785 words, ~2,486 tokens.

Download SKILL.mdSave it as .claude/skills/design/SKILL.md (or your agent's skills folder).
name
design
description
Self-contained design transformer — invoke directly, do not decompose. Transforms a design reference HTML file into a Vibes app. Use when user provides a design.html, mockup, or static prototype to match exactly.
allowed-tools
Read, Write, Bash, AskUserQuestion
argument-hint
<design.html>
license
MIT
metadata.author
Marcus Estes

Plan mode: If you are planning work, this entire skill is ONE plan step: "Invoke /vibes:design". Do not decompose the steps below into separate plan tasks.

Display this ASCII art immediately when starting:

░▒▓███████▓▒░░▒▓████████▓▒░░▒▓███████▓▒░▒▓█▓▒░░▒▓██████▓▒░░▒▓███████▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░      ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░      ░▒▓█▓▒░▒▓█▓▒░      ░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░  ░▒▓██████▓▒░░▒▓█▓▒░▒▓█▓▒▒▓███▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░             ░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░             ░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░
░▒▓███████▓▒░░▒▓████████▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░

Design Reference Transformer

Transform a complete design reference HTML file into a working Vibes app with TinyBase reactive data.


Core Principle

Preserve and adapt, don't interpret and recreate.

The design reference is source code to transform, not inspiration to interpret. When given a complete HTML file with styles, your job is to make minimal surgical changes to connect it to React/TinyBase—not to recreate it from your understanding of its aesthetic.


When to Use This Skill

Use this skill when:

  • User provides a design.html, mockup, or static prototype file
  • User says "match this design exactly" or "use this as a reference"
  • User wants their existing HTML converted to a Vibes app
  • A previous implementation didn't match the design reference

The Transformation is Mechanical

The conversion from design HTML to React/TinyBase is deterministic, not creative:

TransformationRuleExample
Attributesclass → classNameclass="btn" → className="btn"
Attributesfor → htmlForfor="email" → htmlFor="email"
Attributeskebab-case → camelCasestroke-width → strokeWidth
Self-closingAdd explicit close<input> → <input />
CommentsHTML → JSX<!-- x --> → {/* x */}
Inline stylesString → Objectstyle="color: red" → style={{ color: 'red' }}
Event handlersLowercase → camelCaseonclick → onClick

CSS requires NO changes. Copy the entire <style> block verbatim.


Workflow

Step 1: Read the Design Reference
bash
# Read the design file completely
Read design.html

Note the structure:

  • <style> block (copy verbatim)
  • HTML structure (preserve exactly)
  • Any vanilla JavaScript (will be replaced with React)
Step 2: Identify Dynamic Content

Ask: "What content comes from the database?"

Typical dynamic elements:

  • List items that repeat (.map())
  • Text that users enter (controlled inputs)
  • Counts, totals, timestamps
  • User-specific content

Everything else stays static.

Step 3: Create the React Component
jsx
function App() {
  // TinyBase hooks are globals — no imports, no initialization call needed
  const rowIds = useRowIds('items');
  const handleAdd = useAddRowCallback('items', (e) => ({
    text: '', type: 'item', created: Date.now()
  }));

  return (
    <>
      {/* CSS copied VERBATIM from design.html */}
      <style>{`
        /* Paste entire <style> block here unchanged */
      `}</style>

      {/* HTML structure preserved, only syntax converted */}
      {/* Dynamic content replaced with {expressions} */}
    </>
  );
}
Step 4: Handle Dark Mode Override (If Needed)

The Vibes template has dark mode support. If your design is light-only, add this CSS override:

css
/* Force light theme regardless of system preference */
html, body, #container, #container > div {
    background-color: var(--your-bg-color) !important;
}

Note: Avoid targeting [style*="position: fixed"] as this will style the VibesSwitch toggle button.

Step 4b: Scope CSS to Avoid VibesSwitch/VibesPanel Conflicts

The template includes a VibesSwitch toggle button and VibesPanel admin menu that sit outside your app container. Broad CSS selectors can accidentally style these components.

Watch for these problematic patterns:

ProblematicWhySafe Alternative
button { ... }Styles VibesSwitch toggle.app button { ... } or #container button { ... }
* { ... } (with colors/backgrounds)Cascades everywhereScope to specific containers
[style*="position: fixed"]Targets VibesSwitchTarget by class/ID instead
body > divMay match menu wrapperUse #container > div

If your design has global button/element styles:

  1. Wrap your app content in a container with a class: <div className="app">...</div>
  2. Scope broad rules: button { } → .app button { }
  3. Or use #container which is the template's app root

The template already protects components with:

css
button[aria-controls="hidden-menu"] { background: transparent !important; }
#hidden-menu { /* menu-specific variable resets */ }

But defense-in-depth is better—scope your CSS to avoid conflicts.

Step 5: Assemble and Test
bash
VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
bun "$VIBES_ROOT/scripts/assemble.js" app.jsx index.html

Open in browser and visually diff against the design reference. They should be pixel-identical except for dynamic content.


Show full SKILL.md (311 more words)Show less

Anti-Patterns (DO NOT DO THESE)

Anti-PatternWhy It's WrongCorrect Approach
Translate colors to OKLCHChanges the designUse exact hex values from reference
Restructure HTML "for React"Breaks layoutPreserve structure, only change syntax
"Improve" the CSSNot your jobCopy verbatim
Add your own classesIntroduces driftUse exact classes from reference
Interpret the "vibe"Creates divergenceBe literal, not interpretive
Skip vanilla JS analysisMiss functionalityUnderstand what it does, then React-ify

Transformation Checklist

Before writing code, verify:

  • Read the entire design.html file
  • Identified all <style> blocks (will copy verbatim)
  • Identified dynamic content (lists, inputs, user data)
  • Identified vanilla JS functionality (will convert to React)
  • Noted any custom fonts (add to imports if needed)
  • Checked for dark/light theme assumptions

During transformation:

  • CSS pasted unchanged (no "improvements")
  • HTML structure preserved exactly
  • Only syntax converted (class→className, etc.)
  • Dynamic content uses {expressions} and .map()
  • Vanilla JS replaced with React hooks and handlers
  • Dark mode override added if design is light-only

After assembly:

  • Visual comparison with design reference
  • All interactive elements work
  • Data persists on refresh
  • No console errors
  • VibesSwitch toggle (bottom-right) displays correctly with no background box
  • VibesPanel menu opens when toggle is clicked
  • Menu buttons are correctly styled (not inheriting app button styles)

Example: Static List → Dynamic List

Design HTML:

html
<ul class="item-list">
  <li class="item">First item</li>
  <li class="item">Second item</li>
</ul>

React with TinyBase:

jsx
const rowIds = useRowIds('items');

<ul className="item-list">
  {rowIds.map(id => (
    <ItemRow key={id} id={id} />
  ))}
</ul>

// Child component uses useCell for reactive per-row data
function ItemRow({ id }) {
  const text = useCell('items', id, 'text');
  return <li className="item">{text}</li>;
}

Note: Only the content changed. The classes, structure, and styling are identical.


Example: Static Form → Controlled Form

Design HTML:

html
<form>
  <input type="text" class="input" placeholder="Enter text...">
  <button class="btn">Submit</button>
</form>

React with TinyBase:

jsx
const [text, setText] = useState('');
const handleAdd = useAddRowCallback('items', () => ({
  text, type: 'item', created: Date.now()
}));

<form onSubmit={(e) => { e.preventDefault(); handleAdd(); setText(''); }}>
  <input
    type="text"
    className="input"
    placeholder="Enter text..."
    value={text}
    onChange={(e) => setText(e.target.value)}
  />
  <button type="submit" className="btn">Submit</button>
</form>

Note: Same structure, same classes, same placeholder. Only added React bindings.


Integration with Vibes Assembly

This skill produces an app.jsx that works with the standard Vibes assembly:

bash
# In the working directory
VIBES_ROOT="${CLAUDE_PLUGIN_ROOT:-$(dirname "$(dirname "${CLAUDE_SKILL_DIR}")")}"
bun "$VIBES_ROOT/scripts/assemble.js" app.jsx index.html

The assembly script:

  • Inserts your JSX into the Vibes template
  • Handles OIDC authentication wrapper (via Pocket ID)
  • Sets up import maps for React and TinyBase
  • Configures sync URLs if present (auth is automatic via Pocket ID)

What's Next?

After transforming a design reference, present these options using AskUserQuestion:

Question: "Design reference transformed! What's next?"
Header: "Next"
Options:
- Label: "Test locally"
  Description: "Open index.html in browser to verify it matches the design exactly"

- Label: "Deploy to Cloudflare (/cloudflare)"
  Description: "Push the app live to Cloudflare Workers"

- Label: "Make adjustments"
  Description: "Fine-tune specific elements while preserving the design"

- Label: "I'm done"
  Description: "Wrap up - files are saved locally"

© popmechanic, 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 skills/design of popmechanic/VibesOS.

Open the folder on GitHubat commit 5baf8a2

Compare with similar skills

Design 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.

Design compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Design this skillpopmechanic/VibesOS136—~2.5kAutomated safety check: NotesMIT
Web Artifacts Builderanthropics/skills180k40 repos~769Automated safety check: PassApache-2.0
React Doctormakeplane/plane61k12 repos~657Automated safety check: PassAGPL-3.0
React Router Developmentremix-run/react-router57k1 repos~1.5kAutomated safety check: PassMIT
React UI State PatternsChrisWiles/claude-code-showcase6.1k8 repos~1.6kAutomated safety check: PassNone
GSAP Core Animationgreensock/gsap-skills16k3 repos~3.7kAutomated safety check: PassMIT

Similar skills

  • Web Artifacts Builder

    anthropics/skills

    Official

    Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.

    180k GitHub starsUsed in 40 repos~769 tokens
    Frontend & DesignAuto-check passed
  • React Doctor

    makeplane/plane

    Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.

    61k GitHub starsUsed in 12 repos~657 tokens
    Frontend & DesignAuto-check passed
  • React Router Development

    remix-run/react-router

    Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.

    57k GitHub starsUsed in 1 repo~1.5k tokens
    Frontend & DesignAuto-check passed
  • React UI State Patterns

    ChrisWiles/claude-code-showcase

    Sets patterns for React interfaces: when to show loading spinners or skeletons, how to surface errors, how to disable buttons during async work and how to handle empty lists.

    6.1k GitHub starsUsed in 8 repos~1.6k tokens
    Frontend & DesignAuto-check passed
  • GSAP Core Animation

    greensock/gsap-skills

    Covers the GSAP core API for tweens, easing, staggers, defaults and matchMedia, and when to choose GSAP over CSS animations or other JavaScript animation libraries.

    16k GitHub starsUsed in 3 repos~3.7k tokens
    Frontend & DesignAuto-check passed
  • Builds single-file interactive HTML prototypes rendered with the real LobeHub UI components and written as production-style React, so they can later be split into files.

    83k GitHub stars~1.6k tokensUpdated today
    Frontend & DesignAuto-check passed

More from popmechanic/VibesOS

  • Factory

    popmechanic/VibesOS

    Self-contained SaaS pipeline — invoke directly, do not decompose.

    136 GitHub stars~3.1k tokensUpdated 2 mo ago
    Auto-check: notes
  • Vibes

    popmechanic/VibesOS

    Self-contained app generator — invoke this skill directly, do not decompose into sub-steps.

    136 GitHub stars~2.6k tokensUpdated 2 mo ago
    Auto-check: notes
  • Cloudflare

    popmechanic/VibesOS

    Self-contained deploy automation — invoke directly, do not decompose.

    136 GitHub stars~1.2k tokensUpdated 2 mo ago
    Auto-check: notes
  • Launch

    popmechanic/VibesOS

    Self-contained SaaS pipeline — invoke directly, do not decompose.

    136 GitHub stars~3k tokensUpdated 2 mo ago
    Auto-check: notes
  • Riff

    popmechanic/VibesOS

    Self-contained parallel generator — invoke directly, do not decompose.

    136 GitHub stars~2k tokensUpdated 2 mo ago
    Auto-check: notes
  • Vibes Brainstorm

    popmechanic/VibesOS

    Lightweight requirements gathering before app generation. An agent skill from popmechanic/VibesOS.

    136 GitHub stars~2.2k tokensUpdated 2 mo ago
    Auto-check passed

Works with

Questions about Design

What does Design do?

Self-contained design transformer — invoke directly, do not decompose. Design is an agent skill from popmechanic/VibesOS. Self-contained design transformer — invoke directly, do not decompose.

When should I use Design?

Design fits situations like: user provides a design.html; static prototype to match exactly.

How do I install Design in Claude Code?

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

How do I install Design in Codex?

Run `npx skills add popmechanic/VibesOS --skill design -a codex`. Or copy the skill folder (skills/design in popmechanic/VibesOS) into .agents/skills/design in your project. Codex loads it when a task matches its description.

Can I use Design 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 popmechanic/VibesOS --skill design -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, .gemini/skills/design, .github/skills/design and .opencode/skills/design in your project.

What does Design need to run?

Going by SKILL.md and its folder, Design needs the command-line tools its instructions call (bun). Its frontmatter pre-approves these tools: Read, Write, Bash, AskUserQuestion.

Does Design access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Design safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Design use?

Design is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Design use?

About 2.5k tokens (SKILL.md is roughly 9.9k 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 Design?

Skills that share tags, products or a category with Design: Web Artifacts Builder (anthropics/skills, 180k stars), React Doctor (makeplane/plane, 61k stars), React Router Development (remix-run/react-router, 57k stars) and React UI State Patterns (ChrisWiles/claude-code-showcase, 6.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Design?

popmechanic (a GitHub user) maintains it in popmechanic/VibesOS, which has 136 GitHub stars. The repository holds 7 skills in this directory. The repository was last updated on July 27, 2026.

Source: popmechanic/VibesOS on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.