Agent skill

Monochrome

by vaneenige in vaneenige/monochrome-ui

Build accessible UI with monochrome, the framework-agnostic UI library for agents.

MITAuto-check passedFrontend & Design

Install Monochrome

skills CLI
$ npx skills add vaneenige/monochrome-ui --skill monochrome -a claude-code

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

GitHub CLI
$ gh skill install vaneenige/monochrome-ui monochrome --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/vaneenige/monochrome-ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/monochrome .claude/skills/monochrome && 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
monochrome
GitHub stars
132
Token cost
~2.3k tokens
SKILL.md length
1,187 words
Files
1
Skills in repo
1
Repo updated
First seen
Licence
MIT

At a glance

Build accessible UI with monochrome, the framework-agnostic UI library for agents.

  • Works in 8 steps: Ids wire everything. mct:: is a trigger, → Link both ways. Trigger aria-controls… → Triggers are . Only tooltip triggers → …
  • A project depends on monochrome
  • SKILL.md covers Hard rules, Which component, Workflow and Framework notes, plus 2 more sections
  • Calls npx; reaches cdn.jsdelivr.net

What it does

Monochrome is an agent skill from vaneenige/monochrome-ui. Build accessible UI with monochrome, the framework-agnostic UI library for agents. Use whenever a project depends on monochrome or has ids starting with mct:, mcc:, or mcr:, and whenever you write or fix an accordion, collapsible, dialog or modal, dropdown or context menu, menubar, popover, tabs, or tooltip in HTML, React, or Vue. Also use when asked to check, debug, or style such markup.

Its SKILL.md is about 2.3k 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, covering Accessibility and Design systems. It works with React, Vue.js and TypeScript. The repository describes itself as: Accessible UI component library. Best performance out of the box. HTML first, React and Vue supported. The licence is MIT.

When your agent uses it

  • A project depends on monochrome
  • Has ids starting with mct:
  • Whenever you write
  • Fix an accordion

Example prompts

  • “/monochrome”

Requirements

  • Node.js

Workflow steps

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

  1. Ids wire everything. mct:: is a trigger,
  2. Link both ways. Trigger aria-controls names the content id;
  3. Triggers are . Only tooltip triggers
  4. Never write JS to open, close, select, or toggle. No
  5. State lives in ARIA. Author the initial values
  6. monochrome ships no CSS; style with attribute selectors
  7. One import family. import "monochrome" (or the CDN script)
  8. Deliberate behaviour is not a bug. Each spec ends with Design

What it can do on your machine

Read from SKILL.md and the folder at commit 1fffdaa. 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:

    • npx

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

  • Network

    Hosts in commands or code, which the agent is likely to contact:

    • cdn.jsdelivr.net

    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

Monochrome loads about 2.3k tokens when it runs. Until then it costs about 101 tokens; SKILL.md has 1,187 words of instructions outside code blocks.

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

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 vaneenige/monochrome-ui at commit 1fffdaa, republished under its MIT licence (© vaneenige). 1,187 words, ~2,264 tokens.

