让 Claude Code 自己截图验证 UI,自己判断对不对,自己改,不用人盯着看。
先说背景。我在用 Claude Code 开发一个 App,有 iOS 端也有 Mac 端。最开始的流程是这样的:AI 写完代码,我部署到真机上,自己在手机上测,测完截图从手机发到电脑上,再反馈给 Claude 哪里不对,它改,我再部署、再测。
有点蠢爆了。
我其实就是想跑长任务。/goal 的功能我一直没摸透怎么用。然后受了宝玉老师的启发。他提过做 App 之前先用 Claude Design 把 UI 设计打磨好,再去写代码。我就想,先用 Claude Design 把每个页面的原型做出来,AI 写完代码自己截个图,直接跟原型对比就行了。差在哪改哪,改完再截再比。
只有需要真人体感测试或者 review/commit的时候再叫我。
所以我就跟 Claude Code 说:你自己想办法截图验证,自己对照着改,不要每次都找我看。
我最开始想的方案是用 iPhone 镜像——macOS 有个功能可以把 iPhone 屏幕镜像到 Mac 上,这样 AI 直接在 Mac 上截镜像画面就行。但这条路没走通。iPhone 镜像要求手机锁屏才能在 Mac 上打开,而手机锁屏的时候又没法部署 App。你得解锁才能部署,一解锁镜像又断了。死循环,卡住了。
然后 Claude 自己提了一个方案:用 iOS 模拟器。模拟器有一个命令 xcrun simctl io screenshot,直接读模拟器内部的 framebuffer,不是截屏幕上的画面。
这个区别很关键——模拟器被别的应用盖住、缩到另一个桌面、甚至你根本看不到它的窗口在哪,照样能截到完整的 App 画面。等于 AI 给自己找到了一双不依赖屏幕的眼睛。
它还自己用 Swift 写了个小工具来做合成点击,十来行代码,用 CoreGraphics 发鼠标事件。截图能看,点击能操作,基本的验证循环就跑起来了。
然后我发现 Mac 端也有同样的需求。但 Mac 端没有 framebuffer 可以读,macOS 的 screencapture 拍的是屏幕实际像素,窗口被别的应用挡住就拍不全,系统弹窗也会拍进去。而且合成点击需要把窗口切到前台,鼠标会突然飞走。
我就想,能不能把模拟器和 Mac 端的 App 都放到一个永远不会被遮挡的地方。一开始想的是多桌面,但 screencapture 在其他桌面截不到。问了一下 Claude,它说扩展屏是可以的。我没有多余的显示器,但正好有台旧 Mac,macOS 的屏幕扩展功能可以把另一台 Mac 直接当第二块屏。试了一下,跑通了。
IOS 模拟器和 Mac 端 App 都丢到旧 Mac 的屏幕上,告诉claude 东西在扩展屏,自己定好截图的坐标。claude 在那边截图、点击,我在主屏上干自己活和刷视频。iOS 模拟器的截图完全不打扰,因为走的是 framebuffer。只有需要点击的时候鼠标会飞过去再飞回来,大部分时间没什么影响。
然后还有一个我觉得挺有意思的东西。可以叫‘代理信号’
有些东西截图是看不出来的。比如我这个 App 有个功能,在听写页按空格触发音频重播,但空格不能漏进输入框里。音频有没有播 claude 听不到,空格有没有被吞截图上看不出来。
claude 自己想了个办法:看输入框的占位符文字还在不在。按完空格占位符还在,说明输入框是空的,空格被正确消费了。占位符没了,说明空格漏进去了。
这个方法我学到了,看不见的东西,找一个看得见的替代指标来验证。以后跑长任务,不好验证的地方就可以用这招来干。
所以最后人机分工就变成了:claude 自己 build、截图、对设计稿、找代理信号、能改的自己改。人只管机器感知不到的那一层——上手试手感、戴耳机听声音、看动画顺不顺。
然后这方法也被我用来做ppt,AI 生成完 ppt 自己导出图片,看每一页的排版、对齐、配色,看完自己改,改完再导出再看。只要任务有视觉输出,这个"AI 自己截图验证"的循环就能用。顺便吐槽下现在的AI做ppt是真的弱爆了,试过好多skill都不太行。有朋友有知道好的方法请告诉我下。
诚实的说,这个方案肯定不完美。鼠标会飞走,坐标偶尔会偏,我也没调研过有没有更好的工具。但最重要的一点跑通了:解放了你的Attention
以上希望对您有用。
夜雨聆风