Communitygithub.com

Gentle-Programming/gentle-design

触发条件:设计屏幕、页面、原型图、登录页、UI方向、画板或尝试不同方案、设计系统同步。在 design/<slug>/ 目录下编写自包含的 HTML 设计方向。

gentle-design 是什么?

该技能专为 AI 代码助手(如 Claude Code、Coder)设计,用于处理 UI 设计任务。当用户提出“设计一个页面”、“创建一个原型图”或“尝试不同的UI方向”等需求时,该技能会自动激活。它将每个设计稿生成为一个自包含的 HTML 文件(内联 CSS、JS、SVG),并存放于 `design/<slug>/` 目录下。技能的核心规则包括:不使用外部资源(CDN、远程字体、图片等),仅使用系统字体栈;内容需真实且具有可访问性(语义化标记、WCAG AA 对比度、尊重 `prefers-reduced-motion`)。它还提供了一个决策门系统,用于处理新的需求、迭代反馈、保存不同方案、调整设计值(通过滑块或“复制为提示”按钮)以及画布评论。此外,该技能可以从项目源文件中抓取 CSS 变量、Tailwind 主题等,生成一个 `design/system.md` 设计系统文档和可视化预览 `design/system.html`,确保所有设计稿遵守一致的令牌。该技能支持在多个平台(如 Claude Code、Coder)上运行,并提供了 `gentle_design` 工具进行列表、打开、停止、实现和交接等操作。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/Gentleman-Programming/gentle-shell/tree/HEAD/skills/design

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

激活契约

每当用户用自然语言提出 UI 设计、原型图、屏幕、登录页或视觉方向的需求,或对 design/ 下的画板进行迭代时,默认使用此技能。不要用它来实现项目栈中的生产代码。

/gentle:design 命令是可选的快捷方式:每个操作也可以通过普通请求,经由本技能和 gentle_design 工具(list、open、stop、implement、handoff)执行。

硬性规则

  • 每个画板是一个自包含的 HTML 文件:内联 CSS、JS 和 SVG;仅使用系统字体栈。绝不引用外部 URL、CDN、远程字体、图像或脚本。
  • 为目标受众使用真实内容;不使用 lorem ipsum 或占位符名称。
  • 可访问的标记:语义化元素和地标、WCAG AA 对比度、可见的焦点样式、尊重 prefers-reduced-motion(如果有任何动效)。
  • 当 design/system.md 存在时,先读取它,并且只使用其中的令牌和组件规则;在完成任何画板之前,运行“设计系统同步”中的自查。
  • 最多问一个澄清性问题,并且仅在需求缺乏目标或内容时提问。
  • 迭代时只编辑目标画板。绝不重写其他画板。

决策门

情况操作
新需求为新的 design/<slug>/ 编写 N 个明显不同的方向(默认 3 个,或用户指定的数量)
对某个画板的反馈仅编辑该文件;保留其清单条目,如果权衡改变则更新 tradeoff
“保存并尝试不同方法”添加一个新的画板,编号为下一个 NN;保留之前的画板;将其追加到清单中
用户想要调整值(间距、颜色、字号比例)在画板中添加滑块或控件,以及一个“复制为提示”按钮,将所选值复制为提示文本
新需求对应的 design/<slug>/ 已存在选择一个新的 slug;永远不要覆盖另一个设计
消息中带有设计评论,或用户要求应用评论遵循下面的“画布评论”
/gentle:design sync,或用户要求捕获项目的设计系统遵循下面的“设计系统同步”
用户要求显示、停止或列出设计,或实现一个画板调用 gentle_design 工具(open、stop、list 或 implement 并带上 <slug>/<artboard>);遵循 implement 返回的交接文本,并用 action "handoff" 报告进度:开始时 status: "in_progress",完成时 status: "implemented",当有正在运行的应用时,将 previewUrl 设置为该应用的回环 URL

设计之前

在每个新需求之前运行此门:调用 gentle_design 工具,action: "list",然后:

list 报告的内容操作
system.exists 为 false 且 designSources 存在先运行“设计系统同步”,用一句话告诉用户你同步了项目的设计系统,然后用它进行设计
没有 designSources跳过同步并自由设计
system.staleSources 存在列出这些源,说明 design/system.md 可能已过时,并提供在进行设计前再次同步的选项;只在用户同意后才重新同步,永远不要静默地使用过时的令牌

