design-spec-extraction

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Design Specification Extraction

设计规范提取

Extract comprehensive, production-ready JSON design specifications from visual inputs using a 7-pass serial subtask architecture that ensures complete coverage and cross-validation.
通过可确保覆盖完整、支持交叉验证的7轮串原子任务架构,从视觉输入中提取完整的、可用于生产环境的JSON设计规范。

When to Use This Skill

何时使用本功能

  • Extracting design tokens from Figma exports or screenshots
  • Converting visual mockups into structured component specifications
  • Creating developer handoff documentation from designs
  • Generating design system documentation from existing UIs
  • Preparing design data for code generation tools
  • Analyzing website screenshots for design reverse-engineering
  • 从Figma导出文件或截图中提取设计令牌
  • 将视觉原型转换为结构化组件规范
  • 基于设计稿生成开发交接文档
  • 基于现有UI生成设计系统文档
  • 为代码生成工具准备设计数据
  • 分析网站截图用于设计逆向工程

Output Format

输出格式

The extraction produces JSON following the W3C Design Tokens Community Group (DTCG) 2025.10 format with extensions:
  • $version: Schema version
  • $source: Metadata (type, dimensions, extraction timestamp)
  • tokens: Design tokens (colors, typography, spacing, sizing, shadows, radii)
  • components: Hierarchical component tree with bounding boxes
  • accessibility: WCAG analysis, contrast issues, semantic structure
  • $extensions: Layout, component catalog, confidence scores
提取结果遵循W3C设计令牌社区组(DTCG)2025.10格式并包含扩展字段:
  • $version: schema版本
  • $source: 元数据(类型、尺寸、提取时间戳)
  • tokens: 设计令牌(颜色、排版、间距、尺寸、阴影、圆角)
  • components: 带边界框的层级组件树
  • accessibility: WCAG分析、对比度问题、语义结构
  • $extensions: 布局、组件目录、置信度得分

CRITICAL: File-Based Architecture

重要提醒:基于文件的架构

EVERY pass MUST write its output to a JSON file on disk. This is non-negotiable.
每一轮处理的输出都必须写入磁盘的JSON文件,这是硬性要求。

Directory Structure

目录结构

Before starting extraction, create the output directory:
bash
mkdir -p .tmp-design-specs/{project-name}
开始提取前,请先创建输出目录:
bash
mkdir -p .tmp-design-specs/{project-name}

Required File Outputs

要求输出的文件

PassOutput FileDescription
1
.tmp-design-specs/{project}/pass-1-layout.json
Layout and structure
2
.tmp-design-specs/{project}/pass-2-colors.json
Color tokens
3
.tmp-design-specs/{project}/pass-3-typography.json
Typography tokens
4
.tmp-design-specs/{project}/pass-4-components.json
Component tree
5
.tmp-design-specs/{project}/pass-5-spacing.json
Spacing and dimensions
6
.tmp-design-specs/{project}/pass-6-states.json
States and accessibility
7
.tmp-design-specs/{project}/design-spec.json
Final consolidated output
轮次输出文件说明
1
.tmp-design-specs/{project}/pass-1-layout.json
布局与结构
2
.tmp-design-specs/{project}/pass-2-colors.json
颜色令牌
3
.tmp-design-specs/{project}/pass-3-typography.json
排版令牌
4
.tmp-design-specs/{project}/pass-4-components.json
组件树
5
.tmp-design-specs/{project}/pass-5-spacing.json
间距与尺寸
6
.tmp-design-specs/{project}/pass-6-states.json
状态与可访问性
7
.tmp-design-specs/{project}/design-spec.json
最终合并输出

Why File-Based?

为什么采用基于文件的架构?

  1. Persistence: Each pass result is saved, enabling resumption if interrupted
  2. Debugging: Intermediate files allow inspection of each extraction phase
  3. Validation: Each JSON file can be validated independently
  4. Context Passing: Subtask agents read previous pass files directly
  5. Audit Trail: Complete record of extraction process
  1. 持久化:每一轮处理结果都会被保存,中断后可以恢复执行
  2. 调试便捷:可以通过中间文件检查每个提取阶段的结果
  3. 校验方便:每个JSON文件都可以独立验证有效性
  4. 上下文传递:子任务Agent可以直接读取上一轮的输出文件
  5. 审计追踪:完整记录整个提取流程

Multipass Architecture

多轮处理架构

The extraction uses 7 serial passes. Each pass MUST:
  1. Read previous pass JSON files from disk
  2. Perform its analysis
  3. WRITE its output to the designated JSON file
  4. Complete before the next pass begins
Screenshot Input
      |
      v
[Pass 1] Source Analysis & Layout  -----> pass-1-layout.json
      |
      v
[Pass 2] Color & Visual Style      -----> pass-2-colors.json
      |
      v
[Pass 3] Typography Analysis       -----> pass-3-typography.json
      |
      v
[Pass 4] Component Detection       -----> pass-4-components.json
      |
      v
[Pass 5] Spacing & Dimensions      -----> pass-5-spacing.json
      |
      v
[Pass 6] States & Accessibility    -----> pass-6-states.json
      |
      v
[Pass 7] Consolidation             -----> design-spec.json (FINAL)

提取过程分为7个串行轮次,每一轮都必须:
  1. 从磁盘读取上一轮的JSON输出文件
  2. 执行对应分析任务
  3. 将输出写入指定的JSON文件
  4. 完成后再开始下一轮处理
截图输入
      |
      v
[第1轮] 源分析与布局  -----> pass-1-layout.json
      |
      v
[第2轮] 颜色与视觉风格      -----> pass-2-colors.json
      |
      v
[第3轮] 排版分析       -----> pass-3-typography.json
      |
      v
[第4轮] 组件检测       -----> pass-4-components.json
      |
      v
[第5轮] 间距与尺寸      -----> pass-5-spacing.json
      |
      v
[第6轮] 状态与可访问性    -----> pass-6-states.json
      |
      v
[第7轮] 结果合并             -----> design-spec.json (最终输出)

Pass 1: Source Analysis & Layout Structure

第1轮:源分析与布局结构

Objective: Establish foundational understanding of the design source and spatial organization.
目标:建立对设计源文件和空间组织的基础认知。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 1 of a 7-pass design specification extraction system. Your focus: LAYOUT AND STRUCTURE ONLY.
You are Pass 1 of a 7-pass design specification extraction system. Your focus: LAYOUT AND STRUCTURE ONLY.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-1-layout.json
Use the Write tool to save your analysis as valid JSON to this file.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-1-layout.json
Use the Write tool to save your analysis as valid JSON to this file.

Input

Input

  • Screenshot: [attached image]
  • Screenshot: [attached image]

Your Task

Your Task

Analyze the screenshot and extract:
Analyze the screenshot and extract:

1. Source Metadata

1. Source Metadata

  • Identify source type: Figma export, Sketch export, website screenshot, mockup, or wireframe
  • Detect dimensions and estimate device class (mobile/tablet/desktop)
  • Note any visible design tool artifacts (rulers, grids, selection boxes)
  • Identify source type: Figma export, Sketch export, website screenshot, mockup, or wireframe
  • Detect dimensions and estimate device class (mobile/tablet/desktop)
  • Note any visible design tool artifacts (rulers, grids, selection boxes)

2. Layout Type Detection

2. Layout Type Detection

Determine the primary layout strategy:
  • Single-column centered layout
  • Multi-column grid (count columns, estimate gutters)
  • Sidebar + main content
  • Dashboard/admin layout
  • Full-bleed/edge-to-edge
Determine the primary layout strategy:
  • Single-column centered layout
  • Multi-column grid (count columns, estimate gutters)
  • Sidebar + main content
  • Dashboard/admin layout
  • Full-bleed/edge-to-edge

3. Region Identification

3. Region Identification

Map the major layout regions with bounding boxes:
  • Header (position, height, sticky?)
  • Navigation (type: sidebar, topnav, or none)
  • Main content area
  • Footer
  • Any overlays, modals, or floating elements
Map the major layout regions with bounding boxes:
  • Header (position, height, sticky?)
  • Navigation (type: sidebar, topnav, or none)
  • Main content area
  • Footer
  • Any overlays, modals, or floating elements

4. Grid System Analysis

4. Grid System Analysis

  • Identify underlying grid (12-column, 4-column, etc.)
  • Measure or estimate gutter width
  • Note container max-width if visible
  • Identify underlying grid (12-column, 4-column, etc.)
  • Measure or estimate gutter width
  • Note container max-width if visible

Output Format

Output Format

