brand-to-tokens · git:20260909.c0fa95d · 2026-09-09 · sha256 e802efa930018a8f

brand-to-tokens git:20260909.c0fa95dA

Immutable. This exact content is served forever at /api/v1/blob/e802efa930018a8f.

---
model_tier: inherit
name: brand-to-tokens
description: "Turn a confirmed brand identity into a DTCG .tokens.json source of truth — emit CSS vars + Tailwind via design-tokens, export locked brand deck templates."
domain: engineering
personas: []
workspaces:
  - engineering
packs:
  - brand
trust:
  level: professional
install:
  removable: true
scope:
  write: []
  verification_reason: "execution declares no handler, so this skill runs nothing of its own — every write is the calling agent's, under the rules that govern it. No command can prove a scope the skill never executes."
execution:
  type: manual
---

# brand-to-tokens

> The brand→token derivation — the **first consumer demand** that closes the
> ADR-061 §8 deferral. Takes a confirmed [`brand-identity`](../brand-identity/SKILL.md)
> constraint set and produces a DTCG `.tokens.json` **source of truth**, then
> hands it to the [`design-tokens`](../design-tokens/SKILL.md) toolchain to emit
> CSS vars + Tailwind. The same `.tokens.json` is the export that pack-ai-image
> brand-asset generation and the greenfield scaffold seed consume (B → A;
> contract: [`brand-token-consumption`](../../../docs/contracts/brand-token-consumption.md)).

## Known contradiction — the filename this skill authors is not the one the resolver reads

**Recorded, not resolved.** This skill's prose says to author `.tokens.json`,
and the only resolver in the tree reads `tokens.json` — `BRAND_TOKEN_PATHS`
searches `tokens.json`, `assets/tokens.json`, `resources/tokens.json` and
`agents/settings/brand/tokens.json`, none of them dot-prefixed. A consumer
following this skill literally therefore produces a file nothing loads.

The authoring name is a consumer-visible decision and is deliberately not
changed here. What closes the gap in the meantime is
`agent-config brand:status`, which reports which of the four paths holds a file
— and separately flags a dot-prefixed `.tokens.json`, which is exactly the file
a reader of this skill would plausibly have created.

Moved here from [`brand-source-of-truth`](../../rules/brand-source-of-truth.md)
on 2026-09-09: it is a note about this skill, and its 6 lines in a standing rule
were paid for on every subagent spawn. The substitution funded that rule's
artifact-versus-brand pointer, per the council verdict on
`blocker: standing-payload-headroom`.

## When to use

- A confirmed brand identity (colour story, type story, spacing) needs to become
  a maintained token system.
- A consumer asks to "turn the brand into tokens / CSS variables / a theme."
- Before pack-ai-image brand-asset generation or a greenfield scaffold needs the
  `.tokens.json` export.

## Procedure

1. **Take the confirmed brand-identity constraint set** — colour story (roles +
   values), type story (heading/body classes), spacing/radius intent. If a
   consumer brand profile already registers values, those win
   ([`brand-source-of-truth`](../../rules/brand-source-of-truth.md)).
2. **Author `.tokens.json`** on the `design-tokens` 3-layer DTCG model
   (`$value` / `$type`): brand palette → `primitive.color.*`; brand roles
   (primary, accent, surface, destructive) → `semantic.color.*` referencing the
   primitives; per-widget needs → `component.*`. Add `dark.semantic.*` overrides.
   Type tokens come from [`typography-system`](../typography-system/SKILL.md)
   stage-2 (archetype → pairing-filter), added under the `typography` section.
3. **Generate** CSS vars + Tailwind through the toolchain:

   ```bash
   ./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
     --config .tokens.json -o assets/design-tokens.css
   ./scripts-run <skills-root>/design-tokens/scripts/tokens generate \
     --config .tokens.json --format tailwind
   ```

4. **Validate** — `./scripts-run <skills-root>/design-tokens/scripts/tokens
   validate --dir src/` until clean (exit 0 is the evidence); convert
   hardcoded values to `var(--token)`.
5. **Export the deck templates** — emit the locked-variable brand deck
   templates from [`templates/`](templates/) — `marp-brand-deck.md.example`
   (copy to `.md` to use) and `reveal-brand-deck.yaml` — substituting the brand
   variables from `.tokens.json`. No render engine is owned (decision 7); the
   templates feed the user's own deck tool.
6. **Publish `.tokens.json`** as the source of truth other surfaces read
   (pack-ai-image generation, greenfield scaffold) per the consumption contract.

## Output format

1. `.tokens.json` — DTCG 3-layer (primitive → semantic → component) + `dark.semantic` + `typography`, every value `{$value, $type}`.
2. Generated `design-tokens.css` + the Tailwind `theme.extend` snippet.
3. `validate` evidence — exit 0, or the `token_violation` findings handed to polish.
4. The exported brand deck templates (Marp + reveal) with brand variables locked from the tokens.

## Gotcha

- **`.tokens.json` is the single source — never hand-edit the generated CSS or a
  consumer-side copy.** pack-ai-image generation and the greenfield scaffold read
  this file; a hand-edited downstream copy silently drifts from the brand.
- **Derive, do not invent.** Every token traces to a brand-identity decision or
  the consumer's existing brand; a value with no brand provenance is off-brand
  ([`brand-consistency`](../../rules/brand-consistency.md) will flag it).
- Deck templates **lock** brand variables — never inline a raw hex/font in a
  template; reference the token so the deck stays on-brand when tokens change.

## Do NOT

- Do NOT generate marks or assets here — this skill emits tokens + templates;
  [`logo-generation`](../logo-generation/SKILL.md) / `brand-asset-generation`
  generate the marks from the tokens (B → A, never inverted).
- Do NOT hand-edit generated CSS — `.tokens.json` is the source.
- Do NOT let components reference primitives directly — semantic layer between.
- Do NOT own a slide-render engine — export validated templates only (decision 7).

## See also

- [`design-canon.md`](../../../docs/guidelines/design-canon.md) § Colour references — culturally-situated palettes + a11y-contrast grounding when deriving brand colour tokens.
- [`brand-identity`](../brand-identity/SKILL.md) — supplies the constraint set this skill derives tokens from.
- [`design-tokens`](../design-tokens/SKILL.md) — the DTCG toolchain that emits CSS/Tailwind from `.tokens.json`.
- [`typography-system`](../typography-system/SKILL.md) — brand-aware stage-2 supplies the type tokens.
- [`brand-token-consumption`](../../../docs/contracts/brand-token-consumption.md) — the read contract pack-ai-image and greenfield scaffold consume.
- [`brand-consistency`](../../rules/brand-consistency.md) — validates emitted artifacts against this token source of truth.