$npx -y skills add omnigentx/jarvis --skill figma-designerDesign UI directly on Figma Desktop using figma-ui-mcp tools. Trigger when creating wireframes, visual designs, design systems, components, or design tokens.
| 1 | # Figma Designer Guidelines |
| 2 | |
| 3 | 1. Always check the Figma bridge connection with `figma_status` before starting any design work. If the bridge is disconnected, inform the team and provide text-based design specs as a fallback. |
| 4 | |
| 5 | 2. Before writing any non-trivial design code, call `figma_docs` to read the full API reference with all available operations and code examples. |
| 6 | |
| 7 | 3. After completing each major design section, take a screenshot with `figma_read(operation: "screenshot")` and inspect for overlaps, alignment issues, or text overflow. Fix issues and re-screenshot until clean. |
| 8 | |
| 9 | ## Getting Started |
| 10 | |
| 11 | When beginning a new design task, follow this bootstrap sequence: |
| 12 | |
| 13 | 1. Call `figma_status` to confirm the plugin bridge is connected |
| 14 | 2. Call `figma_docs` to read the complete API reference |
| 15 | 3. Run `setupDesignTokens` to bootstrap your design system (colors, spacing, radius) |
| 16 | 4. Build a variable lookup map from `get_variables()` for binding tokens to nodes |
| 17 | |
| 18 | ## Design System & Tokens |
| 19 | |
| 20 | All designs must use Figma Variables (Design Tokens) rather than hardcoded hex values. This ensures global consistency — changing a token value updates all bound nodes instantly. |
| 21 | |
| 22 | - **Bootstrap tokens**: Use `figma.setupDesignTokens()` with your color palette and spacing scale |
| 23 | - **Apply tokens**: After creating nodes, bind variables with `figma.applyVariable()` |
| 24 | - **Modify globally**: Use `figma.modifyVariable()` to update all bound nodes at once |
| 25 | - **Design Library frame**: Call `figma.ensure_library()` to create a visual reference at x:-2000 |
| 26 | |
| 27 | ## Components |
| 28 | |
| 29 | When building repeated elements (buttons, badges, cards, nav items), create reusable Components: |
| 30 | |
| 31 | 1. Check if the component exists with `figma.listComponents()` |
| 32 | 2. If not, create the frame, then convert with `figma.createComponent()` |
| 33 | 3. Use `figma.instantiate()` to place instances — changes to the component propagate to all instances |
| 34 | |
| 35 | ## Layout & Auto Layout |
| 36 | |
| 37 | Use Auto Layout (`layoutMode`) for all containers that need centering or consistent spacing. Avoid manual x/y positioning when auto-layout can handle it. |
| 38 | |
| 39 | - **Horizontal rows** (icon + text): `layoutMode: "HORIZONTAL"`, `counterAxisAlignItems: "CENTER"` |
| 40 | - **Vertical stacks** (title + subtitle): `layoutMode: "VERTICAL"`, `itemSpacing: 8` |
| 41 | - **Centered buttons**: `primaryAxisAlignItems: "CENTER"`, `counterAxisAlignItems: "CENTER"` |
| 42 | - **Overlapping elements** (progress bars, badges): Wrap in a non-auto-layout frame for absolute positioning |
| 43 | |
| 44 | ## Images & Icons |
| 45 | |
| 46 | Use server-side helpers for loading images and icons. Never use emoji characters as icons. |
| 47 | |
| 48 | - **Images**: `figma.loadImage(url, { parentId, width, height, scaleMode: "FILL" })` |
| 49 | - **Icons**: `figma.loadIcon(name, { parentId, size, fill })` — auto-fallback across icon libraries |
| 50 | - **Icons with background**: `figma.loadIconIn(name, { parentId, containerSize, fill, bgOpacity })` |
| 51 | |
| 52 | ## Reading & Inspecting Designs |
| 53 | |
| 54 | Use `figma_read` to understand existing designs before modifying them: |
| 55 | |
| 56 | | Operation | Purpose | |
| 57 | |-----------|---------| |
| 58 | | `get_selection` | Read what the user has selected in Figma | |
| 59 | | `get_design` | Full node tree for a frame (use `depth` and `detail` params) | |
| 60 | | `get_page_nodes` | Top-level frames on the current page | |
| 61 | | `screenshot` | PNG preview of a node for visual QA | |
| 62 | | `scan_design` | Progressive scan for large designs without token overflow | |
| 63 | | `get_node_detail` | CSS-like properties for a single node | |
| 64 | | `search_nodes` | Find nodes by type, name pattern, fill color, font, etc. | |
| 65 | |
| 66 | ## Naming Convention |
| 67 | |
| 68 | - Frame names: PascalCase (e.g. "Agent Dashboard", "Login Screen") |
| 69 | - Component names: kebab-case with type prefix (e.g. "btn/primary", "badge/status") |
| 70 | - Color tokens: descriptive (e.g. "accent", "bg-surface", "text-muted") |
| 71 | |
| 72 | ## Layer Order |
| 73 | |
| 74 | In Figma, the last child drawn renders on top. Always draw background/hero images first, then overlays and content on top. |
| 75 | |
| 76 | ## Delivering Designs |
| 77 | |
| 78 | After completing the design: |
| 79 | 1. Take a final screenshot for reference |
| 80 | 2. Email the team with the Figma frame name and key design decisions |
| 81 | 3. Include component specs for Dev (spacing, colors, responsive breakpoints) |
| 82 | |
| 83 | ## References |
| 84 | |
| 85 | | Topic | File | |
| 86 | |-------|------| |
| 87 | | Meeting protocol | [MEETING_PROTOCOL.md](references/MEETING_PROTOCOL.md) | |