Skip to content

04 · Craft:12 条与品牌无关的准则 ​

设计系统决定长什么样。Craft 决定什么算合格。

这是两件事,OpenDesign 把它们分成两层是有道理的:换品牌的时候,可访问性底线不应该跟着变;用了很酷的视觉风格,按钮的 disabled 状态也不能没有。

工作方式 ​

技能在自己的 frontmatter 里声明需要哪些 Craft 规则。Agent 加载这个技能时,把对应的规则文件一起装进系统提示。

结果是质量约束跟着能力走,不用你每次在提示词里重复。你写「做一个落地页」,可访问性、状态覆盖、排版层级这些规则自动到位。

12 条 ​

#名称管什么
01Accessibility baseline可访问性的法定底线,以及超出底线的那部分承诺
02Animation discipline动效什么时候值得跑,跑多久,缓动怎么选
03Anti-AI-slop rules区分「做过产品的人做的」和「模型默认输出」的具体规则
04Color在设计系统提供的色板之上,颜色该怎么用
05Editorial typography hierarchy长文、杂志版式、编辑型落地页的层级行为
06Form validation表单校验的生命周期、错误如何传给辅助技术、规则住在哪
07Future Craft Sections已被技能引用但对应规则文件还没写的槽位登记
08Laws of UX有研究出处的认知与行为启发式,决定界面怎么组合
09RTL and bidirectional从右往左的排版,以及一行里混合方向时的行为
10State coverage每个可交互界面必须渲染哪些状态
11Typography任何设计系统之上通用的排版规则
12Typography hierarchy层级怎么建立、怎么打破、什么条件下允许打破

第 07 条不是一条规则

「Future Craft Sections」是个登记表:某些技能已经声明依赖某条规则,但那个文件还没写。pnpm lint:craft 会把这些当成计划中的前向引用放过,同时对没登记的拼写错误报错。列在目录里是为了让这个约定是明面上的。

三条实际最常起作用的 ​

State coverage(状态覆盖) ​

官方对这条的描述值得原样记住:AI 设计最可靠的失败模式,是只做了有数据的那个状态。

生成一个列表页,它给你一个填满数据的漂亮列表。空的时候呢?加载中呢?出错呢?只有一条数据呢?一千条呢?

这条规则要求每个可交互界面把状态写全。你在验收的时候也该按这个查:

  • [ ] 空态(还没有数据,且有引导)
  • [ ] 加载态
  • [ ] 错误态(且说明怎么恢复)
  • [ ] 极少数据(一条)
  • [ ] 极多数据(要不要分页、虚拟滚动)
  • [ ] 无权限态

Anti-AI-slop(反 AI 味) ​

这条比较特别:其中一部分规则是 daemon 的 lint-artifact 会自动检查的。 违反被强制的那几条不是审美偏好,是回归。

剩下的部分是给 Agent 和评审人看的指引,文件里明确标注了「(guidance, not auto-checked)」——哪些是硬检查、哪些是建议,这个边界写在明面上。

详见 05 · 反 AI 味。

Animation discipline(动效纪律) ​

设计系统决定动效的性格,这条决定动效该不该跑,以及时长、缓动和可访问性底线。

实际影响最大的是那条可访问性底线:prefers-reduced-motion 必须被尊重。用户在系统里关了动效,你的页面就不该动。这一条容易被忘,但它是硬要求。

怎么在你的技能里用 ​

在 SKILL.md 的 frontmatter 里声明:

markdown
---
name: your-skill
craft: [accessibility-baseline, state-coverage, typography-hierarchy, color]
---

声明哪些,取决于你这个技能产出什么:

产出类型建议声明
交互界面accessibility-baseline, state-coverage, form-validation, laws-of-ux
落地页accessibility-baseline, typography-hierarchy, color, animation-discipline
长文 / 编辑型typography, typography-hierarchy-editorial, color
演示 decktypography-hierarchy, color, animation-discipline
面向国际追加 rtl-and-bidi

手动调用 ​

不写技能的时候,也可以在提示词里直接引用:

text
这一版按 state coverage 的要求补全:空态、加载态、错误态、
单条数据、大量数据,每一种都要有对应的渲染,不要只做填满的那一版。

同时对着 anti-AI-slop 自查一遍,把命中的地方列出来并修掉。

这条在验收阶段特别有用——生成完之后跑一次,能捞出一批你自己看不出来的问题。

相关 ​

非官方社区教程 · 内容整理自 open-design.ai 公开资料与实测记录 · 以官方最新说明为准