NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev
Agent-enabled CLI and library for mobile UI automation, network inspection, and performance diagnostics across iOS and Android. Dart port of the TypeScript agent-device project.
Last release 3 months ago
03 Jul 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 10 of 10 stable releases
Nothing withdrawn
no release was ever pulled
5 months old
10 releases · first in 2026
One column per month.
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Co-Authored-By: Claude Fable 5 noreply@anthropic.com
Ports the actionable slice of the upstream 0.18.0 → 0.18.2 gap (102 commits triaged; the bulk — command-descriptor/PlatformPlugin refactors, daemon internals, web/CDP, cloud providers — is out of scope for this mobile-only, daemon-less port). See PORTED_COMMITS.md for the per-commit registry.
Performance (iOS)
open --relaunch now works and is fast: the flag was previously accepted
but ignored (and not exposed on the CLI). Simulators relaunch via a single
simctl launch --terminate-running-process call, the XCUITest runner stays
hot across the relaunch, and a 5s booted-memo removes repeat
simctl list devices -j spawns — 0.54s wall on an iPhone 16e simulator,
with exactly one device listing per invocation. Real devices keep the
conservative runner teardown. (#1010, #1024)Reliability (iOS)
UNSUPPORTED_OPERATION otherwise, and the dismiss-control search now spans
all buttons, not just toolbars. (#957)AGENT_DEVICE_IOS_RUNNER_IDLE_STOP_MS, 0 disables) is stopped and
relaunched at the next reconnect instead of being adopted. (#1025)Observability
AGENT_DEVICE_EXEC_TRACE=1 (or --debug) records
every external command spawn (duration, exit path, first 6 args) to the
per-invocation diagnostics log. The CLI now opens a root diagnostics scope,
which also un-deadens all pre-existing diagnostic events (screenshot
fallbacks, fill verification) in CLI runs. (#1019)Triaged as not applicable
Runner keepalive log tuning (#1017 — the keepalive timer was never ported), prepare-deadline threading (#967 — no daemon request envelope), and the daemon/web/cloud refactor campaign (~80 commits).
feat(ios): external/CI-signed runner flags + fix stale pinch test; v0…
feat(ios): external/CI-signed runner flags + fix stale pinch test; v0…
Closes the upstream 0.16.10 → 0.18.0 gap (179 commits triaged; the bulk — Maestro, daemon internals, web/CDP, MCP, the 0.18.0 TypeScript refactors — is out of scope for this mobile-only, daemon-less port).
New Capabilities (ported from agent-device)
--ios-xctestrun-file,
--ios-xctest-derived-data-path, and --ios-xctest-env-dir use a prebuilt
.xctestrun artifact and skip the build entirely. The artifact is trusted
as-is, so a pre-signed device runner is reused without re-signing, and the
env-injected copy can land in a writable scratch dir for read-only artifacts.
(#806)scroll --duration-ms: honor a caller-provided scroll/swipe duration
(0–10000 ms) on both platforms instead of a fixed default. (#866)Bug Fixes
\n \t \r \uXXXX, including
surrogate pairs), not just escaped quotes. (#711)IOS_TARGET_APP_CRASH with an actionable hint, read from the runner log
tail. (#793, #797)adjustSlider corrected after the runner re-sync (the runner field is
sliderSteps, distinct from the sequence command's steps array).Internal
4648051b: sequence/scroll
fused runner commands, structured snapshot capture plans, a private-AX
snapshot fallback, shared flat-snapshot filtering, gesture stabilization, and
synthesized-tap orientation rotation.DevToolsSecurity developer-mode preflight is cached per process (one
check per session instead of per cold runner launch); the covered-node
occlusion search is memoized.fix(find): type=<T> now matches a node's type (alias for role ). Previously type was not a recognized selector key, so find type=Button fell through t
type=<T> now matches a node's type (alias for role).type was not a recognized selector key, so find type=ButtonCo-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Bug Fixes
"sha256": "local-build" that failed validation, so the helper was silently discarded — falling back to an on-device auto-build (which fails in many environments) and then to a flaky uiautomator dump. Snapshots are now faster and far more reliable on Android, with no build toolchain required.find type=<T> now matches a node's type (e.g. type=Button). Previously type was not a recognized selector key, so the expression fell through to a literal-substring search and silently returned no matches; it now aliases role.Fix iOS command flakiness and harden device/runner concurrency.
Fix iOS command flakiness and harden device/runner concurrency.
make compile soad --version can't drift (was stuck at 0.0.4).Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
Reliability / Bug Fixes
FileSystemException: lock failed … errno 35. The session-store advisory lock used the non-blocking FileLock.exclusive, so two overlapping ad invocations collided instead of waiting. Introduced a FileMutex (intra- and cross-process) that queues with bounded retry; concurrent commands now serialize cleanly.--platform no longer fail with a misleading DEVICE_NOT_FOUND that listed only Android devices. The CLI now auto-detects the backend across platforms, so --serial <udid> and --device "<name>" resolve regardless of platform. The resolved platform is remembered in the session so repeat commands skip re-enumeration and keep the fast path.DEVICE_NOT_FOUND now lists devices from every platform with platform labels and a clearer hint, instead of only the default backend's devices.isAlive tolerates a busy single-threaded runner (longer probe timeout + retries) instead of false-negatively declaring it dead and relaunching. Runner (re)launch is serialized per device with a cross-process lock and a double-check, so concurrent invocations don't each spawn their own xcodebuild.Internal
FileMutex lock primitive (utils/file_mutex.dart), used by the session store and the iOS runner launch/command paths.CommandSessionRecord gained a devicePlatform field (remembered alongside deviceSerial).version.dart is regenerated from pubspec.yaml as part of make compile, so the embedded ad --version can no longer drift from the published version.Bump version to 0.0.8 and add changelog covering the work since the unpublished 0.0.7: gesture command coverage + iOS transform gestures, precise loca
Bump version to 0.0.8 and add changelog covering the work since the
unpublished 0.0.7: gesture command coverage + iOS transform gestures,
precise location settings, platform alerts, scroll-to-edge, the iOS
runner content-fingerprint staleness cache, device-enumeration skip,
CLI negative-positional + clean --json fixes, and the npm head-to-head
benchmark harness.
Co-Authored-By: Claude Opus 4.8 (1M context) noreply@anthropic.com
New Capabilities (ported from agent-device)
gesture command coverage — pan / pinch / rotate / fling / transform driven through real multi-finger XCUITest synthesissetSetting wired through the full stack (iOS location + Android) (#491)adb localhost port forwards when opening URLs on Androidalert accept/dismiss/text)scroll supportPerformance
runner_build_cache.dart). Mirrors upstream's distribution staleness detection and eliminates the stale-build slowdown that made snapshot ~4× slower; restores parity with upstream.--serial and --platform are pinned (~300ms faster per command on Android)Bug Fixes
gesture pan offsets) instead of misparsing them as short flags; keep --json stdout clean of progress/info lines (now routed to stderr)finishSafely in the snapshot-helper APKwait timeoutTooling
benchmark/) that drives the same app on the same iOS simulator / Android emulator through both this port and the upstream npm agent-device, measuring latency, command-level accuracy, and feature parity.chore: fix analysis issue
chore: fix analysis issue
Features
Refactor
chore: update version to 0.0.5
chore: update version to 0.0.5
add Android frame health perf metrics (port of 0c7e48d7)
Features
find: enhance find command to support selector DSL, locator tokens, and substring queries
Features
Bug Fixes
Refactor
Initial Dart port of agent-device (TS upstream). There are some changes to the upstream API to adjust it to the Dart workflow. The main differences ar
Initial Dart port of agent-device (TS upstream). There are some changes to the upstream API to adjust it to the Dart workflow. The main differences are:
Your coding agent can read these notes before it upgrades. Set up the MCP server →