Install any skill in seconds. Free to start, no credit card required.
Get Started Free →tryghost/Shade component decision
Decide which Shade layer (Token, Primitive, Component, Recipe, Pattern) a new piece of UI belongs in — and whether it should be added to Shade at all.
Passed 22 of 22 test cases with the skill, and 9 of 22 without it.
and 14 more in the full report
13 fixed9 passed either way0 still failing0 broke
Tokens, turns and time describe resource use, not a dollar price.
One of 13 test cases the skill fixed. Same model, same prompt, with and without the skill.
We want to add a foundational layout component to Shade that handles typography hierarchy, text wrapping, and alignment without any UI control styling or Ghost domain logic. Which layer handles layout and structural foundations like this, and what directory does it belong in?
| Checked | Without skill | With skill |
|---|---|---|
| Classifies foundational layout and typography elements into the Primitive layer. | Passed | Passed |
| Specifies file placement in src/components/primitives/. | Missed | Passed |
The instructions your model reads when the skill loads.
Before adding anything to Shade, walk the decision flow and the promotion checklist. The default is keep code local first — premature design system additions lock in the wrong API.
| Layer | Lives in | Examples |
|---|---|---|
| Token | theme-variables.css, tailwind.theme.css | --background, --text-base, --radius-md |
| Primitive | src/components/primitives/ | Stack, Inline, Box, Grid, Container, Text |
| Component | src/components/ui/ | Button, Input, Dialog, Tabs, Card |
| Recipe | src/components/ui/<name>.ts (no JSX) | inputSurface |
| Pattern | src/components/patterns/ | PageHeader, KpiCard, Filters, GhAreaChart |
Plus one additional barrel:
page-templates/ (@tryghost/shade/page-templates) — top-level page wrappers (ListPage today). Composes Patterns + Components + Primitives. If you're building a new shape that wraps a whole admin page, this is where it goes. See shade-page-templates.theme-variables.css (semantic) or tailwind.theme.css (raw @theme).src/components/ui/.Quick gut check: generic name → Component; Ghost-shaped name → Pattern. Button is web-y; KpiCard is Ghost-y.
Each layer can use anything below it. The reverse is forbidden.
<MembersTable> that's just <Table> with three preset columns belongs in the app, not Shade.test cases passed, vs 9 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.