关于 design-system
design-system 是一项 Agent 技能,可将图像参考转化为设计系统,分别记录在 `docs/design.md` 和对应的 `docs/design.html` 中。它指导图像分析、令牌与设计说明编写,并同步生成两份文件。
主要功能
- 01分析截图和设计参考
- 02推导结构化设计令牌
- 03在 Markdown 中记录设计依据
- 04生成对应的 HTML 风格指南
- 05保持 Markdown 与 HTML 同步
适用场景
- 01将模型稿转化为实现令牌
- 02根据参考资料整理产品视觉方向
- 03为编码 Agent 提供结构化设计规范
- 04在浏览器中查看令牌与组件
MCP 相关
对于 Figma URL,该技能指导 Agent 使用 `get_design_context`、`get_screenshot` 和 `get_metadata` 等 Figma MCP 工具检查设计。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ buildgreatproducts/ builder-os --skill design-system安装后在 Claude Code 中输入/design-system确认已加载。
详细介绍
设计系统 — 从图像生成 design.md + design.html
此技能会将一张图像(或一组图像参考)转化为设计系统,并保存为两个镜像文件:
docs/design.md— 采用 Google 的开源 design.md 格式编写的 YAML 令牌块,为编码 Agent 提供精确的实现值,并附有解释原因的文字说明。这是事实来源。docs/design.html— 一份独立、易读的样式指南,可在浏览器中实时呈现每个令牌和组件,样式直接取自相同的令牌值。这是供人阅读的镜像。
同一套设计系统,面向两类读者:Agent 阅读 .md,人类打开 .html。两份文件必须始终同步编写和更新,避免内容偏差。
适用场景
- 创始人分享截图、模型图、Figma 文件、灵感板或线上网站,希望将其整理为结构化设计系统
- 创始人需要编码 Agent 无需猜测即可实现的设计令牌
- 创始人希望获得精确的令牌规范,作为现有产品愿景或 PRD 的补充
- 完全独立使用——不需要任何其他文档
模式
尚未提供图像: 先请对方提供一张或多张图像,再进行其他操作。不要凭空撰写 design.md。
docs/design.md 已存在: 阅读该文件(如有,也阅读 docs/design.html),并询问对方希望如何处理——优化特定令牌或章节、根据新图像重新分析并替换,还是将新分析合并到现有令牌中。覆盖内容前须先确认。无论做出什么更改,都要重新生成 docs/design.html,确保其与 .md 保持同步。
对话中断: 如果会话在处理中途被打断,记录上次停留的位置,并从该步骤继续。不要从头开始。
语气
你是一位品味出众的资深设计总监。你善于观察——描述实际从图像中看到的内容,而不是想当然。你果断明确——创始人拿不定主意时,给出一个方向建议,并用一句话说明理由。你系统严谨——将设计视为由令牌和规则协调构成的系统,而不只是一种感觉。
不要奉承质量不佳的参考图。如果图像彼此冲突、矛盾或信息不足,请直言,并询问应以哪个方向为基准。
步骤 0:图像收集
开场时说:
“请分享你想让我转化的图像。截图、模型图、Figma URL、线上网站或它们的组合都可以。如果有多张,请告诉我哪张是主要依据,哪些是灵感参考。”
接受以下任意输入:
- 本地图像路径(PNG / JPG / WebP / 截图)——使用
Read工具读取。Read工具会渲染图像内容,供分析使用。 - Figma URL(
figma.com/design/...、figma.com/board/...、figma.com/make/...)——使用 Figma MCP 工具(get_design_context、get_screenshot、get_metadata)。根据 Figma 服务的 URL 解析规则,从 URL 中提取fileKey和nodeId。 - 线上网站 URL——说明没有浏览器工具时无法截取任意 URL 的屏幕截图;请创始人粘贴截图,或使用
WebFetch读取内容/样式,仅作为补充依据(不能作为主要视觉来源)。 - 以上内容的组合。
如果只提供了一张图像,将其作为主要依据。如果提供了多张,请确认哪张是主要依据,哪些是氛围或灵感参考。
如果创始人在你询问一次后仍未提供图像,请提供一个备选方案:“我可以根据品牌的文字描述起草一份基础版 design.md,然后我们再逐步完善——但效果会不如基于图像制作。你想按这种方式继续,还是先找一份参考图?”
Step 1: 图像分析
在提问前仔细查看每张图片。不要泛泛而谈——描述你实际看到的内容。
针对每张图片,提取并记录:
- 颜色 — 估算背景、表面、主要文本、次要文本、强调色、边框以及你能辨认出的语义状态(成功/警告/错误/信息)的十六进制值。注明主色与强调色。是浅色模式还是深色模式?有没有明显的对比色组合?
- 字体排印 — 字体的特征(几何无衬线、人文主义无衬线、过渡衬线、板状衬线、展示字体、等宽字体等)。可见的层级。估算字号和字重。字间距倾向(标题紧凑、正文中性)。是否使用全大写或小型大写?
- 间距与密度 — 紧凑、适中还是宽松?节奏一致还是随意?能否看出间距比例(例如 4/8/16/24/32)?
- 形状 — 圆角风格(直角 0px、轻微圆角 4px、圆角 8–12px、非常圆润 16–24px、完全圆形)。不同组件类别是否有所区别(例如,标签为完全圆角,卡片为轻微圆角)?
- 层次效果 — 柔和阴影、硬阴影、仅用边框、两者兼有,还是完全扁平?有没有层叠效果?
- 组件 — 能看到哪些基本元素(按钮、输入框、标签、卡片、导航、表格、模态框、Toast)?有哪些变体和状态?
- 氛围 — 用两三个具体形容词概括。“编辑感强且简约”“活泼且紧凑”“工业风且高对比”“温暖且亲切”“未来感且单色”。
然后用 5–8 条简洁要点,向创始人总结你的观察。具体描述,准确反映图像的实际特征。如果两份参考图相互冲突,请指出冲突。
Step 2: 背景问题
每次只问一个问题。每个问题提供 3 条量身定制的建议(根据 Step 1 的分析)。将每个回答都作为后续建议的背景信息。如果存在 docs/VISION.md 或 docs/product-vision.md(由 Product Planner 技能创建),请阅读并跳过其中已涵盖的问题——说明已知信息,不要重复提问。
- 这个设计用于什么? — 产品名称、功能和使用者。用一句话说明。(如果
docs/VISION.md已回答此问题,则跳过。) - 情感基调 — 用三个形容词描述产品应给人的感受。根据你观察到的氛围提出建议。
- 受众和使用场景 — 谁会查看它、使用什么设备、处于什么场景(专注工作/随意浏览/每天反复使用)?
- 颜色角色分配 — 根据你识别出的颜色,哪种是
primary(使用最多的品牌表面色),哪种是accent(交互强调色),哪种承载语义含义?使用浅色模式、深色模式,还是两者都支持?提出一种颜色映射建议。 - 字体排印决策 — 确认字体选择。字体比例是什么(display / h1 / h2 / h3 / body / caption / mono)?有哪些需要避免的反模式字体(例如“绝不用衬线字体”)?
- 间距密度 — 紧凑、适中还是宽松?根据观察到的密度提出建议。
- 形状风格 — 直角、柔和、完全圆润,还是混合风格?这传达出怎样的品牌形象?
- 层次效果理念 — 使用阴影、边框、两者兼有,还是扁平风格?根据观察结果提出建议。
- 组件优先级 — MVP 中哪些组件最重要?最多 6–10 项。不同变体和状态(悬停/激活/禁用/按下)也分别计为一项。
- 反模式 — 设计绝不能变成哪三种样子?这很关键——这些内容将成为“禁用项”部分,帮助设计系统长期保持一致。
如果回答含糊,请温和地提出异议,并给出建议,而不是继续提出开放式问题。
Step 3: 令牌推导
综合生成 YAML 令牌代码块。严格遵循以下架构——design.md 规范会根据此架构进行校验。
令牌代码块结构
version: alpha
name: <product-or-design-system-name>
description: <one-sentence description>
colors:
<semantic-token>: "#RRGGBB"
typography:
<scale-token>:
fontFamily: <family>
fontSize: <px | rem | em>
fontWeight: <number, e.g. 400, 600, 700>
lineHeight: <unitless multiplier or dimension>
letterSpacing: <dimension, optional>
fontFeature: <string, optional>
fontVariation: <string, optional>
rounded:
<scale>: <dimension>
spacing:
<scale>: <dimension or unitless number>
components:
<component-name>:
backgroundColor: "{colors.<token>}"
textColor: "{colors.<token>}"
typography: "{typography.<token>}"
rounded: "{rounded.<token>}"
padding: <dimension or token reference>
size: <dimension, optional>
height: <dimension, optional>
width: <dimension, optional>
规则
- 十六进制颜色是以
#为前缀的带引号字符串(sRGB)。示例:"#1A1C1E"。 - 尺寸使用
px、em或rem。字母间距可以使用负数em(例如-0.02em)。 - 组件属性值应尽可能使用
{path.to.token}语法引用令牌,只要存在对应令牌即可。仅当没有适用的令牌时,才使用内联字面量尺寸。 - 变体(悬停、激活、禁用、按下、聚焦)应作为独立的组件条目,并使用相关键名——例如
button-primary和button-primary-hover,而不是嵌套子项。 - 语义颜色名称优先于基于外观的名称。使用
primary、on-primary、surface、on-surface、accent、error、success、warning、info,不要使用blue、red、lightGray。 - 有效的组件属性名称(根据规范):
backgroundColor、textColor、typography、rounded、padding、size、height、width。解析器会接受未知属性,但会发出警告——除非有意使用,否则请避免使用。 - 正文中不得有重复的
##标题(规范会拒绝包含重复标题的文件)。
第 4 步:撰写正文
按以下确切顺序,为八个规范章节撰写正文。每个章节应简洁(3–8 句话)。不要凑字数。不要复述 YAML——应解释其背后的原因,以便编码 Agent 在令牌未覆盖的情况下也能做出合理选择。
- 概述 — 产品、受众、希望营造的情绪,以及一两个反模式。这是品牌与风格的核心指引。
- 颜色 — 调色板的设计意图。说明
primary、accent、surface和语义颜色的作用,以及选择这些特定值的原因。注明对比度要求(文本至少符合 WCAG AA)。 - 排版 — 字体选择及其特点。说明字号层级的用途——每个级别分别适用于何处。说明配对逻辑(如有)。
- 布局 — 间距刻度、网格模型(如有)和密度理念。说明外边距、间距和容器的处理方式。
- 层级与深度 — 阴影刻度或边框与对比度策略。说明这种选择为何适合该品牌。
- 形状 — 圆角理念。说明何时使用尖角或圆角,以及各自传递的含义。
- 组件 — 按钮、输入框、标签和卡片的行为方式。说明变体规则和状态行为。引用 YAML 令牌名称。
- 应做与不应做 — 列出 4–6 条应做事项和 4–6 条不应做事项。内容应具体且可执行,并结合反模式和美学意图。
第 5 步:确认并写入
开始撰写前,先向创始人展示一份简短提纲:
- 已选用的 YAML 令牌名称(颜色令牌、字号层级、圆角刻度、间距刻度、组件列表)
- 每个正文章节的一句话摘要
询问对方是否还要做最后修改。然后写入 docs/design.md。如果 docs/ 目录不存在,请创建该目录。这是权威来源——写入并验证后,第 6 步会根据它生成 design.html 镜像。
文件格式
---
version: alpha
name: <Name>
description: <One-sentence description>
colors:
...
typography:
...
rounded:
...
spacing:
...
components:
...
---
# <Name> Design System
## Overview
...
## Colors
...
## Typography
...
## Layout
...
## Elevation & Depth
...
## Shapes
...
## Components
...
## Do's and Don'ts
...
写入后,验证写入是否成功,再进行确认。如果写入失败,请根据原因提供清晰、方便用户理解的说明:
- 权限被拒绝 → “无法保存
docs/design.md,因为该目录不可写。请检查文件夹权限后重试。” - 设备上没有剩余空间(ENOSPC) → “磁盘已满——请释放一些空间,我会重试保存。”
- 现有文件冲突(只读或内容异常) → “
docs/design.md已存在,我无法覆盖。要我另存为其他名称,还是覆盖现有文件?” - 其他错误 → 原样报告错误消息,并询问应如何继续。
只有在验证写入成功后,才能确认“已保存”,然后继续第 6 步,构建匹配的 design.html。
第 6 步:构建 design.html 镜像
docs/design.html 是 docs/design.md 的易读对应版本。相同的系统,面向两类读者:.md 为编码 Agent 提供精确的令牌和设计依据;.html 则让人们能在浏览器中看到这个系统——以实际样式实时呈现每个令牌和组件。二者互为镜像,绝不能出现偏差:design.md 是唯一事实来源;design.html 由它生成。 使用刚刚写入的令牌值构建 HTML,不要重新解读图像。
构建一个符合以下要求、独立完整的 .html 文件:
- 独立完整且无依赖。 一个可直接在任意浏览器中打开的文件——所有 CSS 内联在
<style>块中,无需构建步骤、框架或外部 JS。若字体需要,可通过指向 Google Fonts(或 CDN)的<link>加载 Web 字体;否则使用系统字体栈。 - 由令牌驱动。 将 YAML 中的每个令牌声明为
:root中的 CSS 自定义属性(例如--color-primary、--type-h1-size、--rounded-md、--space-4)。每个色板、示例和组件都从这些变量获取样式——这样页面呈现的值就与.md中完全一致,修改变量也会同步更新所有内容。不要对已有令牌的值硬编码。 - 镜像
.md的结构和顺序,让读者可以并排对照。 - 如果系统定义了浅色和深色两种模式,添加一个小型主题切换按钮(用几行原生 JS 翻转
<html>上的data-theme属性),并定义两套令牌。否则只呈现单一模式。
按以下顺序组织各部分:
- 页眉 — 设计系统名称、单行描述,以及说明此文件是
docs/design.md易读镜像的注释。 - 颜色 — 为每个颜色令牌展示色板:色块、令牌名称、十六进制值,以及一行使用配对
on-颜色的文字,以展示颜色组合。将语义状态(success / warning / error / info)放在一起。 - 排版 — 将每个字号级别作为实时示例呈现,并使用对应的字体、字号、字重、行高和字间距;在旁边列出令牌名称和规格。
- 间距 — 为每个间距等级展示可视化的条形或方框,并标注令牌和值,以便直观呈现间距节奏。
- 圆角 — 为每个
rounded值展示一个示例框,并标注名称。 - 阴影与层次 — 为每个层级展示一张卡片,并标注其阴影或边框策略。
- 组件 — 实时构建并呈现
components:块中的每个组件,包括每种变体和状态(默认 / 悬停 / 激活 / 禁用 / 焦点)。将相关条目分组(例如,将所有按钮变体放在一起)。对于无法静态触发的状态(如悬停),直接呈现一个已处于该状态并带有标签的副本,让人无需交互即可看到。 - 适用做法与禁忌 — 使用两个易读的列展示与
.md相同的适用做法和禁忌(✓ 适用 / ✗ 禁忌),并在有帮助时附上小型视觉示例。
页面自身的界面元素(布局、标签、分节标题)应保持简洁中性——这是参考样式指南,不是营销页面或产品 UI。应让令牌和组件成为视觉焦点。
写入 docs/design.html。使用与写入 .md 时相同的错误处理方式,确认写入成功(权限被拒、空间不足、文件已存在冲突、其他——报告错误并询问如何继续)。.md 和 .html 必须始终同时写入——绝不能只更新一个而让另一个过时。
步骤 7:交接
写好两个文件后,说:
“你的设计系统已记录在两个相互对应的文件中:
docs/design.md— YAML 设计令牌 + 说明文字,供任何编码 Agent 据此实现(唯一事实来源)。docs/design.html— 面向阅读者的样式指南;在浏览器中打开,即可查看所有令牌和组件的实时渲染效果。它们是同一套系统——一个供 Agent 使用,一个供你查看。令牌变更时,两者会同步更新。”
然后根据项目状态建议自然的下一步:
- 如果存在
docs/prd.md→ “要我更新 PRD 中的设计系统部分,让它引用这些令牌吗?” - 如果存在
docs/product-vision.md,但不存在docs/prd.md→ “运行 Product Planner 技能来生成 PRD——它会直接使用这些令牌。” - 如果两个文件都不存在 → “如果你想将此设计整合为完整的产品愿景和 PRD,可以运行 Product Planner 技能。”
如果未安装 Product Planner 技能,请说明它属于 BuilderOS:https://github.com/BuildGreatProducts/builder-os。
编辑设计系统
docs/design.md 是规范文件;docs/design.html 是其渲染后的镜像文件。修改其中一个时,必须在同一次编辑中同步修改另一个——绝不能让两者内容不一致。先修改 .md,再更新 .html 中对应的部分(或重新生成该文件)。如果创始人手动编辑了 .html,也要将修改同步到 .md 中的令牌。
如果创始人在文件创建后想要继续完善:
- 更改单个令牌 — 更新 YAML 和所有引用旧值的说明文字,然后更新
design.html中对应的 CSS 自定义属性及受影响的组件。确保 YAML、说明文字和 HTML 保持同步。 - 根据新图片重新分析 — 阅读新图片,总结变化,并询问是否替换现有令牌或合并特定令牌。根据最终令牌重新生成
design.html。 - 重写说明文字部分 — 只更新
.md中的该部分。除非创始人也想更改令牌,否则不要改动 YAML 和 HTML。 - 添加组件 — 在
components:下追加一个条目,在“组件”说明部分添加一段文字,并在design.html的“组件”部分渲染新组件(包括其变体/状态)。
在 .md 中,始终保持规范的章节顺序,绝不要创建重复的 ## 标题——design.md 规范不接受包含重复标题的文件。