Agents that actually see the emulator screen — boot, install, drive, and verify what really rendered.
curl.
The user found each one broken the moment they opened the app.
The failure is always at the render / interaction layer — and no agent had ever seen the screen. That gap is the entire reason this bundle exists.
Emulator lifecycle · install / launch · screenshot ·
ui_dump · find · tap · type_text · swipe · wait_for ·
logcat · doctor · create_avd
Ask a vision model where a button is and it will confidently tell you. It will also be wrong in a way Android will never report.
Coordinates always come from ui_dump.
Raw-coordinate tapping exists as a separate tap_xy that always returns a warning.
| Source | Center |
|---|---|
| uiautomator | (941, 168) |
| vision model | (880, 75) |
| delta | −61 px, −93 px |
Android raises no error. The tap hits nothing — or a neighbouring field. One recorded run typed a server URL into the API-key field and reported success.
clickable=false, checkable=false, checked=false in every
state. Nothing marks which filter is active — a screen-reader user cannot tell.Neither was caught by the existing tests. It also retracted its own false positive after re-testing under controlled pacing.
Three concurrent boots of the same AVD used to kill all three — an AVD's disk state cannot be opened twice.
stop_emulator refuses to kill an emulator it does not ownptrace_scope workaround that host needs to boot at allRun doctor first — it reports every host problem at
once, each with its fix, instead of failing one at a time.
Every capability was proven against a live emulator — not only unit-tested.
doctor.amplifier bundle add \ git+https://github.com/microsoft/amplifier-bundle-android-tester@main#subdirectory=behaviors/android-tester.yaml \ --app
Then just ask an agent to test your app. It will boot the emulator, install the APK, drive the UI, and tell you what is actually broken.