Agent skill

Montage React

by wanteddev in wanteddev/montage-web

Guide for building UI with Montage (Wanted Design System) in React/Next.js projects.

MITAuto-check passedFrontend & Design

Install Montage React

skills CLI
$ npx skills add wanteddev/montage-web --skill montage-react -a claude-code

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

GitHub CLI
$ gh skill install wanteddev/montage-web montage-react --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/wanteddev/montage-web.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.claude-plugin/montage-web-guide/skills/montage-react .claude/skills/montage-react && 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
montage-react
GitHub stars
117
Token cost
~3.4k tokens
SKILL.md length
1,408 words
Files
1
Skills in repo
3
Repo updated
First seen
Licence
MIT

At a glance

Guide for building UI with Montage (Wanted Design System) in React/Next.js projects.

  • Works in 10 steps: Verify MCP Server Connection (Required,… → Gather Initial Information (Parallel… → Component Usage Principles → …
  • Component implementation
  • SKILL.md covers When to use, Instructions and Checklist
  • Instructions only: no scripts, shell commands, URLs or credentials in SKILL.md

What it does

Montage React is an agent skill from wanteddev/montage-web. Guide for building UI with Montage (Wanted Design System) in React/Next.js projects. Triggers on component implementation, page/screen creation, styling (sx, theme, design tokens), icons, and utility functions. Active in projects using @wanteddev/wds packages.

Its SKILL.md is about 3.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, covering Design tokens and Design systems. It works with React, Model Context Protocol and Next.js. The repository describes itself as: 🎨 Wanted Web Design System - Montage. The licence is MIT.

When your agent uses it

  • Component implementation
  • Page/screen creation
  • Utility functions

Example prompts

  • “/montage-react”

Workflow steps

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

  1. Verify MCP Server Connection (Required, Highest Priority)
  2. Gather Initial Information (Parallel Calls)
  3. Component Usage Principles
  4. Page/Screen Implementation Guide
  5. Styling Rules
  6. Icons
  7. Utility Functions
  8. Design Token Usage
  9. Dummy Layout Components (@wanteddev/wds-dummy)
  10. Brand Assets

What it can do on your machine

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

    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

Montage React loads about 3.4k tokens when it runs. Until then it costs about 69 tokens; SKILL.md has 1,408 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~69
When it runs · the whole SKILL.md, loaded when a task matches
~3.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 wanteddev/montage-web at commit c564409, republished under its MIT licence (© wanteddev). 1,408 words, ~3,391 tokens.

Download SKILL.mdSave it as .claude/skills/montage-react/SKILL.md (or your agent's skills folder).
name
montage-react
description
Guide for building UI with Montage (Wanted Design System) in React/Next.js projects. Triggers on component implementation, page/screen creation, styling (sx, theme, design tokens), icons, and utility functions. Active in projects using @wanteddev/wds packages.

montage-react

Skill that is automatically applied when developing components based on Wanted Design System (Montage) in React projects.

When to use

Apply this skill when any of the following conditions are met:

  • Working in a project that uses Montage packages such as @wanteddev/wds, @wanteddev/wds-icon, @wanteddev/wds-dummy, @wanteddev/wds-brand
  • Creating, modifying, or looking up UI components
  • Implementing pages or screens
  • Working on styling (sx prop, theme tokens, colors, typography)
  • Finding or using icons
  • Need a placeholder GNB / Footer / bottom tab bar for a demo or preview page
  • Need to render the Wanted brand logo
  • Implementing Figma designs as code
  • Asking questions about Montage / design system

Instructions

0. Verify MCP Server Connection (Required, Highest Priority)

Before using any MCP tools, always verify the montage-mcp-server connection first.

Call mcp__montage-mcp-server__health_check to check the connection status.

  • Tool not found (MCP server not connected): Inform the user and suggest running /mcp to connect montage-mcp-server.
  • Authentication error: Inform the user that login is required. Running /mcp will initiate the auth flow.
  • Other errors: Inform the user that the MCP server is unreachable and suggest retrying later.

If the connection check fails, do not proceed. Wait for the user's response.

1. Gather Initial Information (Parallel Calls)

Gather required information in parallel at the start. Avoid unnecessary sequential calls.

When setting up React.js or Next.js from scratch, use:

  • mcp__montage-mcp-server__getting_started

Always call in parallel:

  • mcp__montage-mcp-server__wds_coding_guidelines — coding guidelines
  • mcp__montage-mcp-server__list_components — available component list

Add in parallel when needed:

  • mcp__montage-mcp-server__list_tokens — when custom styling is required
  • mcp__montage-mcp-server__get_color_usage — when color application is needed
  • mcp__montage-mcp-server__list_icons — when icons are needed
  • mcp__montage-mcp-server__list_dummy_components — when a placeholder GNB / Footer / bottom tab bar is needed for a demo or preview
  • mcp__montage-mcp-server__list_brand_assets — when the Wanted brand logo (or other brand mark) is needed
2. Component Usage Principles
2.1 Always Look Up Specs Before Use

When using Montage components, never guess — always look up the detailed specs.

mcp__montage-mcp-server__get_component({ componentName: "ComponentName" })

Important: Looking up the parent component instead of a sub-component gives you the full composition pattern (Anatomy) and all APIs at once.

  • For Modal: get_component({ componentName: "Modal" }) — includes ModalContainer, ModalNavigation, etc.
  • For Card: get_component({ componentName: "Card" }) — includes CardThumbnail, CardContent, etc.
  • For Tab: get_component({ componentName: "Tab" }) — includes TabList, TabListItem, TabPanel, etc.

When unsure which Typography variant to use, call get_component({ componentName: "Typography" }) to check the size table for each variant.

2.2 Prefer Montage Components
  1. Check Montage before implementing: Before creating a new component, check if an identical or similar one exists in Montage
  2. Extend based on Montage: Even when customization is needed, extend from Montage components
  3. Props first, sx second: Use props provided by the component (size, color, variant, etc.) first; only use sx when props are insufficient
3. Page/Screen Implementation Guide

Follow these patterns for vibe design or page implementation requests.

3.1 Page Layout Structure

Basic page skeleton:

tsx
import { Box, FlexBox, containerStyle } from '@wanteddev/wds';

<FlexBox flexDirection="column" sx={{ minHeight: '100vh' }}>
  <Box as="header" sx={containerStyle(true)}>
    ...
  </Box>
  <Box as="main" sx={containerStyle(true)}>
    ...
  </Box>
  <Box as="footer" sx={containerStyle(true)}>
    ...
  </Box>
</FlexBox>;

For containerStyle details, use get_utility_function("containerStyle").

3.2 Layout Component Selection Guide
PurposeComponent
One-directional layout (row/column)FlexBox
12-column grid layoutGrid + GridItem
Page containercontainerStyle() utility
General wrapper/stylingBox
3.3 Spacing Guide

When implementing a Figma design directly, ignore this guide and use the exact spacing values defined in Figma.

Otherwise (vibe design or freeform composition), do not use spacing tokens. Use px values directly instead.

  • Default gap between components: gap="12px" or gap="16px"
  • Gap between sections: gap="24px" ~ gap="32px"
  • Page-level section gap: gap="40px" ~ gap="48px"
  • Use FlexBox's gap prop or specify padding, margin in px via sx
3.4 Responsive Implementation Strategy

Three methods are available. Pick based on what's changing:

  • Only component props change → responsive props (sm={{ size: "large" }})
  • Custom CSS changes → respondTo / respondDown utilities
  • Rendering itself changes → useMediaQuery hook

Use mobile-first sizing, then override with sm, md, lg, xl. Typically only sm breakpoint is used.

3.5 UI Implementation Notes
  • TextButton, IconButton (variant background, normal), ListCell, RadioGroupItem, Checkbox, AvatarButton, ToggleIcon have interaction areas larger than their visual bounds — give slightly more spacing room.
  • When using ScrollArea with border-radius, add [data-role='scroll-area-bar-wrapper'] { padding-block: ${radius}; } to avoid unnatural scrollbar.
  • Don't render too much UI in a single file. Split into smaller components appropriately.
4. Styling Rules
4.1 When to Separate style.ts
  • Inline (1-3 lines): Write directly in sx prop
  • Separate style.ts (4+ lines): Extract to a separate file

When using a theme function in the sx prop, the theme is injected automatically. No need to pass it manually like wrapperStyle(theme).

4.2 Conditional Styles
tsx
// style.ts
export const buttonStyle = (isActive: boolean) => (theme: Theme) => css`
  color: ${isActive
    ? theme.semantic.primary.normal
    : theme.semantic.label.alternative};
`;

// index.tsx
<Box sx={buttonStyle(isActive)} />;
5. Icons

When icons are needed, check the Montage icon library first via mcp__montage-mcp-server__list_icons. Always prefer Montage icons over creating new ones.

6. Utility Functions

Use utility functions provided by Montage. Look up available utilities via mcp__montage-mcp-server__list_utility_functions, and get detailed usage with mcp__montage-mcp-server__get_utility_function.

Show full SKILL.md (692 more words)Show less
7. Design Token Usage

Use Montage design tokens instead of hardcoded values. Look up available tokens via mcp__montage-mcp-server__list_tokens.

  • Never use CSS variable (var(--semantic-...)) directly. Always access colors through the theme callback (e.g., sx={theme => ({ color: theme.semantic.label.normal })}). CSS variable names are internal implementation details and may change without notice.

  • Colors: use semantic color tokens instead of #RRGGBB (fall back to atomic colors if not possible). Use get_color_usage to look up which token to use for a given purpose.

  • Typography: use the Typography component or typographyStyle utility. Use get_component({ componentName: "Typography" }) to look up the variant/size table.

  • Shadows: use theme.semantic.elevation.shadow.normal.*

  • Opacity: must use addOpacity utility + theme.opacity[N]. Theme color values are CSS variables (e.g. var(--semantic-primary-normal)), so appending hex alpha strings directly will NOT work. Available opacity keys: 0, 5, 8, 12, 16, 22, 28, 35, 43, 52, 61, 74, 88, 97, 100.

    ts
    // use addOpacity utility
    import { addOpacity } from '@wanteddev/wds';
    
    import type { Theme } from '@wanteddev/wds';
    
    const wrapperStyle = (theme: Theme) => css`
      background-color: addOpacity(
        theme.semantic.primary.normal,
        theme.opacity[5]
      );
      border: 1px solid
        ${addOpacity(theme.semantic.primary.normal, theme.opacity[22])};
    `;

    When implementing a Figma design:

    • If Figma specifies an opacity value that does not match any theme.opacity[N] key, use the raw number directly (e.g., opacity: 0.07) instead of a token.

    • If the Figma design renders the opacity as a colored overlay layer (not fading the element itself), implement it via ::before / ::after pseudo-element so child content stays fully opaque. When the parent has border-radius, the pseudo-element must also set borderRadius: 'inherit', otherwise the overlay will overflow the rounded corners.

      ts
      // style.ts
      import { css } from '@wanteddev/wds';
      
      import type { Theme } from '@wanteddev/wds';
      
      export const overlayStyle = (theme: Theme) => css`
        position: relative;
        border-radius: 12px;
      
        &::before {
          content: '';
          position: absolute;
          inset: 0;
          border-radius: inherit;
          background-color: ${theme.semantic.fill.normal};
          opacity: ${theme.opacity[8]};
        }
      `;
      tsx
      // index.tsx
      import { overlayStyle } from './style';
      
      <Box sx={overlayStyle} />;
  • Do not use spacing tokens. Use px values directly.

8. Dummy Layout Components (@wanteddev/wds-dummy)

The @wanteddev/wds-dummy package provides presentational-only reference scaffolds (NavBar, Footer, BottomTabBar) that mirror the wanted.co.kr layout.

  • Use for: demo pages, sandboxes, storybook entries, visual previews — anywhere a realistic-looking GNB / Footer / mobile tab bar is needed without wiring real behavior.
  • Do NOT use as-is in production. They take no behavior props (no onClick, no routing, no state). For real product code, copy the structure and rebuild it against your own data, links, and handlers using primitives from @wanteddev/wds.
  • All three are forwardRef components and accept a standard sx prop. BottomTabBar is intended for viewports below the sm breakpoint — wrap it accordingly if you also render NavBar on the same page.
  • Look up the full list and usage via mcp__montage-mcp-server__list_dummy_components. To see the exact JSX (e.g. to copy and adapt), read the source from packages/wds-dummy/src/components/<component>/index.tsx.
tsx
import { NavBar, Footer, BottomTabBar } from '@wanteddev/wds-dummy';

<>
  <NavBar />
  <main>{/* page content */}</main>
  <Footer />
  <BottomTabBar />
</>;
9. Brand Assets

Official Wanted brand marks. Use as-is — do not recolor, restyle, redraw, or crop.

9.1 Full wordmark — LogoWanted (@wanteddev/wds-brand)

Use when you need the "[symbol] wanted" wordmark (symbol + text together) — e.g. GNB, footer, splash, marketing surfaces.

  • Props: width (default 112), height (default 32), plus standard sx and any <svg> attributes. Forwards ref to SVGSVGElement.
  • Pass aria-label (e.g. "Wanted Logo") when the logo stands alone in an interactive or landmark element.
  • Keep the default 112:32 (≈ 3.5:1) aspect ratio when resizing.
tsx
import { LogoWanted } from '@wanteddev/wds-brand';

<LogoWanted aria-label="Wanted Logo" />
<LogoWanted width={168} height={48} aria-label="Wanted Logo" />;
9.2 Symbol only — IconSymbol (@wanteddev/wds-icon)

Use when you need just the Wanted symbol mark (no wordmark) — e.g. favicons, app icons, compact headers, loading indicators, badges. Renders as a 1:1 square.

  • Sized via fontSize (defaults to 1em). Built-in <title> provides accessible name "원티드 심벌".
  • Do not crop or extract the symbol portion of LogoWanted to fake a symbol-only mark — always use IconSymbol.
tsx
import { IconSymbol } from '@wanteddev/wds-icon';

<IconSymbol sx={{ fontSize: '32px' }} />;

Look up the full list of brand assets via mcp__montage-mcp-server__list_brand_assets. Prefer these over importing or recreating any other Wanted logo SVG.

Checklist

Verify the following after completing a component/page:

  • Maximized use of Montage components? (checked Montage before custom implementation)
  • Looked up exact specs via get_component before using components? (no guessing)
  • Did not replace component props with custom styles?
  • Used semantic design tokens instead of hardcoded colors?
  • Used FlexBox/Grid/containerStyle appropriately for layout?
  • Used Montage icons? (when applicable)
  • Used appropriate responsive method when needed?
  • For demo/preview pages, used @wanteddev/wds-dummy scaffolds instead of hand-rolling a fake GNB/Footer/tab bar?
  • For the Wanted wordmark, used LogoWanted from @wanteddev/wds-brand (not a custom SVG)?
  • For the symbol-only mark, used IconSymbol from @wanteddev/wds-icon (not a cropped LogoWanted)?

© wanteddev, 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-plugin/montage-web-guide/skills/montage-react of wanteddev/montage-web.

Open the folder on GitHubat commit c564409

Compare with similar skills

Montage React 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.

Montage React compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Montage React this skillwanteddev/montage-web117—~3.4kAutomated safety check: PassMIT
UI Design Systemtry-works/role-model117—~5kAutomated safety check: PassMIT
Shadcn Tailwind UILiarMTTT/TavernWeave148—~1.7kAutomated safety check: PassCustom licence
Persian Rtl UITronIsHere/vibefarsiui207—~1.7kAutomated safety check: WarnNone
Docs LookupProgrammerAnthony/Expert-Coding-Harness235—~640Automated safety check: PassMIT
Chakra UI v3 Builderchakra-ui/chakra-ui41k—~3.1kAutomated safety check: PassMIT

Similar skills

  • UI Design System

    try-works/role-model

    React UI component systems with TailwindCSS + Radix + shadcn/ui.

    117 GitHub stars~5k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Shadcn Tailwind UI

    LiarMTTT/TavernWeave

    Build, restyle, or review accessible React interfaces that use shadcn/ui, Radix UI primitives, and Tailwind CSS.

    148 GitHub stars~1.7k tokensUpdated 3 days ago
    Frontend & DesignAuto-check passed
  • Persian Rtl UI

    TronIsHere/vibefarsiui

    Build right-to-left Persian (Farsi) UI in React and Tailwind the way an Iranian product team would: logical CSS only, Persian fonts without letter-spacing, Persian digits and «تومان», Jalali dates…

    207 GitHub stars~1.7k tokensUpdated 7 days ago
    Frontend & DesignAuto-check: warnings
  • Docs Lookup

    ProgrammerAnthony/Expert-Coding-Harness

    通过 Context7 MCP 获取库和框架的实时最新文档,而非依赖训练数据,防止 API 幻觉。适用于查询任何库或框架的用法、配置、示例代码。触发词:怎么用、怎么配置、API参考、文档、示例代码、用法、接口、库文档、框架文档、documentation、docs、how to use、API…

    235 GitHub stars~640 tokensUpdated 4 mo ago
    Frontend & DesignAuto-check passed
  • Chakra UI v3 Builder

    chakra-ui/chakra-ui

    Builds responsive, accessible Chakra UI v3 components and layouts, sets up Chakra in new or existing projects, and designs themes with tokens, semantic tokens and recipes.

    41k GitHub stars~3.1k tokensUpdated yesterday
    Frontend & DesignAuto-check passed
  • Required groundwork before any use_figma call: the rules and reference files for running JavaScript in a Figma file through the Plugin API without common failures.

    65k GitHub starsUsed in 4 repos~4.4k tokens
    Frontend & DesignAuto-check passed

More from wanteddev/montage-web

  • Sync Icons

    wanteddev/montage-web

    Sync icons from the Figma file into wds-icon and open a PR by dispatching the figma-icon-sync-code-connect.yml GitHub Actions workflow.

    117 GitHub stars~1.9k tokensUpdated today
    Auto-check passed
  • Create PR

    wanteddev/montage-web

    Create a GitHub pull request from the current branch. An agent skill from wanteddev/montage-web.

    117 GitHub stars~6.3k tokensUpdated today
    Auto-check: notes

Questions about Montage React

What does Montage React do?

Guide for building UI with Montage (Wanted Design System) in React/Next.js projects. Montage React is an agent skill from wanteddev/montage-web.js projects.

When should I use Montage React?

Montage React fits situations like: component implementation; page/screen creation; utility functions.

How do I install Montage React in Claude Code?

Run `npx skills add wanteddev/montage-web --skill montage-react -a claude-code`. Or copy the skill folder (.claude-plugin/montage-web-guide/skills/montage-react in wanteddev/montage-web) into .claude/skills/montage-react in your project. Claude Code loads it when a task matches its description.

How do I install Montage React in Codex?

Run `npx skills add wanteddev/montage-web --skill montage-react -a codex`. Or copy the skill folder (.claude-plugin/montage-web-guide/skills/montage-react in wanteddev/montage-web) into .agents/skills/montage-react in your project. Codex loads it when a task matches its description.

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

What does Montage React need to run?

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

Does Montage React 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 Montage React 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 Montage React use?

Montage React 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 Montage React use?

About 3.4k tokens (SKILL.md is roughly 14k 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 Montage React?

Skills that share tags, products or a category with Montage React: UI Design System (try-works/role-model, 117 stars), Shadcn Tailwind UI (LiarMTTT/TavernWeave, 148 stars), Persian Rtl UI (TronIsHere/vibefarsiui, 207 stars) and Docs Lookup (ProgrammerAnthony/Expert-Coding-Harness, 235 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Montage React?

wanteddev (a GitHub organization) maintains it in wanteddev/montage-web, which has 117 GitHub stars. The repository holds 3 skills in this directory. The repository was last updated on October 7, 2026.

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