simulator-use vs AXe
Pick AXe for a command line with no MCP server: shell scripts, CI jobs, or agents that run commands. simulator-use is built on AXe's frameworks. (AXe docs, simulator-use README)
Pick simulator-use for an MCP server on the same frameworks that also builds and tests the app and reads the screen as one line per element. (simulator-use README)
Measured on one Mac: simulator-use read 194 tokens per sign-in, AXe 110,319 (est.); simulator-use signed in in 3.50 s, AXe in 9.21 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 (AXe through its command line). Times are medians; tokens are estimates (characters / 4).
| AXe | simulator-use | |
|---|---|---|
| Signing in, step by step | 9.21 s | 3.50 s |
| Tokens read per sign-in (est.) | 110,319 | 194 |
| Sign-ins completed | 10 of 10 | 10 of 10 |
| Signing in, batched | 4.63 s | 2.87 s |
| Tokens read, batched (est.) | 110,273 | 179 |
| Batched sign-ins completed | 8 of 10 | 10 of 10 |
| Reading the screen (median) | 0.86 s | 0.19 s |
| Tapping a button (median) | 1.72 s | 0.68 s |
| Typing into a field (median) | 1.98 s | 1.14 s |
| Tool list in context (est.) | none (CLI) | 2,443 |
| Setup its docs ask for | none | 0.12 s |
AXe 1.8.0, simulator-use 0.15.0. Every call is in bench/results/2026-11-01.
With Device Hub open
AXe's README says:
"Xcode 27 simulator automation uses Device Hub; Simulator.app is not required." (AXe README)
So AXe ran three times on the benchmark's Mac: with the Simulator headless like every tool, again with Device Hub open, and once more with Device Hub closed. The ranking uses the first run.
| Condition | Taps that reached the app | Typings shown | Sign-ins completed | Sign-in |
|---|---|---|---|---|
| Headless, the ranked run | 20 of 20 | 10 of 10 | 10 of 10 | 9.21 s |
| Device Hub open | 6 of 20 | 3 of 10 | 0 of 10 | none |
| Headless again, last of all | 20 of 20 | 10 of 10 | 10 of 10 | 5.91 s |
With Device Hub open, every axe tap still answered that it was done; the counts are what the app's own log saw. simulator-use is built on AXe's frameworks: its engine keeps one session open per Simulator instead of starting AXe for each call.
What each does
From each tool's own README, license and docs, read on October 31, 2026.
| AXe | simulator-use | |
|---|---|---|
| License | MIT (AXe LICENSE) | MIT (simulator-use LICENSE) |
| Builds the app | No (AXe docs) | Yes: builds the Xcode project, installs and launches it (app_run) (simulator-use README) |
| Runs tests | No (AXe docs) | XCTest and XCUITest, case by case (tests_run) (simulator-use README) |
| Screen as text | The accessibility tree as JSON (describe-ui) (AXe docs) | One line per element: kind, label, #id, state and position (simulator-use README) |
| How it taps | By accessibility id or label, or at coordinates (AXe docs, AXe README) | By #id or label, or at @x,y (simulator-use README) |
| Cloud option | None in its docs (AXe docs) | A NoMac cloud iPhone (simulator-use cloud start), billed per minute (simulator-use README) |
| Needs besides Xcode | macOS 14 or later. "Xcode 27 simulator automation uses Device Hub; Simulator.app is not required." (AXe docs, AXe README) | Node 20. Its engine is built on AXe's frameworks, which it bundles (simulator-use README) |
Where simulator-use is better
- An MCP server, building and testing the Xcode project, on AXe's own frameworks. (simulator-use README)
- Signing in, step by step: 3.50 s against AXe's 9.21 s.
- Tokens read per sign-in (est.): 194 tokens against AXe's 110,319 tokens.
- Signing in, batched: 2.87 s against AXe's 4.63 s.
- Reading the screen: 0.19 s against AXe's 0.86 s.
- Tokens per screen read (est.): 72 tokens against AXe's 44,869 tokens.
- Tapping a button: 0.68 s against AXe's 1.72 s.
- Typing into a field: 1.14 s against AXe's 1.98 s.
- A tap's answer held the new status text in 20 of 20 taps, AXe's in 0 of 20.
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:
| AXe | simulator-use | |
|---|---|---|
| Setup | none | device_use {"device":"<udid>"} |
| Read the screen | axe describe-ui --udid <udid> | ui_look {} |
| Tap a button | axe tap --id signIn --udid <udid> | ui_act {"steps":["tap #signIn"]} |
| Type into a field | axe tap --id email --udid <udid>axe type gary@example.com --udid <udid> | ui_act {"steps":["fill #email gary@example.com"]} |
| Several steps in one call | axe batch --udid <udid> --step "tap --id email" --step "type 'gary@example.com'" --step "tap --id password" --step "type 'secret1'" --step "tap --id signIn" | 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.