草图
当用户想要在确定方向之前先查看设计方向时使用此技能——通过可抛弃的 HTML 模型来探索 UI/UX 创意。目的是生成 2-3 个交互式变体,以便用户可以并排比较视觉方向,而不是生成可交付的代码。
当用户说诸如“草图这个屏幕”、“让我看看 X 可能是什么样子”、“比较布局 A 与 B”、“给我 2-3 个关于这个 UI 的构想”、“让我看看一些变体”、“在我构建之前先制作模型”之类的话时,加载此技能。
何时不应使用此技能
- 用户想要生产级组件 — 使用
claude-design或正确构建它 - 用户想要一个精美的一次性 HTML 制品(登录页、宣传页) —
claude-design - 用户想要一个图表 —
excalidraw、architecture-diagram - 设计已确定 — 直接构建即可
如果用户安装了完整的 GSD 系统
如果 gsd-sketch 作为同级技能出现(通过 npx get-shit-done-cc --hermes 安装),优先使用 gsd-sketch 以获得完整的工作流:持久的 .planning/sketches/ 目录与 MANIFEST、前沿模式分析、跨过去草图的连续性审计,以及与 GSD 其余部分的集成。此技能是轻量级独立版本——一次性草图绘制,没有状态机制。
核心方法
intake → variants → head-to-head → pick winner (or iterate)
1. 需求收集(如果用户已经给出足够信息可跳过)
在生成变体之前,获取三件事——一次一个问题,不要一次性提问全部:
- 感觉。 “这应该给人什么感觉?形容词、情感、氛围。” — “平静、编辑感、像 Linear” 比 “极简” 传达的信息更多。
- 参考。 “哪些应用、网站或产品捕捉到了你想象中的感觉?” — 实际参考胜过抽象描述。
- 核心操作。 “用户在这个屏幕上最重要的单一操作是什么?” — 所有变体都应很好地服务于这个操作;如果不,它们就只是装饰。
在进入下一个问题之前简要回应每个答案。如果用户已经提前给出了全部三个信息,直接跳到变体生成。
2. 变体(2-3个,绝不少于1个,极少超过4个)
一次性生成 2-3个变体。每个变体是一个完整的、独立的 HTML 文件。不要描述变体——构建它们。重点是进行比较。
每个变体应采取不同的设计立场,而不是不同的像素值。三个好的变体维度:
- 密度: 紧凑 / 透气 / 超密集(选择两个对比的极点)
- 强调: 内容优先 / 操作优先 / 工具优先
- 美学: 编辑感 / 实用主义 / 俏皮
- 布局: 单栏 / 侧边栏 / 分割窗格
- 基础样式: 卡片式 / 无修饰内容 / 文档风格
选择一个维度并从中拉开差距。仅在强调色上有差异的两个变体是浪费精力——用户无法区分它们。
变体命名: 描述立场,而非编号。
sketches/
├── 001-calm-editorial/
│ ├── index.html
│ └── README.md
├── 001-utilitarian-dense/
│ ├── index.html
│ └── README.md
└── 001-playful-split/
├── index.html
└── README.md
3. 制作真实的 HTML
每个变体是一个独立的 HTML 文件:
- 内联
<style>— 无构建步骤,无外部 CSS - 系统字体或通过
<link>引入一个 Google 字体 - 通过 CDN 使用 Tailwind (
<script src="https://cdn.tailwindcss.com"></script>) 没问题 - 逼真的假内容 — 实际的句子和名称,而不是“Lorem ipsum”
- 可交互:链接可点击,悬停效果真实,至少有一个状态转换(打开/关闭、过滤、切换)。一个冻结的静态图像比一个粗糙的动画版本更糟糕。
在浏览器中打开它。如果看起来有破绽,先修复再展示给用户。
视觉验证变体——使用 Hermes 的浏览器工具。 不要只写 HTML 并指望它能正确渲染;加载每个变体并查看:
browser_navigate(url="file:///absolute/path/to/sketches/001-calm-editorial/index.html")
browser_vision(question="Does this layout look clean and readable? Any visible bugs (overlapping text, unstyled elements, broken images)?")
browser_vision 返回页面上实际内容的 AI 描述以及截图路径——捕捉纯源代码检查遗漏的布局错误(例如,字体导入静默失败、flex 容器塌陷)。修复并重新导航,直到每个变体看起来正确。
默认 CSS 重置 + 系统字体堆栈 以便快速开始:
<style>
* { box-sizing: border-box; margin: 0; padding: 0; }
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
"Helvetica Neue", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
color: #1a1a1a;
background: #fafafa;
line-height: 1.5;
}
</style>
4. 变体 README
每个变体的 README.md 应回答:
## 变体:{stance name}
### 设计立场
用一句话说明驱动此变体的原则。
### 关键选择
- 布局:...
- 排版:...
- 颜色:...
- 交互:...
### 权衡
- 强项:...
- 弱项:...
### 最适合
- 此变体实际服务的用户类型或用例
5. 正面对决
在所有变体构建完成后,将它们作为比较呈现。不要只是列出——给出观点:
## 首页的三种构想
| 维度 | 平静编辑感 | 密集实用 | 俏皮分割 |
|-----------|----------------|-------------------|---------------|
| 密度 | 低 | 高 | 中 |
| 主要操作可见性 | 低 | 高 | 中 |
| 可扫读性 | 高 | 中 | 低 |
| 感觉 | 平静、可信 | 锐利、工具感 | 诱人、充满活力 |
**我的看法:** 密集实用适合高级用户,平静编辑感适合内容导向的观众。俏皮分割最弱——试图两者兼顾却都不彻底。
让用户挑选优胜者,或将两个合并为一个混合体,或要求再来一轮。
主题(当项目有视觉标识时)
如果用户有现有的主题(颜色、字体、令牌),将共享令牌放在 sketches/themes/tokens.css 中,并在每个变体中使用 @import 引入。保持令牌最小化:
/* sketches/themes/tokens.css */
:root {
--color-bg: #fafafa;
--color-fg: #1a1a1a;
--color-accent: #0066ff;
--color-muted: #666;
--radius: 8px;
--font-display: "Inter", sans-serif;
--font-body: -apple-system, BlinkMacSystemFont, sans-serif;
}
不要过度令牌化一个可抛弃的草图——三种颜色和一种字体通常足够了。
交互性标准
当用户可以进行以下操作时,草图就足够交互了:
- 点击主要操作,并且有明显可见的变化发生(状态改变、模态框、提示消息、导航示意)
- 看到一个有意义的状态转换(过滤列表、切换模式、打开/关闭面板)
- 悬停在可识别的功能暗示上(按钮、行、选项卡)
超过这个就是过度设计一个一次性作品。低于这个就只是一个截图。
前沿模式(选择接下来要草绘的内容)
如果草图已经存在,用户问“我接下来应该草绘什么?”:
- 一致性缺口 — 来自不同草图的两个优胜变体做出了独立选择,尚未组合在一起
- 未草绘的屏幕 — 被引用但从未探索的
- 状态覆盖 — 已草绘出正常路径,但未涉及空态、加载、错误、1000项等状态
- 响应式缺口 — 在一个视口下验证过;在移动端/超宽屏下是否成立?
- 交互模式 — 存在静态布局;但缺少过渡、拖拽、滚动行为
提出 2-4 个命名的候选方案。让用户选择。
输出
- 在仓库根目录创建
sketches/(如果用户使用 GSD 约定,则为.planning/sketches/) - 每个变体一个子目录:
NNN-stance-name/index.html+README.md - 告诉用户如何打开它们:macOS 上使用
open sketches/001-calm-editorial/index.html,Linux 上使用xdg-open,Windows 上使用start - 保持变体的可抛弃性——如果你觉得有必要保留某个草图,应该将其提升为真正的项目代码,而不是作为资产进行管理。
一个变体的典型工具序列:
terminal("mkdir -p sketches/001-calm-editorial")
write_file("sketches/001-calm-editorial/index.html", "<!doctype html>...")
write_file("sketches/001-calm-editorial/README.md", "## Variant: Calm editorial\n...")
browser_navigate(url="file://$(pwd)/sketches/001-calm-editorial/index.html")
browser_vision(question="How does this look? Any obvious layout issues?")
对每个变体重复此过程,然后呈现对比表格。
归属声明
改编自 GSD(Get Shit Done)项目的 /gsd-sketch 工作流——MIT © 2025 Lex Christopherson (gsd-build/get-shit-done)。完整的 GSD 系统提供了持久的草图状态、主题/变体模式引用和一致性审计工作流;使用 npx get-shit-done-cc --hermes --global 安装。


