Agent skill

UI Dev

by elirantutia in elirantutia/vibeyard

This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI…

MITAuto-check passedFrontend & Design

Install UI Dev

skills CLI
$ npx skills add elirantutia/vibeyard --skill ui-dev -a claude-code

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

GitHub CLI
$ gh skill install elirantutia/vibeyard ui-dev --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/elirantutia/vibeyard.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude/skills/ui-dev .claude/skills/ui-dev && 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
ui-dev
GitHub stars
1.4k
Token cost
~2.4k tokens
SKILL.md length
711 words
Files
1
Skills in repo
2
Repo updated
First seen
Licence
MIT

At a glance

This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI…

  • The user asks to add a button
  • SKILL.md covers Custom Dropdown / Select, Modals, Alert Banners and Buttons, plus 5 more sections
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md
  • Update the sidebar

What it does

UI Dev is an agent skill from elirantutia/vibeyard. This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI features, or touching any file in src/renderer/. Use this skill when the user asks to "add a button", "create a modal", "add a dropdown", "update the sidebar", "style a component", "add a new UI feature", or any renderer/frontend work.

Its SKILL.md is about 2.4k 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 TypeScript. The repository describes itself as: The IDE built for AI coding agents. The licence is MIT.

When your agent uses it

  • The user asks to add a button
  • Update the sidebar
  • Style a component
  • Add a new UI feature

Example prompts

  • “add a button”
  • “create a modal”
  • “add a dropdown”
  • “/ui-dev”

What it can do on your machine

Read from SKILL.md and the folder at commit 19bc19f. 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

    No scripts in the folder and no shell commands in SKILL.md (its code samples are typescript and css).

    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

UI Dev loads about 2.4k tokens when it runs. Until then it costs about 108 tokens; SKILL.md has 711 words of instructions outside code blocks.

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

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 elirantutia/vibeyard at commit 19bc19f, republished under its MIT licence (© elirantutia). 711 words, ~2,350 tokens.

