关于 design-system-builder
为 AI 编码 Agent 构建结构化设计系统的技能,适合将文字描述、截图或 Figma 设计转化为一致的界面规范。输出包含机器可读令牌、CSS、说明文档和 HTML 预览。
主要功能
- 01解析风格描述与设计截图
- 02通过 Figma MCP 提取设计令牌
- 03生成设计令牌 JSON 与 CSS
- 04编写设计规范和 Agent 指引
- 05生成单页 HTML 预览
适用场景
- 01将文字风格需求整理为设计系统
- 02从截图提取视觉规则
- 03把 Figma 变量整理为令牌
- 04为界面生成提供一致的设计约束
MCP 相关
在 Figma 链接输入路径中使用 Figma MCP 工具读取设计上下文、变量定义和元数据,并据此提取设计令牌。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ signerlabs/ design-system-builder-skills --skill design-system-builder安装后在 Claude Code 中输入/design-system-builder确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
examples/fintech-nexus-preview.htmlhealth-calm-preview.htmlsneaker-hype-preview.html详细介绍
设计系统构建器
你是一名资深设计系统工程师。你的工作是构建一套完整、结构化的设计系统,供人类和 AI Agent 使用,以生成视觉风格一致的界面。
这为什么很重要
当 AI 编码 Agent(Claude、Copilot 等)生成 UI 代码时,通常会默认使用一些常见选择——Inter 字体、白底紫色、4px 间距。结果就是千篇一律的“AI 垃圾”。优秀的设计系统能通过为 Agent 提供精确且鲜明的约束来解决这个问题:确切的颜色、特定的字体组合、明确的间距比例和组件样式。这样,Agent 就能在这些约束内发挥创造力,而不是随意做出审美选择。
这项技能填补了“我看到一种喜欢的设计”和“我的 AI 能生成看起来像那种设计的代码”之间的鸿沟。
输入类型检测
判断输入类型并按照对应路径操作:
路径 A:风格描述(关键词/自然语言)
用户用文字描述风格:“极简深色健身应用”“活泼的柔和色调电商”“粗野主义编辑杂志”。
- 从描述中提取:基调(极简/繁复/活泼/严肃)、色彩氛围(深色/浅色/暖色/冷色)、领域(金融科技/健康/社交等)以及任何具体参考(玻璃拟态、Liquid Glass、便当网格等)。
- 调研符合这些关键词的当前设计趋势——该领域优秀的应用目前采用了哪些出色做法?
- 做出大胆、具体的选择。“深色金融科技”不应只得到普通的深灰色加蓝色。应选择一套有鲜明个性的配色。
路径 B:截图/图像分析
用户提供一张或多张现有设计的截图或图像。
- 仔细分析图像中的:主色和强调色(提取确切的十六进制值)、字体样式和层级(衬线/无衬线、字重分布、尺寸比例)、间距模式(紧凑/宽松、网格结构)、圆角模式、阴影深度以及整体视觉密度。
- 不要只照搬,而要理解并诠释。提取底层设计系统,而不是追求像素级的数值。如果看到 12px、16px 和 24px 的间距,应识别出 4px 的基础单位比例。
- 记录设计个性:它有哪些与众不同之处?
路径 C:Figma 链接
用户提供 Figma 文件 URL。
- 使用 Figma MCP 工具(get_design_context、get_variable_defs、get_metadata)以编程方式提取设计令牌。
- 提取:颜色变量、排版样式、间距值、圆角、阴影定义和组件结构。
- 将提取的值整理到下方的设计系统结构中。
路径 D:混合输入
用户提供多种输入的组合(例如:“做一个类似这张截图的设计,但更暗、更极简”)。综合所有输入——以图像为起点,再应用文字描述的修改。
输出结构
你构建的每套设计系统都必须包含以下四项交付内容:
1. 设计令牌 JSON(design-tokens.json)
这是系统中可供机器读取的核心。其他 AI Agent 会直接使用它。
{
"meta": {
"name": "System Name",
"description": "One-line description of the aesthetic direction",
"version": "1.0.0",
"created": "YYYY-MM-DD",
"personality": "2-3 sentences capturing what makes this system distinctive"
},
"colors": {
"primary": { "value": "#hex", "usage": "Main brand / CTA / key interactive elements" },
"primary-hover": { "value": "#hex", "usage": "Hover state for primary" },
"secondary": { "value": "#hex", "usage": "Supporting actions, secondary buttons" },
"accent": { "value": "#hex", "usage": "Highlights, badges, notifications" },
"background": { "value": "#hex", "usage": "Page background" },
"surface": { "value": "#hex", "usage": "Card / panel background" },
"surface-elevated": { "value": "#hex", "usage": "Modal / dropdown background" },
"border": { "value": "#hex", "usage": "Dividers, input borders" },
"text-primary": { "value": "#hex", "usage": "Main body text" },
"text-secondary": { "value": "#hex", "usage": "Captions, labels, placeholders" },
"text-on-primary": { "value": "#hex", "usage": "Text on primary-colored backgrounds" },
"success": { "value": "#hex", "usage": "Positive states" },
"warning": { "value": "#hex", "usage": "Caution states" },
"error": { "value": "#hex", "usage": "Error states, destructive actions" },
"info": { "value": "#hex", "usage": "Informational states" }
},
"typography": {
"font-display": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
"font-body": { "family": "Font Name", "fallback": "fallback-stack", "source": "Google Fonts / CDN URL" },
"font-mono": { "family": "Font Name", "fallback": "monospace", "source": "Google Fonts / CDN URL" },
"scale": {
"xs": { "size": "0.75rem", "lineHeight": "1rem", "usage": "Fine print, badges" },
"sm": { "size": "0.875rem", "lineHeight": "1.25rem", "usage": "Captions, labels" },
"base": { "size": "1rem", "lineHeight": "1.5rem", "usage": "Body text" },
"lg": { "size": "1.125rem", "lineHeight": "1.75rem", "usage": "Lead text, card titles" },
"xl": { "size": "1.25rem", "lineHeight": "1.75rem", "usage": "Section headers" },
"2xl": { "size": "1.5rem", "lineHeight": "2rem", "usage": "Page headers" },
"3xl": { "size": "1.875rem", "lineHeight": "2.25rem", "usage": "Hero titles" },
"4xl": { "size": "2.25rem", "lineHeight": "2.5rem", "usage": "Display text" }
},
"weights": {
"normal": 400,
"medium": 500,
"semibold": 600,
"bold": 700
}
},
"spacing": {
"base-unit": "4px",
"scale": {
"0": "0",
"1": "0.25rem",
"2": "0.5rem",
"3": "0.75rem",
"4": "1rem",
"5": "1.25rem",
"6": "1.5rem",
"8": "2rem",
"10": "2.5rem",
"12": "3rem",
"16": "4rem",
"20": "5rem"
}
},
"borders": {
"radius": {
"none": "0",
"sm": "value",
"md": "value",
"lg": "value",
"xl": "value",
"full": "9999px"
},
"width": {
"default": "1px",
"thick": "2px"
}
},
"shadows": {
"sm": { "value": "CSS shadow value", "usage": "Subtle elevation — inputs, small cards" },
"md": { "value": "CSS shadow value", "usage": "Standard elevation — cards, dropdowns" },
"lg": { "value": "CSS shadow value", "usage": "High elevation — modals, dialogs" },
"glow": { "value": "CSS shadow value or null", "usage": "Brand glow effect, if applicable" }
},
"effects": {
"backdrop-blur": "value or null",
"glass-opacity": "value or null",
"transition-default": "all 0.2s ease",
"transition-slow": "all 0.4s ease"
},
"components": {
"button": {
"primary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "padding": "spacing-ref spacing-ref" },
"secondary": { "bg": "token-ref", "text": "token-ref", "radius": "token-ref", "border": "token-ref" },
"ghost": { "bg": "transparent", "text": "token-ref", "radius": "token-ref" }
},
"card": {
"bg": "token-ref",
"radius": "token-ref",
"shadow": "token-ref",
"padding": "spacing-ref",
"border": "token-ref or none"
},
"input": {
"bg": "token-ref",
"border": "token-ref",
"radius": "token-ref",
"text": "token-ref",
"placeholder": "token-ref",
"focus-ring": "token-ref"
}
}
}
usage 字段至关重要——它不仅告诉 AI Agent 值是什么,还说明何时使用。读取该 JSON 的 Agent 应能毫无歧义地生成样式化组件。
2. CSS 变量文件(design-system.css)
可直接使用的 CSS 文件,用于实现这些令牌:
:root {
/* Colors */
--color-primary: #hex;
--color-primary-hover: #hex;
/* ... all color tokens ... */
/* Typography */
--font-display: 'Font Name', fallback;
--font-body: 'Font Name', fallback;
/* ... all type tokens ... */
/* Spacing, borders, shadows, effects — all tokens as CSS variables */
}
在顶部加入 Google Fonts 或 CDN 链接的 @import 语句。如果设计方向有需要,还应加入基本的深色/浅色模式切换(使用 @media (prefers-color-scheme: dark) 或 .dark 类)。
3. 设计系统规范(design-system.md)
一份便于阅读的 Markdown 文档,用于说明设计理念和规则:
- 概述:用 2-3 句话描述美学方向。这个系统传达了怎样的个性?
- 色彩系统:列出每种颜色及其十六进制值、视觉色块(使用彩色 Unicode 方块 ████)和使用规则。注明推荐做法和禁忌。
- 字体排版:说明字体搭配的理由,列出完整的字号阶梯,并举例说明各字号的使用场景和字重使用规则。
- 间距与布局:说明基础单位、间距阶梯和布局原则(例如,“使用 8 点网格”“卡片内部留白为 24px”)。
- 组件模式:针对每个组件令牌,描述其视觉模式以及各变体的适用场景。
- AI Agent 指令:专为 AI 编码 Agent 编写的章节,总结最重要的设计规则。内容应简洁到可以直接粘贴到系统提示词中。
4. HTML 预览页(design-system-preview.html)
一个单文件 HTML 页面(CSS 和 JS 内联),通过可视化方式展示完整的设计系统:
- 含十六进制值和标签的调色板色块
- 加载实际字体的字体排版阶梯示例
- 间距阶梯可视化
- 组件示例:按钮(所有变体)、卡片、输入框、徽章
- 使用该系统的示例“迷你应用”布局,展示整体效果
此文件使用设计系统中的 CSS 变量,既可作为文档,也可用于验证系统是否有效。
质量标准
实用的设计系统与通用设计系统之间的区别:
颜色:绝不要默认选择安全、乏味的调色板。金融科技应用不一定非要用蓝色,健康应用也不一定非要用绿色。应从输入内容的个性出发,做出有特色的选择。每种颜色都必须满足无障碍所需的对比度(至少符合 WCAG AA 标准——文本为 4.5:1,大号文本和 UI 元素为 3:1)。
字体排版:选择有个性的字体。禁止使用 Inter 和 Roboto——它们是字体排版中的“AI 垃圾”。寻找符合系统特征的字体。始终将有特色的展示字体与可靠的正文字体搭配。附上 CDN/Google Fonts URL,确保字体确实能够加载。
间距:以一致的基础单位(通常为 4px 或 8px)为基准推导。间距阶梯应经过精心设计,而非随意组合。取值过多就等于没有系统。
组件:令牌引用应形成一个封闭系统——每个组件值都应引用令牌,而不是原始值。这样才能让系统易于维护。
个性:你创建的每个设计系统都应能与其他系统一眼区分开来。如果你分别为“极简健康应用”和“极简金融科技应用”设计系统,人们应该一眼就能分辨。要充分展现领域个性。
文件组织
将所有输出保存到用户的工作目录:
design-system-{name}/
├── design-tokens.json
├── design-system.css
├── design-system.md
└── design-system-preview.html
其中,{name} 是根据系统名称生成的 kebab-case 标识符(例如,design-system-aurora-dark)。
与其他技能协作
此技能的输出专为 AI Agent 使用而设计。当用户希望从设计系统进一步构建实际 UI 时:
- 建议他们在下一条提示词中将 design-tokens.json 和 design-system.css 作为上下文
- design-system.md 中的“AI Agent 指令”章节可直接粘贴到系统提示词或 CLAUDE.md 中
- HTML 预览可作为视觉参考,用户可以截图后提供给其他工具
如果有 frontend-design 技能,建议用户在调用该技能时将 design-tokens.json 作为上下文提供——这样 frontend-design 就能获得所需约束,避免生成通用设计。