mcpField
A
Agent Device

Agent Device

本地服务
github.com/callstackincubatorAI 与智能体5.2k1 天前更新

关于 Agent Device

Agent Device 为编码 Agent 提供应用自动化能力,可通过 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": {
"agent-device": {
"command": "npx",
"args": [
"-y",
"agent-device"
]
}
}
}
启动命令npx -y agent-device

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

安装包
npmagent-device0.16.9

工具

57

收录的工具列表 · 更新于 3 周前

参数类型必填说明
sessionstring否Agent 设备会话名称。
platformenum否用于解析设备的平台选择器。apple | android | harmonyos | vega | linux | web | ios | macos
deviceTargetenum否设备目标格式。映射到 CLI 的 --target 标志。mobile | tv | desktop
targetenum否对于没有 UI target 字段的命令,deviceTarget 的别名。交互命令将 target 保留为 UI 元素。mobile | tv | desktop
devicestring否设备名称选择器。
udidstring否iOS 设备 UDID 选择器。
serialstring否Android 设备或 Vega VVD 序列号。
iosSimulatorDeviceSetstring否用于设备解析的 iOS 模拟器设备集路径。
iosXctestrunFilestring否外部构建的 iOS XCTest 运行器 .xctestrun 工件路径。
iosXctestDerivedDataPathstring否外部 iOS XCTest 运行器执行所用的派生数据路径。
iosXctestEnvDirstring否用于 iOS XCTest 运行器环境覆盖的可写目录。
androidDeviceAllowliststring否用于解析设备的 Android 序列号允许列表。
daemonBaseUrlstring否远程守护进程的基础 URL。
daemonAuthTokenstring否远程守护进程的身份验证令牌。
tenantstring否远程租户标识符。
runIdstring否租约运行标识符。
leaseIdstring否现有租约标识符。
cwdstring否命令执行的工作目录。
debugboolean否启用调试诊断。
actionenum否get | accept | dismiss | wait
timeoutMsinteger否
noRecordboolean否不记录此操作。
stateDirstring否Agent 设备状态目录。
mcpOutputFormatenum否MCP 文本内容格式。默认为经过优化、适合 Agent 的文本;使用 json 获取 JSON 文本。结构化内容始终单独返回。optimized | json
includeCostboolean否在 structuredContent 中包含每条命令的 Agent 成本(cost.wallClockMs, …)。默认为关闭;默认响应结构不变。
responseLevelenum否响应详细程度:节省令牌的摘要 / 默认(当前)/ 完整。默认为默认;默认响应结构不变。digest | default | full

详细介绍

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 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。