执行步骤

  1. 获取需求:目标、布局、内容、受众。
  2. 加载 gentle-ui-design:阅读其 SKILL.md,以及仅与需求的受众、主要工作及成功条件相匹配的参考资料。本技能负责交付,gentle-ui-design 负责 UX 质量。
  3. 从需求中选择一个短横线命名(kebab-case)的 slug。
  4. 使各方向在结构或视觉策略上有所不同,而不仅仅是颜色。为每个方向标注其做出的权衡。
  5. 按画板编写 design/<slug>/NN-<name>.html(01-…、02-…;短横线命名)。
  6. 编写 design/<slug>/design.json:
{
  "title": "定价页面",
  "brief": "面向学生的笔记应用的定价页面",
  "feature": "odd/tasks/pricing-page.md",
  "artboards": [
    { "file": "01-comparison-table.html", "title": "对比表格", "tradeoff": "密集且可快速浏览;情感吸引力较弱", "width": 1440, "height": 900 },
    { "file": "02-single-plan-hero.html", "title": "单一计划主视觉", "tradeoff": "焦点突出;隐藏了计划差异", "width": 1440, "height": 900 }
  ]
}
  1. 将 width/height 设置为画板预期的视口大小(CSS 像素);每次更改后保持清单与文件同步。字段:title、brief、可选的 feature、以及包含 file、title、tradeoff、width、height 的 artboards[]。
  2. ODD 链接:当设计来自一个已跟踪的 ODD 特性(当前工作中已存在的 odd/tasks/<feature>.md)时,将 feature 设置为该路径,并在该文档的 ## Log 中追加一个条目,记录 design/<slug>/ 及其画板。当该设计的某个画板被移交实现时,Log 条目还指定被选中的画板(被移交的那个;list 会将其报告为 Chosen),并说明其他画板是备选方案。对于小的未跟踪工作,省略 feature 并让设计独立存在;永远不要仅仅为了链接而创建一个特性文档。
  3. UX 自查,针对你完成的每个画板:对照 gentle-ui-design 的构图与反馈(层级、密度、反馈)以及自适应界面(窄屏、输入访问、状态)的指导进行检查,并在报告前修复所有差距。
  4. 在编写或更改画板后,调用 gentle_design 工具,action: "open" 并带上 slug,除非用户要求不打开。当画布标签页已打开时,它会刷新该标签页而不是打开新标签页,因此每次更改后都要调用它。报告其返回的 URL。

设计系统同步

  1. 只读取,绝不编辑项目源代码。来源:CSS 自定义属性(:root、@theme、[data-theme])、Tailwind 配置或 v4 @theme、组件库文件夹、现有令牌文件及其声明的字体。
  2. 编写 design/system.md:颜色(令牌名称、值、用途)、排版、间距、圆角、阴影和组件规则。每个条目都标明其来源 path。仅记录在源中找到的值。
  3. 编写 design/system.html:一个自包含的画板,宽 1440 像素,渲染这些令牌(色板、字号比例、间距、圆角、阴影)以及核心组件,遵循相同的不引用外部 URL 规则。画布将其显示为每个设计的第一个板面。
  4. 当没有设计来源存在时,说明这一点并提出一个最小的入门系统供用户接受;永远不要将虚构的值呈现为项目令牌。
  5. 自查,对于你在 design/system.md 存在期间完成的每个画板:列出该画板使用的颜色和字体家族,与系统令牌进行比较,并在报告前修复所有偏差。

画布评论

来自画布的评论存储在 design/<slug>/comments.json 中;会话也会将它们作为命名每条评论 ID 的消息接收。

  1. 使用 gentle_design_comments 工具(action: "list",可选的 slug 和 file)读取开放的评论。如果没有该工具,读取 design/<slug>/comments.json 并使用其中 status 为 "open" 的条目。
  2. 通过仅编辑其 file 指定的画板来应用每条评论;使用 selector 和 excerpt 定位元素。当评论有 screenshot 时,先查看它:它作为评论消息的附件到达,或者使用读取工具打开 design/<slug>/<screenshot>。它显示用户所看到的内容,通常是静态画板未显示的瞬时动画或过渡状态。
  3. 将每条已应用的评论用工具标记为已解决(action: "resolve",slug,ids)。如果没有该工具,将其 status 设置为 "resolved",resolvedAt 设置为当前 ISO 时间,保持其他所有条目和字段不变。未应用的评论保持开放,并说明原因。

文件格式(仅供只有文件访问权限的代理使用):

{
  "version": 1,
  "comments": [
    { "id": "k3x9p2ab", "file": "02-bold.html", "selector": "body > header > h1", "excerpt": "Ship faster", "comment": "让标题更短。", "createdAt": "2026-10-26T10:00:00.000Z", "status": "open", "sentAt": null, "resolvedAt": null },
    { "id": "m7q2w9cd", "file": "02-bold.html", "selector": "#cta", "excerpt": "Start", "comment": "按钮在悬停过渡期间会跳动。", "screenshot": ".screenshots/m7q2w9cd.png", "createdAt": "2026-10-26T10:05:00.000Z", "status": "open", "sentAt": null, "resolvedAt": null }
  ]
}

screenshot 是可选的:相对于设计文件夹的路径,位于 .screenshots/ 下,仅当用户附加了图像时才存在。

永远不要删除或重新排序条目,并保持文件为有效的 JSON:画布拒绝覆盖它无法解析的文件。

输出契约

返回:slug、每个画板文件及其标题和权衡、本轮更改的文件、本轮解决的评论 ID 以及任何未解决的问题。给出步骤 10 中的画布 URL,或者说明当你没有打开画布时使用 /gentle:design open <slug> 显示画布。对于同步,返回读取的源路径、每个组的令牌数量以及系统是否是建议的入门系统;在从“设计之前”自动同步后,说明它已运行并以相同方式报告。

参考资料

  • 项目中的 design/system.md(如果存在)—— 要遵循的设计令牌。
  • gentle-ui-design 技能 —— 与每个画板配对的 UX 质量指导。

Individual skills in this repo

This repo contains 8 individual skills — each has its own dedicated page.

相关技能