
GitHub: https://github.com/google-labs-code/design.md
DESIGN.md 是 Google Labs 给 AI 编码 agent 写的「设计说明书」格式——用 YAML token + 自然语言 prose 的双层结构,让 agent 像读 README 一样读懂你的设计系统,是 design token 标准化 7 年来第一次「范式跳跃」。
.agents/ 自嵌 4 个 skill = 「不是 demo 是产品」。项目早期阶段不依赖视觉素材,纯靠 CLI JSON 输出 + 设计叙事文件展示价值。下方三组「代码即素材」是 design.md 最能传达自身定位的形式。
# 示例 1:完整的 DESIGN.md(来自 README,Heritage 主题)
---
name: Heritage
colors:
primary: "#1A1C1E" # Deep ink for headlines
secondary: "#6C7278" # Sophisticated slate
tertiary: "#B8422E" # "Boston Clay" — sole driver for interaction
neutral: "#F7F5F2" # Warm limestone foundation
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 }
---## Overview
Architectural Minimalism meets Journalistic Gravitas. The UI evokes a
premium matte finish — a high-end broadsheet or contemporary gallery.
// 示例 2:lint 命令输出(agent DX-first,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 }
}
// 示例 3:PHILOSOPHY.md 的核心反例对比(这是项目最深的叙事素材)❌ 形容词清单(携带信息量低):
"The design should feel modern, clean, trustworthy, and premium."✅ 具体参考(携带信息量大):
"A 1970s graduate lecture handout in the tradition of an old
and established university."// 一句"1970s lecture handout"就同时传递了:不要渐变、不要 italic、
// 不要圆角、要衬线字体、要留白——10 个 Don't 清单 1 句话搞定。
维度 | 数据 |
|---|---|
GitHub | https://github.com/google-labs-code/design.md |
Star / Fork | 17,225 / 1,563(fork 转化率 9.1%,高于一般设计 token 库 5%) |
代码行数 | 9,415(TypeScript 64.2% / JSON 30.3% / JS 4.2% / YAML 1.3%),113 文件 |
项目年龄 | 2.5 个月(2026-04-10 首发) |
开发阶段 | 稳定维护(40 commits,近 30 天 13 commits) |
贡献模式 | 核心少数 + 社区(18 人,主作者 David East 占 42.5%) |
热度定位 | 大众热门(2.5 个月破万星,设计系统赛道近 5 年最热) |
质量评级 | 代码[优秀] 文档[优秀] 测试[充分] CI/CD[完善] |
License | Apache 2.0 |
当前版本 | v0.3.0(4 个 tag,平均 19 天一个 release,预期未来有 v1.0 毕业) |
Runtime 依赖 | 0(自实现 oklch/lab/hwb/color-mix 解析) |
项目挂在 google-labs-code Organization 名下,账号 2.3 年、2,546 粉丝、8 个公开仓库,组织内核心项目按 stars:design.md 17,225 / stitch-skills 6,149 / jules-awesome-list 3,089 / stitch-sdk 1,723。
核心贡献者三人组——这是 Google 内部一支前 Firebase / Web 平台明星 DevRel 团队的二次创业产物:
其他贡献者多为 Google 内部员工(tejas100、tototofu123、vikks、chelseayerong 等)。
关键判断:这不是「工程师主导」的项目,而是「开发者关系+产品经理」主导——核心技能是把复杂技术讲清楚的人。
设计 token 标准化(W3C DTCG)已经走过 7 年,Style Dictionary 等工具链成熟,但 Google 内部 Stitch 团队在 2024–2025 年发现的事实是:把 DTCG JSON 直接喂给编码 agent,生成质量并不比裸 prompt 好多少——因为 agent 仍然没有「这套设计的精神」信息。
更深的痛点是:旧 token 工作流是单向「设计→代码」,而 agent 时代是多向「prompt↔设计」循环,需要 spec 本身能被人/agent 双向读写。
时机为什么是现在?2025 年中到 2026 年,AI Coding Agent 真正进入主流——Jules、Claude Code、Cursor 把「agent 持续读上下文」做成产品形态。AGENTS.md 模式被验证可行,但行业里没有任何垂直领域版本。design.md 是 Google Labs 给「design 这一类垂直知识」做的示范。
「Prose, not Tokens, is the focus of the specification」——design.md 哲学宣言第一句
5 条设计哲学(来自仓库内 PHILOSOPHY.md):
「不做什么」清单(核心防御): - 不做 design-as-code(避开 shadcn 路线) - 不做 design-to-code Figma 同步 - 不正面替换 DTCG(做上游,不做竞品) - 不做 prose 生成器(不替用户写设计参考)
Stitch 入口格式:design.md 是 Google Labs 的 AI UI 设计工具 Stitch 向外公开的「设计描述标准」——Stitch 内部生成设计用的就是 prose+token 混合格式,现在把它开放成 spec,等于把 Stitch 的输入接口变成行业标准。
Google Labs agent 矩阵的一员:与 Jules(AI coding agent)、jules-awesome-list、stitch-sdk 一起构成 Google Labs 在 agent 时代的工具链矩阵。design.md 是矩阵里的「design layer」——agent 写代码时需要的「设计上下文」,与 AGENTS.md(通用上下文)互补。
生态卡位策略: - 不与 DTCG 竞争,做上游:design.md export --format dtcg 一行转换 - 不与 Style Dictionary 竞争,做上游:通过 export 把 design.md 翻译为 Tailwind v3/v4 theme 配置 - 不与 Figma 竞争,做平行的纯文本格式:design.md 是「在仓库里」的设计真相,Git diffable、可 PR review
开源策略:genuinely open(CLA 必签但代码 Apache 2.0),无 open-core,无 SaaS 版本——Google Labs 争夺「agent 上下文标准」话语权的工具,战略价值高于商业化价值。
preEvaluate() 把 finding 按 severity 分级为「fixes / improvements / suggestions」(4/5 | 5/5 | 5/5):同一规则两种 grouping,扁平 findings 给人/agent 看,分级 edit menu 直接喂给「AI 自动修复」 workflow。
.agents/ 自嵌入 4 个 skill(dogfooding)(5/5 | 5/5 | 3/5):仓库根目录的 .agents/skills/ 放了 tdd / ink / agent-dx-cli-scale / typed-service-contracts 四个 skill——design.md 用自己发布的 agent skill 指导自己的开发。
spec-config.yaml 单源真相驱动全栈(3/5 | 5/5 | 5/5):YAML 一份 → linter / docs / 多个 export 器共享。CI 强制 bun run spec:gen --check 验证生成结果与 docs 匹配——spec 永远不会与实现脱节。
- 输入)+ exit code 语义(errors>0 返 1)+ 自评 agent-dx-cli-scale skill。2025+ 所有面向 agent 工作流的 CLI 的事实标准。
token-like-ignored rule 的启发式:用纯 TS 启发式(hex 正则 + dimension 正则 + 5 个 typography key)判断「未知 key 值是不是设计 token map」——是的话提示用户「export 会丢这个 key」。
spec.ts(Zod schema + Result type + Interface)+ handler.ts(实现 class,不抛异常)+ *.test.ts 同行测试。所有严格契约、强测试覆盖的 TypeScript 服务都适用。
LintRule = (state) => Finding[] 纯函数 + RuleDescriptor = { name, severity, description, run } 元数据壳子。runLinter 同时接受两种输入(isDescriptorArray 适配)。所有可插拔 lint/validation 工具。
npm-registry-smoke-windows:在 windows-latest 上真实从公网 npm install @google/design.md@latest 跑一遍。所有公开 npm 包的发布后冒烟测试。
bin: { 「design.md」: ..., 「designmd」: ... } 双名注册同一份 ./dist/index.js,因为 Windows 上 .md 后缀与 PowerShell 关联冲突。所有跨平台 CLI。
spec.mdx 模板 + renderer 从 SPEC_CONFIG 注入示例,CI --check 模式强制对齐。所有 spec-driven 工具(编译器、linter、formatter)的「代码即文档」。
spec-config.yaml 驱动全栈 - 问题:spec 同时驱动 linter 规则、Tailwind 导出、DTCG 导出、docs/spec.md 文档,任何一个常量被改三遍,spec 就会漂移 - 方案:YAML → Zod 校验 → 缓存 lazy singleton → 同时被 linter / spec-gen / rules 引用 - Trade-off:引入一层代码生成 + CI check;好处是 spec 永远不会与实现脱节 - 可迁移性:高
rawValues,model 保留 unknownKeys + unknownKeyValues,linter 用 Levenshtein ≤ 2 提示拼写错误、> 2 静默 + token-like-ignored 提示 export 会丢 - Trade-off:用户写错 key 时 spec 不强制拒绝——把「spec 严格性」换成「agent 提示性」 - 可迁移性:高(所有「渐进式 schema 演进」项目)
{colors.primary} 跨段引用,需要两遍解析 + 防环 - 方案:ModelHandler.execute 分 3 phase:phase 1 解析 primitive + 把 reference 暂存 symbolTable;phase 2 走所有 reference 做链式 resolve(resolveReference(symbolTable, path, visited, depth) 用 visited Set 防环 + MAX_REFERENCE_DEPTH=10 防深链);phase 3 构建 component map - Trade-off:两遍扫描的复杂度换「任意方向的引用」 - 可迁移性:高(style dictionary、kustomize 等「配置语言支持跨段引用」工具)
维度 | DESIGN.md | W3C DTCG | Style Dictionary | Figma MCP | Tokens Studio | AGENTS.md |
|---|---|---|---|---|---|---|
核心定位 | 设计叙事 spec | Token schema | Token 编译工具 | 画板 → agent 桥 | Figma 内 token UI | 通用 agent 上下文 |
prose 上下文 | ✅ 核心 | ❌ | ❌ | ❌ | ❌ | ✅ 全部 prose |
结构化 token | ✅ YAML | ✅ JSON | ✅ JSON | ✅ 节点树 | ✅ JSON | ❌ |
行业标准地位 | alpha | W3C 工作组 | 事实标准 | Figma 官方 | Figma 生态成熟 | 多 agent 内置 |
CI 可校验 | ✅ 9 条 rule | ❌ 需自建 | ❌ | ❌ | ❌ | ❌ |
导出到 Tailwind | ✅ v3/v4 | 需 SD 转换 | ✅ 直接 | ❌ | ✅ | ❌ |
多主题/模式 | ❌(Issue #13) | ✅ | ✅ 透传 | ✅ Figma 本身 | ✅ 3+ 年领先 | N/A |
Git diff 友好 | ✅ prose | ⚠️ JSON 噪声 | ⚠️ | ❌ 版本号 | ⚠️ 早期不存 | ✅ |
agent 友好 | ✅ JSON 默认 + stdin | ⚠️ | ⚠️ Node 库 | ✅ | ⚠️ | ✅ 通用 |
spec-config.yaml 单源真相 + MDX 代码生成文档 + CI --check 强制 → 任何 spec-driven 工具的「代码即文档」最佳实践preEvaluate() 分级 → 任何可插拔 lint 工具的标杆架构handler.test.ts 改了 9 次),但 commit message 不打 test: 标签——对 release-note 工具是挑战。PHILOSOPHY.md(5 条设计哲学必读)packages/cli/src/linter/model/handler.ts(linter 核心)packages/cli/src/linter/model/spec.ts(schema 定义)packages/cli/src/linter/linter/rules/index.ts(规则集)packages/cli/src/linter/spec-config.yaml(单源真相)examples/atmospheric-glass/DESIGN.md(最佳实践示范)https://github.com/google-labs-code/design.md