Analyze a Figma file via the Figma REST API and generate an interactive design knowledge graph (pages, screens, components, component sets, instances, design tokens) with a kind:"design" dashboard.
Start a fresh conversation. Replace the highlighted placeholders.
Use understand-figma to analyze [Figma file URL or key] and produce an interactive design knowledge graph; this requires a FIGMA_TOKEN and makes an outbound request to Figma.
Required inputs
[Figma file URL or key]
User-approved starter prompt based on a pinned source version; check current skill requirements before running. Task evidence ↗
SKILL.md
name: understand-figmadescription: Analyze a Figma file via the Figma REST API and generate an interactive design knowledge graph (pages, screens, components, component sets, instances, design tokens) with a kind:"design" dashboard.argument-hint: "<figma-file-url-or-key> [--language <lang>]"
/understand-figma
Analyzes a Figma file and produces an interactive design knowledge graph in the existing dashboard.
Prerequisites
FIGMA_TOKEN environment variable — a Figma personal access token (create one at https://www.figma.com/settings). If it is missing, STOP and tell the user:
Set a Figma token first: create one at figma.com/settings, then export FIGMA_TOKEN=<token>.
Node ≥ 22, pnpm ≥ 10.
Security: the token is read only from the environment and travels only in the X-Figma-Token request header. Never write it to the graph, meta.json, logs, or intermediate files. This skill makes outbound calls to api.figma.com — unlike /understand, it is not fully offline. Tell the user this once.
Phase 0 — Pre-flight
Parse $ARGUMENTS for a Figma URL or bare file key (the non-flag token) and an optional --language <lang>.
Resolve PROJECT_ROOT to the current working directory. Resolve the data directory $UA_DIR once and reuse it for every read and write below: UA_DIR="$PROJECT_ROOT/$([ -d "$PROJECT_ROOT/.understand-anything" ] && echo .understand-anything || echo .ua)" — the legacy .understand-anything/ when it already exists, otherwise the new .ua/. Because each phase may run in a fresh shell, carry $UA_DIR forward like $PROJECT_ROOT, re-resolving it with the same line if a later command block needs it.
Resolve PLUGIN_ROOT and ensure core is built (same logic as /understand Phase 0.1.5). If packages/core/dist/figma/index.js is missing, run:
It writes $UA_DIR/intermediate/scan-manifest.json and prints the node counts. Relay the counts to the user. If it exits non-zero, relay stderr and STOP.
If the scan prints UP_TO_DATE, report "Design graph is already up to date for this Figma file version" and STOP. To force a full rebuild, re-run with UNDERSTAND_FIGMA_FORCE=1 set in the environment.
Phase 2 — ANALYZE (LLM enrichment)
Read scan-manifest.json. Group nodes into batches of ~15, grouped by page when possible.
For each batch, dispatch a subagent using the design-analyzer agent definition (agents/design-analyzer.md). Pass:
the batch of nodes (id, type, name, figmaMeta, child names, token usage),
the full list of existing node IDs,
$INTERMEDIATE_DIR = $UA_DIR/intermediate,
the batch number for output naming.
The agent writes analysis-batch-<N>.json.
Append $LANGUAGE_DIRECTIVE if --language was provided (reuse /understand's directive text).
Run up to 5 batches concurrently. If a batch fails, log a warning and continue — the manifest is a solid base.
Phase 3 — MERGE
node <SKILL_DIR>/figma-merge.mjs "$PROJECT_ROOT"
It combines scan-manifest.json + analysis-batch-*.json, runs mergeDesignGraph (validates, re-attaches kind:"design"), and writes knowledge-graph.json + meta.json. Relay the printed stats and any non-auto-corrected issues.
Phase 4 — SAVE & LAUNCH
Clean up intermediate files exceptscan-manifest.json: