小马的 AI 工具集 给 Agent 学习

设计协议

把视觉品牌/设计系统结构化喂给编码 Agent 的 DESIGN.md 规范格式

设计协议
类型 素材 15,818 星标 更新 2026-06-11 许可 Apache-2.0 原仓库 主页

用于向编码代理描述视觉标识的格式规范。DESIGN.md 让代理能够持久、结构化地理解设计系统。

格式

DESIGN.md 文件将机器可读的设计令牌(YAML 前言)与人类可读的设计原理(Markdown 散文)结合在一起。令牌为代理提供精确的值。散文则告诉代理这些值存在的原因以及如何应用它们。

---
name: Heritage
colors:
  primary: "#1A1C1E"
  secondary: "#6C7278"
  tertiary: "#B8422E"
  neutral: "#F7F5F2"
typography:
  h1:
    fontFamily: Public Sans
    fontSize: 3rem
  body-md:
    fontFamily: Public Sans
    fontSize: 1rem
  label-caps:
    fontFamily: Space Grotesk
    fontSize: 0.75rem
rounded:
  sm: 4px
  md: 8px
spacing:
  sm: 8px
  md: 16px
---

## 概述

建筑极简主义与新闻庄重感交融。UI 呈现出高级哑光质感——恰如高端大报或当代画廊。

## 色彩

色板以高对比度中性色和单一强调色为基础。

