Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyzes Figma designs and generates implementation-ready PRDs with detailed visual specifications. Use when user provides Figma link or uploads design screenshots. Requires Figma MCP server connection.
.claude/skills/figma-designer/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-09 | ✗→✓ | ▲ Improved | 113% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 134% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 90% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 111% | 0% |
| case-16 | ✗→✓ | ▲ Improved | 76% | 0% |
> "Transform Figma designs into implementation-ready specifications with pixel-perfect accuracy"
This skill analyzes Figma designs through the available Figma integration and produces design evidence. prd-planner owns product requirements and technical PRD methodology; this skill supplies visual facts and unresolved design gaps.
Ensure the host exposes a Figma MCP server or plugin before using this skill. Tool names vary by host and plugin version, so inspect the available Figma tools in the current session instead of assuming fixed names. The required capability set is:
Activates when you:
https://www.figma.com/file/...)yamlInput: Figma URL or File Key ↓ Extract File Key from URL ↓ Call the available Figma metadata tool ↓ Call the available Figma node/detail tool ↓ Parse frame, component, and text nodes
Create a comprehensive design token inventory:
typescript// Design Token Structure interface DesignTokens { colors: { primary: string[]; secondary: string[]; neutral: string[]; semantic: { success: string; warning: string; error: string; info: string; }; }; typography: { fontFamilies: Record<string, string>; fontSizes: Record<string, number>; fontWeights: Record<string, number>; lineHeights: Record<string, number>; letterSpacing: Record<string, number>; }; spacing: { scale: number; // 4, 8, 12, 16, etc. values: Record<string, number>; }; borders: { radii: Record<string, number>; widths: Record<string, number>; }; shadows: Array<{ name: string; values: string[]; }>; }
File
├── Frames (Pages/Screens)
│ ├── Component Instances
│ │ ├── Primary Button
│ │ ├── Input Field
│ │ └── Card
│ └── Text Layers
│ ├── Headings
│ ├── Body
│ └── LabelsFor each component, extract:
Use this template for each screen:
markdown## Screen: [Screen Name] ### Layout Structure
┌─────────────────────────────────────────┐ │ Header/Nav] │ ├─────────────────────────────────────────┤ │ │ │ Main Content] │ │ ┌───────────┐ ┌───────────┐ │ │ │ Card 1 │ │ Card 2 │ │ │ └───────────┘ └───────────┘ │ │ │ ├─────────────────────────────────────────┤ │ Footer] │ └─────────────────────────────────────────┘
### Design Specifications
#### Colors
| Token | Value | Usage |
|-------|-------|-------|
| Primary | `#007AFF` | Primary buttons, links |
| Background | `#FFFFFF` | Screen background |
| Surface | `#F5F5F7` | Cards, sections |
| Text Primary | `#1C1C1E` | Headings, body |
| Text Secondary | `#8E8E93` | Captions, labels |
#### Typography
| Style | Font | Size | Weight | Line Height | Letter Spacing |
|-------|------|------|--------|------------|---------------|
| Display Large | SF Pro Display | 28px | Bold (700) | 34px | -0.5px |
| Heading 1 | SF Pro Display | 24px | Bold (700) | 32px | -0.3px |
| Heading 2 | SF Pro Display | 20px | Semibold (600) | 28px | -0.2px |
| Body Large | SF Pro Text | 17px | Regular (400) | 24px | -0.4px |
| Body | SF Pro Text | 15px | Regular (400) | 22px | -0.3px |
| Caption | SF Pro Text | 13px | Regular (400) | 18px | -0.1px |
#### Spacing
| Token | Value | Usage |
|-------|-------|-------|
| xs | 4px | Icon padding |
| sm | 8px | Tight spacing |
| md | 12px | Card padding |
| lg | 16px | Section spacing |
| xl | 24px | Large gaps |
| 2xl | 32px | Page margins |
#### Component: Primary Button
interface PrimaryButtonProps { size?: 'small' | 'medium' | 'large'; variant?: 'primary' | 'secondary' | 'tertiary'; disabled?: boolean; }
// Sizes size.small = { height: 32px, paddingHorizontal: 12px, fontSize: 15, iconSize: 16, }
size.medium = { height: 40px, paddingHorizontal: 16px, fontSize: 15, iconSize: 20, }
size.large = { height: 48px, paddingHorizontal: 24px, fontSize: 17, iconSize: 24, }
// Variants variant.primary = { backgroundColor: '#007AFF', color: '#FFFFFF', }
variant.secondary = { backgroundColor: '#F5F5F7', color: '#007AFF', }
variant.tertiary = { backgroundColor: 'transparent', color: '#007AFF', }
#### Constraints & Responsive Behavior
| Element | Constraints | Responsive Behavior |
|---------|-------------|---------------------|
| Header | Left, Right, Top | Sticky on scroll |
| Sidebar | Left, Top, Bottom | Collapses to drawer on mobile |
| Content | Left, Right (16px) | Full width on mobile |
### Interaction States
| Element | Default | Hover | Pressed | Disabled |
|---------|---------|-------|--------|----------|
| Primary Button | opacity: 1 | opacity: 0.8 | opacity: 0.6 | opacity: 0.4 |
| Icon Button | opacity: 1 | background: rgba(0,0,0,0.05) | background: rgba(0,0,0,0.1) | opacity: 0.3 |
| Card | shadow: sm | shadow: md | - | opacity: 0.6 |Generates a design specification document:
docs/{feature}-design-spec.mdProvide screen intent, design tokens, component states, responsive rules, accessibility observations, and open product questions as inputs to prd-planner. Do not invent business requirements from visual design alone.
| Category | What to Extract | Why | |----------|----------------|-----| | Colors | Hex/RGBA values | Theme consistency | | Typography | Font family, size, weight, spacing | Text hierarchy | | Spacing | Padding, margin, gap values | Layout alignment | | Borders | Radius, width values | Shape consistency | | Shadows | Offset, blur, spread, color | Depth perception | | Icons | Name, size, color | Visual consistency | | Images | URL, dimensions, fit mode | Asset management |
Before generating design evidence, verify:
For each frame/screen in the Figma file:
markdown## Frame: {Frame Name} ### Purpose {What this screen does} ### Elements | Element | Type | Styles | Props | |---------|------|--------|-------| | {Name} | {Component/Text/Vector} | {css} | {props} | | {Name} | {Component/Text/Vector} | {css} | {props} | ### Layout - Container: {width, height, fill} - Position: {absolute/relative} - Constraints: {left, right, top, bottom} - Auto Layout: {direction, spacing, padding, alignment} ### Content Hierarchy 1. {Primary element} 2. {Secondary element} 3. {Tertiary element} ### Notes {Any special considerations}
Figma URL → figma-designer → Visual Specs
↓
prd-planner → PRD
↓
implementation → Code
↓
code-reviewer → Quality CheckAfter generating specifications:
markdown## Developer Handoff ### Design Files - Figma: {url} - Design Spec: {link} ### Design Tokens - Generated: `tokens.ts` - Color palette: `colors.ts` - Typography: `typography.ts` ### Component Library - Storybook: {url} - Component docs: {link} ### Assets - Icons: {folder} - Images: {folder} - Exports: {format}
✅ Extract exact pixel values for critical dimensions ✅ Document component variants and states ✅ Include responsive breakpoints ✅ Note any platform differences (iOS vs Android) ✅ Include accessibility considerations ✅ Export design tokens as constants
❌ Round spacing values (use exact 4px/8px/12px) ❌ Ignore hover/focus states ❌ Skip constraint behavior ❌ Forget about empty states ❌ Omit loading states ❌ Assume platform defaults without verification
See references/example-output.md for a full sample output and platform-specific considerations.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-07 | pass→pass | 17,832 | 14,585 | -18% | 1 | 1 | 0% | 1,823 | 4,056 | +122% | 0 | 0 | — |
case-01 | fail→fail | 28,845 | 38,709 | +34% | 1 | 1 | 0% | 4,955 | 8,002 | +61% | 0 | 0 | — |
case-02 | fail→fail | 46,403 | 32,601 | -30% | 1 | 1 | 0% | 5,084 | 7,766 | +53% | 0 | 0 | — |
case-03 | fail→fail | 24,169 | 31,639 | +31% | 1 | 1 | 0% | 3,039 | 8,058 | +165% | 0 | 0 | — |
case-04 | fail→fail | 32,106 | 20,098 | -37% | 1 | 1 | 0% | 4,396 | 5,098 | +16% | 0 | 0 | — |
case-05 | fail→fail | 30,220 | 35,787 | +18% | 1 | 1 | 0% | 5,473 | 7,210 | +32% | 0 | 0 | — |
case-06 | fail→fail | 20,260 | 47,464 | +134% | 1 | 1 | 0% | 936 | 3,245 | +247% | 0 | 0 | — |
case-08 | pass→pass | 8,392 | 12,901 | +54% | 1 | 1 | 0% | 1,510 | 3,692 | +145% | 0 | 0 | — |
case-09 | fail→pass | 16,145 | 16,944 | +5% | 1 | 1 | 0% | 2,310 | 4,922 | +113% | 0 | 0 | — |
case-10 | fail→pass | 12,634 | 7,290 | -42% | 1 | 1 | 0% | 1,235 | 2,890 | +134% | 0 | 0 | — |
case-11 | pass→pass | 17,349 | 12,205 | -30% | 1 | 1 | 0% | 1,777 | 3,115 | +75% | 0 | 0 | — |
case-12 | pass→pass | 18,573 | 11,382 | -39% | 1 | 1 | 0% | 2,298 | 4,122 | +79% | 0 | 0 | — |
case-13 | fail→pass | 11,364 | 5,513 | -51% | 1 | 1 | 0% | 1,755 | 3,339 | +90% | 0 | 0 | — |
case-14 | fail→pass | 15,735 | 18,376 | +17% | 1 | 1 | 0% | 2,528 | 5,340 | +111% | 0 | 0 | — |
case-15 | fail→fail | 14,160 | 17,044 | +20% | 1 | 1 | 0% | 2,318 | 4,173 | +80% | 0 | 0 | — |
case-16 | fail→pass | 16,526 | 7,756 | -53% | 1 | 1 | 0% | 1,617 | 2,849 | +76% | 0 | 0 | — |
case-17 | fail→pass | 7,192 | 7,525 | +5% | 1 | 1 | 0% | 1,290 | 2,976 | +131% | 0 | 0 | — |
case-18 | pass→pass | 34,169 | 8,760 | -74% | 1 | 1 | 0% | 2,328 | 3,149 | +35% | 0 | 0 | — |
case-19 | fail→fail | 20,337 | 18,538 | -9% | 1 | 1 | 0% | 2,365 | 4,656 | +97% | 0 | 0 | — |
case-20 | fail→pass | 16,886 | 3,526 | -79% | 1 | 1 | 0% | 1,927 | 3,018 | +57% | 0 | 0 | — |
case-21 | pass→pass | 21,182 | 9,785 | -54% | 1 | 1 | 0% | 2,595 | 3,376 | +30% | 0 | 0 | — |
case-22 | fail→pass | 21,665 | 12,410 | -43% | 1 | 1 | 0% | 2,825 | 3,838 | +36% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
| Model | Method | Date | Lift |
|---|---|---|---|
| gemini-3.6-flash | verified | 8/2/2026 | +27% |
| gemini-3.6-flash | verified | 7/26/2026 | +36% |
Other measured skills in the registry, with their headline benchmark lift.