Communitygithub.com

nikbearbrown/figma-appdesigner

通过对话在Figma中设计手机应用。用户描述应用用途;该技能会编写需求文档、映射屏幕、绘制线框图及样式化屏幕(通过Figma MCP),支持四套默认配色方案,并根据规则手册进行测量。

figma-appdesigner 是什么?

该技能是一个专门的AI代理技能,用于通过Figma MCP将应用想法转化为设计稿。它从用户描述开始,自动生成需求文档、屏幕地图、线框图和样式化界面。用户可以在Bear Brown、Brutalist、Northeastern和Humanitarians AI四套配色方案中切换,并实时调整设计。技能会记录所有设计决策和用户审批,形成不可篡改的决策账本。它还内置了WCAG 2.2 AA可访问性规则、Apple和Material Design的触控目标指南以及用户体验启发式规则的检查机制。最终,审批通过的设计可以生成构建说明,交给Claude Code或Codex进行开发。该技能支持iOS和Android平台,并提供了教程帮助用户快速上手。

兼容平台✓Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/nikbearbrown/figma-appdesigner/tree/HEAD

在你喜欢的 AI 中提问

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

文档

应用想法 → Figma屏幕 → 决策账本

目的

将用户对应用的描述转化为:(1) 书面需求文档,(2) 屏幕地图,(3) Figma中的线框图和样式化屏幕(使用颜色和字体变量,以便一个屏幕可以在四种默认配色方案中任何一套下显示),(4) 用户每次提出修改的原始记录,(5) 根据规则手册测量设计的结果,(6) 决策记录和人工审批,(7) 已批准设计的构建说明。由Git跟踪的设计文件夹是事实来源。Figma是它的投影。此技能负责设计和记录;它从不编写应用代码。

它是figma-webdesigner的姊妹技能。那个技能从已有网站开始并审计它。这个技能从用户描述开始,一无所有。它们共享相同的配色方案(palettes/palettes.json)、账本格式和审批命令。

会话流程

用户说话;Claude绘图。每一次交互属于以下四种类型之一:

  • 关于应用的事实(“它是为徒步旅行者设计的,支持离线工作”)。写入需求文档。
  • 请求(“把添加按钮做大一点”,“把搜索移到顶部”,“用Northeastern配色显示这个”)。Claude记录用户原话,在Figma中做出修改,并说明改变了什么。
  • 问题(“这个按钮够大吗?”)。Claude测量并回答数字和对应的规则。
  • 决策(“是的,就构建这个”)。只有人类可以做出决策,并且只能通过在自己的终端中运行fad approve来执行。

一次只问一两个问题。尽早绘图:一个用户可以指点的错误线框图远胜过冗长的访谈。

命令

技能文件夹有一个命令fad和一个CLAUDE.md说明如何回应。

  • help运行fad help(设置检查加上一个下一步建议),如果Figma工具可用则运行whoami查看席位。
  • tutorial运行七步入门教程(设计应用的首屏)。它是技能自身的步骤,逐步驱动。
  • fad tutorials [name]列出常见应用的现成教程(to-do、weather、chat)或打印一个。fad init "<name>" --tutorial to-do会使用教程的示例需求和提案屏幕启动设计文件夹。参见常见应用的教程。
  • fad init "<app name>"启动设计文件夹。选项:--platform ios|android|both,--palette <id>。
  • fad palettes [id]列出四种默认配色方案,或打印一个及其角色和计算后的对比度。--json以脚本形式输出。--figma打印可直接运行的Figma脚本,用于创建颜色变量。
  • fad devices打印设计的屏幕尺寸、安全区域和最小触控目标。
  • fad screens打印屏幕地图并检查(一个起始屏幕、无不可达的屏幕、无指向不存在屏幕的链接)。
  • fad templates [kind]列出常见应用的开放许可模板和设计套件,以及每个的许可证和需提供的致谢。--credits打印完整的致谢列表。
  • fad approve|reject|defer <D-id>由用户在自己的终端中运行。不可协商点1适用。
  • fad ledger verify检查哈希链,并确保每个审批文件与账本匹配。

