Changelog
What changed in each version of the skill, from CHANGELOG.md in the repository. See the install guide for how to update.
Unreleased
Install
- Claude Code plugin marketplace:
claude plugin marketplace add YuqingNicole/variant-design-skill, thenclaude plugin install variant-design@variant-design. The update check prints the plugin update commands for this install. - Sub-workflows are now named
skills/*/ROUTE.mdinstead ofSKILL.md, so Claude Code plugins, Codex andnpx skillsregister only the router as a skill. - DeepSeek Harness (
dsh) finds the skill in~/.agents/skills/variant-designor a project's.agents/skills, the foldernpx skills adduses.
Design system
confirm-systembacks up context and records the approved system identity without editing the picked page. Explicitapply-systemsnapshots aligned code, token metadata and adoption state together;undo Brestores the previous state. Ordinary variations retain their token lock, and prepared candidates cover every system extension.- Contrast reports include checked and unverified pairs; generated systems use exact role pairs or explicit surface notes, with legacy guessing restricted to
--brandfiles. Generated component tokens must alias semantic tokens; product references to another component's tokens are reported. DTCG adds opt-in--group-by layerwith typed tokens and cross-layer aliases, and lists multiple conditional values instead of silently choosing one. - After
pick B, the skill derives a complete design system from B (variant-output/design-system.cssand a preview with every component B uses, in all its states) and waits fords confirm. With a locked brand file, it adds only the layers the brand leaves open and records them indesignSystem.extensions. delivery-checkreads those extensions (redefining a brand variable is an error) and warns about spacing, font-size and radius values off a confirmed system's scale, naming the nearest token. A system derived from B is checked against B only.ds confirmexports the system as DTCG 2025.10 tokens (scripts/ds-export.mjs→design-system.tokens.json) and lists what DTCG cannot express, such asclamp()sizes.- The derived system comes with
variant-output/DESIGN.md: usage rules for agents and people (which text token goes on which surface, which type step each heading uses, which component states exist), in the section order of Google's DESIGN.md draft. scripts/ds-check.mjschecks a system's own text/surface and on-color pairs for 4.5:1 contrast: drafts are fixed before they are shown, anddelivery-checkreports a confirmed system's failing pairs.- A design system is now a few decisions about the product plus the tokens that carry them out, not a filled-in template (
references/design-system/system-decisions.md). The skill writes three to five decisions, drops generator habits it finds in the picked direction (eyebrow labels, slogan heroes, decorative numbers, a card around everything, default fonts), and writes only tokens the product uses, each with a note on where. The preview shows the system on the product's own screens instead of swatch grids. - Layers: semantic tokens for product code, component tokens for reused components with several states, primitives only when shared, and patterns (removal confirmation, empty states) in
DESIGN.md.ds-check.mjs --used-bylists tokens nothing uses;delivery-checkwarns when product code uses a primitive;ds-exportcarries each token's use note into the DTCG$description. - Buttons follow one spec checked against Material 3, Apple HIG, Radix, Primer, Atlassian, Polaris and Geist (
references/ux/component-specs.md→ Button). Labels use the interface sans even under a serif brand. Padding and radius scale with the height. Each view has one solid primary. Hover and pressed are derived withcolor-mix, focus is a single 2px ring, and danger stays a red label until the confirmation dialog. Previews use live buttons, not rows of fake hover states. - Generated directions avoid generator habits (
references/workflow/quality-baseline.md→ Generator habits). An existing page keeps its job, title and copy: no slogans or promotional cards on product pages. Directions differ in structure before style, and a palette swap is not a direction.quality-gatelists eyebrow labels, decorative zero-padded numbers and direction names inside the UI asreviewfindings to remove or justify; they never fail--strict.
Brand lock
- When a project's own file sets the brand (such as
app/globals.css), the skill registers that file in place instead of locking a copy invariant-output/.
1.1.0
The skill now works inside an existing project from discovery to integration, and keeps the user's work safe at every step.
Project-aware workflow
- Read-only project discovery before generating (
scripts/project-profile.mjs), and task briefs bound to that profile with runtime observations (scripts/design-task.mjs). - Design references recorded in the brief with their reuse terms. Direction cards from the Variant Design library convert into those records (
scripts/direction-card.mjs). - A delivery check before presenting A/B/C (
scripts/delivery-check.mjs): three registered directions with distinct trade-offs, a shared task contract, a recommendation that is not a selection, and an intact design-system lock.
Safe edits and integration
- Candidates carry a content baseline; stale candidates and edits outside a zone are rejected (
variant-history.mjs prepare/apply). - One user request is one undo, even across several applies.
variant-integrate.mjsbacks up every target before integrating a direction and refuses to roll back files edited afterwards.- Version-bound artifact verification records which checks ran against which revision.
Previews
- React previews mount from the project's own Vite;
react-preview.mjs --staticbuilds previews that open without a server, for sandboxed agents. - Fixed a static-preview bug that corrupted bundled code containing
$&,$$or$`.
Skill text
- Loads by phase. The router is a route table plus shared rules; the generate route opens with a load map. Variation actions, zone edits, history, previews, and export and integration are separate files, each read only when that step comes up.
code-output.mdno longer forces the interaction pattern libraries on every run. - References grouped by role:
workflow/,sources/,domains/,design-system/,ux/,tasks/. - The quality gate skips generated preview bundles (
_static/,_preview/), so a wholevariant-output/can be scanned in strict mode. - Removed transcribed third-party "community examples" from the domain references.
- Only the root
SKILL.mddeclares a skill, so Codex andnpx skillsno longer register sub-workflows as broken standalone skills. - Component handoff specs and web interface checks.
Install
npx skills add YuqingNicole/variant-design-skill -a claude-code -a codexinstalls the complete skill.
For contributors
Upgrading: git -C <install path> pull --ff-only for a Git clone, or npx skills update variant-design. The update check now prints the npx skills command for installs without .git. Project files in variant-output/ are unchanged by an upgrade; context schema stays v2.
evals/run.mjsruns the working tree in Claude Code and Codex on fixture projects and grades the result.scripts/skill-links.test.mjschecks that every file the skill names exists and every reference is reachable.