callstack/agent-device · 上手攻略
- 仓库:callstack/agent-device
- 链接:https://github.com/callstack/agent-device
- 分类:AI 编码代理 / 移动端自动化
- 作者:Tom
- 更新:2026-10-12
§0 自检
- GitHub URL ✅ 已 fetch
- 顶会 venue+年份 ⚠️ 无顶会,属于工业级开源工具(Callstack 维护)
- README 子模块 anchor ✅ 含 Quick Start / AI Agent Setup / Replay & E2E / Debugging & Profiling
一、是什么
agent-device 是 Callstack 开源的移动应用自动化与验证工具,专为 AI 编码代理设计,通过 CLI、MCP Server 或 typed Node.js API 三种入口,让 AI 代理能够检查、控制、调试和验证运行中的 iOS/Android/HarmonyOS 应用(含模拟器、真机和 TV/Web/macOS/Linux)。核心卖点是让 AI 代理获得实时应用反馈闭环——代理改完代码,立刻能看到运行结果,而不只是静态分析。
它不是传统 E2E 测试框架(Appium/Détour)的替代品,而是一个以 AI 代理为中心的运行时,天然支持 Claude Code、Codex、Cursor、Windsurf、Cline、Goose 等主流编码代理。
二、解决什么问题
AI 编码代理在处理移动端代码时,面临一个根本困境:代理不知道运行时发生了什么。它可以生成代码,但无法验证代码是否正确运行在真实设备上。agent-device 填补了这个空白:
- 验证变更:代理写完 UI 代码,立即在真机/模拟器上截图验证,无需人工介入
- 探索 App 行为:代理可以对陌生 App 执行 snapshot → 分析 → 操作循环,像人类测试者一样边用边理解
- 可重复的 CI 验证:保存工作流为
.ad脚本,在 CI 中 replay,附带截图和日志证据 - 多平台统一接口:iOS/Android/HarmonyOS/TV/Web/macOS/Linux 一套命令,学习成本低
- 并行设备协调:多代理工作树共享设备访问权限,避免相互抢占模拟器
三、快速安装
环境要求
- Node.js ≥ 22.12(CLI 核心运行时)
- Node.js ≥ 24(Web 自动化)
- 目标平台需各自工具链(如 iOS 需 Xcode 和模拟器,Android 需 ADB)
安装
npm install -g agent-device@latest
# 验证安装
agent-device doctor
# 查看帮助
agent-device help workflow
⚠️
agent-device doctor须在交付给代理之前由人类先跑一遍,确认设备连接正常。
四、核心用法
4.1 CLI 基础操作
# 启动一个 session,打开 iOS 模拟器上的 Contacts 应用
agent-device open Contacts --platform ios
# 读取当前屏幕快照(输出 accessibility tree)
agent-device snapshot -i
# 示例输出:
# @e2 [button] "Add"
# 等待 UI 稳定后,按 ref 按下按钮
agent-device press @e2 --settle
# diff 输出:
# + @e7 [text-field] "First name"
# 填写文本字段
agent-device fill @e7 "Ada" --settle
# diff 输出:
# - @e7 [text-field] "First name"
# + @e14 [text-field] "Ada"
# = @e15 [text-field] "Last name"
# 截图并关闭 session
agent-device screenshot ./contact-form.png
agent-device close
⚠️ ref 只在最新输出中有效:
--settle后使用 diff 中的 ref;如需重新获取 ref,再跑一次snapshot。
4.2 MCP Server 接入
在 Claude Code / Cursor 等支持 MCP 的代理中配置:
{
"mcpServers": {
"agent-device": {
"command": "agent-device",
"args": ["mcp"]
}
}
}
代理通过 stdio 连接 MCP Server,所有 CLI 命令以结构化工具形式暴露给代理。
⚠️ MCP Server 和 CLI 使用相同的执行路径,二者完全等价,选择哪种取决于代理的连接方式。
4.3 Node.js API
import { createAgentDeviceClient } from 'agent-device';
const client = createAgentDeviceClient({ session: 'qa-run' });
try {
// 打开 iOS 设置应用
await client.apps.open({ app: 'com.apple.Preferences', platform: 'ios' });
// 抓取快照
const snapshot = await client.capture.snapshot({ interactiveOnly: true });
// 找到第一个按钮并点击
const button = snapshot.nodes.find((node) => node.role === 'button');
if (button) await client.interactions.press({ ref: button.ref });
} finally {
await client.sessions.close();
}
4.4 典型代理任务示例
安装 CLI 后,以下自然语言提示即可端到端运行:
# "Implement the onboarding screen, run it on the iOS simulator
# and Android emulator, and attach screenshots."
# → 代理自动打开两个模拟器,运行代码,截图,输出
# "Reproduce this crash and capture the logs that lead up to it."
# → 代理导航到 crash 场景,保存日志片段
# "Verify this pull request on a physical device and attach reviewable evidence."
# → 代理 checkout PR,在真机运行,截图作为 review 证据
4.5 CI/CD 集成
# 保存工作流为 .ad 脚本(本地 replay)
agent-device replay ./my-workflow.ad
# 或导出为 Maestro YAML(与 Maestro 测试框架互通)
# 见:https://github.com/callstackincubator/eas-agent-device
EAS Workflow 模板(Expo 项目示例):
# ref: https://github.com/callstackincubator/eas-agent-device
五、核心功能一览
| 功能 | 说明 |
|---|---|
| Inspect | 通过 accessibility snapshot / refs / selectors 读取 App 状态 |
| Act | tap / press / fill / scroll / gesture / wait / assert / alert 处理 |
| Diagnose | screenshot / video / logs / traces / network / performance / crash / React profile |
| Replay | 保存为 .ad 脚本本地 replay 或导出 Maestro YAML |
| Device Cloud | 支持 BrowserStack / AWS Device Farm / TestMu AI / Limrun |
| Multi-agent | 基于 git worktree 的会话隔离 + 设备锁避免并行代理冲突 |
六、典型适用场景
- AI 编码代理开发移动 App:Claude Code / Cursor 写完 UI 代码,agent-device 自动验证截图
- PR 自动验证:在 CI 中 replay 代理保存的工作流,截图+日志作为 merge 条件
- React Native 性能分析:代理抓取 React DevTools profile,排查不必要渲染
- 跨平台冒烟测试:iOS + Android 同一套
.ad脚本,在双平台并行跑 - 设备云并行测试:BrowserStack 或 AWS Device Farm 上多设备同时跑回归
- 移动端 E2E 测试维护:替代维护成本高的 Detox/Appium 脚本,用自然语言让代理自己写测试
七、坑与注意
- Node.js 版本硬门槛:CLI 需要 ≥22.12,Web 自动化需要 ≥24,老版本 Node 无法运行(无 fallback)
- ref 的时效性:每次
--settle后必须用 diff 中的新 ref,旧 ref 失效,容易写出无效脚本 - Accessibility 依赖:snapshot 依赖 App 的 accessibility tree,无标签/无 test ID 的 App 数据质量差;建议开发阶段加上
testID - HarmonyOS / Vega OS 功能子集:这两个平台仅支持部分命令,需
agent-device capabilities --platform <platform>先行确认 - 物理 iOS 设备需要 Xcode:HC 框架依赖 Xcode,不只是命令行工具链
- MCP Server 不支持多会话并发:一个 MCP 连接对应一个 session,需要并发时走 CLI 多进程
- .ad 脚本非标准格式:导出 Maestro YAML 可获得更好的生态兼容,但某些复杂手势链在导出会有限制
八、与同类对比
| 工具 | 定位 | AI 代理原生支持 | 平台覆盖 | MCP 支持 | 存档/证据 |
|---|---|---|---|---|---|
| agent-device | AI 代理验证运行时 | ✅ 原生 | iOS/Android/HarmonyOS/TV/Web/macOS/Linux | ✅ stdio | ✅ screenshot+logs |
| Appium | 通用移动自动化 | ❌ | iOS/Android | ❌ | ❌ |
| Detox | React Native E2E | ❌ | iOS/Android | ❌ | ⚠️ 截图 |
| Maestro | 简单移动测试 | ⚠️ Studio 辅助 | iOS/Android | ❌ | ⚠️ |
| agent-browser(Vercel) | 浏览器 AI 自动化 | ✅ | Web | ✅ | ✅ |
agent-device 的差异化在于把 AI 代理作为一等公民:不只是测试工具,而是代理"看 App → 改代码 → 再看 App"闭环的核心基础设施。
九、一句话推荐结论
如果你的 AI 编码代理需要开发、测试或验证移动应用,agent-device 是目前对代理最友好的运行时基础设施,闭眼接入 Claude Code / Cursor + MCP,显著提升代理在移动端的验证能力。