Agent skill

Figma From Code

by bitovi in bitovi/ai-enablement-prompts

Orchestrates the full code-to-Figma rebuild workflow for a web application.

MITAuto-check passedAgent Workflows

Install Figma From Code

skills CLI
$ npx skills add bitovi/ai-enablement-prompts --skill figma-from-code -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install bitovi/ai-enablement-prompts figma-from-code --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ 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 .claude/skills/figma-from-code && rm -rf skills-src

Use ~/.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/

Facts

Skill name
figma-from-code
GitHub stars
121
Token cost
~7.4k tokens
SKILL.md length
2,075 words
Files
22 (incl. scripts)
Skills in repo
40
Repo updated
First seen
Licence
MIT

At a glance

Orchestrates the full code-to-Figma rebuild workflow for a web application.

  • Works in 3 steps: 5: Reading pre-capture results → Tiers: Post-tier aggregation → Post-screen aggregation
  • Tasks that involve Subagents
  • SKILL.md covers Required Inputs, Hard Gates — Files the…, Subagent Dispatch Pattern and Config Placeholder Convention, plus 9 more sections
  • Runs JavaScript scripts from its folder; calls node

What it does

Figma From Code is an agent skill from bitovi/ai-enablement-prompts. Orchestrates the full code-to-Figma rebuild workflow for a web application. Thin dispatcher that delegates all substantial work to subagents and reads only small summary files. Runs eight tracked phases (phase0a, phase0b, phase1, phase2, phase25, phase3, phase4, phase5). Never calls usefigma or getscreenshot directly.

Its SKILL.md is about 7.4k tokens, which your agent loads only when the skill is triggered. The skill folder holds 22 other files, including scripts (for example `REVIEW.md`, `scripts/browser-connect.js` and `scripts/browser-server.js`).

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.

When your agent uses it

  • Tasks that involve Subagents

Example prompts

  • “Use the figma-from-code skill to orchestrate the full code-to-Figma rebuild workflow for a web application”
  • “/figma-from-code”

Requirements

  • Node.js

Workflow steps

3 steps, taken from the step headings in SKILL.md.

  1. 5: Reading pre-capture results
  2. Tiers: Post-tier aggregation
  3. Post-screen aggregation

What it can do on your machine

Read from SKILL.md and the folder at commit df229b1. It shows what the files ask for, not the result of running them.

  • Tool permissions

    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.

  • Runs code

    Ships 18 files in scripts/ (JavaScript, from the files we listed), which the agent can run.

    Shell commands in SKILL.md call:

    • node

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Figma From Code loads about 7.4k tokens when it runs. Until then it costs about 85 tokens; SKILL.md has 2,075 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~85
When it runs · the whole SKILL.md, loaded when a task matches
~7.4k

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.

Safety

Auto-check passed

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); the scripts in this folder are not scanned.

SKILL.md

The full file from bitovi/ai-enablement-prompts at commit df229b1, republished under its MIT licence (© bitovi). 2,075 words, ~7,442 tokens.

