Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/cardstack-catalog-reuse
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/catalog-reuse
What's inside
- Skill name
catalog-reuse- Description
- MANDATORY before writing any `.gts`. Boxel ships a curated catalog; search it before you author. Classify what you need, then apply the matching reuse operation: a **Spec** when you need building blocks (a CardDef to link, a FieldDef to contain, a component or command to import — catalog modules import directly, so this is the default), an **instance** when the content already exists (point a relationship at it), a **Listing** when the user wants a bundle of their own to keep and change (install or remix it; apps ship as app Specs, never Listings). Build new only for confirmed gaps. For UI primitives inside a `.gts` template, use boxel-ui-component-discovery instead.
- License
- MIT
- Instructions
- 445 lines in SKILL.md · view on GitHub
Files (2)
- SKILL.md
- restyle-reused-card.md · references/
SKILL.md (first lines)
# Catalog Reuse
Boxel ships a **curated catalog**: apps, cards and fields as definitions you
reference where they live, components, commands, themes, assets, and Listings
packaged for installation — real, tested parts other people finished and
shipped.
**First classify what kind of thing you need. Then apply the reuse operation for
that kind.** Everything below is that one idea, made operational.
## Non-negotiable rules
1. **Never author before searching.** By the time you write the first line of
any `.gts`, a catalog query must already have returned.
2. **Never treat a Spec as the reusable object.** A Spec is an index entry. You
reuse what its `ref` names, or an instance from its `linkedExamples` — never
the Spec itself.
3. **Never conclude a gap after one failed query.** Broaden once (step 5) before
declaring anything missing.
4. **Never pass over a suitable result without recording why.** Every hit is
adopted, or refused in writing naming what mismatched. A Listing you answered
by referencing its parts counts as adopted — say which parts, and move on.
A second hit that ships an export you already took is refused as a
duplicate, not taken as well: two hits that ship the same module export are
one decision.
5. **Never copy what you can reference.** Catalog modules import directly, so a
definition can be used without taking a copy of it. Install or remix a
Listing when the user wants their own bundle — and when you do take a copy,
take it through `install` or `remix`, never by hand.
6. **Prove it at the end.** For everything you authored from scratch, be able to
name the reuse option above it and why it was unusable. "I didn't look" means
it needs replacing.
Reading design or pattern references is not a substitute for searching: they
tell you how to build well, not whether to build at all.
## Required workflow
1. **Enumerate** every card, field, component, command, app, theme, and asset
the brief implies, in plain language. A noun that names an entity — "the
venue we booked", "the supplier", "the workshop" — is one of those cards:
enumerate the entity itself and search for it. Spelling it out as the two or
three attributes you would otherwise type is how a card-sized need gets
searched for as nothing at all. This holds when the brief reaches the entity
only through its attributes — "the supplier's payment terms", "the venue's
capacity" — a possessive names the entity as surely as a bare noun does, and
what it owns is the card's business, not yours to re-declare.
2. **Search Specs** for each enumerated need, and reference what you find.
One `matches` term per need. A search for the whole deliverable ("a service
desk", "a support app") is not a search for its parts and does not replace
one.
3. **Search Listings only when the user asked to own something**, and be able
to quote the words that asked — "our own", "a copy we can change",
"independent of theirs". No such words, no Listing search. That a Listing
exists and fits is not a reason to install it: nobody asked for a copy.
4. **Search instances** when a need is content-shaped — a particular author,
theme, config, image, or a sample to start from.
5. **Evaluate** each hit against the need; broaden once before calling anything
a gap.
6. **Build only confirmed gaps**, and record them. When a catalog definition
answers the brief, the build is an instance of it, not a design pass.
7. **Self-audit** before finishing.
Step 2 is the default because a catalog definition can be referenced where it
lives. Step 3 hands the user a copy — a separate thing to own, which cannot be
re-attached to the catalog later — so it answers a stated wish for their own
bundle, not a match in the search results.
## Reuse strategy: classify, then operate
**You may import catalog modules directly.** `@cardstack/catalog/` is a
registered import prefix, so a catalog module imports straight into your `.gts`
across realms — you do not have to copy the file in. That is why referencing is
the default and copying is the exception.
Every search here is a search over card instances — `Spec` and `Listing` are
ordinary card types, and so is `Author`. What differs is what a hit **denotes**.
| You need | Anchor on | A hit denotes | Operation |
|---|---|---|---|
| parts to build with | `Spec` | a module export, named by `ref` | link · contain · extend · import |
| content that exists | the card type itself | the instance | point a `linksTo` / `linksToMany` at it · or copy and edit |
| a bundle of their own | `Listing` | an installable bundle | `install` to hand it over as-is · `remix` when they will diverge from it |
Nothing exports a Listing, so no CodeRef names one: **a Spec query can never
return a Listing, and a Listing query can never return a bare definition.**
Different anchors, because they describe different kinds of thing.
**A Listing that fits is not a Listing you have to take.** What it bundles are
Specs, and referencing those answers the same need without handing over a copy —
the parts arrive wired to the catalog instead of forked from it. Choosing the
parts over the bundle is not passing over a suitable result; it is taking the
same result by the binding that keeps working.
### Parts: what each `specType` entitles you to
Take the target from the hit's `ref` (module + name) and wire **that**.
| `specType` | The export is | How you wire it |
|---|---|---|
| `card` | a **CardDef** | `linksTo` / `linksToMany` as a field · `extends` to specialize · `adoptsFrom` in an instance |
| `field` | a **FieldDef** | `contains` / `containsMany` · `extends` to specialize |
| `component` | a Glimmer component | import into your template's markup |
| `command` | a Command | import and invoke, or run through your session's command mechanism |
| `app` | an **AppCard** (the app's root CardDef) | import or `extends` it through `@cardstack/catalog/…` and link its `linkedExamples` instance; the cards it composes are `card` Specs of their own |
| `file` | an asset | an **instance** → use the instance anchor |
**How you declare the wiring is `boxel`'s call, not this skill's.** Its
Cardinal Rules own CardDef-vs-FieldDef and `contains` vs `linksTo`. Here you
decide *which* catalog unit answers the need; go there for how to write it.
`specType` crosses these rows — five values name module exports, `file` is an
instance.
Within parts, prefer more whole over less: a card over a field, a field over
hand-rolled markup. This is not a queue — a need that *is* a field starts at the
field. What it forbids is hand-building a part when a bigger unit contains it.
### Content: two different instance searchesFrom cardstack/boxel-skills, MIT.
More from cardstack/boxel-skills
- 0.592score
boxel
cardstack
Use whenever creating, reading, or editing Boxel cards (.gts files), card instances (.json), fields, templates, queries, or anything in a Boxel realm.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-markdown-format
cardstack
Use when authoring a `markdown` template (static markdown format) on a CardDef or FieldDef — defaults, markdownEscape, and markdown helpers.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-patterns
cardstack
Use when the user names an outcome ("show a chart", "let users pick a color", "build a dashboard", "summarize comments", "embed AI image generation", "lay out…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-theme-development
cardstack
Use when the deliverable is a theme ARTIFACT — creating, converting, auditing, or patching Theme, StructuredTheme, StyleReference, DetailedStyleReference, or…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-ui-component-discovery
cardstack
MANDATORY before writing any UI in a `.gts` template, including a quick fix to an existing card (turning a styled span or div into a button, wiring a dead…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-ui-guidelines
cardstack
Use when IMPLEMENTING or REVIEWING UI in Boxel templates (writing a template, or reviewing a change, diff or pull request that touches one) — applying…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
card-motion
cardstack
Use when a card should animate: elements entering and leaving, a list or grid rearranging, a tile opening into a detail view, drag and reorder, scroll-linked…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
catalog-listing
cardstack
Use when installing, browsing, remixing, updating, or submitting catalog listings (Apps, Cards, Fields, Skills, Themes) from a Boxel catalog realm.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-design
cardstack
Use when DECIDING a Boxel card's visual language — mood, palette, typography direction, asset direction, one visual signature, the design-playbook process.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-environment
cardstack
Use when running, navigating, or orchestrating tasks inside the live Boxel application — switching between Code Mode and Interact Mode, searching and editing…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-file-def
cardstack
Use when adding or working with file-typed fields (FileDef, ImageDef, MarkdownDef, PngDef, CsvFileDef).
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-flavored-markdown
cardstack
Use when authoring or editing Boxel Flavored Markdown (BFM) content — content fields rendered as rich markdown with :card/::card directives, mermaid diagrams…
SkillAFreshness: A★ 1Claude Code +9
Signals
- Stars
- 1
- Forks
- 0
- Open issues
- 0
- Last commit (this folder)
- Oct 23, 2026 (6 days ago)
- Last release
- Oct 23, 2026 (5 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Repository
- github.com/cardstack/boxel-skills
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from cardstack
- 0.592score
boxel
cardstack
Use whenever creating, reading, or editing Boxel cards (.gts files), card instances (.json), fields, templates, queries, or anything in a Boxel realm.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-design
cardstack
Use when DECIDING a Boxel card's visual language — mood, palette, typography direction, asset direction, one visual signature, the design-playbook process.
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-environment
cardstack
Use when running, navigating, or orchestrating tasks inside the live Boxel application — switching between Code Mode and Interact Mode, searching and editing…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-file-def
cardstack
Use when adding or working with file-typed fields (FileDef, ImageDef, MarkdownDef, PngDef, CsvFileDef).
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-flavored-markdown
cardstack
Use when authoring or editing Boxel Flavored Markdown (BFM) content — content fields rendered as rich markdown with :card/::card directives, mermaid diagrams…
SkillAFreshness: A★ 1Claude Code +9 - 0.592score
boxel-markdown-format
cardstack
Use when authoring a `markdown` template (static markdown format) on a CardDef or FieldDef — defaults, markdownEscape, and markdown helpers.
SkillAFreshness: A★ 1Claude Code +9
Cite this page
catalog-reuse skill. Agent Mart. https://agentmart.dev/skills/cardstack-catalog-reuse (last updated 2026-10-24)