Community编程与开发github.com

UI Lab: UX建议工具

在应用的UI实验室中构建可点击的UX/UI设计原型,将每次迭代记录在docs/ux-history中,并在所有者批准计划后将选定方案提升为正式界面。当所有者要求对某个屏幕进行设计建议、原型制作、比较或尝试UX/UI设计,或要求恢复之前的建议时使用。

UI Lab: UX建议工具 是什么?

这是一个用于AI辅助UX/UI设计的技能,专为Claude Code等AI编码代理设计。它提供了一个结构化的三阶段流程:原型制作、关闭迭代和方案提升。在原型阶段,代理基于项目特定的`.claude/ui-lab.md`文件创建设计选项,每个选项存放在独立文件夹中,包含生产质量的屏幕代码、状态、实验室辅助代码和字符串资源。关闭迭代阶段会将所有选项归档到`docs/ux-history/`目录下,并清理实验室文件。方案提升阶段则将选定的选项通过文件移动、状态集成和组件合并等方式正式纳入应用。该技能支持多平台项目,处理边缘案例,并保持完整的版本控制历史以便选项恢复。它遵循严格的规则以确保实验室代码与生产代码分离,同时促进可重复的设计探索过程。

兼容平台✓Claude Code~Codex CLI~Cursor
npx skills add https://github.com/chencohensolutions/claude-skills/tree/HEAD/plugins/ui-lab/skills/ui-lab

Installed? Explore more 编程与开发 skills: steipete/bluebubbles, steipete/eightctl, steipete/blucli · View all 6 →

在你喜欢的 AI 中提问

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

文档

UI实验室:UX建议

一个UX建议经历三个阶段:

  1. 原型制作——仅修改实验室代码,基于项目实验室说明指定的平台。所有者可以点击浏览各个选项。
  2. 关闭迭代——为本次迭代打标签,并将内容写入docs/ux-history/,同时删除其实验室文件。
  3. 方案提升——所有者选择了一个选项并批准计划后,该选项成为真正的屏幕,附带其共享逻辑,如果应用有多个平台,还需处理其他平台。

项目实验室说明

本技能定义流程;每个项目的具体细节存储在其 .claude/ui-lab.md 文件中。在处理任何其他内容之前先阅读该文件。它提供:

  • 平台:本机上使用哪个实验室应用(uname -s)、其ID、实验室代码存放位置以及打开屏幕的命令;
  • 选项文件夹:每个平台的文件夹和包,以及字符串存放位置;
  • 文件:选项屏幕使用的主题或颜色,以及提升后状态移动的位置;
  • 示例数据:选项构建其数据所基于的来源;
  • 模拟数据和边缘案例:此应用中无法通过虚构数据展示的内容,以及需要检查的案例;
  • 截图:每个平台如何截图;
  • 提升:目标路径,其他平台的处理方式,需要更新的文档以及发布构建命令;
  • 实验室本身如何工作(文档链接)。

当说明与本技能存在差异时,以说明为准。如果项目没有 .claude/ui-lab.md 文件,或者缺少以下所需内容,请询问所有者而不是猜测,并将答案添加到说明中。

阶段1:原型制作

从当前分支创建一个 ux/<screen> 分支进行工作,以便其他机器可以拉取本次迭代。如果工作区中有非您所做的未提交更改,请先询问再切换分支。

每个选项一个文件夹

每个选项存放在其自己的文件夹中(说明中指定位置),以便可以单独删除、恢复或提升。该文件夹位于屏幕包内,因此提升时只需移动文件。

文件内容提升时
<Screen>Option<B>屏幕本身,<Screen>Screen<B>(state, actions):生产质量(使用应用的字符串和主题,按照说明)且不含实验室类型移动到应用中
<Screen>Option<B>State应用逻辑尚未产生的状态,按照应用最终会产出的形式进行设计移动到说明指定的位置
<Screen>Option<B>Lab其示例数据、模拟行为、无操作动作,以及带有其上方模拟内容的 LabOption 值删除
选项的字符串(当应用使用字符串资源时,名称和位置按照说明)选项的新文本移动到应用的字符串中
  • 除了文件夹(以及无法将资源放在文件夹中的字符串文件)外,每个选项还需要添加一行:在其屏幕的 LabScreens 列表中添加一项(<screen>OptionB,)。
  • 文件夹中的所有内容均为 private,但屏幕、其状态和 LabOption 值除外,这些内容的名称携带选项信息,因此选项之间不会冲突。
  • 如果一个选项需要使用现有应用组件的修改版本,则在其文件夹中使用自己的副本。
  • 示例数据来自说明中指定的来源,保持原样,再加上选项在其 Lab 文件中添加的内容。如果说明指出数据是真实的,请不要虚构文本。

