looktap v0.6.1

Project

Benchmark

Every agent mobile tool we could run on one Mac was given the same 12 steps in the Settings app, 10 runs each, on an iPhone simulator and an Android emulator: looktap (CLI and MCP), mobile-mcp, Maestro MCP, Appium MCP, raw Appium, ios-simulator-mcp, MobileBuildMCP, raw idb and raw adb. A neutral checker decided whether each step worked. These are the totals over the steps every tool can do:

Itemlooktap CLIlooktap MCPNext best for an agentOthers
Agent time (iOS · Android)¹21 s · 28 s25 s · 37 s30 s Maestro MCP · 49 s Appium MCP36–63 s
Tool calls (iOS · Android)8 · 128 · 129 · 11 Maestro MCP10–27
Text returned (iOS · Android)747 B · 1.2 KB3.2 KB · 7.9 KB17 KB · 14 KB Maestro MCP17–154 KB
Steps passed100% of what it can do100%87–100%
Setup before the first commandunder 1 sunder 1 s0.2–29 s

¹ The device's reaction time plus 2 s per tool call for the model's round trip.

On real phones (iPhone 14 Pro and Samsung Galaxy A06 over USB, looktap 0.4.0, all 12 steps), the looktap CLI again had the lowest agent time (87 s and 38 s, against 104–114 s and 45–89 s) and returned the least text (1.7 KB and 1.0 KB, against 8.9–191 KB). Four of the iOS tools can't drive a real iPhone at all: ios-simulator-mcp, MobileBuildMCP, idb and Maestro.

Where looktap loses:

Method, every device's tables and what else they show are in BENCHMARK.md.

Where Appium is still the better choice: it plugs into existing WebDriver test suites and CI grids, and supports many more platforms. looktap's tests are flow files of plain commands: good for smoke tests and agent-written flows, not a replacement for a large suite in code.

The full benchmark: Benchmark: looktap and every other agent mobile tool

Measured on one Mac (Apple M3 Pro, macOS 26.5.2): on an iPhone simulator and an Android emulator on 2026-10-16 (looktap 0.2.1), and on two real phones over USB, a Samsung Galaxy A06 on 2026-10-17 and an iPhone 14 Pro on 2026-10-18 (looktap 0.4.0). Every tool did the same steps in the same system app, 10 runs each. A neutral checker, not the tool, decided whether each step worked.

The full results for each platform, step by step, with p90s, calls, bytes and notes, are in separate reports:

The tools

ToolVersionPlatformsHow it was driven
looktap, CLI0.2.1; 0.4.0 on the phonesiOS, Androidone shell command per step, as an agent runs it
looktap, MCP0.2.1; 0.4.0 on the phonesiOS, AndroidMCP over stdio (looktap mcp)
mobile-mcp1.0.11iOS, AndroidMCP over stdio
Maestro MCPMaestro 2.11.0iOS, AndroidMCP over stdio (maestro mcp), steps as inline flows
Appium MCP1.97.1iOS, AndroidMCP over stdio
Appium3.5.2 (xcuitest 12.1.0, UiAutomator2 8.1.0)iOS, AndroidW3C HTTP, the same install Appium MCP uses
ios-simulator-mcp2.1.0iOSMCP over stdio
MobileBuildMCP2.7.1iOSMCP over stdio, simulator and ui-automation workflows on
idbfb-idb 1.7.3, idb-companion 1.7.3iOSthe CLI, the raw baseline under ios-simulator-mcp
adbplatform-tools 36.0.0Androiduiautomator dump + input, the raw baseline

