serve-sim — 终端里的 iOS 模拟器遥控器
无需打开 Xcode,就能在终端中启动、安装、串流并操控 Apple 模拟器里的 Capacitor iOS 应用。
技能仅控制本机模拟器,流地址绑定 localhost,无凭据读写或外发数据的迹象;要求停止辅助进程、报告缺失目标而非猜测坐标,透明度尚可。扣分:对 framebuffer 流的访问控制、camera injection、权限修改等敏感操作的确认与隔离机制未在文件中说明,回滚路径不完整。
SKILL.md 与 package. 中引用的 mobile:build:ios:simulator、sim:run、sim:serve、sim:kill 脚本一一对应,自洽;明确了 DEVELOPER_DIR、Node 版本、包路径限制(二进制仅在 packages/mobile 可用)与失败反馈要求。扣分:未见覆盖该技能关键路径的测试或对异常输入的可诊断失败样例,静态审阅无法验证可运行性。
触发条件在 description 中写得很具体(不打开 Xcode 操作 iOS 模拟器、tap/type/gesture、无障碍检查),前置条件明确限定 macOS + Xcode + Node 18+,边界清晰。扣分:未声明不适配范围(如 Android 模拟器、CI 环境),无中文支持说明,bun 与 Apple 工具链依赖对环境的可用性未评估。
文档结构良好:分步脚本流程、手动控制、归一化坐标说明、前置条件齐全,许可证为 MIT,仓库有版本号、changelog 脚本与安全政策。扣分:技能本身无独立版本、变更记录或已知限制清单,维护责任仅能间接推断自仓库,发布方未经注册表验证。
声称的核心价值(终端内构建、启动、流式控制模拟器)与仓库脚本体系一致,相较手动打开 Xcode 有真实边际价值,并要求消费 JSON 输出提高直接可用性。扣分:静态审阅无法验证输出是否可直接使用,多步骤构建流程成本较高,无代表性输出证据。
主要声明可追溯到仓库内脚本与文档,属于可审计的一手材料;仓库整体有测试与 CI 基础设施,但未见覆盖 serve-sim 关键路径的提交测试或第三方执行证据。扣分:无独立复现,证据类型单一,覆盖面薄。
- 本评估为静态源码审阅,未执行任何脚本,运行行为未经独立验证。
- 技能面向 macOS 专用流程,依赖 Xcode 与 bun,其他环境不可用;发布方未经注册表验证,身份未知。
- browser 流与 camera injection 等功能的安全边界(鉴权、隔离、回滚)在文件中未充分说明,使用前请自行确认本机暴露面。
- 技能无独立版本与变更记录,更新时需对照仓库脚本核对命令是否仍然有效。
这个 Skill 能做什么,适合哪些场景?
serve-sim 是 openchamber/openchamber 仓库(一个 OpenCode AI 代理的桌面/Web 界面项目,MIT 许可,含 18 个技能)中的一个 Agent Skill,位于 .agents/skills/serve-sim/。它面向移动开发者,把通常需要 Xcode 图形界面完成的模拟器工作流搬进终端:构建模拟器应用、启动/安装/运行、开启浏览器实时串流,并可通过 CLI 执行点击、输入、手势、旋转、硬件按键、权限和可访问性检查等操作。整个过程通过 Bun 脚本分步执行,每一步都有明确的完成边界,输出以 JSON 为准。
读取 SKILL.md 指令后,技能会:用 bun run mobile:build:ios:simulator 构建模拟器应用;用 bun run mobile:sim:run 启动、安装并运行应用;用 bun run mobile:sim:serve 启动分离的浏览器串流并返回 JSON 中的 url(唯一权威串流地址);用 bunx serve-sim 执行 tap/type/button home/rotate/--list 等手动控制,坐标使用 0..1 归一化;通过 curl http://localhost:3100/ax 获取可访问性树;结束时用 bun run mobile:sim:kill 停止辅助进程。
- 移动开发者正在开发 Capacitor iOS 应用,希望代理代替自己完成构建、安装、启动而不打开 Xcode。
- 测试工程师需要自动化 UI 冒烟测试,通过 CLI 模拟点击、输入和手势并验证结果。
- 远程协作场景下,开发者想在浏览器中实时查看模拟器画面并给同事演示。
- 可访问性审计人员想通过 http://localhost:3100/ax 检查应用的 accessibility 树。
- AI 代理驱动的端到端验收流程:代理启动应用、执行交互、验证完成、清理辅助进程。
这个 Skill 有哪些优点和局限?
- 无需打开 Xcode 即可完成构建、安装、启动的完整模拟器工作流。
- 提供浏览器实时串流,便于远程查看和演示。
- 细粒度 CLI 控制:点击、输入、手势、旋转、硬件按键、权限、摄像头注入、可访问性检查。
- 脚本化分步执行,每步有明确完成边界,且以 JSON 输出为权威。
- 归一化坐标(0..1)降低了对具体屏幕分辨率的依赖。
- 仅限 macOS 主机,且要求已安装 Xcode 和可启动的模拟器。
- 依赖 Bun 和 openchamber 仓库的移动端构建环境(Capacitor 项目),不适用于任意 iOS 项目。
- 可访问性查找失败时需报告缺失目标,技能本身不提供自动回退定位。
- 直接 CLI 命令只能在 packages/mobile 目录运行,路径约束容易踩坑。
- 源材料未提供测试套件或除该仓库外的使用证据。
如何安装这个 Skill?
该技能随 openchamber/openchamber 仓库分发,位于 .agents/skills/serve-sim/。README 未提供单独安装该技能的步骤;仓库整体提供 Desktop 安装包、VS Code 插件和 openchamber CLI(Node.js 22+)等安装方式。源材料未说明如何将该技能文件夹复制到特定 Agent Skills 客户端目录。
如何使用这个 Skill?
在 macOS 上确保已安装 Xcode 和 Node 18+(若 xcode-select 指向 CommandLineTools,可设 DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer)。在仓库根目录依次运行:bun run mobile:build:ios:simulator(构建);bun run mobile:sim:run(启动/安装/运行);bun run mobile:sim:serve(启动串流,向用户展示返回的 JSON url);需要时用 bunx serve-sim tap 0.5 0.5、type "hello"、button home、rotate portrait 等控制;curl http://localhost:3100/ax 查看可访问性树;结束后 bun run mobile:sim:kill 停止辅助进程。注意:直接 CLI 命令需在 packages/mobile 目录下运行,否则会报 command not found;不要用分离的 gesture begin/end 模拟点击,可能被识别为长按。