不可协商规则

  1. 只有人类可以设置决策为已批准、已拒绝或已推迟,或重新打开一个决策。永远不要写入这些状态。永远不要写入design/approvals/中的文件。永远不要运行fad approve、reject或defer。
  2. 每个发现必须引用design/rulebook/rules.yaml中的rule_id。无规则则无发现:将其记录为向人类提供的observation。
  3. 发现标签遵循规则层级:规范性→failure,启发式→concern,内部规则→deviation。Apple和Google的指南属于启发式层级:iOS上的40点按钮是concern,不是failure。永远不要对启发式发现使用通过/失败的图标或词语。
  4. 在采取行动之前记录请求:记录request.made账本事件,包含用户的原始措辞和目标屏幕。然后是figma.write收据。记录是为了让后人能问为什么按钮被移动了。
  5. 违反规则的请求仍然是用户的选择。说明违反了哪条规则以及程度,提供最接近的通过版本,并按照用户的选择绘制。如果他们保留了违反规则的版本,写入发现结果;它会一直带到决策记录中。不要悄悄地“修正”用户的要求,也不要拒绝。
  6. 屏幕上的每种颜色都是Palette变量,每个字体系列都是type/变量。屏幕节点上没有松散的十六进制颜色。值来自fad palettes,从不来自记忆。
  7. 永远不要修改或删除非技能创建的节点。通过账本中记录的节点ID找到自己的节点,而不是通过图层名称、颜色或文本。
  8. 永远不要设置开发模式状态(Ready for dev / Completed)。永远不要解决或删除人类的评论。
  9. 只在此技能为当前应用创建的Figma文件中绘图,或者用户保存了基线版本并提供了文件ID后指定的文件中绘图。当前运行创建的文件从空开始,本身就是基线;在capabilities.json中记录。
  10. 永远不要编写应用代码。构建只在单独的Claude Code或Codex会话中进行,通过已批准决策的交接说明进行。
  11. 除非用户提供并声明可以使用,否则永远不要在屏幕上放置真实组织的徽标、名称或商标。Northeastern配色方案是已发布的调色板,不等于使用大学标志的许可。
  12. 永远不要复制模板或其他应用的屏幕。模板(参见模板)是用来阅读结构并在其许可证下构建的,并在需求文档中记录致谢;没有开放许可证的模板仅供查看。
  13. 每个屏幕都要绘制其状态。加载或列表屏幕必须在其被提出之前绘制default、empty、loading和error(规则HOUSE-STATES)。

目录布局

design/
  brief.yaml                  # 人工填写(阶段0)
  rulebook/rules.yaml         # 人工确认(阶段1)
  screens.json                # 屏幕地图(阶段2)
  capabilities.json           # 当前运行的实际能力
  checks/R-YYYYMMDD-NN/       # 绘制的测量:checks.json, findings.json, 导出的PNG
  decisions/D-NNNN.json
  approvals/A-NNNN.json       # 仅人类操作
  handoff/                    # 构建说明,仅已批准的决策
    README.md                 # 构建者共享规则
    D-NNNN.md                 # 每个已批准决策的说明
  ledger.jsonl                # 仅追加、哈希链事件

fad init将其放在~/figma-appdesigner-work/<app>/design/,并使~/figma-appdesigner-work/<app>/成为Git仓库,以便审批可以提交。它不提交任何内容。

阶段0 — 需求文档(网关G0)

如果design/brief.yaml缺失或包含空的必填字段,以对话方式询问缺失的字段,一次问一两个。在用户填写所有必填字段之前,不要绘制任何内容。

app_name: ""                  # 必填:工作名称即可
one_line: ""                  # 必填:它为谁做什么,一句话
people: []                    # 必填:谁使用它
top_tasks: []                 # 必填:用户必须能完成的三件事
platform: ios                 # 必填:ios, android 或 both
palette: bear-brown           # 必填:bear-brown, brutalist, northeastern, humanitarians
dark_mode: false              # 同时绘制配色的深色模式(如果有)
implementer: ""               # 必填:"claude-code" 或 "codex"
stack: undecided              # swiftui, compose, react-native, flutter, 或 undecided
approvers: []                 # 必填:姓名和角色
conformance_target: "WCAG 2.2 AA"
existing_app: none            # 如果是重新设计现有应用,填写仓库路径
figma_file: ""                # 在文件创建前保持空白
out_of_scope: []

好的top_tasks是用户完成的事情(“在没有信号的情况下写笔记”),而不是功能(“离线同步”)。如果用户提供的是功能,询问他们想完成什么。

阶段1 — 规则手册(网关G1)

总结规则手册(按层级和模式分类的规则数量)。询问用户确认或编辑。起始版本列出了来源名称以便打开;说明Apple和Material条目是命名的,不是链接的,应与当前指南进行确认。记录schema.confirmed账本事件,包含用户姓名和日期。未经确认不得继续。

运行时能力探测

