Craw Figma
/install craw-figma
Craw Figma Skill
Complete Figma control for AI agents: read via REST API, write via a local plugin. Change design layers, extract design tokens, audit accessibility, export assets.
Architecture
Craw ──→ figma_client.mjs (REST API) ──────→ Figma cloud (read: file, styles, export)
──→ figma_send.js (WebSocket) ──→ figma_connector.js ──→ Figma Plugin → Figma Desktop
──→ style_auditor.mjs (design system analysis, CSS tokens)
──→ accessibility_checker.mjs (WCAG AA/AAA, contrast, touch targets)
Requirements
- Figma Personal Access Token → for REST API (read). Get it: Figma → Settings → Account → Personal Access Tokens
- Figma Desktop → required for write operations
- Node.js 18+
Quick Start
1. Set up your token
export FIGMA_ACCESS_TOKEN="figd_your_token_here"
2. Read a Figma file
node scripts/figma_client.mjs get-file \x3Cfile-key>
# Example: node scripts/figma_client.mjs get-file "ABC123xyz" --depth 4
Get a file key from: https://www.figma.com/design/\x3CFILE_KEY>/...
3. Install the Figma Plugin (one-time, for write access)
- Clone/download the skill repository
- Open Figma Desktop → Plugins → Development → Import plugin from manifest...
- Select
plugin/manifest.jsonfrom this skill's directory - The plugin "Craw Figma Connector" is now installed
4. Start the connector + run the plugin
# Terminal 1: Start the local WebSocket server
node scripts/figma_connector.js
# → Listening on ws://localhost:9199
In Figma Desktop:
- Right-click canvas → Plugins → Craw Figma Connector
- The panel shows Connected to Craw when the WebSocket connects
5. Send write commands
# Create a rectangle
node scripts/figma_send.js createRectangle \
--payload '{"x":100,"y":100,"width":400,"height":300,"fillColor":{"r":0.14,"g":0.49,"b":1},"cornerRadius":12,"name":"Hero Card"}'
# Get current selection
node scripts/figma_send.js getSelection
Available Commands
Write (Plugin — real-time in Figma Desktop)
| Command | Payload (JSON) | Description |
|---|---|---|
createRectangle |
{x, y, width, height, fillColor?, cornerRadius?, name?} |
New rectangle |
createFrame |
{x, y, width, height, fillColor?, name?} |
New frame/artboard |
createEllipse |
{x, y, width, height, fillColor?, name?} |
New ellipse |
createText |
{x, y, characters, fontSize?, fontName?, fillColor?, name?} |
New text layer |
selectNode |
{id} |
Select + zoom into node |
updateNode |
{id, x?, y?, resize?{width,height}, fillColor?, name?} |
Modify existing node |
deleteNode |
{id} |
Remove node |
setFillColor |
{id, color{r,g,b}, opacity?} |
Set fill color |
groupSelection |
{} |
Group selected nodes |
getSelection |
{} |
List selected nodes |
getPageInfo |
{} |
Current page info |
createPolygon |
{x, y, width, height, pointCount, fillColor?, name?} |
Regular polygon (N sides) |
createStar |
{x, y, width, height, pointCount, innerRadius?, fillColor?, name?} |
Star shape |
createVectorNetwork |
{x, y, width, height, vectorNetwork: {vertices, segments}, fills?, strokes?} |
Custom vector path |
booleanOperation |
`{operation: UNION | SUBTRACT |
updateNode (auto-layout) |
{id, layoutMode?, paddingLeft?, ..., itemSpacing?, primaryAxisAlignItems?, ...} |
Apply Auto Layout to frame |
Shape Generator (advanced)
| Script | Description |
|---|---|
node scripts/shape_generator.js test-basic |
Demo: rectangle, ellipse, polygon, star, heart in grid |
node scripts/shape_generator.js test-union |
Demo: union of two overlapping circles |
node scripts/shape_generator.js generate '{"type":"heart","width":200}' |
Single shape by type |
Auto Layout Module
| Script | Description |
|---|---|
node scripts/auto_layout.js card '{"width":320}' |
Create card with auto-layout |
node scripts/auto_layout.js button '{"name":"CTA"}' |
Create button with padding |
node scripts/auto_layout.js row '{"padding":8}' |
Horizontal row |
node scripts/auto_layout.js column '{"padding":16}' |
Vertical column |
Style Dictionary Pipeline
| Script | Description |
|---|---|
cd scripts/style-dictionary && npx style-dictionary build |
Generate CSS variables + Figma tokens |
Output: scripts/style-dictionary/build/variables.css |
DR's Lab CSS custom properties (--color-*, --spacing-*, etc.) |
Output: scripts/style-dictionary/build/figma-tokens.json |
Figma-compatible nested tokens |
Read (REST API)
| Action | Args | Description |
|---|---|---|
get-file |
\x3Ckey> [--depth N] |
Full file document tree |
get-file-nodes |
\x3Ckey> \x3Cid>... |
Specific nodes by ID |
get-styles |
\x3Ckey> |
Published styles (color, text, effects) |
get-components |
\x3Ckey> |
Published components |
get-versions |
\x3Ckey> |
Version history |
render-images |
\x3Ckey> \x3Cid> [--format png|svg|pdf] [--scale N] |
Export as images |
get-image-fills |
\x3Ckey> |
Image fill URLs used in file |
get-metadata |
\x3Ckey> |
Lightweight file info |
me |
— | Current user info |
Analysis
| Action | Args | Description |
|---|---|---|
style_auditor.mjs |
\x3Ckey> [--brand-colors "#HEX,#HEX"] [--generate-css] |
Analyze colors, fonts, consistency, CSS tokens |
accessibility_checker.mjs |
\x3Ckey> [--level AA|AAA] [--format json|report] |
WCAG contrast, touch targets, font sizes |
Color Format
Figma uses RGB in 0–1 range:
{"r": 0.14, "g": 0.49, "b": 1} // #247DFF (blue)
{"r": 1, "g": 0.42, "b": 0.21} // #FF6B35 (orange)
{"r": 1, "g": 1, "b": 1} // #FFFFFF (white)
Auto-setup for AI Agents
When a user installs this skill, the AI agent should:
- Check if
FIGMA_ACCESS_TOKENis set — if not, instruct the user to generate one and export it - For write operations, check if the Figma plugin is installed — if not:
- Guide the user through importing
plugin/manifest.jsonin Figma Desktop - Suggest running
node scripts/figma_connector.jsseparately - Offer to run
figma_connector.jsif the agent has shell access
- Guide the user through importing
- Test connectivity with
figma_client.mjs mebefore proceeding
Tips
- Keep
figma_connector.jsrunning while working with write commands - The plugin auto-reconnects if the connector restarts (3s retry)
- Commands sent while the plugin is offline are queued and sent on reconnect
- Health check:
http://localhost:9200shows status and pending queue - Use
--generate-cssto extract Figma styles as CSS custom properties - Command timeout defaults to 30s. Override:
FIGMA_CMD_TIMEOUT=60000 node figma_connector.js - Boolean operations (union/subtract) may take longer — timeout is automatically handled and logged
Files
skills/craw-figma/
├── SKILL.md
├── scripts/
│ ├── figma_client.mjs — Figma REST API client (read)
│ ├── figma_connector.js — Local HTTP server (run this) — timeout 30s configurable
│ ├── figma_send.js — Send commands to Figma plugin
│ ├── shape_generator.js — General-purpose shape creation (polygons, stars, hearts, union)
│ ├── auto_layout.js — Auto Layout module (cards, rows, buttons, spacing)
│ ├── heart_generator.js — Legacy heart shape generator
│ ├── star_generator.js — Legacy star generator
│ ├── design_engine.js — Design orchestration engine
│ ├── design_orchestrator.js — Orchestrator with NotebookLM consultation
│ ├── design_critic.js — Design critique pipeline
│ ├── craw_design_cmd.sh — Shell wrapper for design commands
│ ├── svg_to_figma.js — SVG path → Figma Vector Network converter
│ ├── style_auditor.mjs — Design system analysis
│ ├── accessibility_checker.mjs — WCAG compliance
│ └── style-dictionary/
│ ├── config.json — Style Dictionary configuration
│ ├── tokens/ — DTCG tokens → SD format
│ ├── build/variables.css — Generated CSS custom properties
│ └── build/figma-tokens.json — Figma-compatible tokens
├── plugin/
│ ├── manifest.json — Figma plugin manifest
│ ├── code.js — Plugin code (ES5, production)
│ ├── code.ts — Plugin code (TypeScript source)
│ └── ui.html — Plugin panel UI
├── design-tokens/
│ ├── design-tokens.json — Core tokens (DTCG format)
│ ├── projects/drs-lab.json — DR's Lab project tokens
│ └── load-tokens.js — Token loader utility
└── references/
├── figma-api-reference.md — REST API docs
└── design-patterns.md — UI patterns & best practices
- Make sure OpenClaw is installed (local or Docker)
- Run the install command in chat:
/install craw-figma - After installation, invoke the skill by name or use
/craw-figma - Provide required inputs per the skill's parameter spec and get structured output
What is Craw Figma?
Full bidirectional Figma integration — read files via REST API, create/modify/delete layers via local WebSocket connector + Figma plugin. Audit accessibility... It is an AI Agent Skill for Claude Code / OpenClaw, with 41 downloads so far.
How do I install Craw Figma?
Run "/install craw-figma" in the OpenClaw or Claude Code chat to install it in one step — no extra setup required.
Is Craw Figma free?
Yes, Craw Figma is completely free, licensed under MIT-0. You can download, install and use it at no cost.
Which platforms does Craw Figma support?
Craw Figma is cross-platform and runs anywhere OpenClaw / Claude Code is available (cross-platform).
Who created Craw Figma?
It is built and maintained by missionarteemis-cloud (@missionarteemis-cloud); the current version is v1.0.0.