Download SKILL.mdSave it as .claude/skills/monochrome/SKILL.md (or your agent's skills folder).
name
monochrome
description
Build accessible UI with monochrome, the framework-agnostic UI library for agents. Use whenever a project depends on monochrome or has ids starting with mct:, mcc:, or mcr:, and whenever you write or fix an accordion, collapsible, dialog or modal, dropdown or context menu, menubar, popover, tabs, or tooltip in HTML, React, or Vue. Also use when asked to check, debug, or style such markup.

monochrome

monochrome makes correctly marked-up HTML interactive. Import it once; every component on the page works, including markup added later (framework renders, innerHTML, streamed or generated HTML). There is no init call, no state object, and no event wiring. The DOM is the state: the core reads and writes ARIA attributes.

Components: Accordion, Collapsible, Dialog, Menu, Menubar, Popover, Tabs, Tooltip. Optional: Router.

The spec for the installed version is in node_modules/monochrome/spec/, one file per component plus choosing, conventions, styling, and router; spec/<topic>.md below means that folder. Without the package installed, npx monochrome docs <topic> prints the same pages.

Hard rules

  1. Ids wire everything. mct:<kind>:<id> is a trigger, mcc:<kind>:<id> its content, mcr:<kind>:<id> a root. Every id is unique on the page.
  2. Link both ways. Trigger aria-controls names the content id; content aria-labelledby names the trigger id (a dialog names its title). Accordion panels are role="region"; collapsible content links back only as a role="region". Tooltip triggers use aria-describedby. One id per attribute.
  3. Triggers are <button type="button">. Only tooltip triggers may be any focusable element.
  4. Never write JS to open, close, select, or toggle. No showModal(), no popovertarget, no useState for open state, no handler that flips hidden or aria-*. The core does it. Handlers for what an item does (onClick on a menu item) are fine.
  5. State lives in ARIA. Author the initial values (aria-expanded="false" plus hidden, aria-selected, aria-checked), then let the core own them. Disable with aria-disabled="true", never disabled (the parts' disabled prop renders aria-disabled for you).
  6. monochrome ships no CSS; style with attribute selectors: [aria-expanded="true"], [aria-selected="true"], [aria-checked="true"], [data-mc-highlighted], :popover-open, dialog[open]. Menus, popovers, and tooltips need the Required CSS from their spec's Styling section, copied as it is: it places them at their trigger from the variables and the [data-mc-y] / [data-mc-x] side the core writes. Don't write placement of your own. Pick a side and alignment with data-mc-side (top, right, bottom, left) and data-mc-align (start, center, end) on the content.
  7. One import family. import "monochrome" (or the CDN script) for plain pages; in apps, the component files add writes (each imports its own monochrome/<component> module). Never both: listeners would register twice. When React or Vue only renders HTML on the server (a static site, no client bundle of the component files), their imports never reach the browser: load the core once from the script every page runs, and drop the core import (and "use client") from the component files (spec/conventions.md, Server rendering).
  8. Deliberate behaviour is not a bug. Each spec ends with Design choices: tabs select on Enter, not on focus; arrows skip disabled items; tooltips have no delay and never show on touch; menus open on press. Don't add code to change them.

Which component

NeedUse
List of actions or options, checkable items, submenusMenu
Row of menus or dropdown navigationMenubar
Interactive panel next to a button (form, share, picker)Popover
Modal task or confirmationDialog
Short non-interactive hint on hover and focusTooltip
One show/hide regionCollapsible
Sections where only one is openAccordion
Switch between peer panelsTabs

Details: spec/choosing.md.

Workflow

  1. Start from the reference, not from memory. npx monochrome add <component> installs monochrome at its own version, saves settings in monochrome.json, and prints the markup to start from (--json prints it all as JSON). In React and Vue it writes the parts instead (src/components/ui/, or components/ui/ without a src/ folder). For markup, add the line it prints that loads the core.
  2. Place it where it belongs. Keep every role and ARIA link; change text, and rename id suffixes together so each id stays unique on the page (the parts make ids for you). The contract: spec/<component>.md.
  3. Style it. For a menu, menubar, popover, or tooltip, first copy the Required CSS into the project's global CSS (rule 6). Then style every state the spec's Styling section lists (the selected tab, the highlighted and checked menu items, surfaces) the way the project styles everything else: its own CSS, Tailwind's aria-* and data-* variants, StyleX, or its design system. The spec's Example shows one way; adapt it. Patterns: spec/styling.md.
  4. Verify the rendered HTML (what the server returns, or the DOM a client-rendered app builds), not the component source: go through the checklist in spec/conventions.md (Verify), then the component's Contract table, Common mistakes, and Design choices.
  5. Fix every mismatch before you call it done.

New project: npx monochrome init installs the package, saves the settings add uses, and adds a short block to AGENTS.md; it works without a package.json too (pages then load the core from a CDN). After an upgrade, apply the steps from npx monochrome changelog --from <old version>, then verify again.

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

Framework notes

  • HTML, server templates, htmx: add prints the markup and the tag that loads the core once per page: <script type="module" src="https://cdn.jsdelivr.net/npm/monochrome/dist/index.js"></script>.
  • React 19: add menu writes src/components/ui/menu.tsx (.jsx without a tsconfig); import { Menu } from there (there is no monochrome/react). Parts render the spec's markup with useId ids. default* props are initial values; there is no controlled open prop. The files are "use client"; your component that passes handlers such as onClick needs it too (add prepends it in Next.js). Shared rules: spec/conventions.md (Parts).
  • Vue 3.5: add menu writes src/components/ui/menu/, one single-file component per part and an index.ts; import { Menu } from there (there is no monochrome/vue) and write <Menu.Root> in templates. Same markup, ids, and initial values as the React parts; props take the template's kebab-case (default-checked, keep-open). Shared rules: spec/conventions.md (Parts).
  • Other frameworks (Svelte, Astro, Solid): add prints the markup (--framework html, the default without React or Vue); write it in templates and import "monochrome" once in the app entry. React below 19 or Vue below 3.5: the same, with --framework html.
  • SSR, streaming, generated HTML: nothing to hydrate or re-run. Markup is live as soon as it is in the document.
  • Reacting to state: observe the attribute with a MutationObserver; a trigger's own click handler runs before the core and sees the old state.

Router quick rules

import "monochrome/router". Wrap each page in data-mc-area="root"; mark sub-regions with data-mc-area="name" and a data-mc-key (same key on both pages keeps the region). Same-origin links swap in place; rel="external", target="_blank", download, cross-origin links, and forms are left alone. Re-run page scripts on addEventListener("mc:navigate", ...). Details: spec/router.md.

Common traps

  • Missing role="button" on a standalone menu trigger, or role="menuitem" on submenu and menubar triggers.
  • Menu items not wrapped as li role="none" with the item first.
  • A menu radio set or labelled section outside a group: wrap it in li role="none" > ul role="group" named by its label (Menu.Group label="…" with the parts). A submenu wrapper is Menu.Sub.
  • A menubar needs exactly one item with tabindex="0".
  • Tabs must be direct children of role="tablist", exactly one aria-selected="true".
  • Accordion items must be direct children of the mcr:accordion: root, heading first, button first inside it.
  • popover="manual" (not auto) on menu, popover, and tooltip content; role="dialog" on popover content; a <dialog> element for dialogs.
  • display on closed content overrides hidden and the popover closed state; scope it to the open state.
  • Dark mode: the page sets color-scheme (:root or .dark); monochrome never does, so without it surfaces stay light.

© vaneenige, 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/monochrome of vaneenige/monochrome-ui.

Open the folder on GitHubat commit 1fffdaa

Compare with similar skills

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

Monochrome compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Monochrome this skillvaneenige/monochrome-ui132—~2.3kAutomated safety check: PassMIT
UI/UX Design System AdvisorGalaxy-Dawn/claude-scholar5.7k1 repos~1.1kAutomated safety check: PassMIT
Connect Component To Figmadequelabs/cauldron129—~2kAutomated safety check: PassMPL-2.0
BeeqEndava/BEEQ163—~5.6kAutomated safety check: PassApache-2.0
Component ForgeEliasOulkadi/shokunin114—~3.6kAutomated safety check: NotesMIT
Components BuildAsymmetric-al/core381—~2.1kAutomated safety check: PassMIT

Similar skills

  • 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
  • Connect Component To Figma

    dequelabs/cauldron

    Add a Figma Code Connect (.figma.tsx) file for a Cauldron React component.

    129 GitHub stars~2k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Beeq

    Endava/BEEQ

    Builds, styles, and reviews UI with BEEQ, Endava's web-component design system.

    163 GitHub stars~5.6k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Component Forge

    EliasOulkadi/shokunin

    Build production-grade components for React, Vue 3, and Svelte 5 with all states (loading, empty, error, success, idle), TypeScript strict, WCAG 2.2 accessibility, server components (RSC), and…

    114 GitHub stars~3.6k tokensUpdated 5 days ago
    Frontend & DesignAuto-check: notes
  • Components Build

    Asymmetric-al/core

    Build modern, composable, and accessible React UI components following the components.build specification.

    381 GitHub stars~2.1k tokensUpdated today
    Frontend & DesignAuto-check passed
  • Light Frontend Design

    Light0305/Light-skills

    Light 按需工程技能·前端设计:把模糊的「做个好看的界面」落成能跑的 React/Tailwind/shadcn 代码 + 设计决策说明—— 有视觉记忆点(signature element)、风格自洽(design tokens 一致)、适配场景(学术海报/数据大屏/管理后台/移动端/营销 landing 信息密度各不同)、反「一眼 AI」(紫蓝渐变/Inter/16px 圆角/巨型…

    640 GitHub stars~3.1k tokensUpdated 3 mo ago
    Frontend & DesignAuto-check passed

Questions about Monochrome

What does Monochrome do?

Build accessible UI with monochrome, the framework-agnostic UI library for agents. Monochrome is an agent skill from vaneenige/monochrome-ui. Build accessible UI with monochrome, the framework-agnostic UI library for agents.

When should I use Monochrome?

Monochrome fits situations like: A project depends on monochrome; has ids starting with mct:; whenever you write; fix an accordion.

How do I install Monochrome in Claude Code?

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

How do I install Monochrome in Codex?

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

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

What does Monochrome need to run?

Going by SKILL.md and its folder, Monochrome needs the command-line tools its instructions call (npx). Our summary lists: Node.js.

Does Monochrome access the network?

SKILL.md names 1 domain. In commands or code: cdn.jsdelivr.net; the agent is likely to contact it when it follows the instructions. This is read from the text; nothing was executed.

Is Monochrome 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 Monochrome use?

Monochrome 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 Monochrome use?

About 2.3k tokens (SKILL.md is roughly 9.1k 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 Monochrome?

Skills that share tags, products or a category with Monochrome: UI/UX Design System Advisor (Galaxy-Dawn/claude-scholar, 5.7k stars), Connect Component To Figma (dequelabs/cauldron, 129 stars), Beeq (Endava/BEEQ, 163 stars) and Component Forge (EliasOulkadi/shokunin, 114 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Monochrome?

vaneenige (a GitHub user) maintains it in vaneenige/monochrome-ui, which has 132 GitHub stars. The repository was last updated on October 7, 2026.

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