mcpField
A
agent-device

agent-device

本地服务
github.com/callstack开发工具5.2k今天更新

关于 agent-device

agent-device 为编码 Agent 提供跨移动端、电视、桌面和 Web 的应用检查、操作、调试与验证能力。它通过 CLI、MCP 服务和类型化 Node.js API 提供同一运行时,并支持重放脚本与审查证据。

主要功能

  1. 01读取无障碍快照并定位界面元素
  2. 02操作界面并断言应用状态
  3. 03采集截图、日志和性能数据
  4. 04保存并重放自动化流程
  5. 05协调并行任务的设备使用

适用场景

  1. 01验证 iOS 或 Android 应用改动
  2. 02复现崩溃并收集诊断信息
  3. 03将应用流程录制后用于 CI
  4. 04检查 React Native 渲染性能

MCP 相关

运行 `agent-device mcp` 可启动 stdio MCP 服务,将 CLI 命令作为结构化工具提供给 MCP 客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"callstack-agent-device": {
"command": "npx",
"args": [
"-y",
"agent-device"
]
}
}
}
启动命令npx -y agent-device

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmagent-device0.21.33

工具

59

收录的工具列表 · 更新于 1 天前

参数类型必填说明
udidstring否Apple 设备或模拟器 UDID;有多个设备同名时,用它指定唯一设备。
debugboolean否启用调试诊断。
runIdstring否租约运行标识符。
devicestring否设备名称选择器(UDID 应放在 udid 中,序列号应放在 serial 中)。
serialstring否Android、HarmonyOS 或 Vega VVD 序列号选择器。
targetenum否对于没有 UI target 字段的命令,deviceTarget 的别名。交互命令将 target 保留为 UI 元素。mobile | tv | desktop
tenantstring否远程租户标识符。
leaseIdstring否现有租约标识符。
sessionstring否Agent 设备会话名称。
noRecordboolean否不记录此操作。
platformenum否用于解析设备的平台选择器。apple | android | harmonyos | vega | linux | web | ios | macos
includeCostboolean否在 structuredContent 中包含每条命令的 Agent 成本(cost.wallClockMs, …)。默认为关闭;默认响应结构不变。
deviceTargetenum否设备目标格式。映射到 CLI 的 --target 标志。mobile | tv | desktop
responseLevelenum否响应详细程度:节省令牌的摘要 / 默认(当前)/ 完整。默认为默认;默认响应结构不变。digest | default | full
mcpOutputFormatenum否MCP 文本内容格式。默认为经过优化、适合 Agent 的文本;使用 json 获取 JSON 文本。结构化内容始终单独返回。optimized | json
androidDeviceAllowliststring否用于解析设备的 Android 序列号允许列表。

详细介绍

agent-device:面向 AI 编码 Agent 的移动应用自动化与验证

agent-device

npm version CI License: MIT Glama MCP server

**面向 AI 编码 Agent 的移动应用自动化与验证。**通过命令行、内置 MCP 服务或类型化 Node.js API,为编码 Agent 提供实时应用反馈循环。

让编码 Agent 在运行中的应用里验证其修改。agent-device 让 Agent 能够检查、控制、调试和验证 iOS、Android 与 HarmonyOS 应用(模拟器、仿真器和实体设备),以及 tvOS、Android TV、Fire TV(Fire OS)、Amazon Vega OS TV(Vega Virtual Device)、Web、macOS 和 Linux 应用。Agent 可读取节省 Token 的无障碍快照,而不是只根据屏幕截图进行推理;还可通过 refs 和选择器执行操作,并保存证据供审核。它还可协调并行 Agent 工作树之间的设备访问,并连接远程设备云。

它兼容 Claude Code、Codex、Cursor、Windsurf、Cline、Goose,以及任何能够运行命令行或通过 MCP 连接的 Agent;也可作为你使用 AI SDK 或 Eve 构建的 Agent 的运行时。Expensify、Shopify 和其他团队的开发者都在使用它来验证应用。

agent-device 为以下产品提供移动端自动化能力: README 配图 e2e 和 README 配图 T3 Code。

快速开始