Return JSON: { "$schema": "pass-1-layout", "$source": { "type": "figma-export|website-screenshot|mockup|...", "dimensions": { "width": N, "height": N, "aspectRatio": "W:H", "deviceClass": "..." }, "confidence": 0.0-1.0 }, "layout": { "type": "single-column|multi-column|sidebar|...", "regions": [ { "name": "header", "bounds": {"x":0,"y":0,"width":W,"height":H}, "sticky": true|false }, { "name": "navigation", "type": "sidebar|topnav|none", "bounds": {...} }, { "name": "main", "bounds": {...} }, { "name": "footer", "bounds": {...}, "present": true|false } ], "gridSystem": { "columns": N, "gutter": "Npx", "margin": "Npx", "maxWidth": "Npx" } }, "containers": [ { "id": "container-N", "bounds": { "x": N, "y": N, "width": N, "height": N }, "layout": "grid|flex|block", "parent": "parent-id|null", "childCount": N } ], "sections": [ { "id": "section-N", "purpose": "hero|features|testimonials|cta|...", "bounds": {...} } ] }
Use pixel values. Be precise with bounds. Note confidence level for uncertain areas.
Return JSON: { "$schema": "pass-1-layout", "$source": { "type": "figma-export|website-screenshot|mockup|...", "dimensions": { "width": N, "height": N, "aspectRatio": "W:H", "deviceClass": "..." }, "confidence": 0.0-1.0 }, "layout": { "type": "single-column|multi-column|sidebar|...", "regions": [ { "name": "header", "bounds": {"x":0,"y":0,"width":W,"height":H}, "sticky": true|false }, { "name": "navigation", "type": "sidebar|topnav|none", "bounds": {...} }, { "name": "main", "bounds": {...} }, { "name": "footer", "bounds": {...}, "present": true|false } ], "gridSystem": { "columns": N, "gutter": "Npx", "margin": "Npx", "maxWidth": "Npx" } }, "containers": [ { "id": "container-N", "bounds": { "x": N, "y": N, "width": N, "height": N }, "layout": "grid|flex|block", "parent": "parent-id|null", "childCount": N } ], "sections": [ { "id": "section-N", "purpose": "hero|features|testimonials|cta|...", "bounds": {...} } ] }
Use pixel values. Be precise with bounds. Note confidence level for uncertain areas.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-1-layout.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-1-layout.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 2: Color & Visual Style Extraction

第2轮:颜色与视觉风格提取

Objective: Extract complete color palette with semantic mappings.
目标:提取完整的调色板及语义映射关系。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 2 of a 7-pass design specification extraction system. Your focus: COLOR EXTRACTION.
You are Pass 2 of a 7-pass design specification extraction system. Your focus: COLOR EXTRACTION.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-2-colors.json
First, read the Pass 1 output:
.tmp-design-specs/{project}/pass-1-layout.json
Then use the Write tool to save your analysis as valid JSON.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-2-colors.json
First, read the Pass 1 output:
.tmp-design-specs/{project}/pass-1-layout.json
Then use the Write tool to save your analysis as valid JSON.

Input

Input

  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json

Your Task

Your Task

Extract ALL colors visible in this design:
Extract ALL colors visible in this design:

1. Background Colors (by region)

1. Background Colors (by region)

  • Page background
  • Section/card backgrounds
  • Header/footer backgrounds
  • Modal/overlay backgrounds
  • Input field backgrounds
  • Button backgrounds (all variants)
  • Page background
  • Section/card backgrounds
  • Header/footer backgrounds
  • Modal/overlay backgrounds
  • Input field backgrounds
  • Button backgrounds (all variants)

2. Foreground Colors (text and icons)

2. Foreground Colors (text and icons)

  • Primary heading text
  • Body text
  • Secondary/muted text
  • Link text (if distinguishable)
  • Icon colors
  • Placeholder text
  • Primary heading text
  • Body text
  • Secondary/muted text
  • Link text (if distinguishable)
  • Icon colors
  • Placeholder text

3. Border Colors

3. Border Colors

  • Card/container borders
  • Input field borders (default, focus, error states if visible)
  • Divider/separator colors
  • Card/container borders
  • Input field borders (default, focus, error states if visible)
  • Divider/separator colors

4. Feedback Colors

4. Feedback Colors

  • Error/danger indicators
  • Success indicators
  • Warning indicators
  • Info indicators
  • Error/danger indicators
  • Success indicators
  • Warning indicators
  • Info indicators

5. Interactive Colors

5. Interactive Colors

  • Primary action color (main CTA buttons)
  • Secondary action color
  • Hover states (if visible)
  • Focus indicators
  • Primary action color (main CTA buttons)
  • Secondary action color
  • Hover states (if visible)
  • Focus indicators

Color Value Extraction

Color Value Extraction