On a real iPhone, four of them can't run: ios-simulator-mcp, MobileBuildMCP and idb drive simulators only, and Maestro doesn't list the phone (its real-iPhone driver uses bundle IDs registered to Maestro's own team, so no other team can sign it). mobile-mcp reached the iPhone the way its wiki gives for real devices (go-ios and WebDriverAgent), because its own agent needs a paid team's wildcard App ID.

Results

Devices: iPhone 14 simulator (iOS 26.0) and Pixel 9a emulator (Android 16).

App: the system Settings app (no sign-in, nothing real is changed).

Steps: launch app, read the screen, tap by label, back, tap x,y, swipe, scroll to a label, fill a field, screenshot, home, open a URL, terminate the app.

The tables below total the steps every tool on that platform can do, so the totals compare like with like: 8 on iOS, 11 on Android.

iOS (8 steps: launch, read, tap by label, back, swipe, scroll to label, fill, screenshot)

ToolReaction timeAgent timeCallsText returnedScreenshotPassedSetupTool definitionsRAM peak / mean
looktap CLI5.2 s21 s8747 Bpath to a file100/1000.5 snone117 / 40 MB
looktap MCP8.5 s25 s83.2 KB74 KB inline100/1000.5 s9.7 KB148 / 76 MB
Maestro MCP12 s30 s917 KB236 KB inline120/12018 s9.7 KB650 / 287 MB
Appium MCP16 s36 s10102 KB268 KB inline120/12029 s42 KB657 / 275 MB
Appium17 s37 s1041 KB218 KB inline120/12019 snone641 / 239 MB
mobile-mcp11 s39 s1424 KB41 KB inline120/1207.6 s29 KB226 / 86 MB
ios-simulator-mcp4.5 s44 s2017 KBpath to a file106/1101.5 s11 KB234 / 65 MB
MobileBuildMCP24 s50 s1336 KB43 KB inline100/1003.4 s224 KB327 / 131 MB
idb5.4 s59 s2773 KBpath to a file104/1200.2 snone55 / 17 MB

Android (11 steps: all but terminate)

ToolReaction timeAgent timeCallsText returnedScreenshotPassedSetupTool definitionsRAM peak / meanOn the device
looktap CLI4.4 s28 s121.2 KBpath to a file110/1100.9 snone93 / 21 MB35 MB
looktap MCP13 s37 s127.9 KB104 KB inline110/1100.7 s9.7 KB102 / 47 MB35 MB
Appium MCP19 s49 s15126 KB230 KB inline109/12021 s42 KB228 / 95 MB70 MB
Appium21 s51 s1552 KB225 KB inline112/12017 snone168 / 69 MB71 MB
Maestro MCP38 s60 s1114 KB186 KB inline117/12022 s9.7 KB1569 / 225 MB72 MB
mobile-mcp24 s62 s1951 KB39 KB inline120/12011 s29 KB1361 / 96 MBnot detected
adb29 s63 s17154 KBpath to a file119/1206.3 snone33 / 12 MB37 MB

"Passed" counts every step the tool can do, terminate included. "On the device" is the peak RAM of the helpers a tool keeps inside the emulator.

Real phones

The same steps on real phones over USB, with looktap 0.4.0, whose home and stop do the two steps 0.2.1 couldn't. Every step a tool can do is in these totals.

iPhone 14 Pro (iOS 26.0), 12 steps. The oracle reads the phone's screen over the cable (the capture device QuickTime records from) with Apple's text recognition, so it shares nothing with the tools.

ToolReaction timeAgent timeCallsText returnedScreenshotPassedSetupTool definitionsRAM peak / mean
looktap CLI63 s87 s121.7 KBpath to a file120/1205.7 snone208 / 106 MB
mobile-mcp60 s104 s2236 KB542 KB inline120/12013 s29 KB372 / 249 MB
Appium62 s106 s2236 KB497 KB inline119/12012 snone374 / 220 MB
Appium MCP85 s113 s14101 KB502 KB inline119/12014 s42 KB552 / 327 MB
looktap MCP90 s114 s1214 KB308 KB inline120/1208.8 s10 KB280 / 199 MB

Samsung Galaxy A06 (Android 16, One UI), 12 steps. The oracle is dumpsys, as on the emulator.

ToolReaction timeAgent timeCallsText returnedScreenshotPassedSetupTool definitionsRAM peak / meanOn the device
looktap CLI12 s38 s131.0 KBpath to a file120/1201.4 snone114 / 62 MB155 MB
looktap MCP19 s45 s138.9 KB58 KB inline120/1201.1 s10 KB123 / 105 MB157 MB
Appium11 s51 s2050 KB164 KB inline120/1207.0 snone404 / 313 MB279 MB
Appium MCP23 s55 s16121 KB169 KB inline120/1208.7 s42 KB515 / 397 MB280 MB
adb24 s64 s20191 KBpath to a file120/1202.6 snone61 / 50 MB114 MB
Maestro MCP42 s66 s1216 KB132 KB inline120/12011 s9.7 KB1466 / 1094 MB297 MB
mobile-mcp29 s89 s30115 KB46 KB inline120/1204.7 s29 KB307 / 256 MBnot detected

What it shows

How it was measured, and how fair it is

Reproduce

# iOS: one booted simulator; Appium needs a WebDriverAgent built once (xcodebuild build-for-testing ... -derivedDataPath bench/out/wda)
BENCH_IOS_UDID=<udid> BENCH_APPIUM_HOME=<dir with appium + drivers> BENCH_WDA_DERIVED_DATA=$PWD/bench/out/wda \
  node bench/run.mjs ios 10
# Android: one emulator (BENCH_ANDROID_SERIAL, default emulator-5554)
BENCH_APPIUM_HOME=<dir with appium + drivers> node bench/run.mjs android 10
# A real iPhone over USB, unlocked, Auto-Lock off: WebDriverAgent built once for it and signed with your team
#   (xcodebuild build-for-testing -scheme WebDriverAgentRunner -destination id=<udid> -derivedDataPath bench/out/wda-device
#    -allowProvisioningUpdates DEVELOPMENT_TEAM=<team> PRODUCT_BUNDLE_IDENTIFIER=<id>), go-ios for mobile-mcp
BENCH_IOS_UDID=<udid> BENCH_TAG=device BENCH_APPIUM_HOME=<appium-mcp's install> BENCH_WDA_DERIVED_DATA=$PWD/bench/out/wda-device \
  BENCH_WDA_BUNDLE_ID=<id> BENCH_TEAM_ID=<team> BENCH_GO_IOS=<path to go-ios's ios> node bench/run.mjs ios 10
# A real Android phone over USB, unlocked
BENCH_ANDROID_SERIAL=<serial> BENCH_TAG=device node bench/run.mjs android 10
# Tables
node bench/report.mjs ios && node bench/report.mjs android && node bench/report.mjs ios-device && node bench/report.mjs android-device

The runner takes a third argument, a comma-separated list of tools (for example looktap,mobile-mcp). It also needs idb with idb-companion, Maestro, and Appium with the xcuitest and UiAutomator2 drivers; the MCP servers come through npx. A full run takes about 1.5 hours per platform.

Generated from README.md and BENCHMARK.md. Edit it there.