What you can import
Assets, tokens, and components use Figma’s REST API and can run headlessly.
Motion and shader data can come through a compatible Figma connector; if
that surface is unavailable, provide a native export instead. Storyboard
reconstruction uses ordinary frame exports plus the agent’s analysis.
One-time setup
Most people only need one connection:
Do both if your project needs everything; each is independent, so it doesn’t matter which you set up first.
Step A — Figma token (assets, tokens, components)
Needed for anything you run from thehyperframes figma CLI.
1
Mint a token
In Figma: Settings → Security → Personal access tokens → Generate new token.
2
Check these scopes
Read-only is all it ever needs — the integration never writes to Figma. On most accounts (not Figma Enterprise), check exactly these three:
- File content — Read-only
- File metadata — Read-only
- Library content — Read-only — easy to miss, and without it
tokens403s the moment it tries the published-styles fallback
tokens. Not on Enterprise? Skip it — tokens falls back to published styles automatically, or use the MCP connector (Step B) instead, which reaches variables on any plan.3
Export it
.env so future
sessions skip this step. The token can read files that its Figma account
and scopes allow.Step B — Figma connector (motion, shaders, and a token-free path to brand colors)
No token, no scopes to pick — connect it once when your agent asks (a one-click OAuth) and it stays connected. This is also a convenient way to read the brand values used by a selection when the REST variables endpoint is unavailable on your plan. Connector availability and usage limits depend on Figma’s current plan and client rules, so the agent should batch requests and cache the result.Import an asset
.media/images/, and the command prints a ready-to-paste <img> snippet:
--format svg|png|jpg|pdf(defaultsvg). SVG for logos and vectors — scalable and animatable.--format png --scale 2for raster fidelity.- Accepted refs: a full Figma URL with
?node-id=…(right-click a layer → Copy link) orfileKey:nodeIdshorthand. Asset and component imports always target a specific node; onlytokenstakes a barefileKey. - Idempotent: the manifest records
fileKey:nodeId:format:scale:version, so re-running reuses the file unless the design actually changed in Figma.
Pull your brand
figma-tokens.json sidecar plus a binding index, and prints entries for the
composition’s data-composition-variables. Scenes that reference those roles
use the same local values. Run tokens again when the Figma file changes.
Import a component
compositions/components/<name>/. Vector and boolean-op nodes that don’t map to clean HTML auto-rasterize through the asset path.
Colors bound to a Figma variable resolve against your imported tokens:
- Bound to an imported token → emitted as
var(--brand-slug, #0066FF)— a later brand refresh propagates into the component. - Bound to a token you haven’t imported → the literal color is used and the element is flagged
data-figma-unresolved. The command tells you; runtokenson the source (or library) file and re-import to link them.
Motion, shaders, and storyboards
These run through the/figma agent skill:
- Motion — a Figma Motion timeline (keyframes, easing, repeats) translates structurally into a paused, finite GSAP timeline registered on
window.__timelines, seekable frame-by-frame like any hand-authored animation, and editable afterward. Tracks that can’t translate faithfully fall back to a baked video clip — the agent tells you which path it took and why. - Shaders — Figma’s export path doesn’t execute shaders, so the default is a native Figma export (PNG or Motion MP4) imported as an asset/clip.
- Storyboards — a section of scene frames is decoded, not slideshowed: repeated elements become continuity clues and the differences between frames become motion or interaction. A connector is not required for this path.
Provenance and refresh
Every import records where it came from (fileKey, nodeId, version) in .media/manifest.jsonl. Nothing in a rendered composition points at Figma — assets are files, tokens are variables, motion is a timeline. When the Figma file moves on, re-running the same import commands re-pulls only what changed.