For each color, provide:
  • Hex value (best estimate: #RRGGBB)
  • Where it appears (semantic context)
  • Suggested token name following pattern: color.[category].[variant]
For each color, provide:
  • Hex value (best estimate: #RRGGBB)
  • Where it appears (semantic context)
  • Suggested token name following pattern: color.[category].[variant]

Output Format

Output Format

Return JSON: { "$schema": "pass-2-colors", "tokens": { "colors": { "primitive": { "blue": { "500": { "$value": "#3B82F6", "$type": "color", "$description": "Primary blue" }, "600": { "$value": "#2563EB", "$type": "color", "$description": "Primary blue dark" } }, "gray": { "50": { "$value": "#F9FAFB", "$type": "color" }, "100": { "$value": "#F3F4F6", "$type": "color" }, "500": { "$value": "#6B7280", "$type": "color" }, "900": { "$value": "#111827", "$type": "color" } } }, "semantic": { "background": { "default": { "$value": "{colors.primitive.gray.50}", "$type": "color", "$description": "Page background" }, "elevated": { "$value": "#FFFFFF", "$type": "color", "$description": "Card surfaces" } }, "foreground": { "default": { "$value": "{colors.primitive.gray.900}", "$type": "color", "$description": "Primary text" }, "muted": { "$value": "{colors.primitive.gray.500}", "$type": "color", "$description": "Secondary text" } }, "interactive": { "primary": { "$value": "{colors.primitive.blue.500}", "$type": "color", "$description": "Primary buttons, links" }, "primary-hover": { "$value": "{colors.primitive.blue.600}", "$type": "color", "$description": "Primary hover" } }, "border": { "default": { "$value": "{colors.primitive.gray.200}", "$type": "color", "$description": "Subtle borders" }, "focus": { "$value": "{colors.primitive.blue.500}", "$type": "color", "$description": "Focus rings" } }, "feedback": { "error": { "$value": "#EF4444", "$type": "color", "$description": "Error states" }, "success": { "$value": "#22C55E", "$type": "color", "$description": "Success states" }, "warning": { "$value": "#F59E0B", "$type": "color", "$description": "Warning states" }, "info": { "$value": "#3B82F6", "$type": "color", "$description": "Info states" } } } } }, "shadows": [ { "name": "elevation-sm", "$type": "shadow", "$value": { "offsetX": "0px", "offsetY": "1px", "blur": "2px", "spread": "0px", "color": "rgba(0,0,0,0.05)" }, "$description": "Subtle elevation" } ], "gradients": [], "componentColorMap": { "button-primary": { "background": "{colors.semantic.interactive.primary}", "text": "#FFFFFF", "border": "transparent" } } }
Use DTCG $value and $type syntax. Include $description for AI readability.
Return JSON: { "$schema": "pass-2-colors", "tokens": { "colors": { "primitive": { "blue": { "500": { "$value": "#3B82F6", "$type": "color", "$description": "Primary blue" }, "600": { "$value": "#2563EB", "$type": "color", "$description": "Primary blue dark" } }, "gray": { "50": { "$value": "#F9FAFB", "$type": "color" }, "100": { "$value": "#F3F4F6", "$type": "color" }, "500": { "$value": "#6B7280", "$type": "color" }, "900": { "$value": "#111827", "$type": "color" } } }, "semantic": { "background": { "default": { "$value": "{colors.primitive.gray.50}", "$type": "color", "$description": "Page background" }, "elevated": { "$value": "#FFFFFF", "$type": "color", "$description": "Card surfaces" } }, "foreground": { "default": { "$value": "{colors.primitive.gray.900}", "$type": "color", "$description": "Primary text" }, "muted": { "$value": "{colors.primitive.gray.500}", "$type": "color", "$description": "Secondary text" } }, "interactive": { "primary": { "$value": "{colors.primitive.blue.500}", "$type": "color", "$description": "Primary buttons, links" }, "primary-hover": { "$value": "{colors.primitive.blue.600}", "$type": "color", "$description": "Primary hover" } }, "border": { "default": { "$value": "{colors.primitive.gray.200}", "$type": "color", "$description": "Subtle borders" }, "focus": { "$value": "{colors.semantic.interactive.primary}", "$type": "color", "$description": "Focus rings" } }, "feedback": { "error": { "$value": "#EF4444", "$type": "color", "$description": "Error states" }, "success": { "$value": "#22C55E", "$type": "color", "$description": "Success states" }, "warning": { "$value": "#F59E0B", "$type": "color", "$description": "Warning states" }, "info": { "$value": "#3B82F6", "$type": "color", "$description": "Info states" } } } } }, "shadows": [ { "name": "elevation-sm", "$type": "shadow", "$value": { "offsetX": "0px", "offsetY": "1px", "blur": "2px", "spread": "0px", "color": "rgba(0,0,0,0.05)" }, "$description": "Subtle elevation" } ], "gradients": [], "componentColorMap": { "button-primary": { "background": "{colors.semantic.interactive.primary}", "text": "#FFFFFF", "border": "transparent" } } }
Use DTCG $value and $type syntax. Include $description for AI readability.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-2-colors.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-2-colors.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 3: Typography Analysis

第3轮:排版分析

Objective: Extract complete typography system including fonts, sizes, weights, and text styles.
目标:提取完整的排版系统,包括字体、字号、字重和文本样式。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 3 of a 7-pass design specification extraction system. Your focus: TYPOGRAPHY.
You are Pass 3 of a 7-pass design specification extraction system. Your focus: TYPOGRAPHY.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-3-typography.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
Then use the Write tool to save your analysis as valid JSON.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-3-typography.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
Then use the Write tool to save your analysis as valid JSON.

Input

Input

  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json
  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json

Your Task

Your Task

Extract ALL typography information:
Extract ALL typography information:

1. Font Family Detection

1. Font Family Detection

Analyze visible text to identify:
  • Primary font family (body text, UI elements)
  • Secondary font family (headings, if different)
  • Monospace font (code blocks, if present)
  • Is it serif, sans-serif, or display?
  • Best guess at specific font name
Analyze visible text to identify:
  • Primary font family (body text, UI elements)
  • Secondary font family (headings, if different)
  • Monospace font (code blocks, if present)
  • Is it serif, sans-serif, or display?
  • Best guess at specific font name

2. Text Style Inventory

2. Text Style Inventory

For EACH distinct text style visible, extract:
Headings:
  • Display/Hero text (largest)
  • H1, H2, H3, etc.
  • Card titles
  • Section headers
Body:
  • Body large (lead paragraphs)
  • Body regular (standard text)
  • Body small (captions)
UI Text:
  • Button labels
  • Form labels
  • Input text
  • Link text
  • Navigation items
  • Badge/tag text
For each style, estimate:
  • Font size (in px)
  • Font weight (100-900 or light/regular/medium/bold)
  • Line height (ratio like 1.5 or pixels)
  • Letter spacing (normal, tight, wide)
  • Text color (reference token from Pass 2)
  • Text transform (none, uppercase, capitalize)
For EACH distinct text style visible, extract:
Headings:
  • Display/Hero text (largest)
  • H1, H2, H3, etc.
  • Card titles
  • Section headers
Body:
  • Body large (lead paragraphs)
  • Body regular (standard text)
  • Body small (captions)
UI Text:
  • Button labels
  • Form labels
  • Input text
  • Link text
  • Navigation items
  • Badge/tag text
For each style, estimate:
  • Font size (in px)
  • Font weight (100-900 or light/regular/medium/bold)
  • Line height (ratio like 1.5 or pixels)
  • Letter spacing (normal, tight, wide)
  • Text color (reference token from Pass 2)
  • Text transform (none, uppercase, capitalize)

3. Typographic Hierarchy

3. Typographic Hierarchy

  • How many distinct size levels are there?
  • What is the size scale ratio?
  • How many distinct size levels are there?
  • What is the size scale ratio?

Output Format

Output Format

Return JSON: { "$schema": "pass-3-typography", "tokens": { "typography": { "fontFamilies": { "sans": { "$value": ["Inter", "system-ui", "sans-serif"], "$type": "fontFamily", "$description": "Primary font" }, "mono": { "$value": ["JetBrains Mono", "monospace"], "$type": "fontFamily", "$description": "Code font" } }, "fontWeights": { "regular": { "$value": 400, "$type": "fontWeight" }, "medium": { "$value": 500, "$type": "fontWeight" }, "semibold": { "$value": 600, "$type": "fontWeight" }, "bold": { "$value": 700, "$type": "fontWeight" } }, "fontSizes": { "xs": { "$value": "12px", "$type": "dimension" }, "sm": { "$value": "14px", "$type": "dimension" }, "base": { "$value": "16px", "$type": "dimension" }, "lg": { "$value": "18px", "$type": "dimension" }, "xl": { "$value": "20px", "$type": "dimension" }, "2xl": { "$value": "24px", "$type": "dimension" }, "3xl": { "$value": "30px", "$type": "dimension" }, "4xl": { "$value": "36px", "$type": "dimension" }, "5xl": { "$value": "48px", "$type": "dimension" } }, "lineHeights": { "tight": { "$value": 1.25, "$type": "number" }, "normal": { "$value": 1.5, "$type": "number" }, "relaxed": { "$value": 1.75, "$type": "number" } }, "letterSpacing": { "tighter": { "$value": "-0.05em", "$type": "dimension" }, "normal": { "$value": "0em", "$type": "dimension" }, "wide": { "$value": "0.05em", "$type": "dimension" } }, "textStyles": { "display": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.5xl}", "fontWeight": "{typography.fontWeights.bold}", "lineHeight": "{typography.lineHeights.tight}", "letterSpacing": "{typography.letterSpacing.tighter}" }, "$description": "Hero headlines" }, "heading-1": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.4xl}", "fontWeight": "{typography.fontWeights.bold}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Page titles" }, "heading-2": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.2xl}", "fontWeight": "{typography.fontWeights.semibold}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Section headings" }, "body": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.base}", "fontWeight": "{typography.fontWeights.regular}", "lineHeight": "{typography.lineHeights.normal}" }, "$description": "Standard body text" }, "body-small": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.sm}", "fontWeight": "{typography.fontWeights.regular}", "lineHeight": "{typography.lineHeights.normal}" }, "$description": "Secondary text, captions" }, "button-label": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.sm}", "fontWeight": "{typography.fontWeights.medium}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Button text" } } } }, "typeScale": { "ratio": 1.25, "base": "16px", "steps": [12, 14, 16, 20, 24, 30, 36, 48] } }
Reference tokens using {token.path} syntax per DTCG specification.
Return JSON: { "$schema": "pass-3-typography", "tokens": { "typography": { "fontFamilies": { "sans": { "$value": ["Inter", "system-ui", "sans-serif"], "$type": "fontFamily", "$description": "Primary font" }, "mono": { "$value": ["JetBrains Mono", "monospace"], "$type": "fontFamily", "$description": "Code font" } }, "fontWeights": { "regular": { "$value": 400, "$type": "fontWeight" }, "medium": { "$value": 500, "$type": "fontWeight" }, "semibold": { "$value": 600, "$type": "fontWeight" }, "bold": { "$value": 700, "$type": "fontWeight" } }, "fontSizes": { "xs": { "$value": "12px", "$type": "dimension" }, "sm": { "$value": "14px", "$type": "dimension" }, "base": { "$value": "16px", "$type": "dimension" }, "lg": { "$value": "18px", "$type": "dimension" }, "xl": { "$value": "20px", "$type": "dimension" }, "2xl": { "$value": "24px", "$type": "dimension" }, "3xl": { "$value": "30px", "$type": "dimension" }, "4xl": { "$value": "36px", "$type": "dimension" }, "5xl": { "$value": "48px", "$type": "dimension" } }, "lineHeights": { "tight": { "$value": 1.25, "$type": "number" }, "normal": { "$value": 1.5, "$type": "number" }, "relaxed": { "$value": 1.75, "$type": "number" } }, "letterSpacing": { "tighter": { "$value": "-0.05em", "$type": "dimension" }, "normal": { "$value": "0em", "$type": "dimension" }, "wide": { "$value": "0.05em", "$type": "dimension" } }, "textStyles": { "display": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.5xl}", "fontWeight": "{typography.fontWeights.bold}", "lineHeight": "{typography.lineHeights.tight}", "letterSpacing": "{typography.letterSpacing.tighter}" }, "$description": "Hero headlines" }, "heading-1": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.4xl}", "fontWeight": "{typography.fontWeights.bold}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Page titles" }, "heading-2": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.2xl}", "fontWeight": "{typography.fontWeights.semibold}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Section headings" }, "body": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.base}", "fontWeight": "{typography.fontWeights.regular}", "lineHeight": "{typography.lineHeights.normal}" }, "$description": "Standard body text" }, "body-small": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.sm}", "fontWeight": "{typography.fontWeights.regular}", "lineHeight": "{typography.lineHeights.normal}" }, "$description": "Secondary text, captions" }, "button-label": { "$type": "typography", "$value": { "fontFamily": "{typography.fontFamilies.sans}", "fontSize": "{typography.fontSizes.sm}", "fontWeight": "{typography.fontWeights.medium}", "lineHeight": "{typography.lineHeights.tight}" }, "$description": "Button text" } } } }, "typeScale": { "ratio": 1.25, "base": "16px", "steps": [12, 14, 16, 20, 24, 30, 36, 48] } }
Reference tokens using {token.path} syntax per DTCG specification.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-3-typography.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-3-typography.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 4: Component Detection & Classification