安装命令行工具并检查设置。它要求 Node.js 22.12 或更高版本;Web 自动化要求 Node.js 24 或更高版本。有关目标平台要求,请参阅安装。

npm install -g agent-device@latest
agent-device doctor
agent-device help workflow

在将命令行工具交给 Agent 之前,请先自行运行 doctor。help workflow 会链接到调试、回放和性能分析指南。

从命令行驱动应用

在内置的 iOS Contacts 应用中添加联系人:

# Start a session.
agent-device open Contacts --platform ios

# Inspect the screen. The example below shows the output; refs vary.
agent-device snapshot -i
# @e2 [button] "Add"

# Use the ref and wait for the UI to settle.
agent-device press @e2 --settle
# The diff includes:
# + @e7 [text-field] "First name"

agent-device fill @e7 "Ada" --settle
# The next diff shows changed values and current refs:
# - @e7 [text-field] "First name"
# + @e14 [text-field] "Ada"
# = @e15 [text-field] "Last name"

# Capture evidence and close the session.
agent-device screenshot ./contact-form.png
agent-device close

refs 仅在最新输出中有效:运行 --settle 命令后,请使用其差异中的 refs;只有当差异未包含所需内容时,才获取新快照。快照来自应用的无障碍树,因此清晰的标签、角色和测试 ID 能让 Agent 运行更可靠;请将屏幕截图和视频用作证据,或在无障碍数据质量较差时使用。

agent-device 演示:Codex 使用 agent-device 根据简单提示在 iOS Contacts 应用中创建新联系人

将 MCP 工具添加到你的 Agent

agent-device mcp 会启动官方 stdio MCP 服务,通过与 CLI 相同的执行路径,将已安装的命令作为结构化工具公开:

{
  "mcpServers": {
    "agent-device": {
      "command": "agent-device",
      "args": ["mcp"]
    }
  }
}

有关各客户端的设置,以及何时优先使用纯 CLI 而非 MCP,请参阅 AI Agent 设置。

从 Node.js 编写脚本

createAgentDeviceClient() 让 Node.js 代码能够以类型化方式访问相同的命令,可将其作为模型工具用于你自己的 Agent,也可从编排代码中调用:

import { createAgentDeviceClient } from 'agent-device';

const client = createAgentDeviceClient({ session: 'qa-run' });
try {
  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();
}

请参阅 Node.js API、可运行示例,以及 AI SDK 和 Eve 集成指南。

Agent 可以做什么

  • 检查应用状态:通过无障碍快照、引用和选择器检查应用状态,并分析 React Native 渲染,找出交互缓慢的原因。
  • 操作可见的 UI:点击或按下元素、填写字段、滚动、执行手势、等待、断言状态并处理提醒。
  • 诊断故障:使用屏幕截图、视频、日志、跟踪记录、网络数据、性能样本、崩溃详情和 React 分析数据。
  • 重复工作流:将有效步骤保存为 .ad 脚本,以供本地使用或在 CI 中运行。需要时可导出严格格式的 Maestro YAML。

请参阅命令,了解各目标支持的命令和证据类型。

Agent 开发循环示意图:人类分配任务,Agent 编写并审查代码,agent-device 验证移动应用,拉取请求附上证据,漏洞或性能问题则会促成修复

可以让你的 Agent 做什么

安装 CLI 后,以下提示词可以端到端地完成任务:

  • “实现引导界面,在 iOS 模拟器和 Android 模拟器上运行,并附上屏幕截图。”
  • “重现这个崩溃,并捕获导致崩溃的日志。”
  • “检查此次更改是否造成了不必要的 React Native 重渲染。”
  • “探索一次结账流程,将其保存为回放脚本,并在 CI 中运行。”
  • “在实体设备上验证此拉取请求,并附上可供审查的证据。”

后续步骤

在哪里运行 agent-device

同一套会话和证据模式适用于每个步骤:Agent 探索应用、采集证据、保存回放,在 CI 中运行,然后转到远程设备上执行。