在首次Figma写入之前,写入capabilities.json:

  • 哪些Figma MCP工具存在(use_figma、create_new_file、create_session、get_screenshot、get_metadata、generate_diagram、get_libraries、search_design_system)。
  • whoami:将拥有文件的方案和席位。仅查看席位无法绘图:设置mode: json-only,说明情况,并在阶段3之前停止。如果有多个方案,使用具有完整席位的方案;如果有两个,询问。
  • 在任何use_figma调用之前加载Figma的figma-use技能,在create_new_file之前加载figma-create-new-file。对于变量加载figma-generate-library;对于屏幕加载figma-generate-design。在skillNames中传递您遵循的Figma技能名称。
  • 一旦文件密钥已知,调用create_session并在每个后续文件调用中传递其sessionId。
  • 从首次运行(2026-11-10,教育方案,学生等级,完整席位)已知内容。重新验证而不是假设:
    • 一个变量集合接受了八个模式(四种配色方案,其中三种有深色模式,以及灰色的线框模式)。
    • 作用域为FONT_FAMILY的STRING变量绑定到文本节点的fontFamily,会随模式切换字体。每个模式中的每个家族必须先加载。
    • EB Garamond、Inter和Lato各有Regular、Medium和Bold。Lato没有“Semi Bold”。只使用这三个字重,以便一个文本节点在所有模式下工作。
    • frame.setExplicitVariableModeForCollection(collection, modeId)会重新着色和重新设置框架内的所有内容,包括组件实例。
    • 组件页面上的组件可以在同一调用中实例化到另一个页面:使用figma.getNodeByIdAsync(id)获取并调用createInstance()。
    • 自动布局框架中的文本图层,如果设置了maxWidth和textAutoResize = 'WIDTH_AND_HEIGHT',则短行会收缩,长行会换行(聊天气泡)。
    • 从figma-webdesigner的首次运行:不支持figma.saveVersionHistoryAsync(用户保存版本),不能设置figma.root.name(创建文件时命名),注释有效。
  • 如果方案拒绝第二个模式(脚本收据中的modeErrors),仅使用所选配色方案的浅色模式,并记录modes: 1。

调用create_new_file时以应用名称命名Figma文件;之后无法重命名。

颜色

屏幕使用四种默认配色方案之一绘制。它们位于palettes/palettes.json中,每种都从其命名网站读取(文件记录了页面和日期)。figma-webdesigner附带相同的文件。

id名称读取自模式字体
bear-brown (默认)Bear Brownbearbrown.colight, darkEB Garamond, Inter
brutalistBrutalistbrutalist.artlight, darkInter
northeasternNortheasternbrand.northeastern.edu, the color pagelightLato
humanitariansHumanitarians AIhumanitarians.ailight, darkInter

每套配色方案填充相同的七个角色:ground、surface、ink、ink-soft、border、accent、on-accent。

  1. 询问,不要假设。 在阶段0中,展示四种方案(fad palettes)并询问选择哪个。如果没有回答,使用默认方案并说明。
  2. 从命令获取值。 fad palettes --figma打印包含已填充颜色的figma/palette-variables.js。运行该脚本;不要手动输入十六进制值。
  3. 将所有四种方案放入文件。 脚本创建一个包含每种配色方案及深色模式模式以及灰色Wireframe模式的Palette集合,以便用户无需重绘即可请求查看任何屏幕的其他方案:设置框架的模式。需求文档中的palette是默认绘制屏幕的模式。第一个模式(Figma的默认值)始终是真实配色方案;Wireframe是最后一个。
  4. 报告低对比度配对。 fad palettes <id>标记任何低于WCAG最低要求的文本或控件配对为LOW。告知用户其方案中哪些是低对比度配对,并且永远不要将文本放在低对比度配对之上。目前存在两个:Brutalist的次要文本在其石板色表面上(4.34:1),以及Humanitarians深色模式下红色与深色背景的配对(2.47:1)。
  5. 每个屏幕只有一个主要操作使用强调色(HOUSE-ONE-MAIN-ACTION)。强调色不是装饰。
  6. 用户自己的颜色(“我们的品牌是蓝绿色”)是一个由他们命名的新变量模式,添加到文件的Palette集合中,填充所有七个角色,并在使用前以相同方式计算其对比度。不要编辑四种默认方案。

设备

fad devices打印starter/devices.json中的内容:一个390×844 pt的iPhone框架和一个412×915 dp的Android框架,每个都有安全区域和最小触控目标(44 pt,Apple人机界面指南;48 dp,Material Design 3)。这些是绘图的起点。使用时说明这一点,并告诉用户在构建之前在真实设备上检查。需求文档中的platform决定绘制哪些;both则每个屏幕绘制两次。

use_figma脚本约定

此技能通过use_figma发送的每个脚本都遵循Figma的figma-use规则和以下规则:

  1. 先加载字体。 在创建或编辑文本之前,加载任何模式可能显示的所有家族和字重(顶部的Promise.all)。绑定到type/heading的文本节点需要该变量的所有家族都已加载。
  2. 任何有子元素的节点使用自动布局。 使用figma.createAutoLayout(),追加子元素,然后设置layoutSizingHorizontal/Vertical。在设置大小模式之前使用resize()。
  3. 绑定,不要直接绘画。 填充、描边和文本颜色通过

…

[为翻译截断]

相关技能