major-ai-skills
Version:
Installable agentic skills / AI agent skills (SKILL.md) for Claude Code, Cursor, Codex CLI, Gemini CLI & Antigravity - 402+ professional app, token-efficiency, and common-sense skills. SEO/GEO ready.
125 lines (98 loc) • 5.95 kB
Markdown
name: figma
description: "Build Figma plugins, export selected frames, audit components, and map variables to design tokens using the Plugin and REST APIs."
category: design
risk: safe
source: self
source_type: self
date_added: "2026-08-26"
tags: ["figma", "plugin-api", "rest-api", "design-tokens", "variables", "components", "claude"]
tools: ["claude", "cursor", "gemini", "codex"]
# Figma Design Systems & Plugin AI Skill Guide (Claude)
## Overview & Engine Architecture
Figma is a collaborative vector design platform with a document model of **Pages → Frames → Nodes**, reusable **Components / Variants**, and **Variables** (design tokens). Automation spans the in-editor **Plugin API** (`figma` global in sandbox) and the cloud **REST API** for file metadata, comments, and exports. Claude operates as a Principal Design Systems Engineer, specializing in **plugin tooling**, **token extraction**, **component audit scripts**, and **REST-based CI export**.
### Figma Document & API Stack
```
┌─────────────────────────────────────────────────────────────┐
│ Figma Architecture │
│ │
│ Document Graph │
│ ├── Document / Page / Frame / Group / Text / Vector │
│ ├── Components / Component Sets / Instances │
│ └── Variables / Styles / Auto Layout │
│ │
│ In-Editor Automation │
│ ├── Plugin sandbox (TypeScript/JS) + UI iframe │
│ ├── figma.currentPage.selection / node traversal │
│ └── clientStorage / notify / exportAsync │
│ │
│ Cloud REST │
│ ├── Files / Nodes / Images / Comments │
│ ├── Variables REST (Enterprise surfaces) │
│ └── Personal access tokens / OAuth │
└─────────────────────────────────────────────────────────────┘
```
## Operational Capabilities & Agent Directives
1. **Plugin vs REST**: Use Plugin API for live canvas mutations; use REST for CI exports and metadata outside the editor.
2. **Selection Guards**: Always validate `figma.currentPage.selection` length and node types before mutating.
3. **Token Discipline**: Map Variables → platform tokens (CSS/JSON) with stable names; never invent IDs.
4. **Component Hygiene**: Prefer instances over detached copies; flag detached instances in audits.
5. **Permissions**: REST calls require a token with the minimum scopes; never hardcode secrets in plugins.
## Production TypeScript: Figma Plugin - Export Selected Frames as PNG
`code.ts` (plugin main):
```typescript
// ==============================================================================
// Figma Plugin API: export selected frames to PNG bytes and message UI
// ==============================================================================
async function exportSelectedFrames() {
const selection = figma.currentPage.selection;
const frames = selection.filter((n) => n.type === "FRAME") as FrameNode[];
if (frames.length === 0) {
figma.notify("Select one or more frames to export.");
return;
}
const payloads: { name: string; bytes: Uint8Array }[] = [];
for (const frame of frames) {
const bytes = await frame.exportAsync({
format: "PNG",
constraint: { type: "SCALE", value: 2 },
});
payloads.push({ name: frame.name.replace(/\s+/g, "_"), bytes });
}
figma.ui.postMessage({ type: "EXPORT_READY", payloads });
figma.notify(`Exported ${payloads.length} frame(s) @2x`);
}
figma.showUI(__html__, { width: 360, height: 240 });
figma.ui.onmessage = async (msg) => {
if (msg.type === "RUN_EXPORT") await exportSelectedFrames();
if (msg.type === "CLOSE") figma.closePlugin();
};
```
REST export example (CI):
```bash
curl -H "X-Figma-Token: $FIGMA_TOKEN" \
"https://api.figma.com/v1/images/:file_key?ids=1:2&format=png&scale=2"
```
## Technical Troubleshooting Matrix
| Issue & Failure Signature | Root Cause Analysis | Diagnostic & Resolution Pathway |
| :--- | :--- | :--- |
| **Plugin `exportAsync` fails** | Node not exportable / too large. | Export frames/components; reduce scale; check bounds. |
| **REST 403** | Bad token or missing scope. | Regenerate PAT; confirm file access for the user. |
| **Detached instances proliferate** | Designers detached to override. | Audit + re-instance; use preferred values / variables. |
| **UI iframe CSP issues** | External scripts blocked. | Bundle UI assets; follow Figma plugin UI rules. |
## Best Practices
1. Traverse with `node.findAll` / `findAllWithCriteria` instead of brittle absolute paths.
2. Use `figma.notify` for operator feedback; keep plugin UI minimal.
3. For design tokens, prefer Variables over hard-coded paint styles when available.
### Essential References
- Plugin typings: `@figma/plugin-typings`
- REST base: `https://api.figma.com/v1`
- Manifest: `manifest.json` (`main`, `ui`, `networkAccess`)
## Agent Operational Directive
> **MANDATORY**: Never embed Figma access tokens in plugin source committed to git. Validate selection node types before mutation. Prefer Variables/components for system changes over one-off node edits.