Crafting Design Systems
Create or edit a design system that themes HTML output from workbench producer skills. Producers (writing-spec, writing-plans, brainstorming, systematic-debugging, crafting-html, research:research) apply the active design system on their own; this skill is for authoring the design system itself.
When to use this skill
- Create a new design system at project or user scope.
- Edit an existing design system.
When NOT to use this skill
- Producing any HTML artifact: the producer skill applies the active design system on its own.
- Designing a UI or product component: use
frontend-design.
Steps
Pick scope. Project (.workbench/design-systems/<name>/ at repo root) for repo-wide themes that travel with the codebase. User (~/.claude/workbench/design-systems/<name>/) for personal themes that cross every project. Project wins if the same name exists at both scopes.
Pick a kebab-case name. Examples: brand-2026, dark-print, personal.
Create the directory and copy the starter CSS:
NAME=<your-name>
DSDIR=.workbench/design-systems/$NAME # or ~/.claude/workbench/design-systems/$NAME
mkdir -p "$DSDIR"
cp <path-to-skill>/references/starter-colors.css "$DSDIR/colors.css"
<path-to-skill> resolves to wherever the skill is installed (Claude Code: ~/.claude/plugins/cache/pgoell-claude-tools/workbench/<version>/skills/crafting-design-systems).
Edit colors.css. Keep variable names; change values. Variables a producer's template does not reference are silently ignored at render time, so the union starter is safe to ship even when targeting one producer.
Write manifest.md (one paragraph: who this is for, what palette/style it embodies):
# <Name>
<One-paragraph description.>
(Optional) Add typography.css with :root { --serif: ...; --sans: ...; --mono: ...; } overrides. Producers inline this file after colors.css if present.
(Optional) Add components/<name>.html snippets. Each is a self-contained HTML fragment (markup plus scoped <style> block). Contract: references only CSS variables declared by the active producer's template or variables the component declares itself; no external scripts, fonts, or images; safe to paste into any artifact body. Document the intended use in an HTML comment at the top of the file.
(Optional) Add images/<name>.<ext> for logos, illustrations, photographs. Producers base64-encode and inline by default. SVG is text and inlines naturally.
Wire it as the active design system. Add to .workbench/config.md (or create the file):
## Design system
Name: <name>
Per-prompt overrides ("render with the <name> design system") work without editing config.
Verify. Run any producer skill (e.g., ask for a brainstorm summary) and inspect the generated HTML. Check that the design system's variable values appear in the <style> block after the template's own :root.
Directory shape
<name>/
manifest.md # required
colors.css # required, :root { ... } CSS variable declarations
typography.css # optional, :root { ... } font stack overrides
components/ # optional
<component>.html
images/ # optional
<image>.<ext>
Per-template variable inventory
When editing colors.css, knowing which variables each producer template declares helps you decide what to override. The starter file declares the union; this table shows which variables each template actually consults.
| Producer template |
Variables declared in :root |
brainstorming |
--ivory, --slate, --clay, --oat, --olive, --gray-100, --gray-150, --gray-300, --gray-500, --gray-700, --white, --serif, --sans, --mono, --radius-sm, --radius, --radius-lg |
writing-spec |
--bg, --bg-soft, --bg-code, --bg-row-alt, --bg-row-hover, --ink, --ink-soft, --ink-mute, --rule, --accent, --accent-soft, --warn, --sans, --serif, --mono, --measure |
writing-plans |
--bg, --surface, --ink, --muted, --rule, --rule-strong, --accent, --accent-soft, --good, --good-soft, --bad, --bad-soft, --warn, --warn-soft, --code-bg, --code-ink, --sans, --mono, --r-sm, --r-md, --r-lg |
systematic-debugging |
--ivory, --slate, --clay, --oat, --olive, --rust, --amber, --gray-100, --gray-300, --gray-500, --gray-700, --white, --serif, --sans, --mono, --radius-panel, --radius-row, --border |
research:research |
--ivory, --slate, --clay, --oat, --olive, --gray-150, --gray-300, --gray-500, --gray-700, --serif, --sans, --mono |
crafting-html ships 21 templates with varied styling; inspect the chosen reference before authoring overrides for that producer.
Multi-slide presentations are not themed by design systems: the presentations plugin's skills consume brand presets instead (see that plugin's presets/README.md contract).
Bundled
references/starter-colors.css: union of every variable above, populated with the templates' current values. Copy as the starting point for colors.css.
references/example-design-system/: a fully-populated twilight example (manifest.md, colors.css, typography.css). Read for shape reference; do not copy as the active system.
No em-dashes / en-dashes
Per repo rule, no U+2014 or U+2013 codepoints in this skill's tree, including bundled references/*.css and references/*.md. In HTML body copy, entity forms —, —, –, – are permitted.
1---2name: crafting-design-systems3description: Use when the user wants to create or edit a workbench design system, a directory of CSS variable overrides, optional components, and optional images that themes HTML output from workbench producer skills.4---56# Crafting Design Systems78Create or edit a design system that themes HTML output from workbench producer skills. Producers (`writing-spec`, `writing-plans`, `brainstorming`, `systematic-debugging`, `crafting-html`, `research:research`) apply the active design system on their own; this skill is for authoring the design system itself.910## When to use this skill1112- Create a new design system at project or user scope.13- Edit an existing design system.1415## When NOT to use this skill1617- Producing any HTML artifact: the producer skill applies the active design system on its own.18- Designing a UI or product component: use `frontend-design`.1920## Steps21221. **Pick scope.** Project (`.workbench/design-systems/<name>/` at repo root) for repo-wide themes that travel with the codebase. User (`~/.claude/workbench/design-systems/<name>/`) for personal themes that cross every project. Project wins if the same name exists at both scopes.232. **Pick a kebab-case name.** Examples: `brand-2026`, `dark-print`, `personal`.243. **Create the directory and copy the starter CSS:**2526 ```bash27 NAME=<your-name>28 DSDIR=.workbench/design-systems/$NAME # or ~/.claude/workbench/design-systems/$NAME29 mkdir -p "$DSDIR"30 cp <path-to-skill>/references/starter-colors.css "$DSDIR/colors.css"31 ```3233 `<path-to-skill>` resolves to wherever the skill is installed (Claude Code: `~/.claude/plugins/cache/pgoell-claude-tools/workbench/<version>/skills/crafting-design-systems`).34354. **Edit `colors.css`.** Keep variable names; change values. Variables a producer's template does not reference are silently ignored at render time, so the union starter is safe to ship even when targeting one producer.365. **Write `manifest.md`** (one paragraph: who this is for, what palette/style it embodies):3738 ```markdown39 # <Name>4041 <One-paragraph description.>42 ```43446. **(Optional) Add `typography.css`** with `:root { --serif: ...; --sans: ...; --mono: ...; }` overrides. Producers inline this file after `colors.css` if present.457. **(Optional) Add `components/<name>.html` snippets.** Each is a self-contained HTML fragment (markup plus scoped `<style>` block). Contract: references only CSS variables declared by the active producer's template or variables the component declares itself; no external scripts, fonts, or images; safe to paste into any artifact body. Document the intended use in an HTML comment at the top of the file.468. **(Optional) Add `images/<name>.<ext>`** for logos, illustrations, photographs. Producers base64-encode and inline by default. SVG is text and inlines naturally.479. **Wire it as the active design system.** Add to `.workbench/config.md` (or create the file):4849 ```markdown50 ## Design system5152 Name: <name>53 ```5455 Per-prompt overrides ("render with the `<name>` design system") work without editing config.565710. **Verify.** Run any producer skill (e.g., ask for a brainstorm summary) and inspect the generated HTML. Check that the design system's variable values appear in the `<style>` block after the template's own `:root`.5859## Directory shape6061```62<name>/63 manifest.md # required64 colors.css # required, :root { ... } CSS variable declarations65 typography.css # optional, :root { ... } font stack overrides66 components/ # optional67 <component>.html68 images/ # optional69 <image>.<ext>70```7172## Per-template variable inventory7374When editing `colors.css`, knowing which variables each producer template declares helps you decide what to override. The starter file declares the union; this table shows which variables each template actually consults.7576| Producer template | Variables declared in `:root` |77| ---------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |78| `brainstorming` | `--ivory`, `--slate`, `--clay`, `--oat`, `--olive`, `--gray-100`, `--gray-150`, `--gray-300`, `--gray-500`, `--gray-700`, `--white`, `--serif`, `--sans`, `--mono`, `--radius-sm`, `--radius`, `--radius-lg` |79| `writing-spec` | `--bg`, `--bg-soft`, `--bg-code`, `--bg-row-alt`, `--bg-row-hover`, `--ink`, `--ink-soft`, `--ink-mute`, `--rule`, `--accent`, `--accent-soft`, `--warn`, `--sans`, `--serif`, `--mono`, `--measure` |80| `writing-plans` | `--bg`, `--surface`, `--ink`, `--muted`, `--rule`, `--rule-strong`, `--accent`, `--accent-soft`, `--good`, `--good-soft`, `--bad`, `--bad-soft`, `--warn`, `--warn-soft`, `--code-bg`, `--code-ink`, `--sans`, `--mono`, `--r-sm`, `--r-md`, `--r-lg` |81| `systematic-debugging` | `--ivory`, `--slate`, `--clay`, `--oat`, `--olive`, `--rust`, `--amber`, `--gray-100`, `--gray-300`, `--gray-500`, `--gray-700`, `--white`, `--serif`, `--sans`, `--mono`, `--radius-panel`, `--radius-row`, `--border` |82| `research:research` | `--ivory`, `--slate`, `--clay`, `--oat`, `--olive`, `--gray-150`, `--gray-300`, `--gray-500`, `--gray-700`, `--serif`, `--sans`, `--mono` |8384`crafting-html` ships 21 templates with varied styling; inspect the chosen reference before authoring overrides for that producer.8586Multi-slide presentations are not themed by design systems: the `presentations` plugin's skills consume brand presets instead (see that plugin's `presets/README.md` contract).8788## Bundled8990- `references/starter-colors.css`: union of every variable above, populated with the templates' current values. Copy as the starting point for `colors.css`.91- `references/example-design-system/`: a fully-populated twilight example (`manifest.md`, `colors.css`, `typography.css`). Read for shape reference; do not copy as the active system.9293## No em-dashes / en-dashes9495Per repo rule, no U+2014 or U+2013 codepoints in this skill's tree, including bundled `references/*.css` and `references/*.md`. In HTML body copy, entity forms `—`, `—`, `–`, `–` are permitted.