路径适用场景从这里开始
本地在模拟器、仿真器、实体设备、macOS 和 Linux 上尝试命令并调试应用。按照快速入门操作。
CI/CD使用回放脚本和采集的产物,自动验证拉取请求和合并。试试 EAS 工作流模板。
云端 / 远程Linux 运行器、托管设备和远程作业。设置远程代理,连接设备云(BrowserStack、AWS Device Farm、TestMu AI、Limrun),或联系 Callstack 以获取团队 QA 支持。

工作原理

agent-device 在会话中保存设备状态。它使用本地无障碍桥接来获取 iOS Simulator 快照,并使用 XCTest 支持 iOS 交互、实体 iOS 设备和 tvOS;在 Android、Android TV 和 Fire OS 上使用 ADB 和快照辅助工具;在 HarmonyOS 上使用 HDC 和 ArkUI uitest;在 Vega Virtual Device 上使用 Vega CLI/VDA;在 macOS 上使用本地辅助工具,并通过无障碍树支持 Electron 和其他基于 Chromium 的应用;在 Linux 上使用 AT-SPI。

不同目标的支持深度有所不同。某些后端(例如 HarmonyOS 和 Vega OS)仅支持部分命令;运行 agent-device capabilities --platform <platform> 查看目标支持哪些功能。功能支持矩阵展示了各目标、桌面、Web 和云服务提供商支持的命令。

会话限定于调用方的 Git 工作树,主机本地的设备占用声明可防止并行 Agent 接管彼此的模拟器和仿真器。运行 agent-device device status 可在无需守护进程的情况下检查设备归属;运行 agent-device device release --stale 可释放所有者已确定不再运行的占用声明。同样的命令也可管理 BrowserStack、AWS Device Farm、TestMu AI 和 Limrun 上的托管设备。

agent-device 将 Vercel 的 agent-browser 中的“检查-操作-验证”流程用于移动、TV 和桌面应用。基础的 --platform web 支持会在同一会话和回放系统中运行 agent-browser。

常见问题

什么是 agent-device?

agent-device 是一个命令行工具和 MCP 服务,可让 AI 编码 Agent 检查、控制和验证移动应用,并保存证据以供审核。它支持 iOS、Android、HarmonyOS、TV、Web、macOS 和 Linux。

是否有用于自动化移动应用的 MCP 服务?

有。agent-device mcp 会启动官方 stdio MCP 服务。上方的快速入门提供了客户端配置,AI Agent 设置指南则介绍了各客户端的具体配置。

它能用于 React Native、Expo、Flutter 和原生应用吗?

可以。agent-device 支持原生 iOS 和 Android 应用,也支持在受支持目标上运行的 React Native、Expo 和 Flutter 应用。不同目标支持的命令和证据有所不同。

它与移动 MCP 服务有什么区别?

MCP 服务是 CLI 和类型化 Node.js API 所使用的同一运行时的一个入口。会话、设备归属、选择器、证据、回放、CI 工作流和云端路由在这三种方式中保持一致。

我可以基于 agent-device 构建自己的 Agent 或 QA 产品吗?

可以。类型化 Node.js 客户端是同一运行时的公共接口,因此你构建的 Agent 能继承上述所有功能。可从 Node.js API、AI SDK 或 Eve 指南开始。

它与 Appium、Detox 或 Maestro 有什么区别?

使用 agent-device 时,Agent 会读取应用状态,并在运行时选择每条命令。团队使用 Appium、Detox 和 Maestro 编写和维护测试套件。agent-device 可以与它们配合使用:将运行记录保存为 .ad 脚本,或导出为严格格式的 Maestro YAML。

agent-device 能在 CI 中运行吗?

可以。将运行记录为 .ad 脚本,在 CI 中回放,并将屏幕截图和日志作为构建产物保留;EAS 工作流模板提供了一个可运行的示例。

文章和视频

文章
视频

谁在使用 agent-device?

Callstack、JPMorgan Chase、Expensify、Shopify、Kindred、Total Wine & More、LegendList、HerLyfe、App & Flow 等团队和开发者都在使用 agent-device。

文档

贡献

请参阅 CONTRIBUTING.md。

由 Callstack 打造

agent-device 是基于 MIT 许可证开源的。访问 agent-device.dev,或联系 Callstack。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。