Communitygithub.com

tinycorn-studio/agent-skills

在修改UI代码之前渲染界面预览/模型图(预览、模型、界面预览、设计、草图、图片演示、设计评审)。当用户在实施前希望查看或批准UI设计,或提出UI更改时使用——离线渲染为PNG,打开后批准,然后应用。每次涉及视图/布局/颜色的更改时都应使用。

agent-skills 是什么?

这个技能实现了“先预览后编码”的工作流程,确保任何UI更改在应用到项目之前都获得用户明确批准。它指导AI助手直接渲染UI设计的离线PNG快照,无需运行完整应用程序,这样用户就能在投入时间进行编码之前直观地看到并批准设计。该技能主要针对SwiftUI和macOS项目设计,提供了一个清晰的Swift脚本模板,用于在工具目录中创建预览脚本,然后使用`swift`和`open`命令渲染并打开PNG文件。它还覆盖了多种布局变体的A/B测试,并包括一个迭代循环:如果用户要求修改,则编辑脚本,重新渲染,并重复该过程直到获得批准。关键陷阱包括避开与SwiftUI修饰符冲突的全局变量名,确保正确的2x渲染分辨率,避免使用`ScreenCapture`等屏幕录制方法(这些方法通常需要不总是可用的屏幕录制权限),以及使用应用的资产来准确匹配暗色主题。该技能支持基于网页的项目(使用HTML模型图和Playwright截图)和CLI/TUI工具(使用ANSI终端渲染),但核心原则保持不变——先获得视觉批准,再编写代码。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/tinycorn-studio/agent-skills/tree/HEAD/skills/ui-preview-first

在你喜欢的 AI 中提问

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

文档

先UI预览后编码(TinyCorn Studio 标准)

规则: 所有界面更改必须在应用于代码之前,先提供预览图片供用户批准。

工作流程

  1. 编写离线渲染脚本 在 tools/preview_<名称>.swift 中——无需运行应用,直接渲染为 2x PNG。

  2. 运行 并打开图片供用户查看:

    swift tools/preview_<名称>.swift ~/Desktop/<App>-<名称>-预览.png
    open ~/Desktop/<App>-<名称>-预览.png
    
  3. 请求批准 —— 如果有多种设计方案,并排渲染 2–4 个方案,请用户选择(A/B/C/D)。

  4. 仅在用户同意后应用。 将预览脚本随功能一起提交。

  5. 如果用户要求修改:编辑脚本,重新渲染,重复此过程直到获得批准。

代码骨架(SwiftUI, macOS)

import AppKit
import SwiftUI

struct PreviewRoot: View {
    var body: some View {
        // 使用应用的组件/颜色构建模拟 UI
        VStack { /* ... */ }
            .frame(width: 900, height: 600)
            .background(Color(nsColor: .windowBackgroundColor))
    }
}

let host = NSHostingView(rootView: PreviewRoot())
host.frame = NSRect(x: 0, y: 0, width: 900, height: 600)
host.layoutSubtreeIfNeeded()

let rep = host.bitmapImageRepForCachingDisplay(in: host.bounds)!
host.cacheDisplay(in: host.bounds, to: rep)

let png = rep.representation(using: .png, properties: [:])!
let out = CommandLine.arguments.count > 1
    ? CommandLine.arguments[1]
    : "preview.png"
try! png.write(to: URL(fileURLWithPath: out))
print("已写入 \(out)")

常见陷阱(实际遇到过)

  • 不要使用与 SwiftUI 修饰符/视图同名的全局变量(例如 border)→ 会导致重载错误。请使用 borderColor。
  • 多个方法之间共享头文件,因此 不要在同一个文件的其他地方重复声明。
  • 2x 渲染:设置 rep.size 或使用如上所示的 bitmapImageRepForCachingDisplay + cacheDisplay;在缓存前不要忘记 layoutSubtreeIfNeeded()。
  • 不要使用 screencapture/AppleScript 来截取应用截图——机器通常缺少屏幕录制权限(错误码 -1743)。离线渲染是唯一可靠的方法。
  • 应用使用暗色主题:使用相同的 Color(nsColor:) 和应用的资源进行预览,以确保与实际效果匹配。
  • 将图片保存到 ~/Desktop/ 以便用户查找,文件名格式为 <App>-<功能>-预览.png。

非 SwiftUI 情况

  • Web:使用浏览器打开 HTML 模型图并截图,或使用 Playwright 截图。
  • CLI/TUI:在终端中使用 ANSI 渲染,或使用带颜色的文本描述。

不变的基本原则:先有图片,后有代码,用户批准后才应用。

相关技能