/figma-use — Foundational Figma Canvas Skill
Base skill for all Figma operations. Teaches agents how Figma works — structure, Auto Layout, variables, MCP tools, and the mandatory self-healing loop. Load this before any /figma-* skill.
Freedom Level: High
Agents have full canvas read/write access but must follow the self-healing protocol and never create floating elements.
MCP Tool Decision Tree
This is the most important section. Choose the right tool for the job:
Writing to Canvas
What are you trying to do?
CREATE a design using existing components/tokens:
→ use_figma (Official MCP)
WHY: It understands your design system, returns Code Connect hints,
and produces structured output. ALWAYS try this first.
RUN raw Plugin API code (batch ops, custom logic):
→ typed Mémoire Figma actions
WHY: For operations use_figma doesn't support — complex scripts,
bulk modifications, conditional logic.
INSTANTIATE an existing component:
→ figma_instantiate_component (Console MCP)
WHY: Fastest way to create an instance of a known component.
Call figma_search_components first to get the nodeId.
CREATE variables in bulk:
→ figma_batch_create_variables (Console MCP)
WHY: 10-50x faster than individual figma_create_variable calls.
SET a single property:
→ figma_set_fills / figma_set_text / figma_resize_node
WHY: Surgical single-property changes.
Reading from Canvas
What do you need?
Design with code hints + screenshot:
→ get_design_context (Official MCP) ← PREFERRED
Returns: code, screenshot, Code Connect snippets, annotations
Visual screenshot only:
→ get_screenshot (Official MCP) or figma_take_screenshot (Console)
Node properties and structure:
→ get_metadata (Official MCP)
Design tokens/variables:
→ get_variable_defs (Official) or figma_get_variables (Console)
Component search:
→ figma_search_components (Console) — call at SESSION START
NOTE: nodeIds are session-scoped, never reuse from previous sessions
Code Connect mappings:
→ get_code_connect_map (Official MCP) — CHECK FIRST before creating
Canvas Principles
Structure Hierarchy
File → Page → Section → Frame → Component/Instance → Layer
Auto Layout Rules
- Always use Auto Layout — never absolute positioning unless overlays
- Direction:
HORIZONTALorVERTICAL - Spacing: use design token values, never magic numbers
- Padding: consistent (use
counterAxisSpacingfor cross-axis) - Sizing: prefer
FILLover fixed width,HUGfor content-sized elements - GOTCHA:
counterAxisSizingModeonly accepts"FIXED"or"AUTO", never"FILL"
Component Architecture (Atomic Design)
| Level | Figma Structure | Examples |
|---|---|---|
| Atom | Base component, no nested components | Button, Badge, Input, Label |
| Molecule | 2-5 atom instances composed | FormField (Label + Input + HelpText) |
| Organism | Molecules + atoms with state/logic | LoginForm, Sidebar, DataTable |
| Template | Page-level layout skeleton | DashboardTemplate, AuthTemplate |
| Page | Template + real content instances | Dashboard, LoginPage |
Variables & Tokens
- Always bind to variables — never use raw hex colors or pixel values
- Token naming:
collection/category/name(e.g.,colors/primary/500) - Support light/dark modes via variable modes
- Map to Tailwind:
var(--color-primary-500)→text-primary-500
Component Properties
- Variant properties for visual states (size, variant, state)
- Boolean properties for toggles (hasIcon, isDisabled)
- Text properties for editable content (label, placeholder)
- Instance swap for composable slots (leadingIcon, action)
Code Connect (CHECK FIRST)
Before creating any component, check Code Connect:
1. get_code_connect_map → does this component have a code mapping?
2. If YES → use the mapped codebase component directly
- Follow the returned prop interface
- Respect component documentation links
- Honor design annotations from the designer
3. If NO → create the component, then map it:
- add_code_connect_map after creation
- Map Figma properties → React props
Canvas Operations
Creating Elements
1. Check Code Connect → get_code_connect_map
2. Check if component exists → figma_search_components
3. If exists → figma_instantiate_component
4. If new design → use_figma (preferred) or typed Mémoire Figma actions
5. Always place inside a Section or Frame (NEVER floating)
6. Bind all visual properties to variables
7. SCREENSHOT → validate → iterate
Self-Healing Loop (MANDATORY)
After ANY visual creation or modification:
CREATE → SCREENSHOT → ANALYZE → FIX → VERIFY (max 3 rounds)
- Execute the design change
- Take screenshot with
figma_take_screenshot - Analyze for:
- Elements using "hug contents" instead of "fill container"
- Inconsistent padding
- Text/inputs not filling available width
- Items not centered in their containers
- Components floating on blank canvas
- Raw hex values (should be variables)
- Missing Auto Layout
DROP_SHADOWeffects missingblendMode: "NORMAL"
- Fix issues found
- Final screenshot to confirm
- Max 3 iterations — if still broken, report to user
Figma API Gotchas
counterAxisSizingModeonly accepts"FIXED"or"AUTO"(not"FILL")DROP_SHADOWeffects requireblendMode: "NORMAL"figma.currentPage— set it through typed page-selection helpers; raw JavaScript execution is not part of the default package.layoutGrowonly works inside Auto Layout parents- Always
await figma.loadFontAsync()before setting text
Naming Conventions
| Element | Convention | Example |
|---|---|---|
| Components | PascalCase | MetricCard, LoginForm |
| Variants | camelCase property, PascalCase value | size=Large |
| Variables | kebab-case path | colors/primary/500 |
| Pages | PascalCase | Dashboard, AuthLogin |
| Sections | Title Case | Hero Section, Navigation |
Integration with Mémoire
- Canvas operations flow through Mémoire's WebSocket bridge (ports 9223-9232)
- Agent metadata (role, task, status) is broadcast to all connected plugins
- Design tokens extracted from Figma map to
src/figma/tokens.ts - Generated components land in
generated/following atomic folder structure - Specs are validated against Zod schemas before saving