From Engineering
Author, lint, diff, and export DESIGN.md files — Google's open spec for communicating visual identity to coding agents. Use when establishing a design system, creating design tokens, or ensuring Nova has a machine-readable brand spec to build UI against.
How this skill is triggered — by the user, by Claude, or both
Slash command
/engineering:design-mdThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
DESIGN.md is Google's open spec ([`google-labs-code/design.md`](https://github.com/google-labs-code/design.md), Apache-2.0) for describing a visual identity to coding agents. One file combines:
DESIGN.md is Google's open spec (google-labs-code/design.md, Apache-2.0) for describing a visual identity to coding agents. One file combines:
This skill lives in the engineering plugin because DESIGN.md is the design contract between Archie (who authors it as a frontend artefact) and Nova (who implements UI against it). It belongs alongside frontend/pages.md and frontend/flows.md in docs/architecture/frontend/DESIGN.md.
docs/architecture/frontend/---
version: alpha
name: Heritage
description: Architectural minimalism meets journalistic gravitas.
colors:
primary: "#1A1C1E"
secondary: "#6C7278"
tertiary: "#B8422E"
neutral: "#F7F5F2"
typography:
h1:
fontFamily: Public Sans
fontSize: 3rem
fontWeight: 700
lineHeight: 1.1
letterSpacing: "-0.02em"
body-md:
fontFamily: Public Sans
fontSize: 1rem
rounded:
sm: 4px
md: 8px
lg: 16px
spacing:
sm: 8px
md: 16px
lg: 24px
components:
button-primary:
backgroundColor: "{colors.tertiary}"
textColor: "#FFFFFF"
rounded: "{rounded.sm}"
padding: 12px
button-primary-hover:
backgroundColor: "{colors.primary}"
---
## Overview
Architectural Minimalism meets Journalistic Gravitas...
## Colors
- **Primary (#1A1C1E):** Deep ink for headlines and core text.
- **Tertiary (#B8422E):** "Boston Clay" — the sole driver for interaction.
## Typography
Public Sans for everything. No serif except for pull-quotes...
## Components
`button-primary` is the only high-emphasis action on a page...
| Type | Format | Example |
|---|---|---|
| Color | # + hex (sRGB), quoted | "#1A1C1E" |
| Dimension | number + unit (px, em, rem) | 48px, "-0.02em" |
| Token reference | {path.to.token} | {colors.primary} |
| Typography | object: fontFamily, fontSize, fontWeight, lineHeight, letterSpacing, fontFeature, fontVariation | see above |
Component property whitelist: backgroundColor, textColor, typography, rounded, padding, size, height, width.
Variants (hover, active, pressed) are separate sibling entries — button-primary-hover, never nested inside button-primary.
Sections are optional. Present ones MUST appear in this order — duplicate headings reject the file:
Unknown sections are preserved. Unknown token names are accepted if the value type is valid. Unknown component properties produce a warning.
When Archie is producing a DESIGN.md as a frontend artefact, follow this sequence:
docs/architecture/frontend/DESIGN.md with at minimum name:, version: alpha, and colors:. Add typography, spacing, and components as needed.{colors.primary}) in the components: section — never repeat hex values inline.When Nova receives a DESIGN.md from Archie:
tailwind.config.tsThe CLI is @google/design.md (Node). Use npx — no global install needed.
# Validate structure + token references + WCAG contrast
npx -y @google/design.md lint docs/architecture/frontend/DESIGN.md
# Compare two versions — exit 1 = regression
npx -y @google/design.md diff DESIGN.md DESIGN-v2.md
# Export to Tailwind theme JSON
npx -y @google/design.md export --format tailwind DESIGN.md > tailwind.theme.json
# Export to W3C DTCG JSON
npx -y @google/design.md export --format dtcg DESIGN.md > tokens.json
# Print the spec rules (useful when authoring)
npx -y @google/design.md spec --rules-only --format json
| Rule | Severity | What it catches |
|---|---|---|
broken-ref | error | {colors.missing} points at a non-existent token |
duplicate-section | error | Same ## Heading appears twice |
invalid-color | error | Malformed hex or unquoted # value |
invalid-dimension | error | Missing unit, or unquoted negative dimension |
invalid-typography | error | Missing required field in a type object |
wcag-contrast | warning | textColor vs backgroundColor below AA (4.5:1) or AAA (7:1) |
unknown-component-property | warning | Property outside the whitelist |
button-primary.hover is wrong; button-primary-hover as a sibling key is correct."#1A1C1E" — unquoted YAML will truncate or error.letterSpacing: "-0.02em" not letterSpacing: -0.02em.version: alpha is the current spec version (as of mid-2026). Watch for breaking changes.{colors.primary} ✓, {primary} ✗.| Role | Use |
|---|---|
| Archie | Authors docs/architecture/frontend/DESIGN.md as part of the frontend artefact set. Published before Nova starts component work. |
| Nova | Lints on receipt, exports tokens into the build pipeline, builds all components against the spec. Never hardcodes values present in DESIGN.md. |
| Sherlock | Phase-boundary check: verify that Nova's component implementations reference exported token variables, not hardcoded hex values. |
@google/design.md on npm@google/stitch-cli mcp — create_ui / generate_code consume DESIGN.md contextnpx claudepluginhub ani1797/forge --plugin engineeringCreates, edits, and verifies skills using a test-driven development approach with pressure scenarios and subagents.