Recorded agent run (#93): look up the Matterhorn on Wikipedia Capture: 2026-11-04 02:09:09Z to 02:11:44Z (UTC), existing Hetzner host (CAX21, arm64), isolated test-run-capture phone. Recorded run (steps below): 2026-11-04 02:11:15Z to 02:11:44Z. Sandbox: Mobilebox cloud Android 14 phone (arm64, userdebug, 1080x2400, 420 dpi). Source script: verifier/capture-run.ts with the phone look from verifier/phone-look.ts (the same look as web/static/hero and web/static/demo). Run through infra/box.sh only: infra/box.sh run 'PHONEBOX_ENV=test-run-capture DATA_DIR=/var/lib/phonebox-test/run-capture/data PORTAL_APK=$PWD/android/build/portal.apk node verifier/capture-run.ts' Every frame is an unedited screenshot from the API (GET /v1/phones/{id}/screenshot), taken right after its step's call returned. No mockups, no retouching. Scenario: from the home screen, the agent opens Wikipedia, goes to Search, types "Matterhorn", opens the article (lead photo), scrolls, opens the "Quick facts" box and reads the summit height from the element list: [42] View "4,478 m (14,692 ft)" Steps (each one MCP call, POST /mcp tools/call, timed from request to reply; recording.json "steps") id title tool request (phone_id omitted) ms input (on the frame before) home Look at the phone observe {} 31 - open Open Wikipedia act tap {ref 6} 3720 tap (540,1470) on home.png search Go to search act tap {ref 20} 1634 tap (540,2232) on open.png type Type "Matterhorn" act type "Matterhorn" into {ref 3}; wait_for "Mountain in the Swiss" 2672 tap (540,302) on search.png article Open the article act tap {ref 8}; wait 2500 ms 6676 tap (540,346) on type.png scroll Scroll to the facts act scroll down 2638 swipe (540,1200)→(540,400) on article.png facts Open "Quick facts" act tap {ref 92}; wait 1000 ms; scroll down; scroll down 7207 tap (174,1767) on scroll.png answer Read the answer observe {} 22 - Refs come from the element list the previous call returned (observe, or act's reply, which ends with the new screen). The input point is that element's centre as the list printed it, in native 1080x2400 pixels (multiply by 2/3 for the WebP copies). Durations include each act's own waits (listed above) and the screen settling; they are one run's measurements, not performance guarantees. "observe" in recording.json is the screen part of each reply (what the agent read after that step); "observeExcerpt" is a filtered subset of it. Frames (native 1080x2400 PNG; SHA-256 also in recording.json) home.png 8f85097b08a2e36637bdc1c6f22497494e92d2af1abb28ae4ea1e69bf4bde091 open.png 8d662421c0e55c3ed08d2fa9652832c0567f4bd53d05ea3b562265011b5162c8 (byte-identical to web/static/hero/wikipedia.png: same day's feed) search.png 968bf484c1e92e7cc3ca1e06a128c55436cfada286fbde6fbb93d5cdec55b5d2 type.png c419d1726cef6ff6af13dd3ec8490243a26c16c587910a90ef3d041434192af7 article.png d214a2b373c6aa9590e91fcc859cc13819126ad42914b737d81c48a3b82fb745 scroll.png 14bf177cafafbe29e703a02f46cacb1f9fe54167759b5dc0f0ebb1a0c2ad9806 facts.png 4198716ebf17d7f81b23c1f4c4609214871ceb552f98a37de0a37e16b034f568 answer.png 4198716ebf17d7f81b23c1f4c4609214871ceb552f98a37de0a37e16b034f568 (same screen as facts: observe changes nothing) Web copies (720x1600 WebP, quality 80, each under 120 KB: ffmpeg -i X.png -vf scale=720:1600:flags=lanczos -c:v libwebp -quality 80 -compression_level 6 X.webp) home.webp 5d3dc7441cee76c974113479c8ea4b9f273b3ec65a3bf9eb71980713224bbb5b open.webp c4a13d9b356a46ec24f849c320dbcc6b87ff224f973e8f2ee9b22c071c1a7879 search.webp 6b63af2c600ef881b5b0cfca338532ef1a88562b9ee87597ec4fab8bc14e7da9 type.webp b2bb4ec39d640ab0b234c25e6988a597416edd2a3bd1d94718ee6ec5d7a39ea5 article.webp 2750007e62f4b7a1e36535f994e55493de312f86693bf4f63f8fa69c7445172b scroll.webp ba7882c03bfb9aae58ccbda68aef704e369779b18d8628137016e8c78f73b495 facts.webp 41a2a9b6d888135a26586c7a6cecbad646f7cf8e8a7bfc24fa753b3881c65420 answer.webp 41a2a9b6d888135a26586c7a6cecbad646f7cf8e8a7bfc24fa753b3881c65420 Screen recording (run.mp4, run.webm, run-poster.webp) Captured on the phone itself with Android's screenrecord during the same run, started 1.5 s before the first step and stopped (SIGINT to the phone's own screenrecord process) after the last: adb shell screenrecord --bit-rate 6000000 --time-limit 60 /sdcard/run.mp4 Raw: 1080x2400 H.264, variable frame rate, 28.8 s, SHA-256 95f6ca90f773a3c1e4bb5966fa7eb807a934e6d22cbae95c0b4d4fadb4591107 (not committed). It includes the short pauses while the script took each step's screenshot. Played back uniformly 1.985x faster to 14.5 s, nothing cut or reordered; no audio: ffmpeg -i raw.mp4 -vf "setpts=PTS/1.985,fps=30,scale=720:1600:flags=lanczos,format=yuv420p" -an -c:v libx264 -preset slow -crf 24 -movflags +faststart run.mp4 ffmpeg -i raw.mp4 -vf "setpts=PTS/1.985,fps=30,scale=720:1600:flags=lanczos,format=yuv420p" -an -c:v libvpx-vp9 -crf 36 -b:v 0 -row-mt 1 -deadline good -cpu-used 2 run.webm ffmpeg -i run.mp4 -frames:v 1 -c:v libwebp -quality 80 run-poster.webp (its first frame: the home screen) run.mp4 720x1600, 14.5 s, 1152579 bytes 9fb72153244908a41bc37b27b97924353148a54b99b5da4df9685110faf1be40 run.webm 720x1600, 14.5 s, 1020210 bytes bb7bb972260313a2d0be5ad04eab65ee305389f7aed20ab5b372fd3948a2d0b0 run-poster.webp 720x1600 eaa82da739077592e7949621d92a53014b0c8d6e947d6a0f6f86d62653df07ce The phone's look Same as web/static/hero/Source.txt (apps, versions, licences, pinned SHA-256s, wallpaper, launcher layout); every command and its output is in recording.json "look". The app used: Wikipedia org.wikipedia r/50614-r-2026-10-20 (50614), Apache-2.0, https://f-droid.org/repo/org.wikipedia_50614.apk, SHA-256 076d19f4acf40562a06df7d7de2b9cf11b89cc7b79f6a6cf4dd0768a158289c3 (checked on the phone after install). Status bar set with Android's SystemUI demo mode: 9:41, full signal bars, battery 100 % not charging, no notifications. It is not the sandbox's real time or state (a sandbox has no battery or SIM). No on-screen keyboard appears: text goes in through Mobilebox's own input method (android/Keyboard.java), which never draws one so the layout does not shift under the agent's taps. Wikipedia first-run setup (before the run, not part of any step or of the video) As a new owner would once: the onboarding pages (Forward ×3, Skip); the Search tab's one-time "A Faster way to Search" widget promo (Close); one article opened, Zermatt, so the app's one-time "Customize your toolbar" tooltip could be dismissed. That tooltip is a popup outside the accessibility tree, so its "Got it" was tapped by coordinates (675,439). Zermatt therefore shows under History in search.png. Then back to the Home tab, Home, and the app force-stopped, so the run opens it from cold. Network content Everything inside Wikipedia (feed, search results, thumbnails, article text and photos) loaded live from en.wikipedia.org over the sandbox's real network at the times above. The feed shows the featured article of 2026-11-03 (the phone's time zone is America/Los_Angeles). A rerun on another day shows other feed content and may show edited article text, photos or figures. No API keys, account identity or provider tokens are included. The capture phone was removed after recording (capture script cleanup log: "cleanup: own phone removed").