Web Artifacts Builder
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
Write "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request.
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install murphytrueman/design-system-ops component-decision-tree --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/component-decision-tree .claude/skills/component-decision-tree && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .claude/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-treeType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install murphytrueman/design-system-ops component-decision-tree --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/component-decision-tree .agents/skills/component-decision-tree && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .agents/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install murphytrueman/design-system-ops component-decision-tree --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/component-decision-tree .cursor/skills/component-decision-tree && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .cursor/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/murphytrueman/design-system-ops.git --path skills/component-decision-tree--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install murphytrueman/design-system-ops component-decision-tree --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/component-decision-tree .gemini/skills/component-decision-tree && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .gemini/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install murphytrueman/design-system-ops component-decision-treeInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/component-decision-tree .github/skills/component-decision-tree && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .github/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install murphytrueman/design-system-ops component-decision-tree --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/murphytrueman/design-system-ops.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/component-decision-tree .opencode/skills/component-decision-tree && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "component-decision-tree" agent skill from https://github.com/murphytrueman/design-system-ops/tree/main/skills/component-decision-tree into .opencode/skills/component-decision-tree/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "component-decision-tree", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
component-decision-treeWrite "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request.
Component Decision Tree is an agent skill from murphytrueman/design-system-ops. Write "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request. Triggers: which component should I use, choose between X and Y, dialog vs drawer, selection guide. One chosen component: usage-guidelines.
Its SKILL.md is about 4.9k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Frontend & Design. The repository describes itself as: Claude Code skills for the work that keeps a design system alive. The licence is MIT.
6 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit f167898. It shows what the files ask for, not the result of running them.
Pre-approves these tools, so the agent can use them without asking each time:
ReadWriteGrepGlobBash(cat:*)Bash(find:*)Bash(head:*)Bash(ls:*)From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
npxFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use npx, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Component Decision Tree loads about 4.9k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,962 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from murphytrueman/design-system-ops at commit f167898, republished under its MIT licence (© murphytrueman). 1,962 words, ~4,911 tokens.
.claude/skills/component-decision-tree/SKILL.md (or your agent's skills folder).A skill for building decision trees that map user intents and requirements to specific component selections. The primary output is a set of "Choosing between…" pages in the docs, one per cluster of confusable components, written as the questions a senior designer would ask; the same trees can be written as YAML for tooling when something will read it. Both reduce the guesswork that leads to component misuse, duplication, and inconsistency.
Confirm that every path in this skill's frontmatter references: exists relative to this SKILL.md. If any is missing, stop: the install is incomplete, usually because a flattening installer (for example npx skills install) dropped the repo-root knowledge-notes/ directory. Tell the user to reinstall by a method in 1-INSTALL.md and run verify-install.sh from the install root. Proceed without the references only if the user explicitly says to, and then say in the output that it was produced without the pack's reference material.
Component selection is the first decision in any design system interaction, and it is the one that AI agents get wrong most often. The failure mode is not random — it follows predictable patterns. An agent selects a Modal when a Dialog was appropriate. It uses a Card where a List Item fits better. It creates a custom component because it could not find the existing one that serves the need.
These errors have the same root cause: the agent does not have a decision framework. It has a list of components (if it has anything at all) and it pattern-matches the user's request against component names and descriptions. This works when the match is obvious ("I need a button" → Button) and fails when the match requires judgment ("I need to show a collection of items that users can filter and sort" → is that a Table, a DataGrid, a List with filters, or a custom composition?).
Decision trees encode the judgment. Instead of relying on an agent's ability to infer the right component from a description, the tree asks a structured sequence of questions that narrow the selection to the correct component. The questions are the same ones a senior designer or developer would ask when advising a junior team member.
The practical output is a page a human reads and an agent is pointed at from AGENTS.md (agent-instructions links the choosing pages). A YAML form of the same tree is useful only when a tool will traverse it; write it on request, not by default, so there is one thing to keep current.
This skill produces decision trees for component selection — choosing between components. It does not document how to use a single component once selected (use usage-guidelines for that) or generate component metadata schemas (use metadata-schema-generator). If the system has fewer than 5 components, a decision tree adds overhead without value — a simple component index is sufficient. If no component inventory exists, run component-audit or codebase-index first to establish one.
If .ds-ops-config.yml exists, follow the configuration-and-recurring knowledge note (../../knowledge-notes/configuration-and-recurring.md) for loading, integration fallbacks and recurring runs. This skill reads:
system.component_paths — directs scanning to component directoriessystem.category_model — determines top-level decision tree branches (atomic, functional, custom)integrations.* — component data sources (see below)decision_tree.output_format — markdown (default: pages in docs/choosing/), yaml or json (machine-readable trees in .ai/decision-trees/ as well as the pages)Figma MCP (integrations.figma.enabled: true):
integrations.figma.file_keyStorybook (integrations.storybook.enabled: true):
Codebase index (.ai/index/component-inventory.yml):
Before building decision trees, understand what components exist and how they cluster.
Component inventory: List every component with its purpose and category. If a codebase index exists, use it. If not, scan the component directories.
Functional clusters: Group components by the user need they serve, not by their technical category. A single user need often spans multiple components. The two tables below are illustrative: build yours from the scanned inventory, not from these names.
| User need | Components that serve it |
|---|---|
| Show a notification | Toast, Banner, Alert, InlineMessage, Snackbar |
| Collect user input | Input, TextArea, Select, Combobox, DatePicker, Checkbox, Radio, Switch |
| Navigate between views | Tabs, Sidebar, Breadcrumb, Pagination, BottomNav |
| Display a collection | Table, DataGrid, List, CardGrid, Timeline |
| Confirm an action | Dialog, ConfirmationModal, AlertDialog |
| Show contextual info | Tooltip, Popover, HoverCard, Dropdown |
Overlap analysis: Identify components with overlapping use cases. These are the decision points where agents (and humans) get confused. In real output, each distinguishing factor cites where it came from (the system's docs, source, or the user); otherwise mark it proposed:
| Component A | Component B | Distinguishing factor |
|---|---|---|
| Dialog | Drawer | Dialog interrupts for a focused decision and closes; Drawer keeps the page in view for a task alongside it (if the system's docs say so). "Modal" is a property either can have, not a component, per the ARIA Authoring Practices; a system with both Modal and Dialog components has a naming finding for naming-audit |
| Toast | Banner | Toast is transient and non-blocking; Banner persists until dismissed |
| Select | Combobox | Select has a fixed option list; Combobox allows search/filter |
Provenance rule. Two hard rules for everything this skill writes:
resolve: names a component that exists in the scanned inventory. If the right answer is a component the system doesn't have, say so in the summary rather than resolving to it.basis: a docs or source path, user, or proposed. Selection logic you inferred from general design practice is proposed until the team confirms it. See "Every figure and fact needs a source" in the output-discipline knowledge note.Ask for or confirm:
Define the intents that drive component selection. Intents are what the user or agent is trying to accomplish, expressed independently of any specific component.
Cover the categories the inventory actually needs; typical ones:
intents:
display_notification:
description: "Show feedback about an action or system event"
qualifiers:
persistence: ["transient", "persistent", "dismissible"]
severity: ["success", "warning", "error", "info"]
position: ["inline", "overlay", "page-level"]
blocking: ["blocks_interaction", "non_blocking"]For each functional cluster, build a decision tree that maps intents and qualifiers to component selections.
Each node in the tree is either a question node (asks a qualifying question) or a leaf node (resolves to a component).
Quote answer keys that YAML would otherwise read as booleans: "yes", "no", "on", "off", "true", "false". Unquoted yes: and no: parse as true and false in YAML 1.1 parsers, so a tool looking up "yes" finds nothing. Descriptive keys (persists, transient) avoid the problem entirely.
Illustrative example (component names stand in for the scanned inventory):
decision_trees:
notification:
description: "Select the right component for showing feedback or notifications"
root:
question: "Does the notification need to persist until the user dismisses it?"
options:
"yes":
question: "Is the notification related to the current page/section or the whole application?"
options:
current_section:
question: "Is it inline with the content or separate from it?"
options:
inline:
resolve: "InlineMessage"
confidence: "high"
rationale: "Inline messages appear within the content flow for contextual feedback"
basis: "docs/components/inline-message.md"
separate:
resolve: "Alert"
confidence: "high"
rationale: "Alerts appear as distinct blocks for section-level notifications"
basis: "docs/components/alert.md"
whole_application:
resolve: "Banner"
confidence: "high"
rationale: "Banners span the full width for application-level persistent messages"
basis: "user"
"no":
question: "Does the user need to take action based on the notification?"
options:
"yes":
resolve: "Alert"
confidence: "medium"
rationale: "An action the user must be able to take shouldn't live in something that disappears"
basis: "proposed"
notes: "A Toast with an action fails keyboard and screen-reader users who can't reach it before it times out (WCAG 2.2.1 Timing Adjustable); use a persistent Alert, or a Toast only if it never auto-dismisses"
"no":
resolve: "Toast"
confidence: "high"
rationale: "Standard toast for transient, informational feedback"
basis: "docs/components/toast.md"Every question node must:
Every leaf node must:
basisnotes when there is an edge case or alternative (required for medium and low confidence; optional otherwise)For component pairs that are frequently confused, add explicit disambiguation. Illustrative example: the Dialog/Drawer split and the option-count threshold are one system's conventions, not general rules, so take yours from the system's docs or mark them proposed.
disambiguation:
dialog_vs_drawer:
trigger: "Agent or user is uncertain between Dialog and Drawer"
question: "Does the user need to see the page behind while they work?"
options:
decision_then_return:
description: "A focused decision or short form; the page is irrelevant until it's done"
resolve: "Dialog"
rationale: "Dialogs interrupt, take focus, and close on completion"
basis: "docs/overlays.md"
task_alongside_page:
description: "Editing or browsing something that relates to what's on the page"
resolve: "Drawer"
rationale: "Drawers keep the page visible and can stay open while the user works"
basis: "docs/overlays.md"
confirming_an_action:
description: "The user is confirming or cancelling a specific action"
resolve: "ConfirmationDialog"
rationale: "Confirmation dialogs are specialised for binary confirm/cancel decisions"
basis: "proposed"
select_vs_combobox:
trigger: "Agent or user is uncertain between Select and Combobox"
question: "How many options are there, and does the user know what they're looking for?"
options:
few_options_user_browses:
description: "Fewer than [threshold] options, user scans the list"
resolve: "Select"
rationale: "Select is simpler and appropriate when the option set is scannable"
basis: "proposed"
many_options_user_searches:
description: "[threshold] or more options, or user typically knows what they want"
resolve: "Combobox"
rationale: "Combobox adds search/filter capability for large or known-target option sets"
basis: "proposed"
options_are_dynamic:
description: "Options are loaded from an API or depend on user input"
resolve: "Combobox"
rationale: "Combobox supports async loading and filtered results"
basis: "src/components/Combobox/Combobox.tsx"Set [threshold] from the system's docs; if they don't give one, ask, or leave the placeholder and list it in the summary.
One markdown page per functional cluster in docs/choosing/ (or the docs platform's equivalent), plus an index:
docs/choosing/
README.md index: one line per cluster, and the confusable pairs
notifications.md
input.md
overlays.md
...Each page renders its tree as the questions in order, with the answer that resolves and why, and ends with a "Confusable pairs" table for its disambiguation nodes:
# Choosing a notification component
Start here if you need to tell the user something happened.
1. **Does it need to persist until the user dismisses it?**
- Yes, and it concerns the current section → **InlineMessage** if it sits in the content flow, **Alert** if it's a distinct block. [docs/components/alert.md]
- Yes, and it concerns the whole application → **Banner**. [user]
- No → next question.
2. **Does the user need to act on it?**
- Yes → **Alert** (persistent). A Toast with an action fails users who can't reach it before it times out. [proposed]
- No → **Toast**. [docs/components/toast.md]
## Confusable pairs
| If you're torn between | Ask | Choose |
|---|---|---|
| Toast and Banner | Does it need to persist? | Banner if yes, Toast if no |Every resolution carries its basis in brackets, and [proposed] marks the ones the team hasn't confirmed. If agent-instructions has written AGENTS.md, add the docs/choosing/ link to it (or tell the user to).
decision_tree.output_format is yaml or json).ai/decision-trees/
trees/<cluster>.yml
disambiguation/<pair>.yml
intent-taxonomy.yml
decision-tree-manifest.yml
query-guide.mdThe manifest lists each tree with its file, the components it covers and its depth, and the components deliberately left uncovered with the reason (utility components don't need selection logic). Coverage figures are counted from the files written. query-guide.md tells an agent how to traverse: map the request to an intent, answer each question from the requirements and ask rather than guess, treat basis: proposed as a suggestion, present both paths when two look equally valid, and fall back to name matching for uncovered components. The pages and the trees must say the same thing; generate the YAML from the same decisions, not separately.
End with a short chat summary:
docs/choosing/, and any trees under .ai/decision-trees/basis: proposed, every open placeholder such as [threshold], and any intent the inventory has no component forresolve: names a component in the scanned inventory, and every rationale has a basis"yes"/"no" are quoted (or replaced with descriptive keys) and the files parse as YAML© murphytrueman, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/component-decision-tree of murphytrueman/design-system-ops.
Open the folder on GitHubat commit f167898
Component Decision Tree next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Component Decision Tree this skillmurphytrueman/design-system-ops | 201 | — | ~4.9k | Automated safety check: Pass | MIT | |
| Web Artifacts Builderanthropics/skills | 180k | 40 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| React Doctormakeplane/plane | 60k | 12 repos | ~657 | Automated safety check: Pass | AGPL-3.0 | |
| React Composition Patternsvercel-labs/openreview | 1.7k | 58 repos | ~721 | Automated safety check: Pass | MIT | |
| Impeccablebestofjs/bestofjs | 3.1k | 27 repos | ~2.6k | Automated safety check: Pass | MIT | |
| Figma Design System Builderwarpdotdev/warp | 65k | 2 repos | ~4.4k | Automated safety check: Pass | AGPL-3.0 |
anthropics/skills
Builds multi-component claude.ai HTML artifacts as a small React, TypeScript and Tailwind project, then bundles it into one shareable HTML file.
makeplane/plane
Scans React code for lint, accessibility, bundle size and architecture issues, reports a health score and checks that changes do not lower it.
vercel-labs/openreview
Rules for structuring React components with composition instead of boolean props, covering compound components, lifted state, variants and React 19 changes.
bestofjs/bestofjs
A skill your agent uses when the user wants to design, redesign, shape, critique, audit, polish, clarify, distill, harden, optimize, adapt, animate, colorize, extract, or otherwise improve a…
warpdotdev/warp
Builds or updates a design system in Figma from a codebase in ordered phases: discovery, variables and tokens, components, theming and documentation, with checkpoints.
anonaddy/anonaddy
Always invoke when the user's message includes 'tailwind' in any form.
murphytrueman/design-system-ops
Write the AGENTS.md that tells coding agents how to use this design system: where things live, sourced rules, how to check work, what not to do; Claude, Cursor or Copilot pointers on request.
murphytrueman/design-system-ops
Write a six-section prose description (purpose, props, anti-patterns, composition, accessibility, examples) for a Figma component's description field so LLMs read it via MCP.
murphytrueman/design-system-ops
Write release notes, a migration guide and a team announcement for a design system change that is already decided, scaled to its impact.
murphytrueman/design-system-ops
Generate machine-readable index files in .ai/index/ (component inventory, uses/usedBy graph, stats) for AI agents.
murphytrueman/design-system-ops
Generate tested jscodeshift/postcss codemods for design system migrations: token renames, prop renames or removals, import paths, component swaps.
murphytrueman/design-system-ops
Audit prop APIs across a component library: naming consistency, boolean/default patterns, type coverage, exported types, breaking changes between versions.
Categories
Write "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request. Component Decision Tree is an agent skill from murphytrueman/design-system-ops. Write "choosing between" pages (docs/choosing/) that route an intent to the right component via narrowing questions; YAML trees on request.
Component Decision Tree fits situations like: frontend & Design work in your project.
Run `npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a claude-code`. Or copy the skill folder (skills/component-decision-tree in murphytrueman/design-system-ops) into .claude/skills/component-decision-tree in your project. Claude Code loads it when a task matches its description.
Run `npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a codex`. Or copy the skill folder (skills/component-decision-tree in murphytrueman/design-system-ops) into .agents/skills/component-decision-tree in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add murphytrueman/design-system-ops --skill component-decision-tree -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/component-decision-tree, .gemini/skills/component-decision-tree, .github/skills/component-decision-tree and .opencode/skills/component-decision-tree in your project.
Going by SKILL.md and its folder, Component Decision Tree needs the command-line tools its instructions call (npx). Our summary lists: Node.js. Its frontmatter pre-approves these tools: Read, Write, Grep, Glob, Bash(cat:*), Bash(find:*), Bash(head:*), Bash(ls:*).
SKILL.md contains no URLs. Its commands use npx, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Component Decision Tree is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.9k tokens (SKILL.md is roughly 20k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Component Decision Tree: Web Artifacts Builder (anthropics/skills, 180k stars), React Doctor (makeplane/plane, 60k stars), React Composition Patterns (vercel-labs/openreview, 1.7k stars) and Impeccable (bestofjs/bestofjs, 3.1k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
murphytrueman (a GitHub user) maintains it in murphytrueman/design-system-ops, which has 201 GitHub stars. The repository holds 36 skills in this directory. The repository was last updated on September 24, 2026.
Source: murphytrueman/design-system-ops on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.