- **Primary (#1A1C1E):** 用于标题和核心文本的深墨色。
- **Secondary (#6C7278):** 用于边框、说明文字、元数据的精致石板色。
- **Tertiary (#B8422E):** “波士顿黏土”——交互的唯一驱动色。
- **Neutral (#F7F5F2):** 温暖的石灰岩底色,比纯白更柔和。

读取该文件的代理将生成一个 UI,其中包含用 Public Sans 呈现的深墨色标题、温暖的石灰岩背景以及波士顿黏土色的行动号召按钮。

快速入门

验证 DESIGN.md 是否符合规范,捕获断裂的令牌引用,检查 WCAG 对比度,并展现结构化发现——全部以代理可操作的 JSON 形式输出。

npx @google/design.md lint DESIGN.md
{
  "findings": [
    {
      "severity": "warning",
      "path": "components.button-primary",
      "message": "textColor (#ffffff) on backgroundColor (#1A1C1E) has contrast ratio 15.42:1 — passes WCAG AA."
    }
  ],
  "summary": { "errors": 0, "warnings": 1, "info": 1 }
}

比较两个版本的设计系统,以检测令牌级别和散文层面的回归:

npx @google/design.md diff DESIGN.md DESIGN-v2.md
{
  "tokens": {
    "colors": { "added": ["accent"], "removed": [], "modified": ["tertiary"] },
    "typography": { "added": [], "removed": [], "modified": [] }
  },
  "regression": false
}

规范

完整的 DESIGN.md 规范位于 docs/spec.md。以下是一个简化的参考。

文件结构

DESIGN.md 文件包含两个层次:

  1. YAML 前言 — 机器可读的设计令牌,由文件顶部的 --- 分隔符界定。
  2. Markdown 正文 — 按 ## 章节组织的人类可读设计原理。

令牌是规范性值。散文则提供如何应用它们的上下文。

令牌模式

version: <string>          # 可选,当前版本: "alpha"
name: <string>
description: <string>      # 可选
colors:
  <token-name>: <Color>
typography:
  <token-name>: <Typography>
rounded:
  <scale-level>: <Dimension>
spacing:
  <scale-level>: <Dimension | number>
components:
  <component-name>:
    <token-name>: <string | token reference>

令牌类型

类型格式示例
颜色任意 CSS 颜色(hex、rgb()oklch()、命名颜色等)"#1A1C1E""oklch(62% 0.18 250)"
尺寸数值 + 单位(pxemrem48px-0.02em
令牌引用{path.to.token}{colors.primary}
排版包含 fontFamilyfontSizefontWeightlineHeightletterSpacingfontFeaturefontVariation 的对象见上方示例

章节顺序

章节使用 ## 标题。它们可以省略,但存在的章节必须按此顺序出现:

#章节别名
1概述品牌与风格
2色彩
3排版
4布局布局与间距
5层级与深度层级
6形状
7组件
8注意事项

组件令牌

组件将名称映射为一组子令牌属性:

components:
  button-primary:
    backgroundColor: "{colors.tertiary}"
    textColor: "{colors.on-tertiary}"
    rounded: "{rounded.sm}"
    padding: 12px
  button-primary-hover:
    backgroundColor: "{colors.tertiary-container}"

有效的组件属性:backgroundColortextColortypographyroundedpaddingsizeheightwidth

变体(hover、active、pressed)通过相关键名作为单独的组件条目表示。

对未知内容的消费行为

场景行为
未知章节标题保留;不要报错
未知颜色令牌名称如果值有效则接受
未知排版令牌名称接受为有效排版
未知组件属性接受并给出警告
重复的章节标题报错;拒绝该文件

CLI 参考

安装

npm install @google/design.md

Windows 上,如果 shell 对 @ 有特殊处理(PowerShell、某些终端),请用引号包裹包名:

npm install "@google/design.md"

或者直接运行(始终从公共 npm 注册表解析):

npx @google/design.md lint DESIGN.md

Windows/PowerShell 上,这种直接形式可能不产生任何输出(或在 Markdown 编辑器中打开 DESIGN.md),因为 design.md bin 名中的 .md 后缀在命令解析期间与 Windows Markdown 文件关联冲突。请改用不带点的别名 designmd——使用 -p 将 npx 指向包,然后调用 designmd

npx -p @google/design.md designmd lint DESIGN.md

designmd 垫片解析到相同的入口点,并在所有平台上以相同方式工作。

npm error ENOVERSIONS(“@google/design.md 无可用版本”)

该 CLI 在 npm 上以 @google/design.md 发布。ENOVERSIONS 几乎总是意味着 npm 没有查询公共注册表(自定义 .npmrc 中的 registry=、未同步此包的企业镜像,或 @google 作用域的 @google:registry 配置错误)。

检查当前注册表:

npm config get registry

正常情况下从互联网安装,应为 https://registry.npmjs.org/。修复配置后,如果缓存了过期的 404,请使用 npm cache clean --force 重试。

所有命令都接受文件路径或 - 表示标准输入。输出默认为 JSON。

Windows 提示:当从 package.json 脚本(而非通过 npx)直接调用 CLI 时,请使用 designmd 别名而不是 design.md。原始 bin 名称中的 .md 后缀会与 Markdown 文件关联混淆 Windows 命令解析。designmd 垫片解析到相同的入口点,并在所有平台上以相同方式工作。

// package.json
{
  "scripts": {
    "design:lint": "designmd lint DESIGN.md"
  }
}

lint

验证 DESIGN.md 文件的结构正确性。

npx @google/design.md lint DESIGN.md
npx @google/design.md lint --format json DESIGN.md
cat DESIGN.md | npx @google/design.md lint -
选项类型默认值描述
filepositionalrequired指向 DESIGN.md 的路径(或 - 表示标准输入)
--formatjsonjson输出格式

若发现错误,退出码为 1,否则为 0

diff

比较两个 DESIGN.md 文件,并报告令牌级别的变更。

npx @google/design.md diff DESIGN.md DESIGN-v2.md
选项类型默认值描述
beforepositionalrequired“变更前”的 DESIGN.md 文件路径
afterpositionalrequired“变更后”的 DESIGN.md 文件路径
--formatjsonjson输出格式

若检测到回归(“变更后”文件中出现更多错误或警告),退出码为 1

export

将 DESIGN.md 令牌导出为其他格式。

npx @google/design.md export --format json-tailwind DESIGN.md > tailwind.theme.json
npx @google/design.md export --format css-tailwind DESIGN.md > theme.css
npx @google/design.md export --format dtcg DESIGN.md > tokens.json
选项类型默认值描述
filepositionalrequired指向 DESIGN.md 的路径(或 - 表示标准输入)
--formatjson-tailwind | css-tailwind | tailwind | dtcgrequired输出格式
格式输出描述
json-tailwindJSONTailwind v3 的 theme.extend 配置对象
css-tailwindCSS带有 CSS 自定义属性的 Tailwind v4 @theme { ... } 代码块
tailwindJSONjson-tailwind 相同(别名)
dtcgJSONW3C Design Tokens Format Module(设计令牌格式模块)

spec

输出 DESIGN.md 格式规范(可用于将规范上下文注入到智能体提示中)。

npx @google/design.md spec
npx @google/design.md spec --rules
npx @google/design.md spec --rules-only --format json
选项类型默认值描述
--rulesbooleanfalse附加当前启用的 lint 规则表
--rules-onlybooleanfalse仅输出 lint 规则表
--formatmarkdown | jsonmarkdown输出格式

Linting 规则

linter 会对解析后的 DESIGN.md 运行九条规则。每条规则都会以固定的严重级别输出检查结果。

规则严重级别检查内容
broken-referror令牌引用({colors.primary})无法解析到任何已定义的令牌
missing-primarywarning颜色已定义但缺少 primary 颜色——智能体会自动生成一个
contrast-ratiowarning组件 backgroundColor/textColor 对低于 WCAG AA 最低对比度(4.5:1)
orphaned-tokenswarning颜色令牌已定义但未被任何组件引用
token-summaryinfo每个部分中定义的令牌数量汇总
missing-sectionsinfo当存在其他令牌时,可选部分(spacing、rounded)缺失
missing-typographywarning颜色已定义但缺少排版令牌——智能体会使用默认字体
section-orderwarning各部分的顺序不符合规范定义的规范顺序
unknown-keywarning顶层 YAML 键看起来是已知模式键的拼写错误(例如 colours:colors:);自定义扩展键不会触发警告

程序化 API

linter 也作为库提供:

import { lint } from '@google/design.md/linter';

const report = lint(markdownString);

console.log(report.findings);       // Finding[]
console.log(report.summary);        // { errors, warnings, info }
console.log(report.designSystem);   // Parsed DesignSystemState

设计令牌互操作性

DESIGN.md 令牌的灵感来源于 W3C Design Token Formatexport 命令将令牌转换到其他格式:

  • Tailwind v3 配置 (JSON)npx @google/design.md export --format json-tailwind DESIGN.md — 生成一个 theme.extend JSON 对象,用于 tailwind.config.js--format tailwind 是向后兼容的别名。
  • Tailwind v4 主题 (CSS)npx @google/design.md export --format css-tailwind DESIGN.md — 生成一个使用 Tailwind v4 CSS 变量令牌命名空间(--color-*--font-*--text-*--leading-*--tracking-*--font-weight-*--radius-*--spacing-*)的 CSS @theme { ... } 代码块。
  • DTCG tokens.jsonW3C Design Tokens Format Module) — npx @google/design.md export --format dtcg DESIGN.md

状态

DESIGN.md 格式当前为 alpha 版本。规范、令牌模式和 CLI 均处于积极开发中。随着格式的成熟,预计会有变动。

免责声明

本项目不符合 Google 开源软件漏洞奖励计划 的条件。

在 GitHub 查看完整项目