Claude Code Agent Development
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Subagent for figma-from-code Phase 0a. An agent skill from bitovi/ai-enablement-prompts.
$ npx skills add bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install bitovi/ai-enablement-prompts figma-from-code-discovery-components --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/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .claude/skills/figma-from-code-discovery-components && 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 "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .claude/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-componentsType 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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install bitovi/ai-enablement-prompts figma-from-code-discovery-components --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .agents/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .agents/skills/figma-from-code-discovery-components && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .agents/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install bitovi/ai-enablement-prompts figma-from-code-discovery-components --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .cursor/skills/figma-from-code-discovery-components && 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 "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .cursor/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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/bitovi/ai-enablement-prompts.git --path plugins/figma-from-code/skills/figma-from-code/1-discovery-components--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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install bitovi/ai-enablement-prompts figma-from-code-discovery-components --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .gemini/skills/figma-from-code-discovery-components && 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 "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .gemini/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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 bitovi/ai-enablement-prompts figma-from-code-discovery-componentsInstalls 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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .github/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .github/skills/figma-from-code-discovery-components && 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 "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .github/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install bitovi/ai-enablement-prompts figma-from-code-discovery-components --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/bitovi/ai-enablement-prompts.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/plugins/figma-from-code/skills/figma-from-code/1-discovery-components .opencode/skills/figma-from-code-discovery-components && 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 "figma-from-code-discovery-components" agent skill from https://github.com/bitovi/ai-enablement-prompts/tree/main/plugins/figma-from-code/skills/figma-from-code/1-discovery-components into .opencode/skills/figma-from-code-discovery-components/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "figma-from-code-discovery-components", 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.
figma-from-code-discovery-componentsSubagent for figma-from-code Phase 0a. An agent skill from bitovi/ai-enablement-prompts.
Figma From Code Discovery Components is an agent skill from bitovi/ai-enablement-prompts. Subagent for figma-from-code Phase 0a. Discovers the complete component architecture of a web application via browser crawling and static code scanning. Produces a topologically-sorted build order and inspects the target Figma file for existing pages and components.
Its SKILL.md is about 5.3k tokens, which your agent loads only when the skill is triggered. The skill folder holds 1 other file (for example `README.md`).
It sits in Agent Workflows, covering Subagents. It works with Figma. The repository describes itself as: Prompts Bitovi uses for software development. The licence is MIT.
10 steps, taken from the step headings in SKILL.md.
Read from SKILL.md and the folder at commit df229b1. 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:
nodecurlFrom the folder's file list and the shell code blocks in SKILL.md.
Hosts in commands or code, which the agent is likely to contact:
figma.comFrom 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.
Figma From Code Discovery Components loads about 5.3k tokens when it runs. Until then it costs about 76 tokens; SKILL.md has 1,894 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 bitovi/ai-enablement-prompts at commit df229b1, republished under its MIT licence (© bitovi). 1,894 words, ~5,324 tokens.
.claude/skills/figma-from-code-discovery-components/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.Discovers the complete component architecture of a web application by combining two methods: (1) browser crawling to find runtime components with routes and selectors, and (2) static code scanning to find all components including those not rendered during the crawl (modals, inline-edit variants, conditional renders, etc.). Produces a merged, topologically-sorted build order (leaves first, layouts last). Also inspects the target Figma file to report existing pages, variable collections, and components.
figma-from-code on a fresh Figma filecomponent-map.json is missing{devServerUrl} (or custom URL)node_modules/playwright-core)Placeholders like
{devServerUrl}resolve fromstate.json → config.
fileKey: The Figma file key (for the Figma inspection step)devServerUrl (optional, default http://localhost:5173): The running dev server URLWritten to .temp/figma-from-code/:
| File | Contents |
|---|---|
component-map.json | Authoritative tiered build order (machine-readable), incl. capture data |
component-map.md | Human-readable report with Mermaid diagram |
interactions.json | Interaction scenarios that reveal gated components (authored in step 3c) |
mkdir -p .temp/figma-from-code/curl -s --max-time 3 {devServerUrl} > /dev/null || echo "Dev server not running"If not running, halt and tell the user to start the dev server.
The link-following crawler only finds routes reachable via <a href>. Routes reached programmatically (e.g. navigate('/cases/new')) are invisible to it, so enumerate routes from the source code first:
<Route path=...> in React Router, file-based route folders) and list every declared path.navigate(, router.push(, history.push(, and to=/href= string literals./cases/:id where the page renders a different component when id === 'new' means /cases/new is a distinct concrete route — include it explicitly.Produce a comma-separated route list of concrete, parameterless paths (e.g. /,/cases/,/cases/new,/tasks/new). Leave :id-style dynamic routes to the crawler — it instantiates them from real links.
node {skillRoot}/scripts/map-components.js \
"{devServerUrl}" --routes {enumerated_routes} --crawl --max-crawl 30 \
--markdown .temp/figma-from-code/component-map.md \
--output .temp/figma-from-code/component-map.jsonThis produces the authoritative build order — a topologically-sorted list of tiers where leaves come first and layouts come last. All subsequent phases of figma-from-code use this output. Each component found at runtime gets a capture object recording the exact URL and CSS selector (plus ordered fallbackSelectors) where it was observed.
After the passive pass, read component-map.json and list components with capture: null / instances: 0. Many of these only mount after a user interaction (dialogs, dropdown menus, tooltips, click-to-edit inputs). For each, read its source file and call sites to find the trigger element, then write a scenario to .temp/figma-from-code/interactions.json:
{
"scenarios": [
{
"id": "case-more-options",
"route": "/cases/:id",
"steps": [{ "click": "button[aria-label=\"More options\"]" }],
"expect": ["MoreOptionsMenu"]
},
{
"id": "editable-title-edit",
"route": "/cases/:id",
"steps": [{ "click": "main h1" }],
"expect": ["EditableTitle", "EditControls"]
}
]
}route may be a visited concrete route or a :param pattern — patterns resolve against a concretely visited URL.steps run in order; verbs are click, hover, press (e.g. "Escape"), and fill ({"fill": {"selector": "...", "value": "..."}}). Each step accepts an optional settle (ms, default 400).expect lists component names the scenario should reveal — used to report scenarios that need refinement.click/hover steps: only those are replayed at screenshot time (Phase 2.5). press/fill steps run during discovery but are not part of the capture replay.Safety rules (mandatory — copy into every scenario review):
type="submit" button. Opening a confirmation dialog is allowed; confirming it is not.nth-of-type) ones.node {skillRoot}/scripts/map-components.js \
"{devServerUrl}" \
--augment .temp/figma-from-code/component-map.json \
--interactions .temp/figma-from-code/interactions.json \
--markdown .temp/figma-from-code/component-map.md \
--output .temp/figma-from-code/component-map.json--augment seeds from the existing map and skips the passive crawl, so this pass only runs the scenarios. Read interactionResults from the output:
status: "ok" — scenario ran; found lists revealed components (now carrying capture with the replay recipe).status: "missing_expected" — scenario ran but some expected components were not revealed; missing lists them.status: "failed" / "no_matching_route" — step selector or route problem; error has details.For scenarios that did not reveal their expected components, refine the step selectors and re-run 3d (max 2 refinement iterations). Debug a single scenario interactively with:
node {skillRoot}/scripts/discover-components.js "{devServerUrl}{route}" --click "{trigger}" --listComponents still without capture after refinement are genuinely non-renderable from the live app (loading/error states, hover-only primitives) — record each with its reason for the final report.
The DOM scanner extracts React component names from the fiber tree, which may differ from the Figma naming convention for icons and assets:
displayName (e.g. EllipsisVertical) rather than the import alias used in code (e.g. MoreVertical)CartonLogo) rather than the Figma asset name (e.g. Asset/CartonLogoSvg)Run the normalization script to align names with Figma conventions. This requires icons.json from Phase 0b.
node {skillRoot}/scripts/normalize-component-map.js \
.temp/figma-from-code/component-map.json \
.temp/figma-from-code/icons.json \
--writeIf icons.json does not yet exist (Phase 0b hasn't run), skip this step — the orchestrator will re-run normalization after Phase 0b completes.
The script resolves names via three strategies:
Icon/lucide-react exports → prefix with Icon/Asset/Run the code scanner in discovery mode to locate component directories:
node {skillRoot}/scripts/discover-code-components.js \
--discover --root .Read the JSON output and automatically apply the following default exclusions (do not wait for user input — this is a subagent):
ui/ that is a direct child of a components/ folder (shadcn primitives, not application components)__tests__, __stories__, .storybook, or node_modules/dist/ or /build/For each excluded directory, record the directory path and the exclusion reason. Include the final componentDirectories list and the list of any excluded directories with their reasons in the discovery summary returned to the orchestrator. The orchestrator will surface these to the user at the next user-facing checkpoint so they can request adjustments if needed.
After running --discover and applying exclusions, write both componentDirectories and excludedDirectories into component-map.json as top-level fields so they are preserved through the --scan merge in Step 6 and available to the summary script in Step 10:
// Merge into component-map.json after --scan completes
const map = JSON.parse(fs.readFileSync('.temp/figma-from-code/component-map.json', 'utf-8'));
map.componentDirectories = componentDirectories; // [{ path, componentCount, subdirs }]
map.excludedDirectories = excludedDirectories; // [{ path, reason }]
fs.writeFileSync('.temp/figma-from-code/component-map.json', JSON.stringify(map, null, 2));Run the code scanner in scan mode with the confirmed directories:
node {skillRoot}/scripts/discover-code-components.js \
--scan {confirmed_dir_1} {confirmed_dir_2} \
--browser-map .temp/figma-from-code/component-map.json \
--output .temp/figma-from-code/component-map.json \
[--exclude {excluded_dirs}]This merges code-discovered components into the browser-discovered map. Each component gains a source field ("browser", "code", or "both") and a codeDependencies array. Tiers are recomputed from static import analysis to include all components. Browser data (routes, selector, instances) is preserved for components found by both methods.
Read .temp/figma-from-code/component-map.json and extract:
tiers[] — the tiered build order (number of tiers varies per project)tree — the merged component hierarchycomponentCount — total components to build{bothCount} found in browser + code{codeOnlyCount} found in code only{browserOnlyCount} found in browser only (no source file matched)Use get_metadata (fileKey) to retrieve all components and component sets from the Figma file. This returns every component with its name and nodeId.
Build a lookup map from the Figma metadata: { componentName → nodeId }.
After normalization (step 4), component names in component-map.json use Figma conventions (Icon/Bot, Asset/CartonLogoSvg, Button). Match each component by exact name against the Figma lookup map.
For each component in every tier of component-map.json, add a figmaNodeId field:
figmaNodeId to the node ID string (e.g. "918:50")figmaNodeId to nullAlso use use_figma to do a read-only inspection for file-level state:
Palette, Semantic, Spacing)Screens already exists, list its top-level children. Each direct child frame is a pre-existing screen. Build preExistingScreens as { frameName: nodeId } (e.g. { "CasesPage": "123:456" }). If no Screens page exists, set preExistingScreens to {}.For each Figma component returned by get_metadata (regardless of whether it appears in the runtime component-map.json), ensure a tracking record exists next to its source file. The tracking file path is resolved as follows:
sourcePath in component-map.json: write to path.dirname(sourcePath)/.figma/figma.jsonsourcePath (browser-only or synthetic): search each directory in config.componentsRoot (an array) for a matching component folder. Use namespace-aware path rules — Icon/Bot → {componentsRoot[i]}/Icon/Bot/.figma/figma.json. Try each componentsRoot entry in order; use the first match. If no match is found, use the first componentsRoot entry as the default.Same schema as Step 6 of plugins/figma-from-code/skills/figma-from-code/7-build-component/SKILL.md:
{
"fileKey": "{figmaFileKey}",
"nodeId": "{nodeId}",
"url": "https://figma.com/design/{fileKey}?node-id={nodeIdWithDashes}",
"componentName": "Button",
"createdAt": "2026-05-15T14:32:00Z",
"updatedAt": "2026-05-15T14:32:00Z",
"dependencies": []
}Behavior:
createdAt and updatedAt to the current ISO 8601 UTC timestamp. Create the .figma/ folder first if it does not exist.updatedAt is plugins/figma-from-code/skills/figma-from-code/7-build-component/SKILL.md's job.Skip COMPONENT children of COMPONENT_SET nodes (variants) — only write tracking files for the top-level component or component set.
Failure handling: if a write fails (permission, missing parent path that can't be created), log the failure and continue with the rest. Surface the count of failures in the final report (Step 10).
Re-write .temp/figma-from-code/component-map.json with the figmaNodeId field added to every component entry across all tiers. Also add a top-level figma summary object.
Why this matters for later phases: the orchestrator uses every component with a non-null
figmaNodeIdas the immutablepreExistingComponentssnapshot instate.json. The orchestrator's "Pre-Existing Components Rule" requires explicit user authorization before modifying, replacing, or deleting any of those nodes in later phases (Phase 3 rebuilds, Phase 5 fix-loops, ad-hoc cleanup). Accuracy offigmaNodeIdmatters — a missed match silently degrades that protection.
{
"figma": {
"fileKey": "{fileKey}",
"pages": [{ "name": "...", "id": "..." }],
"variableCollections": ["Palette", "Semantic"] or [],
"existingComponentCount": 12,
"missingComponentCount": 5,
"preExistingScreens": { "CasesPage": "123:456" }
},
"tiers": [
{
"tier": 1,
"components": [
{ "name": "Button", "figmaNodeId": "918:50", ... },
{ "name": "NewThing", "figmaNodeId": null, ... }
]
}
]
}Extract the data the orchestrator needs into a small summary file so it never has to read the full component-map.json (which can be 48KB+):
node -e "
const map = JSON.parse(require('fs').readFileSync('.temp/figma-from-code/component-map.json','utf-8'));
const tiers = map.tiers.map(t => ({ tier: t.tier, label: t.label || 'Tier ' + t.tier, components: t.components.map(c => c.name) }));
const builtComponents = {};
const preExistingComponents = {};
let bothCount = 0, codeOnlyCount = 0, browserOnlyCount = 0;
for (const t of map.tiers) {
for (const c of t.components) {
if (c.figmaNodeId) {
builtComponents[c.name] = c.figmaNodeId;
preExistingComponents[c.name] = c.figmaNodeId;
}
if (c.source === 'both') bothCount++;
else if (c.source === 'code') codeOnlyCount++;
else if (c.source === 'browser') browserOnlyCount++;
}
}
const componentCount = map.tiers.reduce((sum, t) => sum + t.components.length, 0);
// Read componentDirectories and excludedDirectories from the --discover output
// These are written by Step 5 and preserved in component-map.json
const componentDirectories = map.componentDirectories || [];
const excludedDirectories = map.excludedDirectories || [];
const summary = {
buildOrder: { tierCount: tiers.length, tiers },
builtComponents,
preExistingComponents,
preExistingScreens: (map.figma && map.figma.preExistingScreens) || {},
componentCount,
componentDirectories,
excludedDirectories,
sourceBreakdown: { both: bothCount, codeOnly: codeOnlyCount, browserOnly: browserOnlyCount },
figma: map.figma || null
};
require('fs').writeFileSync('.temp/figma-from-code/discovery-summary.json', JSON.stringify(summary, null, 2));
console.log('Discovery summary written: ' + componentCount + ' components across ' + tiers.length + ' tiers');
"Write to .temp/figma-from-code/discovery-summary.json. The orchestrator reads only this file (~3KB) instead of the full component-map.json. The componentDirectories and excludedDirectories fields are surfaced to the user at the Wave 1 pause for confirmation (see orchestrator § "Wave 1 Pause: Component Directory Confirmation").
Report what exists in Figma vs what needs to be created, including the discovered build order and source breakdown:
Component Discovery complete:
- {componentCount} components across {tierCount} tiers
- Source breakdown: {bothCount} browser+code, {codeOnlyCount} code-only, {browserOnlyCount} browser-only
- Interaction scenarios: {scenarioCount} run, {recoveredCount} components recovered via interactions
- Components without capture (cannot be screenshotted from the live app): {list with reason each}
- Tier 1 (leaves): {component list}
- Tier 2: {component list}
- ...
- Tier {N} (top-level): {component list}
Figma file state:
- Pages: {existing page names}
- Variable collections: {existing or "none"}
- Already built: {count} components ({list})
- Not yet built: {count} components ({list})| Script | Location | Purpose |
|---|---|---|
map-components.js | {skillRoot}/scripts/map-components.js | Crawls routes, detects framework, discovers components, computes build order. --interactions runs scenarios from interactions.json; --augment seeds from a previous output and skips the passive crawl |
normalize-component-map.js | {skillRoot}/scripts/normalize-component-map.js | Aligns scanner names with Figma conventions using icons.json + Lucide alias table |
discover-code-components.js | {skillRoot}/scripts/discover-code-components.js | Auto-discovers frontend packages and scans source for all components. --discover mode finds directories; --scan mode parses imports, merges with browser map (preserving capture), recomputes tiers |
Do NOT modify map-components.js — drive it via its flags (--routes, --interactions, --augment); app-specific knowledge belongs in interactions.json, never in the script.
If called with resume: true, check whether .temp/figma-from-code/component-map.json exists on disk. If it does, skip the discovery run and read the existing file. If it's missing, re-run.
| Scenario | Action |
|---|---|
| Dev server not running | Halt, tell user to start the dev server |
map-components.js fails | Check Playwright installation, verify URL is accessible |
Figma use_figma read-only call fails | Report error but do not block — component discovery output is still valid |
Empty component-map.json | Check that dev server is serving the app (not an error page) |
© bitovi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 1 other file in plugins/figma-from-code/skills/figma-from-code/1-discovery-components of bitovi/ai-enablement-prompts.
Open the folder on GitHubat commit df229b1
Figma From Code Discovery Components 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 |
|---|---|---|---|---|---|---|
| Figma From Code Discovery Components this skillbitovi/ai-enablement-prompts | 121 | — | ~5.3k | Automated safety check: Pass | MIT | |
| Claude Code Agent Developmentanthropics/claude-plugins-official | 38k | 8 repos | ~2.8k | Automated safety check: Pass | Apache-2.0 | |
| Subagent Driven DevelopmentAsvarox/allkaraoke | 261 | 38 repos | ~1.2k | Automated safety check: Pass | None | |
| Dispatching Parallel Agentsultralisp/ultralisp | 258 | 41 repos | ~1.5k | Automated safety check: Pass | None | |
| Paseo Advisor Second Opiniongetpaseo/paseo | 20k | 1 repos | ~756 | Automated safety check: Pass | Custom licence | |
| Task Observerrebelytics/one-skill-to-rule-them-all | 3.2k | 1 repos | ~12k | Automated safety check: Pass | CC-BY-4.0 |
anthropics/claude-plugins-official
Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.
Asvarox/allkaraoke
A skill your agent uses when executing implementation plans with independent tasks in the current session
ultralisp/ultralisp
A skill your agent uses when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies
getpaseo/paseo
Launches one separate agent through Paseo to give a second opinion on the current task, with a self-contained briefing and no permission to edit files.
rebelytics/one-skill-to-rule-them-all
Monitors task execution for skill improvement opportunities.
openobserve/openobserve
Splits a change into planner, coder and independent reviewer roles: you confirm a spec, a subagent implements it, and a separate reviewer checks each round's local WIP commit.
bitovi/ai-enablement-prompts
Track reusable UI components and unextracted patterns. An agent skill from bitovi/ai-enablement-prompts.
bitovi/ai-enablement-prompts
Extract and compare computed CSS styles between a baseline URL and a dev/Storybook URL using Playwright MCP evaluate calls.
bitovi/ai-enablement-prompts
A skill your agent uses when the user asks to "create a plugin", "add a plugin", "make a new plugin", "build a plugin", or wants to package skills into an installable plugin for this marketplace.
bitovi/ai-enablement-prompts
Create React components, hooks, or utilities following the modlet pattern.
bitovi/ai-enablement-prompts
A skill your agent uses when the user asks to "create a skill", "add a skill", "make a new skill", "build a skill", or wants to automate a repeated workflow into a reusable prompt.
bitovi/ai-enablement-prompts
Create new Agent Skills for this project. An agent skill from bitovi/ai-enablement-prompts.
Works with
Categories
Subagent for figma-from-code Phase 0a. An agent skill from bitovi/ai-enablement-prompts. Figma From Code Discovery Components is an agent skill from bitovi/ai-enablement-prompts. Subagent for figma-from-code Phase 0a.
Figma From Code Discovery Components fits situations like: tasks that involve Subagents.
Run `npx skills add bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a claude-code`. Or copy the skill folder (plugins/figma-from-code/skills/figma-from-code/1-discovery-components in bitovi/ai-enablement-prompts) into .claude/skills/figma-from-code-discovery-components in your project. Claude Code loads it when a task matches its description.
Run `npx skills add bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a codex`. Or copy the skill folder (plugins/figma-from-code/skills/figma-from-code/1-discovery-components in bitovi/ai-enablement-prompts) into .agents/skills/figma-from-code-discovery-components 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 bitovi/ai-enablement-prompts --skill figma-from-code-discovery-components -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/figma-from-code-discovery-components, .gemini/skills/figma-from-code-discovery-components, .github/skills/figma-from-code-discovery-components and .opencode/skills/figma-from-code-discovery-components in your project.
Going by SKILL.md and its folder, Figma From Code Discovery Components needs the command-line tools its instructions call (node and curl).
SKILL.md names 1 domain. In commands or code: figma.com; the agent is likely to contact it when it follows the instructions. 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.
Figma From Code Discovery Components is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 5.3k tokens (SKILL.md is roughly 21k 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 Figma From Code Discovery Components: Claude Code Agent Development (anthropics/claude-plugins-official, 38k stars), Subagent Driven Development (Asvarox/allkaraoke, 261 stars), Dispatching Parallel Agents (ultralisp/ultralisp, 258 stars) and Paseo Advisor Second Opinion (getpaseo/paseo, 20k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
bitovi (a GitHub organization) maintains it in bitovi/ai-enablement-prompts, which has 121 GitHub stars. The repository holds 40 skills in this directory. The repository was last updated on September 11, 2026.
Source: bitovi/ai-enablement-prompts on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.