From ui-color-palette
Define a semantic color system taxonomy and resolve bindings against a palette using get_color_system. Use when the user wants to map semantic token names (role, prominence, state…) to primitive color shades. Produces a SystemData object for use in semantic code generation or design tool deployment.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ui-color-palette:ui-color-palette-build-color-system <schema-description><schema-description>The summary Claude sees in its skill listing — used to decide when to auto-load this skill
Use the **ui-color-palette** MCP tool `get_color_system` to resolve a semantic token taxonomy against a generated palette and produce a `SystemData` object.
Use the ui-color-palette MCP tool get_color_system to resolve a semantic token taxonomy against a generated palette and produce a SystemData object.
Semantic code export from the system is handled by ui-color-palette-generate-semantic-code.
Before asking any questions, check the conversation context for existing slots.
SystemData is already in contextShow a summary (token count, bound / unbound / excluded). Ask: reuse, rebuild, or adjust bindings.
SystemConfiguration is already in contextSkip Step 0. Call get_color_system directly with the existing base, themes, and system values.
PaletteData or base + themes are already in contextSkip the palette questions in Step 0.
Do not call the tool until all required answers are collected.
1. Palette inputs — confirm base and themes are available. If not, run ui-color-palette-scale-palette first.
2. Taxonomy groups — ask for the semantic dimensions that structure the token names.
Each group has an id, a name, and members (each with id and name). The system generates the cartesian product of all groups: 2 groups × 3 members each = 6 tokens; 3 groups × 3 members = 27 tokens.
Common patterns:
| Pattern | Groups | Typical members |
|---|---|---|
| Role × State | role, state | brand / neutral / danger ; default / hover / active / disabled |
| Role × Prominence × State | role, prominence, state | — ; default / subtle / strong ; — |
| Surface × Content | surface, content | background / border ; primary / secondary / inverse |
3. Theme strategy — before defining bindings, confirm which strategy the user wants:
| Strategy | Description | overrides in bindings |
|---|---|---|
| A — Primitive modes (recommended) | Themes handled at the primitive level. Semantic tokens use a single binding. get_palette already carries the correct per-theme values at each shade stop. | Almost never — only for deliberate per-theme shade deviations |
| B — Semantic modes | Themes handled at the semantic level. Each token has an explicit binding per theme via overrides. Semantic variable collection has one mode per theme. | Expected on most tokens that differ across themes |
Record the strategy before defining bindings. It determines the binding format and how the semantic collection will be structured in design tools.
4. Bindings (iterative — start with the most important ones) — map token paths to primitive shade refs.
Format: [memberId, memberId, …] → colorId:shadeName (e.g. [brand, default] → blue:500).
Optional per-binding fields:
| Field | Description |
|---|---|
description | Optional label for the token |
overrides | Per-theme alternative ref: { themeId: "colorId:shadeName" } — use for Strategy B, or for deliberate deviations in Strategy A |
isExcluded | true → token stays in SystemData but is skipped during code generation |
get_color_systemTool: get_color_system
| Parameter | Type | Required | Description |
|---|---|---|---|
base | object | Yes | BaseConfiguration — same schema as get_palette |
themes | array | Yes | Array of ThemeConfiguration objects |
system | object | Yes | SystemConfiguration — schema + optional bindings |
system.schema| Field | Type | Description |
|---|---|---|
groups | array | Ordered list of taxonomy groups (order defines the path depth) |
Each group:
| Field | Type | Description |
|---|---|---|
id | string | Group identifier (e.g. "role") |
name | string | Display name (e.g. "Role") |
members | array | List of { id: string, name: string } |
system.bindings (optional)Each binding:
| Field | Type | Description |
|---|---|---|
path | string[] | Ordered member ids (one per group), e.g. ["brand", "default"] |
description | string | Optional token description |
ref | string | Default primitive ref: "colorId:shadeName" (e.g. "blue:500") |
overrides | Record<string, string> | Per-theme overrides: { themeId: "colorId:shadeName" } |
isExcluded | boolean | true → present in SystemData, excluded from code generation |
Returns: a SystemData object with schema, tokens, and type: "system".
Each token in tokens:
| Field | Description |
|---|---|
path | Member id path (e.g. ["brand", "default"]) |
pathNames | Display name path (e.g. ["Brand", "Default"]) |
description | Optional description from the binding |
isExcluded | Whether excluded from code generation |
refs | { themeId, shadeId }[] — shadeId is "themeId:colorId:shadeName" or null if unbound |
After calling get_color_system, produce a readable token matrix. Do not display raw SystemData JSON. Store the raw response opaquely as the SystemData slot — never read, print, or reason from the raw object. The only purpose of SystemData is to be passed as-is to downstream tools (semantic code generation, design tool deployment).
Format — one row per token, one column per theme:
Token | Light | Dark
--------------------------------|--------------------|--------------------
brand / default | blue:500 | blue:400
brand / subtle | blue:200 | blue:700
neutral / default | slate:600 | slate:300
neutral / subtle | — unbound — | — unbound —
neutral / disabled [excluded] | — | —
Legend:
colorId:shadeName → resolved ref for this theme— unbound — → no binding or ref not found in palette[excluded] → binding has isExcluded: trueFinish with a one-line summary: e.g. 12 tokens — 9 bound, 2 unbound, 1 excluded.
base and themes are available (from context or ui-color-palette-scale-palette).get_palette carries per-theme values at the primitive level.overrides per theme. Semantic collection has one mode per theme in the design tool.get_color_system.SystemData slot, store the input system config as SystemConfiguration slot. Also record the chosen strategy (A or B) — it is needed by deploy steps.ui-color-palette-generate-semantic-codeui-color-palette-figma — pass strategy: A = single flat mode on the semantic collection; B = one mode per theme on the semantic collection.ui-color-palette-penpot — pass strategy: A = single flat set (systemName); B = one set per theme (systemName/themeName).ui-color-palette-sketch — one swatch per theme per token, names encode systemName/themeName/tokenPath.ui-color-palette-framer — first theme maps to light, second to dark.$ARGUMENTS can describe the taxonomy structure or the project context.
/ui-color-palette:build-color-system role × state for a design system/ui-color-palette:build-color-system brand + neutral × prominence × interactioncolorId is the color's id field from PaletteData, not its display name.shadeId: null. They show as — unbound — in the matrix.isExcluded is an explicit design decision (token exists but is intentionally disabled); unbound is a missing binding.get_palette resolves all theme variations at the primitive level — the same shade ref is correct for all themes. Do not add shade-index overrides unless a token intentionally requires a different shade index in a specific theme.PaletteData or base config). Never assume shade names.palette-color-systemer — guided color system design: pattern suggestion, intelligent binding proposals, iterative refinement, get_color_system submission. Use this instead of running the skill manually when the user needs step-by-step guidance.uicper — orchestrates the full source → palette → system → deploy workflowpalette-codegen — generates semantic code files from base + themes + systemGuides collaborative design exploration before implementation: explores context, asks clarifying questions, proposes approaches, and writes a design doc for user approval.
Creates structured, bite-sized implementation plans from specs or requirements before writing code. Useful for breaking down multi-step tasks into testable steps with file structure and task boundaries.
Resolves in-progress git merge or rebase conflicts by analyzing history, understanding intent, and preserving both changes where possible. Runs automated checks after resolution.
npx claudepluginhub a-ng-d/claude-ui-color-palette