Use when a project needs its visual foundation built or consolidated into one system: logo brief, color system in HEX/RGB/CMYK/OKLCH with proven AA contrast, type system, usage rules, and an exported W3C design-tokens.json that later skills consume. NOT the applied UI pixels (that is design), NOT the words or tone (that is brand-voice).
npx skills add https://github.com/ericrisco/rsc-harness --skill brand-identity
*This skill emits the brand book — logo brief, color system, type system, usage rules — and a machine-readable design-tokens.json that design consumes. You write the rules every later pixel must obey; you do not paint the live UI.*
A brand identity with nothing checkable behind it is a mood board. The bar here is a brand book that compiles: roles named, every color carrying four channels, contrast pairs proven against WCAG, and a tokens file that scripts/verify.sh can validate.
All four parts ship together — logo brief, color system, type system, usage guidelines with the tokens export. A part missing its bar is incomplete, not "lite".
The one-line boundary test: "define what our brand looks like everywhere" → here. "make *this surface* look premium" → design.
Specify a system, not a single picture. The mark must survive from favicon to billboard, in color and in one ink.
| Asset | Format | Notes |
| --- | --- | --- |
| Logo (digital primary) | SVG | Vector, scales infinitely, smallest |
| Logo (raster, transparency) | PNG | @1x/@2x, transparent bg |
| Logo (print) | JPEG/PDF | 300 DPI, CMYK |
| Favicon (modern) | favicon.svg | <1KB, can embed prefers-color-scheme for dark mode |
| Favicon (legacy fallback) | favicon.ico | At site root |
| Favicon PNG | favicon-16.png, favicon-32.png | Tab/bookmark |
| Apple touch | apple-touch-icon.png 180×180 | iOS home screen |
| Android | android-chrome-192.png, -512.png | PWA/manifest |
| Manifest | site.webmanifest | Declares the icon set |
Full variation grid, clear-space/min-size formulas, and the favicon HTML markup + prefers-color-scheme SVG snippet → references/logo-and-assets.md.
Assign roles first, values second. A color with no role is decoration waiting to be misused.
fg on bg: 12.4:1 ✓").bg/fg invert, brand stays anchored). Retrofitting dark mode onto a light-only palette produces muddy, low-contrast surfaces.Full role taxonomy, a fully worked palette in HEX/RGB/CMYK/OKLCH, the contrast-pair matrix with computed ratios, and the dark-mode token strategy → references/color-and-tokens.md.
Two to three typefaces, no more. Most brands need exactly two: one display (headlines, personality) and one text (body, ≤16px legibility); a third is justified only for monospace/data.
Ship design-tokens.json even when the client only asked for a PDF — it is the one artifact design can read, and without it the palette gets re-derived by eye and drifts. Use the W3C Design Tokens format, which reached its first stable version (2025.10) on 2025-10-28 — a vendor-neutral JSON for sharing design decisions, with light/dark and multi-brand themes via group inheritance / $extends.
{
"$schema": "https://tokens.designtokens.org/2025.10/schema.json",
"color": {
"brand": {
"$type": "color",
"primary": {
"$value": { "colorSpace": "oklch", "components": [0.55, 0.19, 256], "hex": "#3b5bdb" }
},
"accent": {
"$value": { "colorSpace": "oklch", "components": [0.72, 0.17, 50], "hex": "#f08c00" }
}
},
"bg": { "$type": "color", "$value": { "colorSpace": "oklch", "components": [0.99, 0, 0], "hex": "#fcfcfc" } },
"fg": { "$type": "color", "$value": { "colorSpace": "oklch", "components": [0.21, 0.01, 256], "hex": "#1f2430" } }
}
}
Map the tokens to CSS custom properties (and, if the consumer is Tailwind v4, an @theme block) so the values flow into utilities — author once, consume everywhere:
/* design consumes these — generated from design-tokens.json, never hand-edited */
:root {
--color-brand-primary: oklch(0.55 0.19 256);
--color-brand-accent: oklch(0.72 0.17 50);
--color-bg: oklch(0.99 0 0);
--color-fg: oklch(0.21 0.01 256);
}
Full tokens file with light/dark via $extends, the Tailwind v4 @theme mapping, and the dark-mode strategy → references/color-and-tokens.md.
State the misuse rules explicitly — the gap a brand book exists to close is the well-meaning teammate who stretches the logo to fit.
| Misuse in the wild | Why it breaks / Fix |
| --- | --- |
| "Stretch the logo to fill the space" | Non-uniform scaling distorts the mark. Lock aspect ratio; pick the variation that fits (stacked vs primary). |
| "This blue is close enough" | Off-palette colors fracture recognition. Use the token; if a need is unmet, add a role, don't eyeball one. |
| "HEX is enough, we're a web brand" | Print and wide-gamut break. Every color carries HEX + RGB + CMYK + OKLCH or it is not in the system. |
| "Four fonts give us range" | Reads as chaos and bloats load. Cap at 2–3; get range from weights + scale. |
| "We'll add dark mode later" | Light-only palettes go muddy when inverted. Define light/dark roles from day one. |
| "Contrast is a design detail" | It is a WCAG requirement. Document each text/bg pair at ≥4.5:1 before shipping. |
| "Drop the logo on any background" | Color/photo backgrounds kill legibility. Provide and require the mono/knockout variation with clear space. |
| "The tokens file is optional, the PDF is the brand" | A PDF can't be consumed by code; design will drift. The design-tokens.json is the contract. |
Do/don't rules, the full misuse grid with examples, and lockup rules → references/logo-and-assets.md.
The skill emits a checkable artifact, so verify it before claiming done. Run against your tokens file:
./scripts/verify.sh path/to/design-tokens.json
It checks: the file parses as JSON; required color roles are present (primary, neutral, accent at minimum); every color token carries a HEX value; and, for each documented text/background pair (declared via $extensions["com.risco.contrast"] pairs), it computes the WCAG relative-luminance contrast ratio and fails any normal-text pair below 4.5:1. Logo-only tokens are exempt. On an empty or clean target it exits 0 — no false failures.
| Request | Route to | Why |
| --- | --- | --- |
| Tone of voice, tagline, naming, messaging pillars | ../brand-voice/SKILL.md | Verbal identity — the words, not the pixels. Pair it with this so copy and visuals agree. |
| Make this page premium, pick layout + motion, ship the Tailwind | ../design/SKILL.md | The applied UI layer: it reads design-tokens.json and builds the accessible, fast UI. This skill produces the brand study's visual half that design STOPS without. |
| Hero headline, value prop, CTA copy | ../marketing/SKILL.md | Page words, not the visual system. |
| Press kit — boilerplate, logos-for-press, fact sheet | ../press-kit/SKILL.md | Media packaging of finished assets, not system definition. |
| Investor pitch deck visuals | ../presentations/SKILL.md | Deck composition consuming the tokens, not the brand foundation. |
Take ericrisco/brand-identity from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.