步骤

  1. 在实验室中打开屏幕,查看 current,即应用当前拥有的屏幕。
  2. 编写2-3个不同的方向作为选项 a、b、c(跟在 current 之后),每个选项附带一行说明其更改内容。
  3. 在每个 LabOption 值上方,列出选项模拟的内容:应用逻辑缺乏的数据、尚未实现的行为,以及无法通过虚构数据展示的内容(说明列出此应用常见的类型)。
  4. 检查说明中列出的边缘案例,以及屏幕特有的异常情况。如果一个案例改变了设计,则将其作为单独的选项(如 a-rtl、a-dark)。
  5. 构建项目,打开每个选项并查看截图(命令在说明中;android-emulator技能涵盖Android设备)。手机上显示全黑截图表示手机已锁定:请询问所有者解锁。
  6. 在分支上提交更改,并告知所有者选项ID(<screen> <option>)、每个选项模拟的内容以及设备信息。

当所有者要求更改某个选项时,更改将作为新选项存放在其自己的文件夹中(例如,在 b 旁边创建 b2)。所有者排除的选项会保留到迭代关闭,以便迭代的标签包含所有选项。

阶段2:关闭迭代

当所有者选定了一个选项或拒绝所有选项时:

  1. 为迭代的最后一次提交打标签(此时所有选项仍在其中),并推送标签: git tag ux/<screen>/<yyyy-mm-dd> && git push origin ux/<screen>/<yyyy-mm-dd>。该标签确保在分支被删除后代码仍然可访问;同一天第二次迭代使用 -2。
  2. 按照以下格式编写 docs/ux-history/<screen>/<yyyy-mm-dd>-<topic>.md,并按照说明的要求链接到该文件(例如,屏幕文档)。
  3. 删除其他选项的文件夹、字符串文件和 LabScreens 行;选定的选项保留到阶段3。
  4. 提交更改。如果所有选项都被拒绝,迭代在此结束:合并分支(历史文件是其唯一的持久更改)或按照所有者的偏好删除分支。
# <Screen> — <topic> (<yyyy-mm-dd>, <platform>)

标签:`ux/<screen>/<yyyy-mm-dd>`

## 选项
- **a — <name>**:<更改内容>。*已选定*,在 <commit> 中提升。
- **b — <name>**:<更改内容>。*已拒绝*:<所有者给出的原因,如果有>。

## 模拟的内容
- b:<原型展示但应用尚不支持的内容>。

## 恢复选项
    git checkout ux/<screen>/<yyyy-mm-dd> -- <option folder> <strings files>
然后将 `<screen>Option<B>,` 添加到 `LabScreens`。
构建时基于标签时的 <components and sample data it used>。恢复后出现编译错误,请修复选项的副本和示例数据中的问题。

恢复

当所有者要求恢复之前的选项时,按照其历史文件操作:从标签中检出路径到 ux/<screen> 分支,添加 LabScreens 行,修复选项文件夹内不再编译的部分,然后打开它。它将作为新迭代的一个活跃选项。

阶段3:提升

当迭代在选定的选项上关闭后,进入计划模式(EnterPlanMode)并通过 ExitPlanMode 提交计划;所有者通过按钮批准计划。计划涵盖:

  • 需要移动的文件以及它们替换的屏幕;
  • 每个模拟项背后的逻辑工作:建议的状态、视图模型或控制器更改及其测试;
  • 如果应用有多个平台,则按说明处理其他平台;
  • 说明中指定需要更新的文档。

批准后,在同一分支上:

  1. 使用 git mv 将选项的屏幕文件移动到应用中(目标路径按说明),替换旧屏幕,并将函数或视图命名为屏幕的名称。
  2. 将选项的字符串移动到应用的字符串中,移除选项的前缀或表格。
  3. 将状态移动到说明指定的位置,让应用的逻辑通过测试产生状态,并连接操作。
  4. 将选项复制的组件合并回原始组件,删除其文件夹的其余部分和 LabScreens 行;将 LabScreens 中屏幕的 current 指向提升后的屏幕。
  5. 使用说明中的命令进行发布构建,任何对实验室代码的引用都会编译失败。
  6. 完成计划中的其他平台和文档部分,并将提升提交添加到迭代的历史文件中。

合并分支由所有者决定。

Individual skills in this repo

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

相关技能