simulator-use vs agent-device
Pick agent-device if your agent works across platforms (Android, HarmonyOS, TV, macOS, Linux, web) or several agents share one machine: it scopes sessions to each git worktree and replays saved .ad scripts in CI. (agent-device README)
Pick simulator-use to build and test the Xcode project with the same tool that drives the screen. (simulator-use README, agent-device docs: commands (app install))
Measured on one Mac: simulator-use read 194 tokens per sign-in, agent-device 664 (est.); simulator-use signed in in 3.50 s, agent-device in 6.85 s.
Measured side by side
From the one-Mac benchmark of November 1, 2026: the same app and iPhone 17 Pro Simulator, one tool at a time, each through its own MCP server. Times are medians; tokens are estimates (characters / 4).
| agent-device | simulator-use | |
|---|---|---|
| Signing in, step by step | 6.85 s | 3.50 s |
| Tokens read per sign-in (est.) | 664 | 194 |
| Sign-ins completed | 10 of 10 | 10 of 10 |
| Signing in, batched | 5.99 s | 2.87 s |
| Tokens read, batched (est.) | 327 | 179 |
| Batched sign-ins completed | 10 of 10 | 10 of 10 |
| Reading the screen (median) | 0.05 s | 0.19 s |
| Tapping a button (median) | 0.88 s | 0.68 s |
| Typing into a field (median) | 2.48 s | 1.14 s |
| Tool list in context (est.) | 47,406 | 2,443 |
| Setup its docs ask for | 34.72 s | 0.12 s |
agent-device 0.21.35, simulator-use 0.15.0. Every call is in bench/results/2026-11-01.
What each does
From each tool's own README, license and docs, read on October 31, 2026.
| agent-device | simulator-use | |
|---|---|---|
| License | MIT (agent-device LICENSE) | MIT (simulator-use LICENSE) |
| Builds the app | No; it installs an app built elsewhere (agent-device docs: commands (app install)) | Yes: builds the Xcode project, installs and launches it (app_run) (simulator-use README) |
| Runs tests | Replays its own .ad scripts (agent-device README) | XCTest and XCUITest, case by case (tests_run) (simulator-use README) |
| Screen as text | Snapshots with refs, and settled diffs after actions (agent-device README) | One line per element: kind, label, #id, state and position (simulator-use README) |
| How it taps | By ref, then id, label or role selector; coordinates last (agent-device's MCP instructions, as the benchmark recorded them) | By #id or label, or at @x,y (simulator-use README) |
| Cloud option | A remote proxy, or device clouds: BrowserStack, AWS Device Farm, TestMu AI, Limrun (agent-device README) | A NoMac cloud iPhone (simulator-use cloud start), billed per minute (simulator-use README) |
| Needs besides Xcode | Node 22.12. A local accessibility bridge for Simulator snapshots and XCTest for iOS interactions (agent-device README) | Node 20. Its engine is built on AXe's frameworks, which it bundles (simulator-use README) |
Where simulator-use is better
- Builds the Xcode project, installs and launches it, and runs its XCTest and XCUITest cases. (simulator-use README)
- Signing in, step by step: 3.50 s against agent-device's 6.85 s.
- Tokens read per sign-in (est.): 194 tokens against agent-device's 664 tokens.
- Signing in, batched: 2.87 s against agent-device's 5.99 s.
- Tokens per screen read (est.): 72 tokens against agent-device's 131 tokens.
- Tapping a button: 0.68 s against agent-device's 0.88 s.
- Typing into a field: 1.14 s against agent-device's 2.48 s.
- Tool list in the agent's context (est.): 2,443 tokens against agent-device's 47,406 tokens.
- Setup its docs ask for: 0.12 s against agent-device's 34.72 s.
A measured difference is listed when it is 5% or more.
Switching
Add simulator-use to Claude Code with one line (other clients: install):
The calls each made in the benchmark, step for step:
| agent-device | simulator-use | |
|---|---|---|
| Setup | open {"app":"dev.simtap.demo","platform":"ios","udid":"<udid>","foreground":true} | device_use {"device":"<udid>"} |
| Read the screen | snapshot {"interactiveOnly":true} | ui_look {} |
| Tap a button | press {"target":{"kind":"selector","selector":"id="signIn""},"settle":true} | ui_act {"steps":["tap #signIn"]} |
| Type into a field | fill {"target":{"kind":"selector","selector":"id="email""},"text":"gary@example.com","settle":true} | ui_act {"steps":["fill #email gary@example.com"]} |
| Several steps in one call | batch {"steps":[{"command":"fill","input":{"target":{"kind":"selector","selector":"id="email""},"text":"gary@example.com"}},{"command":"fill","input":{"target":{"kind":"selector","selector":"id="password""},"text":"secret1"}},{"command":"press","input":{"target":{"kind":"selector","selector":"id="signIn""},"settle":true}}]} | ui_act {"steps":["fill #email gary@example.com","fill #password secret1","tap #signIn"]} |
Sources
Read on October 31, 2026. The measured numbers: benchmarks and the raw results.