Chapter
04
The Skills System
How 100+ design skills shape what agents produce
A skill is a reusable instruction package that turns a vague prompt into a brand-consistent artifact, and Open Design ships 100+ of them. The skill is the recipe---and once you see that, the black box opens.
4.1 What a Skill Is
Skills as Recipes
Before I ran Open Design with explicit skills, I did what most people do: I wrote long, detailed prompts and hoped the agent would produce something consistent. Sometimes it did. More often, the same prompt produced a different layout, a different color treatment, and a different component style on every run. Skills fix that. A skill is a recipe the agent follows: it constrains structure, applies a brand system, and fixes the output format, so the same prompt produces reliable results across runs.
The skill is the recipe in exactly the way a kitchen recipe works. A recipe doesn't just list ingredients---it specifies quantities, sequence, temperature, and the expected result. A good recipe is repeatable: the same cook, the same kitchen, the same result. Open Design skills do the same thing for design artifacts. They tell the agent how to lay out a dashboard, which brand tokens to pull, how many KPI cards to render, and what self-check to run before returning the artifact.
Without a skill, generation is raw-prompt generation. With a skill, it's recipe-driven generation. The difference shows immediately.
Skill-driven generation:
Use the dashboard skill with the Stripe brand system
to build an analytics overview with four KPI cards
and a revenue chart.
The agent reads the dashboard skill, pulls brand tokens from the active DESIGN.md, applies the platform-desktop layout, inlines SVG charts, and self-checks that every color came from DESIGN.md---on every run.
Raw-prompt generation:
Build an analytics dashboard with four cards
and a revenue chart.
The agent improvises layout, chooses colors arbitrarily, may or may not self-check, and produces a different result on the next run with the same prompt.
A skill file is small---most are under 80 lines of YAML frontmatter plus Markdown prose. The frontmatter declares the skill's identity, triggers, and Open Design extensions. The prose body is the workflow the agent reads verbatim: what to do first, how to classify the request, how to lay out the regions, and what to check before calling the artifact done.
As of June 2026, Open Design ships with 100+ skills (the repository contains 157 total items across the skills/ and design-templates/ directories; the README uses the conservative "100+" figure).
The "100+" count in Open Design's README is a conservative floor, not a ceiling. As of June 2026, the repository contains 157 skill directories spanning 54+ functional skills and roughly 100 design templates. That count grows with every release. Always verify against the live repository when the exact number matters.
4.2 The Skill Catalog
Seven artifact modes, hundreds of variations
Skills are organized by artifact mode. Each mode corresponds to a distinct type of output: prototype, deck, template, design-system, image, video, or audio. Most teams use the prototype and deck modes daily; the rest exist for specific pipelines. Knowing which mode covers your artifact lets you route a prompt to the right skill immediately instead of guessing.
| Skill family (mode) | Produces | Typical brand pairing | Example skill |
|---|---|---|---|
| prototype | Single-page interactive HTML for web, desktop, or mobile viewports | Any DESIGN.md with color + typography sections | dashboard, landing-page, onboarding |
| deck | HTML slide deck, exportable to PPTX | Brand systems with strong typographic identity (Vercel, Linear) | magazine-web-ppt, swiss-international |
| template | Reusable HTML/CSS/JS component template | Design systems requiring consistent UI atoms | email-template, card-grid |
| design-system | Generated component library or style guide | House brand DESIGN.md files | design-system-overview |
| image | AI-generated images via configured provider | Brand with color and voice sections | hero-image, social-card |
| video | HTML-to-MP4 motion graphics via HyperFrames | Brand with animation and accent color tokens | motion-intro, explainer-clip |
| audio | Text-to-speech or ambient audio generation | Voice and tone sections of DESIGN.md | narration |
The prototype mode is the highest-volume category by a wide margin. Most bundled skills target prototype with platform: desktop or platform: mobile. Decks come second, with several magazine and Swiss International variants. The remaining five modes cover specialized pipelines: design system documentation, image generation, video, audio.
One distinction the catalog makes explicit is that design templates and functional skills are not the same thing, even though both use SKILL.md and appear in the picker. Functional skills (under skills/) describe complete workflows. Design templates (under design-templates/) are reference implementations of a specific visual layout. Both use the same API shape, but templates are more like examples than instructions.
4.3 How Agents Select and Compose Skills
From prompt to skill to artifact
When you submit a generation request in Open Design, the daemon doesn't immediately hand it to the agent. It first resolves which skill to apply. That resolution is brief-matching: the daemon scans skill description and triggers fields against your prompt and surfaces the best match in the skill picker. You confirm it---or pick a different skill---before the agent reads the skill body and begins generating.
User submits a generation brief in the UI
Daemon matches brief against skill descriptions and triggers; surfaced in the picker
Active DESIGN.md is injected into the skill's context window
Agent executes the skill workflow, returns a branded, self-contained artifact
od.design_system.requires: true.Skill Discovery and Precedence
Open Design scans three locations for skills, in priority order:
| Location | Priority | Use |
|---|---|---|
./.claude/skills/ |
1 (highest) | Project-private; not committed to source control; overrides bundled and global skills |
./skills/ |
2 | Project-committed; shared with the team via version control |
~/.claude/skills/ |
3 (lowest) | User-global; applies to every project on this machine |
When two skills share the same name, the higher-priority location wins. This lets you override a bundled skill at the project level---write a project-private version of dashboard in .claude/skills/ and it shadows the bundled one for that project alone.
Brand Injection
Skills that declare od.design_system.requires: true get the active DESIGN.md injected automatically at the top of their context window before the agent reads any prompt content. The sections list controls which parts of DESIGN.md are injected---a dashboard skill that only needs color and typography requests those two sections, keeping the context tight.
od:
mode: prototype
design_system:
requires: true
sections: [color, typography, layout, components]
Skills that don't declare requires: true don't see the DESIGN.md at all. Image-generation and audio skills often skip it because their output format can't consume CSS tokens directly.
Craft References
As of June 2026 (v0.9.0), Open Design supports a third input axis alongside the skill body and DESIGN.md: craft references, stored under craft/. Craft references are brand-agnostic rules---things like letter-spacing conventions, accent color frequency rules, and anti-AI-slop typography checks. They shipped with v0.8.0 and are documented in skills-protocol.md §5.5. A skill can request specific craft references in its frontmatter:
od:
craft:
requires: [state-coverage, accessibility-baseline, laws-of-ux]
Craft references (shipping since v0.8.0) are a newer concept and are likely to evolve. Think of them as a quality layer below brand: they ensure the artifact meets baseline design principles regardless of which brand system is active.
You don't need to understand craft references to use built-in skills---they're already declared in bundled skills like dashboard. They matter when you're writing a custom skill and want to borrow the same quality checks the built-in skills use. Reference them by filename (without extension) from the craft/ directory.
4.4 Anatomy of a Skill File
What every skill is made of
Every skill is a single file: SKILL.md. It combines YAML frontmatter with Markdown prose. The frontmatter is machine-read by the daemon and the skill picker; the prose is agent-read during generation. The split is important---you design the frontmatter for the machine, and you write the prose for the agent.
File Structure
my-skill/
├── SKILL.md # required: frontmatter + workflow prose
├── example.html # required if od.preview.type is "html"
├── assets/ # optional: static files referenced by example.html
└── references/ # optional: extra documents the agent should read
The minimum viable skill is just SKILL.md with an example.html when the skill produces HTML output. Everything else is optional. The references/ folder is useful when a skill needs the agent to consult supplementary material---a data schema, a component spec, a copywriting guide.
The SKILL.md Frontmatter Fields
| Field | Namespace | Purpose | Required |
|---|---|---|---|
name |
base | Unique identifier; used for skill precedence resolution | Yes |
description |
base | Multi-line description used by the picker for brief-matching | Yes |
triggers |
base | Exact phrases that should surface this skill; must be concrete, not generic | Yes |
od.mode |
od | Artifact mode: prototype, deck, template, design-system, image, video, audio |
Recommended |
od.preview |
od | Declares the preview type (html) and entry file; required for HTML preview |
Conditional |
od.design_system |
od | Controls DESIGN.md injection: requires: true and optional sections list |
Recommended |
od.example_prompt |
od | A prompt that should produce a working artifact end-to-end; used in the merge checklist | Recommended |
od.craft.requires |
od | List of craft reference names to inject as quality rules | Optional |
A Real Skill: The Dashboard
The dashboard skill in the Open Design repository is the clearest example of a well-authored skill. Its frontmatter is precise, its triggers are concrete, and its workflow prose is explicit about what the agent must do at each step. The excerpt below is reproduced for commentary from design-templates/dashboard/SKILL.md in the Open Design repository (Apache-2.0 licensed; source: github.com/nexu-io/open-design, as of June 2026). The workflow steps are abbreviated here; the full prose is in the source file.
---
name: dashboard
description: |
Admin / analytics dashboard in a single HTML file. Fixed left sidebar,
top bar with user/search, main grid of KPI cards and one or two charts.
Use when the brief asks for a "dashboard", "admin", "analytics", or
"control panel" screen.
triggers:
- "dashboard"
- "admin panel"
- "analytics"
- "control panel"
od:
mode: prototype
platform: desktop
scenario: operations
preview:
type: html
entry: index.html
design_system:
requires: true
sections: [color, typography, layout, components]
craft:
requires: [state-coverage, accessibility-baseline, laws-of-ux]
---
# Dashboard Skill
Produce a single-screen admin / analytics dashboard.
## Workflow
1. Read the active DESIGN.md (injected above). Colors, typography,
spacing, component styling all come from it. Do not invent new tokens.
2. Classify what the dashboard monitors...
3. Lay out required regions...
4. Write one self-contained HTML document...
5. Charts: inline SVG only...
6. Self-check:
- Every color comes from DESIGN.md tokens.
- Accent used at most twice...
Notice what the skill enforces: tokens come from DESIGN.md (never invented), the output is a single HTML file, SVG charts are inlined, and a self-check runs before the artifact is returned. The recipe is the recipe---no run should skip those steps.
The Trigger Quality Bar
Triggers are the most commonly mis-authored part of a skill. The Open Design merge checklist (in docs/skills-contributing.md, Apache-2.0) explicitly rejects vague triggers. The concrete trigger examples below are illustrative of the accepted/rejected pattern documented in docs/skills-protocol.md §5 (Apache-2.0):
Concrete triggers (accepted):
triggers:
- "magazine deck"
- "杂志风 PPT"
- "horizontal swipe presentation"
Vague triggers (rejected):
triggers:
- "design something cool"
- "make a nice layout"
- "creative design"
Vague triggers match too broadly and surface the wrong skill. Concrete triggers match the actual language users reach for when they know what they want. Writing good triggers means reading a week's worth of your team's actual generation prompts and extracting the phrases that reliably predict this artifact type.
4.5 Authoring Your Own Skill
Step-by-step: from blank file to working recipe
Custom skills are where the skills system pays back the most. A house skill encodes your team's standards once and applies them on every run---every artifact from that skill will follow the same layout rules, use the same component patterns, and run the same self-checks. The barrier is low; the maintenance is real. Here's how to build one correctly.
Choose where to put the skill. For a project-private skill not committed to source control, create .claude/skills/my-skill/SKILL.md. For a team skill committed to the project, use skills/my-skill/SKILL.md. For a personal global skill, use ~/.claude/skills/my-skill/SKILL.md.
Write the frontmatter. Start with the three required base fields, then add the od extensions your artifact type needs.
---
name: pricing-table
description: |
Pricing page with three tiers and a monthly/annual toggle.
Use when the brief asks for a "pricing page", "pricing table",
or "subscription plans" screen.
triggers:
- "pricing page"
- "pricing table"
- "subscription plans"
- "three tiers"
od:
mode: prototype
platform: desktop
preview:
type: html
entry: index.html
example_prompt: "Build a pricing page with three tiers and an annual toggle."
design_system:
requires: true
sections: [color, typography, components]
---
Write the workflow prose. Below the frontmatter, add a Markdown workflow section. Be explicit. The agent reads this verbatim---write it as instructions to a skilled but literal interpreter.
# Pricing Table Skill
Produce a single-page pricing component.
## Constraints
- Three tiers only (Starter, Pro, Enterprise)
- Monthly/annual toggle with JS state
- Highlighted "recommended" tier
## Workflow
1. Read the active DESIGN.md. All colors come from it.
2. Build the toggle: monthly default, annual shows 20% off.
3. Three columns; each gets: tier name, price, feature list,
CTA button.
4. Self-check: every color from DESIGN.md; toggle works
without external dependencies.
## Output
Single self-contained index.html with inline CSS and JS.
Create example.html. The merge checklist (and good practice) requires a working example HTML when the skill produces HTML output. Generate one run first, save the output as example.html in the skill directory. This is the visual reference for the skill picker and future authors.
Test across several prompts. Run the example_prompt from the frontmatter. Then run two or three variations. A skill that only works for its own example prompt isn't reliable. Test: a minimal brief ("three-tier pricing page"), a detailed brief ("pricing page for a SaaS dev tool, two annual plans, enterprise contact-sales"), and an off-label brief ("comparison table for three subscription levels"). If any of these produce wrong output, tighten the constraints in the workflow prose.
Document what the skill does not do. Add a short "Out of scope" section to the prose. If your skill is for a three-tier pricing page, say it doesn't handle enterprise custom-quote flows or usage-based pricing. This shapes the triggers---don't add "billing page" as a trigger if the skill can't handle billing history.
Skills are the single biggest reason Open Design output beats raw-prompt generation, and most teams under-invest in writing their own. A house skill encodes a team's standards once and applies them on every run---the ROI appears immediately on the second artifact. I've seen teams generate 50 artifacts from one well-authored house skill with zero drift between runs. The caution is real, though: a bad custom skill is worse than no skill. A skill with vague triggers surfaces on the wrong prompt; a skill with weak constraints produces inconsistent output; a skill that wasn't tested across several prompts creates false confidence. Test it hard before you trust it.
4.6 When to Write a Skill vs Tweak a Prompt
The skill/prompt boundary
Not every generation problem needs a new skill. Tweaking a prompt handles one-off customizations; a skill handles structural patterns you repeat. The skill/prompt boundary is a judgment call, but it's not an arbitrary one. There are four signals that tell you when a skill is the right answer.
| Signal | Use a skill when... | Tweak the prompt when... |
|---|---|---|
| Repetition | You're writing the same structural constraints in every prompt for this artifact type | This is a one-off request unlikely to recur in the same form |
| Consistency | Multiple team members generate this artifact and the results vary unacceptably | Variation across runs is acceptable or desirable |
| Complexity | The instructions are complex enough that prompts routinely miss one requirement | The instructions are simple enough to fit in one prompt without errors |
| Review feedback | You're giving the same feedback ("always put the CTA in the top-right") on every artifact of this type | Feedback is specific to this artifact's content, not its structure |
The practical rule: if you've added the same constraint to three different prompts for the same artifact type, move that constraint into a skill. Three is the threshold where the maintenance cost of prompting exceeds the cost of authoring a skill.
Composition Over Forking
When a bundled skill is close but not quite right, the instinct is to fork it---copy the whole skill directory, edit the copy. Resist this. Forked skills diverge from upstream as Open Design updates its bundled skills. You'll be maintaining your own version of a skill that the repo is actively improving.
The better pattern is composition: create a new skill that augments a bundled one rather than replacing it. Reference the bundled skill by name in your prompt, then add the custom constraints in your own skill's prose. Or use the skill picker to select the bundled skill and add your constraints as a follow-up prompt in the iterate beat.
Forked skills diverge from upstream. As of June 2026, Open Design's merge checklist (in docs/skills-contributing.md, Apache-2.0) documents the guidance: "prefer composing on top of bundled skills over forking them wholesale." Every release of Open Design may improve a bundled skill's self-checks, trigger quality, or craft references---a forked copy misses all of those improvements and accumulates debt with each release. Layer your changes; don't replace.
Invoking a Skill Directly
You can invoke a named skill explicitly in your prompt without relying on the picker's brief-matching:
Use the dashboard skill with the Stripe brand system to build
an analytics overview with four KPI cards and a revenue chart.
Naming the skill directly is useful when you know exactly which skill you want and don't want the picker to surface alternatives. It also makes prompts more auditable---a prompt that names its skill is easier to review and reproduce than one relying on implicit matching.
Most teams I've talked to skip the skill layer entirely for the first few months, then discover it all at once when they're tired of writing the same constraints in every prompt. The inflection point is usually when a new team member generates their first artifact and it looks nothing like what the senior designer expected. That's the moment a house skill would have prevented. Don't wait for that moment. Write one skill for your highest-volume artifact type in the first week. Test it across five prompts. Adjust. The compound interest starts immediately.
The Merge Checklist (For Contributors)
If you intend to contribute a skill back to the Open Design repository, the merge checklist is the quality bar to clear. The key criteria from the checklist as of June 2026:
| Check | Criterion | Common failure |
|---|---|---|
| Triggers | Concrete, not generic; "design something cool" is a hard reject | Trigger overlaps with existing skill; too broad |
| Example prompt | Must produce a working artifact end-to-end | Example prompt works in one brand system, fails in others |
| Design quality | No AI defaults: no purple gradients, no generic card styling, no lorem ipsum | Outputs that look "AI-made" rather than designed |
| Brand agnosticism | Skill must work with any DESIGN.md, not just the author's test brand | Hardcoded colors or fonts that ignore DESIGN.md tokens |
| Self-check | Workflow prose must include a self-check step | No verification that DESIGN.md tokens were honored |
Even if you're writing a private house skill that will never be contributed, these criteria are the right bar to hold yourself to. The merge checklist distills what makes a skill reliable versus one that only works when conditions are perfect.