Download SKILL.mdSave it as .claude/skills/figma-from-code/SKILL.md (or your agent's skills folder). This skill also uses 21 other files; get the full folder from GitHub.
name
figma-from-code
description
Orchestrates the full code-to-Figma rebuild workflow for a web application. Thin dispatcher that delegates all substantial work to subagents and reads only small summary files. Runs eight tracked phases (phase0a, phase0b, phase1, phase2, phase2_5, phase3, phase4, phase5). Never calls use_figma or get_screenshot directly.
model
claude-sonnet-4-5

Skill: Build Figma from Code (Orchestrator)

Thin dispatcher. Delegates every phase to a subagent, reads only small summary files, and tracks progress in state.json. Never calls use_figma or get_screenshot directly.

Required Inputs

  • fileKey: Figma file key
  • resume (optional): true to skip completed phases
  • config (optional): per-project overrides; any omitted key falls back to the generic default shown below
jsonc
{
  "devServerUrl": "http://localhost:5173",
  "devServerStart": "npm run dev",
  "sourceDir": "src",                          // app source root
  "componentsRoot": ["src/components"],        // array of component directories (supports monorepos); populated after Phase 0a discovery
  "pagesRoot": "src/pages",                    // where page/screen sources + figma-screen.json live
  "cssPath": "src/index.css",                  // CSS custom-properties file for token extraction
  "tailwindConfigPath": "tailwind.config.js",  // or null for Tailwind v4 / vanilla CSS projects
  "iconLibrary": "lucide-react",               // or null to skip icon extraction
  "skillRoot": "plugins/figma-from-code/skills/figma-from-code"  // where this skill tree lives; ${CLAUDE_PLUGIN_ROOT}/skills/figma-from-code when running as an installed plugin
}

Hard Gates — Files the Orchestrator Must Never Read

The orchestrator is a thin dispatcher. It must not open, read, or load any sub-skill SKILL.md files. Those files are for subagents only.

Forbidden reads (orchestrator):

FileWhy forbidden
1-discovery-components/SKILL.mdSubagent reads it to execute Phase 0a
2-discovery-assets/SKILL.mdSubagent reads it to execute Phase 0b
3-setup-tokens/SKILL.mdSubagent reads it to execute Phase 1
4-setup-structure/SKILL.mdSubagent reads it to execute Phase 2
5-precapture/SKILL.mdSubagent reads it to execute Phase 2.5
6-icon-preamble/SKILL.mdSubagent reads it to execute Phase 3 icon preamble
7-build-component/SKILL.mdSubagent reads it to execute per-component build + review/fix (steps 1–7)
8-build-screens/SKILL.mdSubagent reads it to execute Phase 4
9-validate/SKILL.mdSubagent reads it to execute Phase 5
10-validator/SKILL.mdSubagent reads it for validation logic and Component App Map

What the orchestrator reads instead: only small summary/output files under .temp/figma-from-code/ (e.g., discovery-summary.json, tokens-summary.json, structure-summary.json).

If you find yourself opening a sub-skill SKILL.md to understand inputs, outputs, or workflow steps — stop. That information belongs in the dispatch table and per-phase notes in this file. If those notes are missing, ask the user before proceeding.


Subagent Dispatch Pattern

When dispatching a subagent:

  1. Give the subagent only: the skill filepath + fileKey + any state fields it needs (listed in the table below)
  2. Instruct the subagent to read its own skill file for full instructions
  3. Tell the subagent to report back only: { "success": true/false, "outputFile": "<path>" }
  4. Read the output file yourself after the subagent completes

The orchestrator never re-explains what a skill does — the skill file is the source of truth. The orchestrator never opens a sub-skill's SKILL.md file — see Hard Gates above.


Config Placeholder Convention

Sub-skill files reference config values as {devServerUrl}, {sourceDir}, {componentsRoot}, {pagesRoot}, {cssPath}, {tailwindConfigPath}, {iconLibrary}, {skillRoot}, etc. Subagents resolve these placeholders from state.json → config before executing any commands. The orchestrator also substitutes resolved values from state.config when composing dispatch prompts so subagents always receive concrete paths and URLs.

componentsRoot is an array. Most config references pass the full array to subagents. Subagents that write .figma/ tracking files derive the write path from each component's sourcePath (in component-map.json) rather than from a single componentsRoot prefix. For synthetic components (icons, assets) that have no source file, use the first entry in the array.


State Ledger

Maintain .temp/figma-from-code/state.json:

json
{
  "fileKey": "{fileKey}",
  "startedAt": "ISO timestamp",
  "config": {
    "devServerUrl": "http://localhost:5173",
    "devServerStart": "npm run dev",
    "sourceDir": "packages/client/src",
    "componentsRoot": ["packages/client/src/components"],
    "pagesRoot": "packages/client/src/pages",
    "cssPath": "packages/client/src/index.css",
    "tailwindConfigPath": "packages/client/tailwind.config.js",
    "iconLibrary": "lucide-react",
    "skillRoot": "plugins/figma-from-code/skills/figma-from-code"
  },
  "phases": {
    "phase0a": "complete|in_progress|pending",
    "phase0b": "complete|in_progress|pending",
    "phase1": "complete|in_progress|pending",
    "phase2": "complete|in_progress|pending",
    "phase2_5": "complete|in_progress|pending",
    "phase3": "complete|in_progress|pending",
    "phase4": "complete|in_progress|pending",
    "phase5": "complete|in_progress|pending"
  },
  "tierProgress": { "tier1": "complete|complete_with_failures|in_progress|pending" },
  "buildOrder": { "tierCount": 0, "tiers": [{ "tier": 1, "label": "...", "components": ["..."] }] },
  "figmaNodes": {
    "foundationsPageId": "...",
    "componentsPageId": "...",
    "screensPageId": "...",
    "foundationsFrameId": "...",
    "iconsFrameId": "...",
    "screensFrameId": "...",
    "tier1FrameId": "...",
    "tier2FrameId": "..."
  },
  "existingCollections": [],
  "existingPages": [],
  "variableMapPath": ".temp/figma-from-code/variables.json",
  "builtComponents": {},
  "builtScreens": {},
  "preExistingComponents": {},
  "preExistingScreens": {},
  "screenBodySize": { "w": 1440, "h": 900 },
  "iconDiscovery": { "iconCount": 0, "icons": [], "assetCount": 0, "assets": [] }
}

Subagents do not modify state.json. Each writes its own output file; the orchestrator reads it and updates state.

figmaNodes uses the pattern tier{N}FrameId for each tier (e.g., tier1FrameId, tier2FrameId, ...). The number of keys matches buildOrder.tierCount.

Fresh Run: Initialize state.json

Config detection (runs once, before Phase 0a). On a fresh run the orchestrator detects project-specific values before writing state.json:

  1. Read package.json (root and any workspace roots) — find the dev or start script and extract the port from --port, PORT=, or Vite/CRA defaults; derive devServerUrl.
  2. Set componentsRoot to [] (empty array). Component directories are discovered by Phase 0a and confirmed by the user at the Wave 1 pause. Set sourceDir to the most likely app source root (e.g., src, packages/client/src) based on package.json workspace structure.
  3. Locate the pages/screens directory: look for pages, screens, or routes under sourceDir.
  4. Locate the CSS custom-properties file: prefer src/index.css, packages/*/src/index.css, or any *.css file containing -- custom properties.
  5. Detect tailwindConfigPath: check for tailwind.config.js, tailwind.config.ts, tailwind.config.cjs at the repo root and likely package roots; set to null if absent (Tailwind v4 / vanilla CSS project).
  6. Detect iconLibrary: grep package.json dependencies for lucide-react, react-icons, @heroicons/react, @radix-ui/react-icons; use the first match or null.
  7. Present the resolved config to the user in a compact table. Note that componentsRoot will be populated after Phase 0a discovery. Ask for confirmation or corrections before proceeding.
  8. Persist the confirmed object as config in state.json. On resume, read config from state.json — never re-detect.

After confirming config, create .temp/figma-from-code/state.json from the template above. Set fileKey and startedAt to current ISO timestamp; set config to the confirmed object; all phases values to "pending"; all other fields empty.


Pre-Existing Components Rule

preExistingComponents is an immutable snapshot from Phase 0a. Never update it after Phase 0a.

Hard rule: Pause and get explicit user authorization before any action that modifies, replaces, or deletes a node in preExistingComponents. This includes rebuilding, running the icon preamble over existing icons, or any Phase 3 build that resolves to a pre-existing node.


Phase Dispatch Table

All skill files live under {skillRoot}/. Shell steps (normalization after Phase 0b, aggregation scripts after Phase 3 tiers and Phase 4) are in Per-Phase Notes. After each subagent succeeds, set phases.{phase}: complete in addition to the listed state fields.

Important: Each subagent does all of its work inline — no subagent spawns further subagents. Phase 3 dispatches one subagent per component (fresh context each time). The validation subagent (Phase 5) processes all screens sequentially.

PhaseSkill fileInputs to passOutput file to readState fields to updateSkip if
0a1-discovery-components/SKILL.mdfileKey; config: devServerUrl, sourceDirdiscovery-summary.jsonbuildOrder, builtComponents, preExistingComponents, preExistingScreens; also extract figma.variableCollections → existingCollections and figma.pages → existingPages from the summaryphase0a: complete
0b2-discovery-assets/SKILL.mdconfig: sourceDir, iconLibraryicons-summary.jsoniconDiscoveryphase0b: complete
13-setup-tokens/SKILL.mdfileKey, existingCollections; config: cssPath, tailwindConfigPathtokens-summary.jsonvariableMapPathphase1: complete AND tokens-summary.json AND variables.json AND resolved-colors.json all exist under .temp/figma-from-code/
24-setup-structure/SKILL.mdfileKey, existingPagesstructure-summary.jsonfigmaNodes (foundationsPageId, componentsPageId, screensPageId, foundationsFrameId, iconsFrameId, screensFrameId)phase2: complete AND page/icons/screens IDs in figmaNodes are non-null
2.55-precapture/SKILL.md (one subagent)fileKey only — subagent owns and builds all manifests itself from component-map.json; config: devServerUrlprecapture-all.json, precapture-screens.jsonphases.phase2_5phase2_5: complete
3 pre6-icon-preamble/SKILL.mdfileKey, figmaNodes; subagent reads builtComponents.json from disk; config: devServerUrl, componentsRoot (array)icon-preamble-results.jsonmerge created into builtComponents; rewrite builtComponents.jsonall icons already in builtComponents
3 tiers7-build-component/SKILL.md (one subagent/component)fileKey, componentName, tier, tierFrameId, componentsPageId (from figmaNodes); subagent reads builtComponents.json from disk; config: devServerUrl, componentsRoot (array)per-component: build-results/{Name}.jsonbuiltComponents (after each component); figmaNodes.tier{N}FrameId; rewrite builtComponents.json after each; set phases.phase3: complete after all tierscomponent already in builtComponents
48-build-screens/SKILL.md (one subagent/screen)fileKey, figmaNodes, preExistingScreens; per-screen: screenName, route, pageSourceFile, keyComponents (read from component-map.json → routes/tree); subagent reads builtComponents.json from disk; config: devServerUrl, pagesRootbuild-screens.jsonphases.phase4phase4: complete
59-validate/SKILL.mdfileKey, figmaNodes, preExistingScreens, buildOrder; config: devServerUrlvalidation-summary.jsonphases.phase5always runs

Phase Execution Order

Phases have dependency constraints but several can overlap. Follow this wave structure to minimize wall-clock time:

Wave 1  (parallel): Phase 0a  ||  Phase 0b
          - 0a: static route enumeration + browser crawl + interaction pass
            (interactions.json reveals dialogs/menus/edit modes) + Figma inspection
          - 0b: static icon/asset scan (no Figma, no browser needed)
          After Phase 0b completes: run normalization script (before the pause)
          ⏸ PAUSE — Component Directory Confirmation (see below); then ask
            user to continue or stop

Wave 2  (as soon as normalization + Phase 0a are both done):
          Phase 1  ||  Phase 2  (parallel — both only need 0a outputs)
          ⏸ PAUSE — write progress.md, ask user to continue or stop

Wave 3  (starts when normalization + Phase 1 + Phase 2 are ALL done):
          Before dispatching Phase 2.5, start the shared browser server:
            node {skillRoot}/scripts/browser-server.js &
          (Background process. Scripts fall back to per-script browsers if it
          isn't running. Phase 5 (9-validate) kills it via pw-server.pid.)
          Phase 2.5 — dispatch ONE subagent with unified manifest (all
          components in a single sorted batch; chunked at 15 entries per
          script run to stay within the 60s timeout)
          Subagent owns and builds all manifests; read precapture-all.json and precapture-screens.json after complete.
          ⏸ PAUSE — write progress.md, ask user to continue or stop

Wave 4  (sequential): Phase 3 preamble → Phase 3 tiers (one tier at a time)
          Each tier waits for the prior tier; preamble runs before Tier 1.
          Within a tier, one subagent per component (fresh context each time).
          ⏸ PAUSE after preamble
          ⏸ PAUSE after EACH tier — write progress.md, ask user

Wave 5  (parallel): Phase 4 screens — dispatch ALL in parallel
          Screens only instance built components, never modify masters.
          ⏸ PAUSE — write progress.md, ask user to continue or stop

Wave 6  (sequential): Phase 5 validation
          ⏸ PAUSE — write final progress.md (build complete)
Wave 1 Pause: Component Directory Confirmation

At the Wave 1 pause, read componentDirectories and excludedDirectories from discovery-summary.json and present them to the user for confirmation before proceeding:

One directory found:

I found 1 component directory with {count} components:

  • {path} ({count} components, subdirs: {list})

Is this the correct directory to use?

Multiple directories found (monorepo or multi-app):

I found {N} component directories across your project:

#DirectoryComponentsSubdirs
1{path1}{count1}{subdirs1}
2{path2}{count2}{subdirs2}
…………

Which directories should be included? (Select all that apply, or provide a custom list.)

Zero directories found:

No component directories were automatically detected. Please provide the path(s) to your component directories.

Excluded directories (always shown if any):

The following directories were excluded by default:

  • {path} — {reason} (e.g., "shadcn primitives (ui/ under components/)", "test directory")

Let me know if any should be included.

After the user confirms:

  1. Update state.json → config.componentsRoot with the confirmed array of directory paths
  2. Derive sourceDir from the common ancestor of all confirmed roots if it's not already set correctly (e.g., if all roots are under packages/client/src/, set sourceDir to packages/client/src; if roots span multiple packages, keep sourceDir as the repo root or the user-confirmed value)
  3. Write progress.md

Dependency summary:

  • Phase 1 needs: Phase 0a (existingCollections)
  • Phase 2 needs: Phase 0a (existingPages)
  • Phase 2.5 needs: normalization done (normalized component-map.json for capture data — exact URL, selector, fallbacks, interaction replay per component); Phase 1 + Phase 2 must also be done before Phase 3 can start, but Phase 2.5 itself only needs normalization
  • Phase 3 needs: Phase 1 (variables.json), Phase 2 (figmaNodes), Phase 2.5 (screenshots)
  • Phase 4 needs: Phase 3 (builtComponents), Phase 2 (figmaNodes.screensFrameId)
  • Phase 5 needs: Phase 4 (all screens built)

Show full SKILL.md (717 more words)Show less

Per-Phase Notes

After Phase 0b: Normalization (Phase 0b+)

Run the normalization script, then re-read discovery-summary.json to refresh buildOrder in state. Skip if phase0b: complete AND phase3 is in_progress or complete (normalization already applied).

bash
node {skillRoot}/scripts/normalize-component-map.js \
  .temp/figma-from-code/component-map.json \
  .temp/figma-from-code/icons.json \
  --write

The script rewrites component-map.json in place with normalized names and regenerates discovery-summary.json from the normalized map. Re-read discovery-summary.json and update buildOrder in state.

Phase 2.5: Reading pre-capture results

After the pre-capture subagent completes, read both output files and verify that screenshot file counts are non-zero. There is no aggregation script — the orchestrator reads each file directly.

  • precapture-all.json — component screenshots; schema: { "components": [{ "name", "selector", "screenshotFile", "status": "captured|failed|skipped" }] }
  • precapture-screens.json — full-page screen screenshots; schema: { "screens": [{ "screenName", "route", "pageSourceFile", "keyComponents": [], "appScreenshot", "textFile", "status": "captured|failed|skipped" }] }
Before Phase 3 (preamble): Materialize builtComponents.json

builtComponents.json is the on-disk pass mechanism for all Phase 3 and Phase 4 subagents — they read it directly rather than receiving builtComponents inline. Keep it in sync with state.builtComponents before every dispatch.

Write current state.builtComponents to disk before dispatching the preamble subagent:

bash
node -e "const s=JSON.parse(require('fs').readFileSync('.temp/figma-from-code/state.json','utf-8')); require('fs').writeFileSync('.temp/figma-from-code/builtComponents.json', JSON.stringify(s.builtComponents||{},null,2));"

After preamble completes, merge new icons into state.builtComponents and rewrite builtComponents.json. The file persists through all of Phase 3 and Phase 4 as the live registry of built components.

Phase 3 Tiers: Post-tier aggregation

build-tier{N}.json schema:

json
{
  "tier": 1,
  "tierFrameId": "<figma-node-id>",
  "status": "complete|complete_with_failures",
  "completed": [{ "name": "...", "nodeId": "...", "variants": 1, "matchPct": 95 }],
  "failed": [{ "name": "...", "status": "failed", "reason": "..." }]
}

After reading build-tier{N}.json, extract tierFrameId and store it as figmaNodes.tier{N}FrameId in state. Then run:

bash
node {skillRoot}/scripts/collect-tier-results.js --tier {N} --components "{comma-separated}" --tier-frame-id "{tierFrameId}"

Read stdout for the one-line JSON summary. Then follow the End-of-Phase Pause Protocol: update state.json, write progress.md, and ask the user whether to continue to the next tier or stop. Each tier is a full pause point — the user may stop and a new orchestrator agent can resume from the next tier.

Phase 4: Post-screen aggregation

After all screen subagents complete:

bash
mkdir -p .temp/figma-from-code/build-results/screens
node {skillRoot}/scripts/collect-screen-results.js --screens "{comma-separated}"

Progress File

After every pause point, the orchestrator writes .temp/figma-from-code/progress.md — a human-readable narrative that allows a fresh orchestrator agent (with no memory of prior work) to understand what happened and where to continue.

progress.md is the handoff document. state.json is the machine-readable truth. Both must exist and stay in sync.

Template
markdown
# Figma-from-Code Build Progress

**File Key:** {fileKey}
**Last Updated:** {ISO timestamp}
**Status:** Paused after {phase/tier description}

## Completed Phases

| Phase | Description          | Key Output                                       | Completed At |
| ----- | -------------------- | ------------------------------------------------ | ------------ |
| 0a    | Component discovery  | {component count} components, {tier count} tiers | {timestamp}  |
| 0b    | Asset/icon discovery | {icon count} icons, {asset count} assets         | {timestamp}  |
| ...   | ...                  | ...                                              | ...          |

## Current State

- **Built components:** {count} / {total}
- **Tiers completed:** {N} / {total tiers}
- **Screens built:** {count} / {total}
- **Figma nodes created:** {list key node IDs}

## Next Step

**Phase to execute:** {phase ID and name}
**Prerequisites:** {what must be true — e.g., "dev server running on {devServerUrl}"}
**What it does:** {one-sentence description}
**Estimated dispatches:** {number of subagents or script runs}

## Warnings / Partial State

- {any incomplete tiers, failed retries, or pre-existing component conflicts}

Startup Protocol

On every invocation, before doing any work:

  1. Check if .temp/figma-from-code/progress.md exists
  2. If it exists:
    • Read progress.md in full
    • Present a concise summary to the user: which phases are done, what comes next
    • Ask: "A previous build was paused after {phase}. Resume from {next phase}?"
    • If user confirms → read state.json, validate it matches progress.md, skip to next incomplete phase
    • If user declines → ask if they want a fresh start (which deletes .temp/figma-from-code/) or manual phase selection
  3. If it does not exist:
    • Check if state.json exists (orphaned state without progress file)
    • If state.json exists → warn user, offer to reconstruct progress from state or start fresh
    • If neither exists → initialize fresh run (create state.json from template, proceed to Phase 0a)

End-of-Phase Pause Protocol

After completing any pause point (see Pause Points below), the orchestrator MUST:

  1. Update state.json — mark the phase/tier complete, update all relevant state fields

  2. Write progress.md — regenerate the full file from current state.json using the template above

  3. Report to user — show key metrics (counts, node IDs, any warnings)

  4. Ask the user:

    "{Phase/tier} complete. {Brief metric summary}. Continue to {next phase/tier}, or stop here so a new agent can resume later?"

  5. If user says stop → confirm progress.md is written, say "Build paused. A new agent can resume by invoking this skill." and terminate

  6. If user says continue → proceed to the next dispatch

The orchestrator never auto-continues to the next pause point without explicit user confirmation.

Pause Points

Every wave boundary and every Phase 3 tier is a mandatory pause point:

Pause PointAfterBefore
Wave 1 → 2Phase 0a + 0b complete (+ normalization)Phase 1 + Phase 2
Wave 2 → 3Phase 1 + Phase 2 completePhase 2.5
Wave 3 → 4Phase 2.5 completePhase 3 preamble
Phase 3 preambleIcon preamble completeTier 1
Phase 3 Tier NTier N completeTier N+1 (or Wave 5 if last tier)
Wave 4 → 5Phase 3 all tiers completePhase 4 screens
Wave 5 → 6Phase 4 screens completePhase 5 validation
EndPhase 5 complete— (build finished)

Error Handling

ScenarioAction
Dev server not runningHalt before Phase 2.5, tell user to start it
Subagent reports success: falseReport error, offer retry — never silently skip
State inconsistencyTrust per-tier build JSON files; rebuild state from outputs
Pre-existing component needs modificationPause, apply authorization protocol, wait for user

© bitovi, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 21 other files (scripts) in plugins/figma-from-code/skills/figma-from-code of bitovi/ai-enablement-prompts.

  • SKILL.md
  • REVIEW.md
  • scripts/browser-connect.js
  • scripts/browser-server.js
  • scripts/check-instances.js
  • scripts/check-prereqs.js
  • scripts/collect-screen-results.js
  • scripts/collect-tier-results.js
  • scripts/compare.js
  • scripts/detect-components.js
  • scripts/discover-code-components.js
  • scripts/discover-components.js
  • scripts/extract-icons.js
  • scripts/extract-text.js
  • scripts/inspect-styles.js
  • scripts/library-filter.js
  • scripts/map-components.js
  • scripts/merge-state.js
  • scripts/normalize-component-map.js
  • scripts/resolve-color.js
  • … and 2 more

Open the folder on GitHubat commit df229b1

Compare with similar skills

Figma From Code 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.

Figma From Code compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Figma From Code this skillbitovi/ai-enablement-prompts121—~7.4kAutomated safety check: PassMIT
Claude Code Agent Developmentanthropics/claude-plugins-official37k8 repos~2.8kAutomated safety check: PassApache-2.0
Subagent Driven DevelopmentAsvarox/allkaraoke26137 repos~1.2kAutomated safety check: PassNone
Dispatching Parallel Agentsultralisp/ultralisp25840 repos~1.5kAutomated safety check: PassNone
Paseo Advisor Second Opiniongetpaseo/paseo20k1 repos~756Automated safety check: PassCustom licence
Task Observerrebelytics/one-skill-to-rule-them-all3.2k1 repos~12kAutomated safety check: PassCC-BY-4.0

Similar skills

  • Claude Code Agent Development

    anthropics/claude-plugins-official

    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.

    37k GitHub starsUsed in 8 repos~2.8k tokens
    Agent WorkflowsAuto-check passed
  • Subagent Driven Development

    Asvarox/allkaraoke

    A skill your agent uses when executing implementation plans with independent tasks in the current session

    261 GitHub starsUsed in 37 repos~1.2k tokens
    Agent WorkflowsAuto-check passed
  • Dispatching Parallel Agents

    ultralisp/ultralisp

    A skill your agent uses when facing 2+ independent tasks that can be worked on without shared state or sequential dependencies

    258 GitHub starsUsed in 40 repos~1.5k tokens
    Agent WorkflowsAuto-check passed
  • 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.

    20k GitHub starsUsed in 1 repo~756 tokens
    Agent WorkflowsAuto-check passed
  • Task Observer

    rebelytics/one-skill-to-rule-them-all

    Monitors task execution for skill improvement opportunities.

    3.2k GitHub starsUsed in 1 repo~12k tokens
    Agent WorkflowsAuto-check passed
  • O2 Review Loop

    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.

    22k GitHub stars~3.7k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from bitovi/ai-enablement-prompts

All 40 skills in this repo
  • Component Registry

    bitovi/ai-enablement-prompts

    Track reusable UI components and unextracted patterns. An agent skill from bitovi/ai-enablement-prompts.

    121 GitHub stars~597 tokensUpdated 26 days ago
    Auto-check passed
  • Computed Styles

    bitovi/ai-enablement-prompts

    Extract and compare computed CSS styles between a baseline URL and a dev/Storybook URL using Playwright MCP evaluate calls.

    121 GitHub stars~2.4k tokensUpdated 26 days ago
    Auto-check passed
  • Create Plugin

    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.

    121 GitHub stars~2k tokensUpdated 26 days ago
    Auto-check passed
  • Create React Modlet

    bitovi/ai-enablement-prompts

    Create React components, hooks, or utilities following the modlet pattern.

    121 GitHub stars~2.1k tokensUpdated 26 days ago
    Auto-check passed
  • Create Skill

    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.

    121 GitHub stars~1.6k tokensUpdated 26 days ago
    Auto-check passed
  • Create Skill

    bitovi/ai-enablement-prompts

    Create new Agent Skills for this project. An agent skill from bitovi/ai-enablement-prompts.

    121 GitHub stars~1.7k tokensUpdated 26 days ago
    Auto-check passed

Works with

Categories

Questions about Figma From Code

What does Figma From Code do?

Orchestrates the full code-to-Figma rebuild workflow for a web application. Figma From Code is an agent skill from bitovi/ai-enablement-prompts. Orchestrates the full code-to-Figma rebuild workflow for a web application.

When should I use Figma From Code?

Figma From Code fits situations like: tasks that involve Subagents.

How do I install Figma From Code in Claude Code?

Run `npx skills add bitovi/ai-enablement-prompts --skill figma-from-code -a claude-code`. Or copy the skill folder (plugins/figma-from-code/skills/figma-from-code in bitovi/ai-enablement-prompts) into .claude/skills/figma-from-code in your project. Claude Code loads it when a task matches its description.

How do I install Figma From Code in Codex?

Run `npx skills add bitovi/ai-enablement-prompts --skill figma-from-code -a codex`. Or copy the skill folder (plugins/figma-from-code/skills/figma-from-code in bitovi/ai-enablement-prompts) into .agents/skills/figma-from-code in your project. Codex loads it when a task matches its description.

Can I use Figma From Code in Cursor, Gemini CLI or GitHub Copilot?

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 -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, .gemini/skills/figma-from-code, .github/skills/figma-from-code and .opencode/skills/figma-from-code in your project.

What does Figma From Code need to run?

Going by SKILL.md and its folder, Figma From Code needs JavaScript for the scripts in its folder and the command-line tools its instructions call (node). Our summary lists: Node.js.

Does Figma From Code access the network?

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.

Is Figma From Code safe to install?

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. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Figma From Code use?

Figma From Code is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Figma From Code use?

About 7.4k tokens (SKILL.md is roughly 30k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Figma From Code?

Skills that share tags, products or a category with Figma From Code: Claude Code Agent Development (anthropics/claude-plugins-official, 37k 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.

Who maintains Figma From Code?

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.