第4轮:组件检测与分类

Objective: Build hierarchical component tree with atomic design classification.
目标:基于原子设计分类体系构建层级组件树。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 4 of a 7-pass design specification extraction system. Your focus: COMPONENT DETECTION.
You are Pass 4 of a 7-pass design specification extraction system. Your focus: COMPONENT DETECTION.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-4-components.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-3-typography.json
Then use the Write tool to save your analysis as valid JSON.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-4-components.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-3-typography.json
Then use the Write tool to save your analysis as valid JSON.

Input

Input

  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json
  • Typography data from Pass 3: Read from
    .tmp-design-specs/{project}/pass-3-typography.json
  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json
  • Typography data from Pass 3: Read from
    .tmp-design-specs/{project}/pass-3-typography.json

Your Task

Your Task

Identify and classify ALL UI components:
Identify and classify ALL UI components:

1. Atomic Components (Atoms)

1. Atomic Components (Atoms)

Simple, indivisible elements:
  • Buttons (all variants: primary, secondary, icon, ghost)
  • Icons (note semantic meaning)
  • Inputs (text, password, search)
  • Checkboxes, radios, toggles
  • Labels and text elements
  • Images and avatars
  • Badges and tags
  • Dividers
Simple, indivisible elements:
  • Buttons (all variants: primary, secondary, icon, ghost)
  • Icons (note semantic meaning)
  • Inputs (text, password, search)
  • Checkboxes, radios, toggles
  • Labels and text elements
  • Images and avatars
  • Badges and tags
  • Dividers

2. Molecular Components (Molecules)

2. Molecular Components (Molecules)

Simple combinations of atoms:
  • Form fields (label + input + helper)
  • Search bars
  • Navigation items
  • Breadcrumbs
  • Menu items
  • List items
Simple combinations of atoms:
  • Form fields (label + input + helper)
  • Search bars
  • Navigation items
  • Breadcrumbs
  • Menu items
  • List items

3. Organism Components (Organisms)

3. Organism Components (Organisms)

Complex, distinct UI sections:
  • Navigation bars
  • Headers
  • Cards (all variants)
  • Forms
  • Tables
  • Footers
  • Hero sections
Complex, distinct UI sections:
  • Navigation bars
  • Headers
  • Cards (all variants)
  • Forms
  • Tables
  • Footers
  • Hero sections

4. For Each Component, Extract:

4. For Each Component, Extract:

  • Unique ID (generated)
  • Component type name
  • Atomic level (atom/molecule/organism)
  • Bounding box (x, y, width, height)
  • Visual styles (link to tokens where possible)
  • Content (text, icons)
  • Current state (default, hover, active, disabled)
  • Child components (for molecules/organisms)
  • Unique ID (generated)
  • Component type name
  • Atomic level (atom/molecule/organism)
  • Bounding box (x, y, width, height)
  • Visual styles (link to tokens where possible)
  • Content (text, icons)
  • Current state (default, hover, active, disabled)
  • Child components (for molecules/organisms)

5. Component Catalog

5. Component Catalog

Create definitions for reusable component types:
  • Suggested HTML element
  • ARIA role
  • Props/variants
  • Token mappings
Create definitions for reusable component types:
  • Suggested HTML element
  • ARIA role
  • Props/variants
  • Token mappings

Output Format

Output Format

Return JSON: { "$schema": "pass-4-components", "components": { "$root": { "id": "root", "type": "Page", "bounds": {"x":0,"y":0,"width":W,"height":H}, "children": [ { "id": "header-1", "type": "Header", "name": "Main Navigation Header", "atomicLevel": "organism", "bounds": {"x":0,"y":0,"width":W,"height":80}, "styles": { "background": { "color": "#FFFFFF", "tokenRef": "{colors.semantic.background.elevated}" }, "shadow": { "tokenRef": "{shadows.elevation-sm}" } }, "children": [ { "id": "logo-1", "type": "Image", "atomicLevel": "atom", "bounds": {"x":24,"y":24,"width":120,"height":32}, "content": { "alt": "Company Logo" } }, { "id": "nav-1", "type": "Navigation", "atomicLevel": "molecule", "bounds": {...}, "children": [ { "id": "nav-item-1", "type": "NavItem", "atomicLevel": "atom", "content": { "text": "Home" }, "states": { "current": "active" } } ] }, { "id": "btn-signin", "type": "Button", "atomicLevel": "atom", "bounds": {...}, "content": { "text": "Sign In" }, "variants": { "variant": "secondary", "size": "md" }, "states": { "current": "default" } } ] } ] }, "catalog": { "Button": { "name": "Button", "category": "action", "atomicLevel": "atom", "htmlElement": "button", "ariaRole": "button", "variants": [ { "name": "variant", "values": ["primary", "secondary", "ghost", "destructive"] }, { "name": "size", "values": ["sm", "md", "lg"] } ], "tokens": { "background": "{colors.semantic.interactive.primary}", "color": "#FFFFFF", "borderRadius": "{radii.md}", "paddingX": "{spacing.4}", "paddingY": "{spacing.2}" }, "instances": ["btn-signin", "btn-cta-1"] }, "Card": { "name": "Card", "category": "layout", "atomicLevel": "organism", "htmlElement": "article", "ariaRole": "article", "variants": [ { "name": "variant", "values": ["default", "elevated", "outlined"] } ], "tokens": { "background": "{colors.semantic.background.elevated}", "borderRadius": "{radii.lg}", "shadow": "{shadows.elevation-md}", "padding": "{spacing.6}" }, "instances": ["card-1", "card-2"] } } }, "statistics": { "totalComponents": N, "byType": { "Button": N, "Card": N, "Input": N }, "byAtomicLevel": { "atom": N, "molecule": N, "organism": N } } }
Be exhaustive. Every visible interactive or content element must be cataloged.
Return JSON: { "$schema": "pass-4-components", "components": { "$root": { "id": "root", "type": "Page", "bounds": {"x":0,"y":0,"width":W,"height":H}, "children": [ { "id": "header-1", "type": "Header", "name": "Main Navigation Header", "atomicLevel": "organism", "bounds": {"x":0,"y":0,"width":W,"height":80}, "styles": { "background": { "color": "#FFFFFF", "tokenRef": "{colors.semantic.background.elevated}" }, "shadow": { "tokenRef": "{shadows.elevation-sm}" } }, "children": [ { "id": "logo-1", "type": "Image", "atomicLevel": "atom", "bounds": {"x":24,"y":24,"width":120,"height":32}, "content": { "alt": "Company Logo" } }, { "id": "nav-1", "type": "Navigation", "atomicLevel": "molecule", "bounds": {...}, "children": [ { "id": "nav-item-1", "type": "NavItem", "atomicLevel": "atom", "content": { "text": "Home" }, "states": { "current": "active" } } ] }, { "id": "btn-signin", "type": "Button", "atomicLevel": "atom", "bounds": {...}, "content": { "text": "Sign In" }, "variants": { "variant": "secondary", "size": "md" }, "states": { "current": "default" } } ] } ] }, "catalog": { "Button": { "name": "Button", "category": "action", "atomicLevel": "atom", "htmlElement": "button", "ariaRole": "button", "variants": [ { "name": "variant", "values": ["primary", "secondary", "ghost", "destructive"] }, { "name": "size", "values": ["sm", "md", "lg"] } ], "tokens": { "background": "{colors.semantic.interactive.primary}", "color": "#FFFFFF", "borderRadius": "{radii.md}", "paddingX": "{spacing.4}", "paddingY": "{spacing.2}" }, "instances": ["btn-signin", "btn-cta-1"] }, "Card": { "name": "Card", "category": "layout", "atomicLevel": "organism", "htmlElement": "article", "ariaRole": "article", "variants": [ { "name": "variant", "values": ["default", "elevated", "outlined"] } ], "tokens": { "background": "{colors.semantic.background.elevated}", "borderRadius": "{radii.lg}", "shadow": "{shadows.elevation-md}", "padding": "{spacing.6}" }, "instances": ["card-1", "card-2"] } } }, "statistics": { "totalComponents": N, "byType": { "Button": N, "Card": N, "Input": N }, "byAtomicLevel": { "atom": N, "molecule": N, "organism": N } } }
Be exhaustive. Every visible interactive or content element must be cataloged.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-4-components.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-4-components.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 5: Spacing & Dimensions

第5轮:间距与尺寸

