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.
Integrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the…
$ npx skills add Dinil-Thilakarathne/sona-ui --skill add-sona-component -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install Dinil-Thilakarathne/sona-ui add-sona-component --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/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .claude/skills && cp -r skills-src/.agents/skills/add-sona-component .claude/skills/add-sona-component && 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 "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .claude/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-componentType 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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install Dinil-Thilakarathne/sona-ui add-sona-component --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .agents/skills && cp -r skills-src/.agents/skills/add-sona-component .agents/skills/add-sona-component && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .agents/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install Dinil-Thilakarathne/sona-ui add-sona-component --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/.agents/skills/add-sona-component .cursor/skills/add-sona-component && 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 "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .cursor/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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/Dinil-Thilakarathne/sona-ui.git --path .agents/skills/add-sona-component--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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install Dinil-Thilakarathne/sona-ui add-sona-component --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/.agents/skills/add-sona-component .gemini/skills/add-sona-component && 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 "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .gemini/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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 Dinil-Thilakarathne/sona-ui add-sona-componentInstalls 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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .github/skills && cp -r skills-src/.agents/skills/add-sona-component .github/skills/add-sona-component && 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 "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .github/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install Dinil-Thilakarathne/sona-ui add-sona-component --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/Dinil-Thilakarathne/sona-ui.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/.agents/skills/add-sona-component .opencode/skills/add-sona-component && 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 "add-sona-component" agent skill from https://github.com/Dinil-Thilakarathne/sona-ui/tree/master/.agents/skills/add-sona-component into .opencode/skills/add-sona-component/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "add-sona-component", 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.
add-sona-componentIntegrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the…
Add Sona Component is an agent skill from Dinil-Thilakarathne/sona-ui. Integrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the registry, and verifying it live. Use this whenever the user wants to add, create, scaffold, register, or "wire up" a new component in this repo (sona-ui), or mentions doing "the steps" / "the pipeline" to bring a component into the library — even if they only hand you the component code or just a name and an idea…
Its SKILL.md is about 2.2k 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, covering React components. The repository describes itself as: A modern UI component library built with React and TailwindCSS to help you build beautiful and accessible web applications faster. The licence is MIT.
7 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit 9a72ffe. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
bunFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
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.
Add Sona Component loads about 2.2k tokens when it runs. Until then it costs about 176 tokens; SKILL.md has 985 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 Dinil-Thilakarathne/sona-ui at commit 9a72ffe, republished under its MIT licence (© Dinil-Thilakarathne). 985 words, ~2,235 tokens.
.claude/skills/add-sona-component/SKILL.md (or your agent's skills folder).This skill captures the complete pipeline for landing a new component in this
library so nothing is forgotten. The library is a shadcn-style registry: source
components live in src/registry/, are described in a hand-authored registry
JSON, surfaced in docs (MDX) and a live playground, and then compiled by a build
script into generated artifacts that the app and the shadcn CLI consume.
The golden rule: you hand-author seven things, then run the build commands that regenerate everything else. Editing a generated file directly is wasted work — the next build overwrites it.
spotlight-card is the cleanest existing example of every step done correctly.
Before writing anything, read these to match the house style exactly:
src/registry/sonaui/spotlight-card/spotlight-card.tsxsrc/registry/examples/spotlight-card/spotlight-card-demo.tsxsrc/content/docs/spotlight-card.mdxspotlight-card entries in src/registry/registry.json,
src/registry/agent-metadata.ts, src/config/components.ts, and
src/registry/playground/index.tsxMirror its structure for the new component rather than inventing a layout.
Pin these down before editing (ask the user only for what you can't infer):
spotlight-card). Directory
names, registry name, doc filename, and every registry key must match it.Spotlight Card).components.ts (Components, Text,
Effects, …). The user's pipeline note calls for an Effects category — use
it if the component is a visual effect, otherwise pick the fitting existing one.motion).Do these in order. Match formatting, the cn import, "use client", and the
export default convention from the reference.
src/registry/sonaui/<slug>/<slug>.tsxThe real component. Export an interface named <Pascal>Props and JSDoc every
prop — the @default tag and the /** … */ description are parsed verbatim
by the prop-types build into the docs table. A missing JSDoc comment means a
blank cell in the published props table, so treat the comments as user-facing.
Include @default on every optional prop. If the component needs extra files
(CSS module, sub-component), add them in the same folder — the build picks up
every file in the directory.
src/registry/examples/<slug>/<slug>-demo.tsxThe default, prop-less example shown in the docs Preview. File name
<slug>-demo.tsx maps to the default variant. For extra variants, add
<slug>-<variant>.tsx in the same folder (the build keys them by the suffix
after the component name; see parseFileName in scripts/build-registry.ts).
src/registry/registry.jsonThis is the hand-authored source of truth (a JSON array), NOT the root
registry.json or public/r/* — those are generated. Add an object with a real
title, a real description (a sentence about what it does, not "Component for
<slug>"), the file path(s) under files, and dependencies listing the npm
packages from step 1. Follow the exact shape of the spotlight-card entry.
src/content/docs/<slug>.mdxCopy the spotlight-card MDX skeleton: frontmatter (title, slug, tags), an
intro, a ## Features list, then the standard MDX component blocks in this
order — <ComponentPreview component="<slug>" name="default" />,
## Playground + <ComponentPlayground component="<slug>" />,
## Installation + <ComponentInstallation component="<slug>" />,
## Usage + <ComponentUsage component="<slug>" />,
## Props + <PropTable component="<slug>" />. The prop table is derived —
don't hand-write prop rows in the MDX.
src/config/components.tsAdd one object to componentNavigationLinks: name (Title), slug,
href: "/docs/<slug>", and type set to the chosen category. If the category
is new (e.g. first Effects entry didn't exist yet) just use the string — the
nav groups by type automatically.
src/registry/playground/index.tsxImport the component at the top, then add one entry to playgroundRegistry keyed
by slug: a controls array (slider / text / toggle / select — see the Control
union at the top of the file) for the props worth exposing, and a render that
instantiates the real component with the live values cast to their types. This
file is intentionally hand-authored and decoupled from the generated example
registry.
src/registry/agent-metadata.tsAdd a "<slug>" entry to the agentResourceMetadata object with useWhen,
avoidWhen, capabilities, accessibility, motion (purpose +
reducedMotion), and a related array of sibling slugs. Mirror the
spotlight-card entry's shape. Without it, bun run check:agent-resources
rejects the publish — every registry:ui item must have a matching entry.
bun run build:registry
bun run build:agent-resources
bun run check:registry
bun run check:agent-resourcesbuild:registry runs three scripts in sequence and regenerates:
src/registry/index.ts (the example registry + code strings)registry.json and public/r/*.json (shadcn CLI registry)src/registry/prop-types.ts (the props table data, parsed from your JSDoc)build:agent-resources regenerates public/agent/catalog.json, the
per-component detail JSON at public/agent/components/<slug>.json, and
public/llms.txt / public/llms-full.txt from the agent-metadata.ts entry
added in step 7.
All of these are generated — never edit them by hand. If a prop is missing
or a description is wrong in the output, fix the JSDoc in step 1 (or the
metadata in step 7) and rebuild. Do not treat the component as published
until both check:registry and check:agent-resources pass.
After building, sanity-check that the new slug appears in
src/registry/prop-types.ts with all expected props, and that
public/r/<slug>.json and public/agent/components/<slug>.json were created.
The component isn't "done" until you've seen it work. Use the preview tools (not a manual hand-off):
preview_start) if one isn't running./docs/<slug> and preview_snapshot to confirm the page renders
with Preview, Playground, Installation, Usage, and the Props table populated.preview_click / preview_fill / preview_eval, then re-snapshot or
preview_screenshot to prove the effect and the playground controls work.preview_console_logs for errors.Report what you verified with a screenshot or snapshot, and call out anything the user still needs to decide (e.g. extra variants, copy tweaks).
src/registry/sonaui/<slug>/<slug>.tsx — component + JSDoc'd <Pascal>Propssrc/registry/examples/<slug>/<slug>-demo.tsx — default demo (+ variants)src/registry/registry.json — entry with real title/description/dependenciessrc/content/docs/<slug>.mdx — Preview · Playground · Installation · Usage · PropTablesrc/config/components.ts — nav entry under the right categorysrc/registry/playground/index.tsx — import + controls/render entrysrc/registry/agent-metadata.ts — <slug> entry with useWhen/avoidWhen/capabilities/accessibility/motionbun run build:registry — regenerates index.ts, public/r/*.json, prop-types.tsbun run build:agent-resources — regenerates public/agent/, public/llms.txtbun run check:registry and bun run check:agent-resources — both pass© Dinil-Thilakarathne, 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 .agents/skills/add-sona-component of Dinil-Thilakarathne/sona-ui.
Open the folder on GitHubat commit 9a72ffe
Add Sona Component 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 |
|---|---|---|---|---|---|---|
| Add Sona Component this skillDinil-Thilakarathne/sona-ui | 118 | — | ~2.2k | Automated safety check: Pass | MIT | |
| Web Artifacts Builderanthropics/skills | 180k | 40 repos | ~769 | Automated safety check: Pass | Apache-2.0 | |
| Tailwindcss Developmentanonaddy/anonaddy | 4.9k | 10 repos | ~865 | Automated safety check: Pass | MIT | |
| Core Component Library PatternsChrisWiles/claude-code-showcase | 6.1k | 8 repos | ~1.2k | Automated safety check: Pass | None | |
| React Router Developmentremix-run/react-router | 57k | 1 repos | ~1.5k | Automated safety check: Pass | MIT | |
| React UI State PatternsChrisWiles/claude-code-showcase | 6.1k | 8 repos | ~1.6k | Automated safety check: Pass | None |
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.
anonaddy/anonaddy
Always invoke when the user's message includes 'tailwind' in any form.
ChrisWiles/claude-code-showcase
Reference for building UI with a token-based core component library: spacing, color and typography tokens, Box, stacks, Text, Button, Input and Card, plus layout patterns.
remix-run/react-router
Guides work on React Router apps by first identifying whether the app uses Framework, Data or Declarative mode, then loading the matching reference and the installed package docs.
ChrisWiles/claude-code-showcase
Sets patterns for React interfaces: when to show loading spinners or skeletons, how to surface errors, how to disable buttons during async work and how to handle empty lists.
vercel-labs/next-beats
Guides implementing animated page and state transitions in React with the native View Transition API, covering shared elements, list reorders and directional navigation.
Dinil-Thilakarathne/sona-ui
OKLCH color space for web projects. An agent skill from Dinil-Thilakarathne/sona-ui.
Dinil-Thilakarathne/sona-ui
Discover and integrate Sona UI registry components. An agent skill from Dinil-Thilakarathne/sona-ui.
Dinil-Thilakarathne/sona-ui
A skill your agent uses when styling any elevated surface (card, dialog, popover, dropdown, menu, tooltip, sheet, toast) in a Tailwind project that has shadow-plugin installed.
Dinil-Thilakarathne/sona-ui
Create a source-backed Inspection Board around an existing Sona UI component for social demonstrations and later documentation experiments.
Dinil-Thilakarathne/sona-ui
Motion and interaction design expert based on Emil Kowalski, Jakub Krehel, and Jhey Tompkins' techniques.
Dinil-Thilakarathne/sona-ui
Promote a finished Craft, experimental UI, or reusable React component from the user's portfolio into the Sona UI library through an approval-gated two-phase workflow.
Categories
Integrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the…. Add Sona Component is an agent skill from Dinil-Thilakarathne/sona-ui. Integrate a new component into the Sona UI library end to end — the full per-component pipeline of writing the component, demo, docs, registry entry, nav link, playground controls, regenerating the registry, and verifying it live.
Add Sona Component fits situations like: wire up a new component in this repo (sona-ui); mentions doing the steps / the pipeline to bring a component into the library — even if they only hand you the component code; just a name and an idea; it for phrases like add a <name component.
Run `npx skills add Dinil-Thilakarathne/sona-ui --skill add-sona-component -a claude-code`. Or copy the skill folder (.agents/skills/add-sona-component in Dinil-Thilakarathne/sona-ui) into .claude/skills/add-sona-component in your project. Claude Code loads it when a task matches its description.
Run `npx skills add Dinil-Thilakarathne/sona-ui --skill add-sona-component -a codex`. Or copy the skill folder (.agents/skills/add-sona-component in Dinil-Thilakarathne/sona-ui) into .agents/skills/add-sona-component 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 Dinil-Thilakarathne/sona-ui --skill add-sona-component -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/add-sona-component, .gemini/skills/add-sona-component, .github/skills/add-sona-component and .opencode/skills/add-sona-component in your project.
Going by SKILL.md and its folder, Add Sona Component needs the command-line tools its instructions call (bun).
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. 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.
Add Sona Component is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.2k tokens (SKILL.md is roughly 8.9k 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 Add Sona Component: Web Artifacts Builder (anthropics/skills, 180k stars), Tailwindcss Development (anonaddy/anonaddy, 4.9k stars), Core Component Library Patterns (ChrisWiles/claude-code-showcase, 6.1k stars) and React Router Development (remix-run/react-router, 57k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
Dinil-Thilakarathne (a GitHub user) maintains it in Dinil-Thilakarathne/sona-ui, which has 118 GitHub stars. The repository holds 10 skills in this directory. The repository was last updated on October 7, 2026.
Source: Dinil-Thilakarathne/sona-ui on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.