What the agent gets
One frame, one zip. Structure to build from, assets to use, a picture to check against.
frame.zip
├── context.md Start here: instructions for your agent
├── design/
│ ├── nodes.json Layout, text, styles and expanded instances
│ ├── fonts.json Font faces the visible text uses, with node ids
│ └── variables.json Bound variables, collections, modes and aliases
├── assets/ Image fills, SVGs and composited node renders
├── assets.json Maps design references to asset files
├── references/screen.png A render of the frame to compare against
├── missing-assets.json Anything that could not be produced
└── manifest.json File roles, media types, sizes and SHA-256 hashes
Need one piece? The CLI does it directly:
npx -y @runkids/figlens find design.fig "login" --type FRAME # frame ids by name or text
npx -y @runkids/figlens inspect design.fig 12:345 # compact layout and text summary
npx -y @runkids/figlens nodes design.fig 12:345 > frame.json # REST-shaped JSON
npx -y @runkids/figlens export design.fig 12:345 icon.svg # SVG, PNG, JPG, WebP or AVIF
npx -y @runkids/figlens bundle design.fig 12:345 frame.zip # the zip above
SVG exports embed original image fills and outline text as glyphs, so no fonts are needed. Through MCP, raster exports also come back as inline images, so the agent sees the design without opening a file.
How close is it to Figma?
Measured against Figma's own JSON, PNG and SVG exports on 826 production frames and five Community files (2026-10-22):
| Check | Result |
|---|---|
| Node structure, names, visibility, bounds and text | Identical in 771 / 826 frames |
| Original image fills | 2,608 / 2,608 byte-identical |
| SVG assets | 5,014 / 5,197 within the pixel-difference threshold |
| Community frame bundles | 306 / 306 with no missing assets |
Results on those files, not a guarantee for every design. Method and thresholds: accuracy report.
This page is built from docs/README.md in the repository.