Objective: Extract spacing scale, sizing tokens, borders, and radii.
目标:提取间距比例、尺寸令牌、边框和圆角规则。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 5 of a 7-pass design specification extraction system. Your focus: SPACING AND DIMENSIONS.
You are Pass 5 of a 7-pass design specification extraction system. Your focus: SPACING AND DIMENSIONS.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-5-spacing.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-4-components.json
Then use the Write tool to save your analysis as valid JSON.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-5-spacing.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-4-components.json
Then use the Write tool to save your analysis as valid JSON.

Input

Input

  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Component data from Pass 4: Read from
    .tmp-design-specs/{project}/pass-4-components.json
  • Screenshot: [attached image]
  • Layout data from Pass 1: Read from
    .tmp-design-specs/{project}/pass-1-layout.json
  • Component data from Pass 4: Read from
    .tmp-design-specs/{project}/pass-4-components.json

Your Task

Your Task

Measure and systematize ALL spacing and dimension values:
Measure and systematize ALL spacing and dimension values:

1. Spacing Scale

1. Spacing Scale

Analyze gaps between elements to find the base spacing unit:
  • Measure space between text and container edges (padding)
  • Measure space between stacked elements (stack spacing)
  • Measure space between inline elements (inline spacing)
  • Measure grid/flex gaps
Identify the spacing scale:
  • What is the base unit? (4px, 8px typical)
  • What multipliers are used? (1x, 2x, 3x, 4x, 6x, 8x, 12x, 16x)
Analyze gaps between elements to find the base spacing unit:
  • Measure space between text and container edges (padding)
  • Measure space between stacked elements (stack spacing)
  • Measure space between inline elements (inline spacing)
  • Measure grid/flex gaps
Identify the spacing scale:
  • What is the base unit? (4px, 8px typical)
  • What multipliers are used? (1x, 2x, 3x, 4x, 6x, 8x, 12x, 16x)

2. Component Sizing

2. Component Sizing

Extract size patterns:
  • Button heights (small, medium, large)
  • Input field heights
  • Icon sizes
  • Avatar sizes
  • Container max-widths
Extract size patterns:
  • Button heights (small, medium, large)
  • Input field heights
  • Icon sizes
  • Avatar sizes
  • Container max-widths

3. Border Properties

3. Border Properties

For each border type:
  • Border width (1px, 2px, etc.)
  • Border radius values (small, medium, large, full/circular)
For each border type:
  • Border width (1px, 2px, etc.)
  • Border radius values (small, medium, large, full/circular)

4. Map to Component Styles

4. Map to Component Styles

Link spacing values to specific components from Pass 4
Link spacing values to specific components from Pass 4

Output Format

Output Format

Return JSON: { "$schema": "pass-5-spacing", "tokens": { "spacing": { "scale": { "0": { "$value": "0px", "$type": "dimension" }, "1": { "$value": "4px", "$type": "dimension", "$description": "Minimal spacing, icon gaps" }, "2": { "$value": "8px", "$type": "dimension", "$description": "Tight spacing, inline elements" }, "3": { "$value": "12px", "$type": "dimension" }, "4": { "$value": "16px", "$type": "dimension", "$description": "Default component padding" }, "5": { "$value": "20px", "$type": "dimension" }, "6": { "$value": "24px", "$type": "dimension", "$description": "Card padding, form gaps" }, "8": { "$value": "32px", "$type": "dimension", "$description": "Section spacing" }, "10": { "$value": "40px", "$type": "dimension" }, "12": { "$value": "48px", "$type": "dimension", "$description": "Large section gaps" }, "16": { "$value": "64px", "$type": "dimension", "$description": "Hero section padding" } }, "semantic": { "inset": { "card": { "$value": "{spacing.scale.6}", "$type": "dimension", "$description": "Card internal padding" }, "section": { "$value": "{spacing.scale.8}", "$type": "dimension", "$description": "Section padding" } }, "stack": { "tight": { "$value": "{spacing.scale.2}", "$type": "dimension", "$description": "Compact vertical spacing" }, "default": { "$value": "{spacing.scale.4}", "$type": "dimension", "$description": "Standard vertical spacing" } }, "gap": { "grid": { "$value": "{spacing.scale.6}", "$type": "dimension", "$description": "Card grid gap" } } } }, "sizing": { "component": { "button-sm": { "$value": "32px", "$type": "dimension" }, "button-md": { "$value": "40px", "$type": "dimension" }, "button-lg": { "$value": "48px", "$type": "dimension" }, "input-md": { "$value": "40px", "$type": "dimension" } }, "icon": { "sm": { "$value": "16px", "$type": "dimension" }, "md": { "$value": "20px", "$type": "dimension" }, "lg": { "$value": "24px", "$type": "dimension" } }, "avatar": { "sm": { "$value": "32px", "$type": "dimension" }, "md": { "$value": "40px", "$type": "dimension" }, "lg": { "$value": "48px", "$type": "dimension" } } }, "radii": { "none": { "$value": "0px", "$type": "dimension" }, "sm": { "$value": "4px", "$type": "dimension" }, "md": { "$value": "8px", "$type": "dimension", "$description": "Default for cards, buttons" }, "lg": { "$value": "12px", "$type": "dimension" }, "xl": { "$value": "16px", "$type": "dimension" }, "full": { "$value": "9999px", "$type": "dimension", "$description": "Pills, avatars" } }, "borders": { "width": { "thin": { "$value": "1px", "$type": "dimension", "$description": "Default borders" }, "medium": { "$value": "2px", "$type": "dimension", "$description": "Focus rings, emphasis" } } }, "container": { "maxWidth": { "sm": { "$value": "640px", "$type": "dimension" }, "md": { "$value": "768px", "$type": "dimension" }, "lg": { "$value": "1024px", "$type": "dimension" }, "xl": { "$value": "1280px", "$type": "dimension" } } } }, "componentSpacing": { "button": { "paddingX": "{spacing.scale.4}", "paddingY": "{spacing.scale.2}", "gap": "{spacing.scale.2}" }, "card": { "padding": "{spacing.scale.6}", "gap": "{spacing.scale.4}" }, "input": { "paddingX": "{spacing.scale.3}", "paddingY": "{spacing.scale.2}" } } }
Detect patterns and express them. Use 4px or 8px base unit convention.
Return JSON: { "$schema": "pass-5-spacing", "tokens": { "spacing": { "scale": { "0": { "$value": "0px", "$type": "dimension" }, "1": { "$value": "4px", "$type": "dimension", "$description": "Minimal spacing, icon gaps" }, "2": { "$value": "8px", "$type": "dimension", "$description": "Tight spacing, inline elements" }, "3": { "$value": "12px", "$type": "dimension" }, "4": { "$value": "16px", "$type": "dimension", "$description": "Default component padding" }, "5": { "$value": "20px", "$type": "dimension" }, "6": { "$value": "24px", "$type": "dimension", "$description": "Card padding, form gaps" }, "8": { "$value": "32px", "$type": "dimension", "$description": "Section spacing" }, "10": { "$value": "40px", "$type": "dimension" }, "12": { "$value": "48px", "$type": "dimension", "$description": "Large section gaps" }, "16": { "$value": "64px", "$type": "dimension", "$description": "Hero section padding" } }, "semantic": { "inset": { "card": { "$value": "{spacing.scale.6}", "$type": "dimension", "$description": "Card internal padding" }, "section": { "$value": "{spacing.scale.8}", "$type": "dimension", "$description": "Section padding" } }, "stack": { "tight": { "$value": "{spacing.scale.2}", "$type": "dimension", "$description": "Compact vertical spacing" }, "default": { "$value": "{spacing.scale.4}", "$type": "dimension", "$description": "Standard vertical spacing" } }, "gap": { "grid": { "$value": "{spacing.scale.6}", "$type": "dimension", "$description": "Card grid gap" } } } }, "sizing": { "component": { "button-sm": { "$value": "32px", "$type": "dimension" }, "button-md": { "$value": "40px", "$type": "dimension" }, "button-lg": { "$value": "48px", "$type": "dimension" }, "input-md": { "$value": "40px", "$type": "dimension" } }, "icon": { "sm": { "$value": "16px", "$type": "dimension" }, "md": { "$value": "20px", "$type": "dimension" }, "lg": { "$value": "24px", "$type": "dimension" } }, "avatar": { "sm": { "$value": "32px", "$type": "dimension" }, "md": { "$value": "40px", "$type": "dimension" }, "lg": { "$value": "48px", "$type": "dimension" } } }, "radii": { "none": { "$value": "0px", "$type": "dimension" }, "sm": { "$value": "4px", "$type": "dimension" }, "md": { "$value": "8px", "$type": "dimension", "$description": "Default for cards, buttons" }, "lg": { "$value": "12px", "$type": "dimension" }, "xl": { "$value": "16px", "$type": "dimension" }, "full": { "$value": "9999px", "$type": "dimension", "$description": "Pills, avatars" } }, "borders": { "width": { "thin": { "$value": "1px", "$type": "dimension", "$description": "Default borders" }, "medium": { "$value": "2px", "$type": "dimension", "$description": "Focus rings, emphasis" } } }, "container": { "maxWidth": { "sm": { "$value": "640px", "$type": "dimension" }, "md": { "$value": "768px", "$type": "dimension" }, "lg": { "$value": "1024px", "$type": "dimension" }, "xl": { "$value": "1280px", "$type": "dimension" } } } }, "componentSpacing": { "button": { "paddingX": "{spacing.scale.4}", "paddingY": "{spacing.scale.2}", "gap": "{spacing.scale.2}" }, "card": { "padding": "{spacing.scale.6}", "gap": "{spacing.scale.4}" }, "input": { "paddingX": "{spacing.scale.3}", "paddingY": "{spacing.scale.2}" } } }
Detect patterns and express them. Use 4px or 8px base unit convention.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-5-spacing.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-5-spacing.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 6: Interactive States & Accessibility

