Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Audit or establish the project's 3-layer token spine. Invoke when the user asks for tokens on their UI, or mentions 'tokens' alongside design / UI / frontend work.
.claude/skills/educlopez-tokens/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-02 | ✗→✓ | ▲ Improved | 109% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 26% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 217% | 0% |
| case-12 | ✗→✓ | ▲ Improved | 77% | 0% |
| case-17 | ✗→✓ | ▲ Improved | -5% | 0% |
<!-- HARNESS MIRROR — do not edit here. Canonical source: skills/ or commands/. After editing source, copy into cli/assets/<harness>/ and repo-root harness mirrors. -->
Context: this sub-skill is one lens of the broader ui-craft skill. If the ui-craft skill is also installed, read its SKILL.md first for Discovery + Anti-Slop + Craft Test, then apply the specific lens below.
Read references/tokens.md before proceeding. The 3-layer contract (primitive → semantic → component) and the intentional-dark test are defined there.
Scan for token definitions in the project:
:root, [data-theme], [data-mode], or theme wrapper selectorstailwind.config.js/ts) under theme.extend or themetheme.ts, *.styles.ts, styled.d.ts, ThemeProvider)design-tokens.json or tokens.json (Style Dictionary / Theo)globals.css, variables.css, tokens.cssBuild an inventory: which of the 7 categories exist (color / spacing / type / radii / shadows / motion / z-index), which layers are present (primitive / semantic / component), and whether both light and dark are defined.
$ARGUMENTS and inventoryEvaluate against the contract in references/tokens.md. Output a severity-ranked gap list — don't propose code yet.
Check:
--text-primary? Is --surface-canvas a tinted near-black (not #000)? Is accent chroma reduced 10-15%? Are shadows replaced with border rings?--gray-500) not roles (--button-bg)? Are semantics named for roles (--text-primary) not values (--gray-900-text)?Output format:
| Severity | Category | Finding | |---|---|---| | Critical | Dark mode | --surface-canvas is #000 — runs the intentional-dark test | | High | Semantics | No surface stack — components use raw primitives | | Medium | Shadows | Single-layer shadows — ambient layer missing | | Low | Z-index | Arbitrary values (z-index: 999) in 3 components |
Show what's missing. Do not propose code during audit unless the user asks.
Load skills/ui-craft/references/loops.md preset token-consistency (budget = the default loop budget defined in loops.md). Emit the pre-flight cost notice. After fixing the top off-system value (raw hex color, arbitrary radius, or magic spacing), re-scan until zero off-system values or budget exhausted.
Propose a minimal spine inline. Cover all 7 categories. Always include both light and dark blocks — both intentional.
Minimal spine order:
Use OKLCH for color unless the project uses sRGB across the board — in that case flag the gap, propose OKLCH, but don't auto-convert.
Before writing to a file, ask which file to write to. Detect from project structure and suggest one:
globals.css (CSS variables inside :root)theme.ts (exported theme object)tokens.css (standalone variables file)design-tokens.json (Style Dictionary format)Confirm with the user before writing.
If the project has an existing token file, propose additions as patches — show what would change in a diff block:
diff:root { + /* ── Semantic surface stack (new) ── */ + --surface-canvas: var(--gray-50); + --surface-raised: var(--gray-100); + --surface-overlay: #fff; + --surface-sunken: var(--gray-200); + --surface-inverse: var(--gray-900); }
Let the user apply. Don't write directly unless they approve.
--color-primary over --accent-500, extend that pattern rather than introducing a parallel naming scheme.Next step: /craft — build on the spine you just established (rung 1).
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 18,140 | 27,793 | +53% | 1 | 1 | 0% | 3,245 | 1,875 | -42% | 0 | 0 | — |
case-02 | fail→pass | 13,174 | 20,615 | +56% | 1 | 1 | 0% | 3,221 | 6,724 | +109% | 0 | 0 | — |
case-03 | fail→fail | 7,403 | 3,052 | -59% | 1 | 1 | 0% | 1,285 | 1,837 | +43% | 0 | 0 | — |
case-04 | fail→pass | 13,232 | 9,145 | -31% | 1 | 1 | 0% | 2,484 | 3,126 | +26% | 0 | 0 | — |
case-05 | pass→pass | 13,085 | 9,259 | -29% | 1 | 1 | 0% | 2,189 | 2,812 | +28% | 0 | 0 | — |
case-06 | pass→pass | 13,618 | 10,909 | -20% | 1 | 1 | 0% | 2,409 | 3,209 | +33% | 0 | 0 | — |
case-07 | pass→pass | 2,473 | 6,105 | +147% | 1 | 1 | 0% | 404 | 1,988 | +392% | 0 | 0 | — |
case-08 | fail→fail | 9,094 | 5,596 | -38% | 1 | 1 | 0% | 1,569 | 1,816 | +16% | 0 | 0 | — |
case-09 | fail→fail | 7,840 | 4,857 | -38% | 1 | 1 | 0% | 1,397 | 2,258 | +62% | 0 | 0 | — |
case-10 | pass→pass | 10,017 | 16,629 | +66% | 1 | 1 | 0% | 1,966 | 5,418 | +176% | 0 | 0 | — |
case-11 | fail→pass | 8,879 | 21,663 | +144% | 1 | 1 | 0% | 2,130 | 6,753 | +217% | 0 | 0 | — |
case-12 | fail→pass | 8,627 | 7,401 | -14% | 1 | 1 | 0% | 1,764 | 3,127 | +77% | 0 | 0 | — |
case-13 | pass→pass | 12,387 | 10,582 | -15% | 1 | 1 | 0% | 2,386 | 4,050 | +70% | 0 | 0 | — |
case-14 | pass→pass | 10,926 | 5,653 | -48% | 1 | 1 | 0% | 1,971 | 2,576 | +31% | 0 | 0 | — |
case-15 | pass→pass | 16,340 | 8,377 | -49% | 1 | 1 | 0% | 2,974 | 3,066 | +3% | 0 | 0 | — |
case-16 | pass→pass | 10,897 | 7,313 | -33% | 1 | 1 | 0% | 2,053 | 2,833 | +38% | 0 | 0 | — |
case-17 | fail→pass | 14,027 | 6,441 | -54% | 1 | 1 | 0% | 2,830 | 2,699 | -5% | 0 | 0 | — |
case-18 | fail→fail | 7,370 | 3,126 | -58% | 1 | 1 | 0% | 1,158 | 2,005 | +73% | 0 | 0 | — |
case-19 | fail→pass | 9,620 | 3,643 | -62% | 1 | 1 | 0% | 1,654 | 2,054 | +24% | 0 | 0 | — |
case-20 | pass→pass | 7,803 | 5,894 | -24% | 1 | 1 | 0% | 1,510 | 2,606 | +73% | 0 | 0 | — |
case-21 | pass→pass | 13,380 | 12,826 | -4% | 1 | 1 | 0% | 2,478 | 3,928 | +59% | 0 | 0 | — |
case-22 | pass→pass | 7,303 | 7,012 | -4% | 1 | 1 | 0% | 1,442 | 2,772 | +92% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +27 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.