Download SKILL.mdSave it as .claude/skills/ui-dev/SKILL.md (or your agent's skills folder).
name
ui-dev
description
This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI features, or touching any file in src/renderer/. Use this skill when the user asks to "add a button", "create a modal", "add a dropdown", "update the sidebar", "style a component", "add a new UI feature", or any renderer/frontend work.

UI Development Guide

This project uses vanilla TypeScript DOM manipulation — no framework. All UI lives in src/renderer/. Follow the patterns and reuse the components documented below.

Custom Dropdown / Select

Never use native <select>. Always use the custom select component:

typescript
import { createCustomSelect } from './components/custom-select';

const select = createCustomSelect('my-select', [
  { value: 'a', label: 'Option A' },
  { value: 'b', label: 'Option B' },
  { value: 'c', label: 'Disabled', disabled: true },
], 'a'); // default value

// select.getValue() — get current value
// select.destroy() — cleanup
  • File: src/renderer/components/custom-select.ts
  • CSS classes: .custom-select, .custom-select-trigger, .custom-select-dropdown, .custom-select-item
  • Supports keyboard navigation (Arrow keys, Enter, Escape, Tab)

Modals

Use showModal() for generic modals with form fields:

typescript
import { showModal, closeModal, setModalError } from './components/modal';

showModal('My Title', [
  { id: 'name', label: 'Name', type: 'text', placeholder: 'Enter name' },
  { id: 'option', label: 'Option', type: 'select', options: [...] },
  { id: 'enabled', label: 'Enable feature', type: 'checkbox' },
], (values) => {
  // values is Record<string, string>
  if (!values.name) {
    setModalError('name', 'Name is required');
    return;
  }
  // ... handle confirm
  closeModal();
});
  • File: src/renderer/components/modal.ts
  • Exports: showModal(), closeModal(), setModalError()
  • Supports field types: text, checkbox, select (uses custom select internally)
  • Supports field buttons (e.g., a "Browse" button next to a text input)
  • Keyboard: Enter to confirm, Escape to cancel

For specialized modals (complex layout, multi-pane, unique behavior), create a dedicated file in src/renderer/components/ following the existing pattern (e.g., preferences-modal.ts, usage-modal.ts).

Alert Banners

For in-context alerts shown above the terminal:

typescript
import { showAlertBanner, removeAlertBanner } from './components/alert-banner';

showAlertBanner({
  icon: '⚠️',
  message: 'Something happened',
  ctaLabel: 'Fix it',
  onCta: () => { /* handle action */ },
  dismissLabel: 'Dismiss',
  onDismiss: () => { removeAlertBanner(); },
});
  • File: src/renderer/components/alert-banner.ts
  • CSS classes: .insight-alert, .insight-alert-icon, .insight-alert-message, .insight-alert-cta, .insight-alert-dismiss
  • Use .insight-alert-info variant for informational (blue) alerts

Buttons

Use existing CSS classes — do not create new button styles:

ClassUse for
.btn-primaryCanonical primary/CTA button (accent fill, --accent-dim hover, --radius-md). Use for every solid-accent action. Defined in base.css.
.btn-secondaryCanonical secondary button (bordered, neutral --bg-primary fill, --bg-hover hover, same --radius-md + size as primary, normal weight). Use for Cancel and every neutral action. Add .danger for destructive (red). Defined in base.css.
.btn-sm / .btn-xsCompact size modifiers — pair with .btn-primary or .btn-secondary. btn-sm for dense card/toolbar rows; btn-xs for tight github rows. Single-class so a context's geometry class still wins.
.icon-btnSmall 26×26px icon buttons (tab bar, sidebar actions)
.modal-field-btnInline button next to a modal field (e.g., "Browse")
.config-section-add-btnAdd button in config sections

A modal footer is .btn-secondary (Cancel) next to .btn-primary (Confirm) — they share size and corner radius so the pair lines up.

For split buttons (main + chevron), add .btn-primary/.btn-secondary plus the context's geometry-only class (e.g. .widget-github-fix-main, .team-card-chat-dropdown) which is defined later in source order so it correctly overrides the corner-radius/padding without redefining the fill. The same applies to structural-only classes kept on consolidated buttons (.team-card-btn, .widget-team-card-btn, .project-tab-toolbar-btn for its .active state, .share-btn for its .hidden toggle).

Badges

ClassUse for
.scope-badge.user / .scope-badge.projectScope indicators
.readiness-badgeStatus badges
.git-file-badgeGit status letter indicators
.file-viewer-area-badgeGit area badges (staged, working, etc.)

CSS Theming

Never hardcode colors. Always use CSS variables from src/renderer/styles/base.css:

css
/* Backgrounds */
var(--bg-primary)    /* #000000 — main background */
var(--bg-secondary)  /* #0a0a0a — secondary background */
var(--bg-tertiary)   /* #1a1a1a — tertiary / elevated surfaces */
var(--bg-hover)      /* #222222 — hover state */

/* Text */
var(--text-primary)  /* #e0e0e0 */
var(--text-secondary) /* #a0a0b0 */
var(--text-muted)    /* #606070 */

/* Accents & borders */
var(--accent)        /* #e94560 — primary accent (red) */
var(--accent-dim)    /* #c73e55 */
var(--border)        /* #333333 */
var(--bookmark)      /* #e8a317 */

Semantic status colors (these are not CSS variables — use the hex values directly):

  • Working/Active: var(--accent) with pulse animation
  • Waiting: #f4b400 (yellow)
  • Completed/Success: #34a853 (green)
  • Input: #e67e22 (orange)
  • Info: #4285f4 (blue)
  • Idle: var(--text-muted)
Show full SKILL.md (309 more words)Show less

Styling Conventions

  • Class naming: .component-child pattern (e.g., .modal-field, .tab-status)
  • State modifiers: .active, .disabled, .hidden, .focused (e.g., .tab-item.active)
  • Border radius: 4px standard, 2-3px small, 8px rounded/pills, 50% circular
  • Transitions: 0.15s for hover/focus states
  • Font: System sans-serif for UI, monospace (JetBrains Mono, Fira Code, etc.) for code/terminal
  • Font sizes: 9-13px for UI elements, 13px base
  • Scrollbars: Use webkit custom scrollbar (6px width, var(--border) thumb, 3px radius)

Component Architecture Patterns

Factory functions

Components use factory functions that return an instance object:

typescript
export function createMyComponent(id: string, options: Options): MyComponentInstance {
  const el = document.createElement('div');
  // ... build DOM ...
  return {
    element: el,
    getValue() { /* ... */ },
    destroy() { /* cleanup listeners, remove DOM */ },
  };
}
State subscriptions

Use appState event emitter for reactive updates:

typescript
import { appState } from '../state';
appState.on('session-changed', (sessionId) => { /* update UI */ });
Cleanup

Always provide a destroy() method that removes event listeners and DOM nodes. This prevents memory leaks when sessions/tabs are closed.

DOM creation
  • Prefer document.createElement() + property assignment over innerHTML
  • When using innerHTML, always escape user content with esc() from src/renderer/components/dom-utils.ts
  • Use classList.toggle() / classList.add() / classList.remove() for conditional classes
  • Use element.dataset.* for data attributes
Text selection preservation

Components that re-render periodically (timers, event-driven updates) must check for active text selection before wiping the DOM. Destroying DOM nodes while the user is selecting text clears their selection. Guard re-renders like this:

typescript
const sel = window.getSelection();
if (sel && sel.rangeCount > 0 && !sel.isCollapsed && container.contains(sel.anchorNode)) {
  return; // skip render — user is selecting text
}

Also ensure clickable containers that hold selectable text use stopPropagation() on the text element to prevent click-to-select from triggering the parent's click handler, and set user-select: text; cursor: text; in CSS.

CSS File Organization

Add styles to the appropriate existing CSS file — do not create new CSS files unless introducing a wholly new component area:

FileContents
styles/base.cssCSS variables, resets, global styles
styles/modals.cssModal, custom select, config sections, path autocomplete
styles/tabs.cssTab bar, icon buttons, context menus
styles/sidebar.cssSidebar, project list, update banner
styles/terminal.cssTerminal pane, status bar, exit overlay
styles/alerts.cssAlert banners, insight alerts, readiness badges
styles/search.cssSearch bar, toggle buttons, match highlighting
styles/dialogs.cssHelp dialog
styles/preferences.cssPreferences modal, sections
styles/session-history.cssSession history list
styles/file-viewer.cssFile viewer, diff display
styles/git-panel.cssGit panel, worktree selector
styles/mcp-inspector.cssMCP inspector pane
styles/session-inspector.cssSession inspector panel

© elirantutia, 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/ui-dev of elirantutia/vibeyard.

Open the folder on GitHubat commit 19bc19f

Compare with similar skills

UI Dev 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 Dev compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
UI Dev this skillelirantutia/vibeyard1.4k—~2.4kAutomated safety check: PassMIT
Web Artifacts Builderanthropics/skills180k41 repos~769Automated safety check: PassApache-2.0
Ink Tui Wizardnovuhq/novu40k—~1.9kAutomated safety check: PassMIT
Frontend Module Standardssiteboon/claudecodeui14k—~2.6kAutomated safety check: PassAGPL-3.0
Dify Component Writing Guidelanggenius/dify158k—~626Automated safety check: PassCustom licence
React Frontend Development Guidelinesdiet103/claude-code-infrastructure-showcase10k2 repos~2.9kAutomated 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 41 repos~769 tokens
    Frontend & DesignAuto-check passed
  • Ink Tui Wizard

    novuhq/novu

    Build terminal user interfaces (TUIs) using Ink (React for CLIs) and @inkjs/ui with a reactive, session-driven wizard pattern.

    40k GitHub stars~1.9k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Frontend Module Standards

    siteboon/claudecodeui

    Enforces one repository's React and TypeScript module layout for code under src/: source-root imports, feature barrels, deliberate exports and no deep imports.

    14k GitHub stars~2.6k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Use when implementing or refactoring React/TypeScript components and the task requires decisions about component ownership, feature boundaries, state, data…

    158k GitHub stars~626 tokensUpdated today
    Frontend & DesignAuto-check passed
  • React Frontend Development Guidelines

    diet103/claude-code-infrastructure-showcase

    Guidelines for React 18 and TypeScript apps covering Suspense data fetching, lazy loading, feature folders, MUI v7 styling, TanStack Router and performance.

    10k GitHub starsUsed in 2 repos~2.9k tokens
    Frontend & DesignAuto-check passed
  • Formik Form Patterns

    ChrisWiles/claude-code-showcase

    Shows how to build forms with Formik and Yup validation, including conditional rules, field helpers, GraphQL submission, edit forms and multi-step flows.

    6.1k GitHub starsUsed in 3 repos~2.1k tokens
    Frontend & DesignAuto-check passed

More from elirantutia/vibeyard

  • Add npm Dependency

    elirantutia/vibeyard

    This skill MUST be used whenever the task involves adding, installing, or upgrading an npm package/library/dependency in this project.

    1.4k GitHub stars~1.5k tokensUpdated 1 mo ago
    Auto-check passed

Works with

Questions about UI Dev

What does UI Dev do?

This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI…. UI Dev is an agent skill from elirantutia/vibeyard. This skill MUST be used whenever the task involves UI development, renderer code changes, adding or modifying components, creating modals or dialogs, working with CSS styles, building new UI features, or touching any file in src/renderer/.

When should I use UI Dev?

UI Dev fits situations like: the user asks to add a button; update the sidebar; style a component; add a new UI feature.

How do I install UI Dev in Claude Code?

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

How do I install UI Dev in Codex?

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

Can I use UI Dev 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 elirantutia/vibeyard --skill ui-dev -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/ui-dev, .gemini/skills/ui-dev, .github/skills/ui-dev and .opencode/skills/ui-dev in your project.

What does UI Dev need to run?

SKILL.md names no scripts, command-line tools or credentials: UI Dev is instructions for the agent only.

Does UI Dev 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 UI Dev 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 Dev use?

UI Dev 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 Dev use?

About 2.4k tokens (SKILL.md is roughly 9.4k 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 Dev?

Skills that share tags, products or a category with UI Dev: Web Artifacts Builder (anthropics/skills, 180k stars), Ink Tui Wizard (novuhq/novu, 40k stars), Frontend Module Standards (siteboon/claudecodeui, 14k stars) and Dify Component Writing Guide (langgenius/dify, 158k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains UI Dev?

elirantutia (a GitHub user) maintains it in elirantutia/vibeyard, which has 1,387 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on September 3, 2026.

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