第6轮:交互状态与可访问性

Objective: Analyze interactive states and accessibility compliance.
目标:分析交互状态和可访问性合规性。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 6 of a 7-pass design specification extraction system. Your focus: STATES AND ACCESSIBILITY.
You are Pass 6 of a 7-pass design specification extraction system. Your focus: STATES AND ACCESSIBILITY.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-6-states.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-4-components.json
Then use the Write tool to save your analysis as valid JSON.
You MUST write your output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/pass-6-states.json
First, read previous pass outputs:
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-4-components.json
Then use the Write tool to save your analysis as valid JSON.

Input

Input

  • Screenshot: [attached image]
  • Component data from Pass 4: Read from
    .tmp-design-specs/{project}/pass-4-components.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json
  • Screenshot: [attached image]
  • Component data from Pass 4: Read from
    .tmp-design-specs/{project}/pass-4-components.json
  • Color data from Pass 2: Read from
    .tmp-design-specs/{project}/pass-2-colors.json

Your Task

Your Task

1. Interactive States (infer from visual cues)

1. Interactive States (infer from visual cues)

For each interactive component type, define state variations:
  • Default/rest state
  • Hover state (if visible or inferable - darken 5-10%)
  • Active/pressed state (darken 10-15%, reduce shadow)
  • Focus state (focus ring, 2px outline)
  • Disabled state (opacity 0.5-0.6, muted colors)
  • Loading state
State Changes:
  • Color changes
  • Shadow changes
  • Border changes
  • Opacity changes
  • Transform effects
For each interactive component type, define state variations:
  • Default/rest state
  • Hover state (if visible or inferable - darken 5-10%)
  • Active/pressed state (darken 10-15%, reduce shadow)
  • Focus state (focus ring, 2px outline)
  • Disabled state (opacity 0.5-0.6, muted colors)
  • Loading state
State Changes:
  • Color changes
  • Shadow changes
  • Border changes
  • Opacity changes
  • Transform effects

2. Accessibility Analysis

2. Accessibility Analysis

Contrast Ratios: For each text-on-background combination:
  • Calculate/estimate contrast ratio
  • Check against WCAG AA (4.5:1 normal, 3:1 large)
  • Check against WCAG AAA (7:1 normal, 4.5:1 large)
  • Flag any failures
Color Accessibility:
  • Red/green combinations (protanopia/deuteranopia)
  • Blue/yellow combinations (tritanopia)
  • Information conveyed by color alone
Contrast Ratios: For each text-on-background combination:
  • Calculate/estimate contrast ratio
  • Check against WCAG AA (4.5:1 normal, 3:1 large)
  • Check against WCAG AAA (7:1 normal, 4.5:1 large)
  • Flag any failures
Color Accessibility:
  • Red/green combinations (protanopia/deuteranopia)
  • Blue/yellow combinations (tritanopia)
  • Information conveyed by color alone

3. Semantic Hierarchy

3. Semantic Hierarchy

  • What should be the h1? (single per page)
  • Heading hierarchy (h1 > h2 > h3, no skips)
  • Landmark regions (header, nav, main, aside, footer)
  • What should be the h1? (single per page)
  • Heading hierarchy (h1 > h2 > h3, no skips)
  • Landmark regions (header, nav, main, aside, footer)

4. Interactive Element Analysis

4. Interactive Element Analysis

For each interactive element:
  • Does it have visible text or clear label?
  • What ARIA label might be needed?
  • Is the clickable area sufficient (44x44px touch target)?
  • Is there a visible focus indicator?
For each interactive element:
  • Does it have visible text or clear label?
  • What ARIA label might be needed?
  • Is the clickable area sufficient (44x44px touch target)?
  • Is there a visible focus indicator?

Output Format

Output Format

Return JSON: { "$schema": "pass-6-states", "states": { "button": { "primary": { "default": { "background": "{colors.semantic.interactive.primary}", "text": "#FFFFFF", "border": "transparent", "shadow": "{shadows.elevation-sm}" }, "hover": { "background": "{colors.semantic.interactive.primary-hover}", "shadow": "{shadows.elevation-md}", "$description": "Darken 10%, increase elevation" }, "active": { "background": "{colors.primitive.blue.700}", "shadow": "none", "transform": "scale(0.98)" }, "focus": { "outline": "2px solid {colors.semantic.interactive.primary}", "outlineOffset": "2px" }, "disabled": { "background": "{colors.primitive.gray.300}", "text": "{colors.primitive.gray.500}", "cursor": "not-allowed", "opacity": 0.6 } } }, "input": { "default": { "border": "{colors.semantic.border.default}", "background": "#FFFFFF" }, "hover": { "border": "{colors.primitive.gray.400}" }, "focus": { "border": "{colors.semantic.border.focus}", "outline": "2px solid {colors.semantic.interactive.primary}", "outlineOffset": "-1px" }, "error": { "border": "{colors.semantic.feedback.error}", "background": "#FEF2F2" }, "disabled": { "background": "{colors.primitive.gray.100}", "opacity": 0.6 } } }, "transitions": { "fast": { "$type": "transition", "$value": { "duration": "150ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Micro-interactions, hovers" }, "normal": { "$type": "transition", "$value": { "duration": "200ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Standard transitions" }, "slow": { "$type": "transition", "$value": { "duration": "300ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Page transitions, modals" } }, "accessibility": { "contrastIssues": [ { "element": "components.btn-secondary", "foreground": "#9CA3AF", "background": "#FFFFFF", "ratio": 2.8, "required": 4.5, "wcagLevel": "AA", "passes": false, "recommendation": "Darken text to #6B7280 for 4.5:1 ratio" } ], "colorBlindnessIssues": [ { "type": "deuteranopia", "affectedElements": ["error-state", "success-state"], "recommendation": "Add icons alongside color indicators" } ], "semanticHierarchy": { "headings": [ { "level": 1, "text": "Welcome to Our Platform", "componentRef": "hero-title" }, { "level": 2, "text": "Features", "componentRef": "features-heading" } ], "landmarks": [ { "role": "banner", "componentRef": "header-1" }, { "role": "navigation", "componentRef": "nav-1" }, { "role": "main", "componentRef": "main-content" }, { "role": "contentinfo", "componentRef": "footer-1" } ] }, "touchTargets": { "minimumSize": "44px", "violations": [ { "componentRef": "icon-btn-close", "actualSize": "32x32", "recommendation": "Increase to 44x44px minimum" } ] }, "interactiveElements": [ { "componentRef": "icon-btn-menu", "type": "IconButton", "hasVisibleLabel": false, "suggestedAriaLabel": "Open menu" } ] } }
Infer states from visual context. When states are not visible, provide reasonable defaults.
Return JSON: { "$schema": "pass-6-states", "states": { "button": { "primary": { "default": { "background": "{colors.semantic.interactive.primary}", "text": "#FFFFFF", "border": "transparent", "shadow": "{shadows.elevation-sm}" }, "hover": { "background": "{colors.semantic.interactive.primary-hover}", "shadow": "{shadows.elevation-md}", "$description": "Darken 10%, increase elevation" }, "active": { "background": "{colors.primitive.blue.700}", "shadow": "none", "transform": "scale(0.98)" }, "focus": { "outline": "2px solid {colors.semantic.interactive.primary}", "outlineOffset": "2px" }, "disabled": { "background": "{colors.primitive.gray.300}", "text": "{colors.primitive.gray.500}", "cursor": "not-allowed", "opacity": 0.6 } } }, "input": { "default": { "border": "{colors.semantic.border.default}", "background": "#FFFFFF" }, "hover": { "border": "{colors.primitive.gray.400}" }, "focus": { "border": "{colors.semantic.border.focus}", "outline": "2px solid {colors.semantic.interactive.primary}", "outlineOffset": "-1px" }, "error": { "border": "{colors.semantic.feedback.error}", "background": "#FEF2F2" }, "disabled": { "background": "{colors.primitive.gray.100}", "opacity": 0.6 } } }, "transitions": { "fast": { "$type": "transition", "$value": { "duration": "150ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Micro-interactions, hovers" }, "normal": { "$type": "transition", "$value": { "duration": "200ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Standard transitions" }, "slow": { "$type": "transition", "$value": { "duration": "300ms", "timingFunction": [0.4, 0, 0.2, 1] }, "$description": "Page transitions, modals" } }, "accessibility": { "contrastIssues": [ { "element": "components.btn-secondary", "foreground": "#9CA3AF", "background": "#FFFFFF", "ratio": 2.8, "required": 4.5, "wcagLevel": "AA", "passes": false, "recommendation": "Darken text to #6B7280 for 4.5:1 ratio" } ], "colorBlindnessIssues": [ { "type": "deuteranopia", "affectedElements": ["error-state", "success-state"], "recommendation": "Add icons alongside color indicators" } ], "semanticHierarchy": { "headings": [ { "level": 1, "text": "Welcome to Our Platform", "componentRef": "hero-title" }, { "level": 2, "text": "Features", "componentRef": "features-heading" } ], "landmarks": [ { "role": "banner", "componentRef": "header-1" }, { "role": "navigation", "componentRef": "nav-1" }, { "role": "main", "componentRef": "main-content" }, { "role": "contentinfo", "componentRef": "footer-1" } ] }, "touchTargets": { "minimumSize": "44px", "violations": [ { "componentRef": "icon-btn-close", "actualSize": "32x32", "recommendation": "Increase to 44x44px minimum" } ] }, "interactiveElements": [ { "componentRef": "icon-btn-menu", "type": "IconButton", "hasVisibleLabel": false, "suggestedAriaLabel": "Open menu" } ] } }
Infer states from visual context. When states are not visible, provide reasonable defaults.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-6-states.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/pass-6-states.json
Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Pass 7: Consolidation & Validation

第7轮:合并与验证

Objective: Merge all passes into final spec, validate completeness, resolve conflicts.
目标:将所有轮次的结果合并为最终规范,验证完整性,解决冲突。

Subtask Agent Prompt

子任务Agent提示词

You are Pass 7 (FINAL) of a 7-pass design specification extraction system. Your focus: CONSOLIDATION.
You are Pass 7 (FINAL) of a 7-pass design specification extraction system. Your focus: CONSOLIDATION.

CRITICAL REQUIREMENT

CRITICAL REQUIREMENT

You MUST write your final output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/design-spec.json
First, read ALL previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-3-typography.json
  • .tmp-design-specs/{project}/pass-4-components.json
  • .tmp-design-specs/{project}/pass-5-spacing.json
  • .tmp-design-specs/{project}/pass-6-states.json
Then use the Write tool to save your consolidated analysis as valid JSON.
You MUST write your final output to a JSON file. This is mandatory - do not just return JSON in your response.
OUTPUT FILE:
.tmp-design-specs/{project}/design-spec.json
First, read ALL previous pass outputs:
  • .tmp-design-specs/{project}/pass-1-layout.json
  • .tmp-design-specs/{project}/pass-2-colors.json
  • .tmp-design-specs/{project}/pass-3-typography.json
  • .tmp-design-specs/{project}/pass-4-components.json
  • .tmp-design-specs/{project}/pass-5-spacing.json
  • .tmp-design-specs/{project}/pass-6-states.json
Then use the Write tool to save your consolidated analysis as valid JSON.

Input

Input

  • All previous pass outputs (Passes 1-6) - Read from the JSON files listed above
  • All previous pass outputs (Passes 1-6) - Read from the JSON files listed above

Your Task

Your Task

Create the final, validated design specification:
Create the final, validated design specification:

1. Merge Token Groups

1. Merge Token Groups

Combine all token extractions into unified structure:
  • Resolve any duplicate tokens
  • Ensure consistent naming
  • Verify all references resolve correctly
Combine all token extractions into unified structure:
  • Resolve any duplicate tokens
  • Ensure consistent naming
  • Verify all references resolve correctly

2. Validate Component Tree

2. Validate Component Tree

  • Check all components have required fields
  • Verify parent-child relationships
  • Ensure style references link to valid tokens
  • Check bounding boxes don't overlap incorrectly
  • Check all components have required fields
  • Verify parent-child relationships
  • Ensure style references link to valid tokens
  • Check bounding boxes don't overlap incorrectly

3. Cross-Reference Validation

3. Cross-Reference Validation

  • Every color used in components should exist in tokens
  • Every font used should be in typography tokens
  • Every spacing value should map to spacing scale
  • Every color used in components should exist in tokens
  • Every font used should be in typography tokens
  • Every spacing value should map to spacing scale

4. Quality Scoring

4. Quality Scoring

Assign confidence scores:
  • Overall extraction confidence
  • Per-section confidence
  • Flag areas of uncertainty
Assign confidence scores:
  • Overall extraction confidence
  • Per-section confidence
  • Flag areas of uncertainty

5. Generate Recommendations

5. Generate Recommendations

Based on analysis:
  • Accessibility fixes needed
  • Token consolidation opportunities
  • Component naming suggestions
Based on analysis:
  • Accessibility fixes needed
  • Token consolidation opportunities
  • Component naming suggestions

Final Output Format

Final Output Format

Return complete JSON matching the schema at references/design-tokens-schema.json:
{ "$schema": "https://design-tokens.org/schema.json", "$version": "1.0.0", "$source": { "type": "<figma-export|website-screenshot|mockup>", "dimensions": { "width": N, "height": N, "aspectRatio": "W:H", "deviceClass": "..." }, "extractedAt": "<ISO timestamp>", "confidence": 0.0-1.0 },
"tokens": { "colors": { "primitive": {...}, "semantic": {...} }, "typography": { "fontFamilies": {...}, "fontWeights": {...}, "fontSizes": {...}, "lineHeights": {...}, "letterSpacing": {...}, "textStyles": {...} }, "spacing": { "scale": {...}, "semantic": {...} }, "sizing": {...}, "radii": {...}, "borders": {...}, "shadows": {...}, "transitions": {...} },
"components": { "$root": {...}, "catalog": {...} },
"layout": { "type": "...", "regions": [...], "gridSystem": {...} },
"accessibility": { "contrastIssues": [...], "colorBlindnessIssues": [...], "semanticHierarchy": {...}, "touchTargets": {...} },
"semantics": { "designPatterns": [ { "pattern": "Hero Section", "confidence": 0.95, "instances": [...] }, { "pattern": "Card Grid", "confidence": 0.9, "instances": [...] } ], "contentTypes": ["marketing", "e-commerce"], "brandPersonality": { "traits": ["modern", "professional"], "tone": "friendly" } },
"$extensions": { "com.design-spec.extraction": { "passesCompleted": 7, "confidence": { "overall": 0.85, "layout": 0.9, "colors": 0.95, "typography": 0.8, "components": 0.85, "spacing": 0.9, "accessibility": 0.75 }, "recommendations": [ "Increase contrast on secondary buttons", "Add aria-labels to icon-only buttons" ] } } }
The final file MUST be valid JSON. Validate all references resolve correctly.
Return complete JSON matching the schema at references/design-tokens-schema.json:
{ "$schema": "https://design-tokens.org/schema.json", "$version": "1.0.0", "$source": { "type": "<figma-export|website-screenshot|mockup>", "dimensions": { "width": N, "height": N, "aspectRatio": "W:H", "deviceClass": "..." }, "extractedAt": "<ISO timestamp>", "confidence": 0.0-1.0 },
"tokens": { "colors": { "primitive": {...}, "semantic": {...} }, "typography": { "fontFamilies": {...}, "fontWeights": {...}, "fontSizes": {...}, "lineHeights": {...}, "letterSpacing": {...}, "textStyles": {...} }, "spacing": { "scale": {...}, "semantic": {...} }, "sizing": {...}, "radii": {...}, "borders": {...}, "shadows": {...}, "transitions": {...} },
"components": { "$root": {...}, "catalog": {...} },
"layout": { "type": "...", "regions": [...], "gridSystem": {...} },
"accessibility": { "contrastIssues": [...], "colorBlindnessIssues": [...], "semanticHierarchy": {...}, "touchTargets": {...} },
"semantics": { "designPatterns": [ { "pattern": "Hero Section", "confidence": 0.95, "instances": [...] }, { "pattern": "Card Grid", "confidence": 0.9, "instances": [...] } ], "contentTypes": ["marketing", "e-commerce"], "brandPersonality": { "traits": ["modern", "professional"], "tone": "friendly" } },
"$extensions": { "com.design-spec.extraction": { "passesCompleted": 7, "confidence": { "overall": 0.85, "layout": 0.9, "colors": 0.95, "typography": 0.8, "components": 0.85, "spacing": 0.9, "accessibility": 0.75 }, "recommendations": [ "Increase contrast on secondary buttons", "Add aria-labels to icon-only buttons" ] } } }
The final file MUST be valid JSON. Validate all references resolve correctly.

FINAL STEP - MANDATORY

FINAL STEP - MANDATORY

Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/design-spec.json
This is the FINAL deliverable. Do NOT proceed without writing the file. Confirm the file was written successfully.

---
Use the Write tool to save this JSON to:
.tmp-design-specs/{project}/design-spec.json
This is the FINAL deliverable. Do NOT proceed without writing the file. Confirm the file was written successfully.

---

Execution Instructions

执行说明

IMPORTANT: File-Based Workflow

重要:基于文件的工作流

Before launching any pass:
  1. Create the output directory:
bash
mkdir -p .tmp-design-specs/{project-name}
  1. Each pass MUST write to its designated file - Subtask agents will use the Write tool
  2. Verify file exists before proceeding to next pass - Read the file to confirm
启动任何轮次处理前:
  1. 创建输出目录:
bash
mkdir -p .tmp-design-specs/{project-name}
  1. 每一轮处理都必须写入指定文件 - 子任务Agent将使用Write工具完成写入
  2. 进入下一轮处理前验证文件存在 - 读取文件确认有效性

Delegating Extraction Passes

委托提取轮次

Execute each pass as a delegated worker. Replace
{project}
with actual project name in ALL prompts.
javascript
// Step 0: Create directory for intermediate files
mkdir -p .tmp-design-specs/my-design

// Steps 1-6: Delegate each pass sequentially
teams(action: 'delegate', tasks: [{
  text: '[Pass 1 prompt - worker MUST write to .tmp-design-specs/my-design/pass-1-layout.json]',
  assignee: 'design-pass-1'
}])
// VERIFY: Read .tmp-design-specs/my-design/pass-1-layout.json exists

// Continue for Passes 2-6, verifying each file exists ...

// Step 7: Final Consolidation
teams(action: 'delegate', tasks: [{
  text: '[Pass 7 prompt - worker reads ALL pass files, MUST write to design-spec.json]',
  assignee: 'design-consolidator'
}])
// VERIFY: Read .tmp-design-specs/my-design/design-spec.json exists

// Step 8: Save final spec as a ticket
todos_oneshot(
  title: "Design spec: my-design",
  description: "<contents of design-spec.json>",
  tags: "design-spec",
  type: "task"
)
将每一轮作为独立的工作节点串行执行。在所有提示词中将
{project}
替换为实际的项目名称。
javascript
// Step 0: Create directory for intermediate files
mkdir -p .tmp-design-specs/my-design

// Steps 1-6: Delegate each pass sequentially
teams(action: 'delegate', tasks: [{
  text: '[Pass 1 prompt - worker MUST write to .tmp-design-specs/my-design/pass-1-layout.json]',
  assignee: 'design-pass-1'
}])
// VERIFY: Read .tmp-design-specs/my-design/pass-1-layout.json exists

// Continue for Passes 2-6, verifying each file exists ...

// Step 7: Final Consolidation
teams(action: 'delegate', tasks: [{
  text: '[Pass 7 prompt - worker reads ALL pass files, MUST write to design-spec.json]',
  assignee: 'design-consolidator'
}])
// VERIFY: Read .tmp-design-specs/my-design/design-spec.json exists

// Step 8: Save final spec as a ticket
todos_oneshot(
  title: "Design spec: my-design",
  description: "<contents of design-spec.json>",
  tags: "design-spec",
  type: "task"
)

Verification After Each Pass

每轮处理后的验证

After each subtask completes, verify the output file was written:
javascript
// After Pass N completes:
Read(".tmp-design-specs/{project}/pass-N-{type}.json")
// If file doesn't exist or is invalid JSON, re-run the pass
每个子任务完成后,验证输出文件已成功写入:
javascript
// After Pass N completes:
Read(".tmp-design-specs/{project}/pass-N-{type}.json")
// If file doesn't exist or is invalid JSON, re-run the pass

Model Recommendations

模型推荐

  • Passes 1-6: Use Sonnet for focused visual analysis tasks
  • Pass 7 (Consolidation): Use Opus for complex synthesis and validation
  • 第1-6轮:使用Sonnet执行聚焦的视觉分析任务
  • 第7轮(合并):使用Opus执行复杂的合成和验证任务

Output Delivery

输出交付

After extraction, provide:
  1. Summary: Key statistics and findings
  2. Complete JSON: Full spec matching schema
  3. Recommendations: Suggested improvements
  4. Confidence Report: Areas of uncertainty
提取完成后,提供以下内容:
  1. 摘要:核心统计数据和发现
  2. 完整JSON:符合schema的完整规范
  3. 建议:可改进的方向
  4. 置信度报告:存在不确定性的区域

Example Summary Output

摘要输出示例

markdown
undefined
markdown
undefined

Design Spec Extraction Complete

设计规范提取完成

Statistics

统计数据

  • Colors extracted: 24 (8 primitive, 16 semantic)
  • Typography styles: 12
  • Components detected: 47 (18 atoms, 15 molecules, 14 organisms)
  • Spacing values: 11
  • Accessibility issues: 2 (contrast)
  • 提取颜色:24个(8个基础色,16个语义色)
  • 排版样式:12个
  • 检测到组件:47个(18个原子组件,15个分子组件,14个组织组件)
  • 间距值:11个
  • 可访问性问题:2个(对比度)

Key Findings

核心发现

  • Layout: 12-column grid with 24px gutters
  • Primary font: Inter (sans-serif)
  • Design patterns: Hero, Card Grid, Feature List, CTA
  • Device class: Desktop (1440px width)
  • 布局:12列网格,24px间距
  • 主字体:Inter(无衬线)
  • 设计模式:Hero、卡片网格、功能列表、CTA
  • 设备类型:桌面端(1440px宽度)

Accessibility Notes

可访问性说明

  • 2 contrast failures requiring attention
  • Recommend adding icons to status indicators
  • 2个对比度问题需要修复
  • 建议为状态指示器添加图标辅助识别

Confidence

置信度

  • Overall: 0.89
  • Colors: 0.95
  • Typography: 0.88
  • Components: 0.85
  • Spacing: 0.90
[Full JSON spec attached]

---
  • 整体:0.89
  • 颜色:0.95
  • 排版:0.88
  • 组件:0.85
  • 间距:0.90
[完整JSON规范见附件]

---

Best Practices

最佳实践

For Accurate Extraction

提升提取准确率

  1. Use highest resolution source available
  2. Prefer Figma exports over screenshots when possible
  3. Ensure design shows actual content (not lorem ipsum)
  4. Include multiple states if analyzing interactions
  5. Provide context about target platform
  1. 使用尽可能高分辨率的源文件
  2. 优先选择Figma导出文件而非截图
  3. 确保设计稿展示实际内容(而非占位文本)
  4. 如果需要分析交互,请包含多种状态的设计稿
  5. 提供目标平台的相关上下文

For AI-Readable Output

提升AI可读性输出

  1. Use semantic naming (intent over appearance)
  2. Include $description explaining when/how to use tokens
  3. Document token relationships and pairings
  4. Show which tokens apply to which components
  5. Include usage examples for complex tokens
  1. 使用语义化命名(按用途而非外观命名)
  2. 包含$description字段说明令牌的使用场景
  3. 记录令牌之间的关系和搭配规则
  4. 明确哪些令牌适用于哪些组件
  5. 为复杂令牌提供使用示例

For Processing Efficiency

提升处理效率

  1. Start with layout pass to establish structure
  2. Use component IDs consistently across passes
  3. Pass only relevant previous results to each subtask
  4. Validate incrementally, not just at end

  1. 从布局轮次开始建立基础结构
  2. 跨轮次使用一致的组件ID
  3. 每轮子任务仅传递需要的前序结果
  4. 逐步验证,而非仅在最终环节验证

Reference Files

参考文件

  • references/design-tokens-schema.json
    - Complete JSON Schema for output validation
  • references/extraction-patterns.md
    - Detailed patterns for visual analysis
Load these references as needed during extraction for detailed guidance on specific analysis tasks.
  • references/design-tokens-schema.json
    - 用于输出验证的完整JSON Schema
  • references/extraction-patterns.md
    - 视觉分析的详细模式说明
提取过程中可按需加载这些参考文件,获取特定分析任务的详细指导。

Schema Compliance

Schema合规性

Output follows W3C Design Tokens Community Group format (2025.10):
  • All tokens use
    $value
    ,
    $type
    ,
    $description
    properties
  • Token references use
    {group.token}
    syntax
  • Extensions use reverse domain notation in
    $extensions
输出遵循W3C设计令牌社区组格式(2025.10):
  • 所有令牌使用
    $value
    $type
    $description
    属性
  • 令牌引用使用
    {group.token}
    语法
  • 扩展字段在
    $extensions
    中使用反向域名 notation