Skip to content

Releases

mobile-agent 0.1.0-alpha.1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 05 Nov 14:10
Immutable release. Only release title and notes can be modified.
10c7052

The first pre-release: mobile-agent, mobile-agent-daemon and mobile-agent-mcp for Macs with Apple silicon and for x86_64 and aarch64 Linux, with every change since the first commit. Experimental: the drivers use private Apple Simulator frameworks, Apple's developer services on an iPhone and hidden Android APIs, and the command-line and MCP interfaces may change between alphas.

  • alpha-release (openspec/changes/alpha-release/): the first pre-release, on GitHub Releases. .github/workflows/release.yml, on a dispatch naming the version, builds the Android agent's jar once and the three binaries per target, on GitHub's xcode-27 image for Apple silicon and on Ubuntu 22.04 for x86_64 and aarch64 Linux, packs them with the notices and their SHA-256 sums, attests each tarball and its binaries with build provenance and verifies them on each target's runner; a run that is not a dry run then waits for the release environment's reviewer, and its publish job creates the draft pre-release v<version> on the dispatched commit with the tarballs, their sums and the notices and publishes it, which creates the tag, a tag ruleset admitting a v* tag only on a commit deployed to release; releases are immutable. mobile-agent --version prints the release and the commit it was built from, and the README's Install says how to download, verify and install the binaries. The record is docs/research/alpha-release.md and the change's design.
  • pass-4-fixes (openspec/changes/archive/2026-11-05-pass-4-fixes/): what the fourth demo pass on real apps and the site's recording runs found, sorted on CI's fresh devices before it was fixed. .github/workflows/device-tests.yml runs the device-backed tests and crates/daemon/tests/real_apps.rs, one test per finding on the Simulator's and the emulator's own apps, on a fresh iPhone 17 under iOS 27.0 and an API 36 emulator, weekly and on dispatch; a tap by coordinates names the labeled element under the point; a text wait prefers the element whose text is the whole text; the listing right after a system alert closes lists the app's screen; a stale ref under a system dialog names the dialog; a settle that gives up says after how long and why, and wait --settle --strict fails it with settle_timeout; the read-back of keys waits a second and the keys' own time and warns shorter than typed; a launch the Simulator refuses is retried once after 3 s; the controls a header holds stay reachable; on Android a view drawn on top that takes no touch covers nothing; iOS 27's floating bar container is bounded by what it draws; scroll --until on iOS sizes its strokes by what they carry; the tests' devices run the runtime of the device under test, and the Expo fixture adopts the scene life cycle iOS 27 requires. The record is reports/12.5-fourth-pass.md.
  • profiling (openspec/changes/archive/2026-10-30-profiling/): sampling profiles of the daemon on the Simulator and the emulator, of the CLI's start and of the MCP server's round trip, with Instruments' Time Profiler and Allocations through xctrace, on release code built with line-level debug information by cargo build --profile profiling. This code's CPU was under 3% of every command that reads or acts; the three hot spots of its own making were fixed, each with a microbenchmark that showed the cost first and an A/B after: the catch-up's wait for the next re-read on a screen that animates, the server's call path, and the listing's reply built as JSON values; and a delta snapshot lists the screen once for its reply and its delta. The record is docs/spikes/s15-profiles.md.
  • open-sourcing (openspec/changes/archive/2026-10-30-open-sourcing/): the repository prepared for publication under the MIT License. The reports describe their host by chip, cores, memory and macOS version and keep their samplers' loads and CPU shares without process names; just check-public refuses machine paths, device identifiers, serials, team ids, emails, host models and private terms in tracked files; the spikes' programs leave the repository, their reports staying in docs/spikes/; the workflows start without permissions, pin every action to a commit and keep no credentials, with an audit job running actionlint, zizmor and cargo-deny; Dependabot with a 7-day cooldown, deny.toml, THIRD-PARTY-NOTICES.md, CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, issue and pull request templates and docs/maintaining.md.
  • ci-benchmarks (openspec/changes/ci-benchmarks/): .github/workflows/benchmarks.yml on a schedule or a dispatch, never per push: the microbenchmarks as an A/B of two refs on one runner (micro --ab), the harness's reduced plan judged by ratios against the baselines (run --plan ci --gates none), the tables in the job summary, the reports kept as artifacts and the trend against the previous scheduled run.
  • android-pass-fixes (openspec/changes/archive/2026-10-24-android-pass-fixes/): what the pass on Android apps through the MCP server found: a launch waits for am start -W until open's own deadline rather than the adb client's 10 s read timeout and fails past it naming the deadline; a click's hit names the element under the point whether or not the session holds a ref for it; a stale ref's twin was measured to cost a replica lookup; and the wait for an app's first tree on a cold emulator was measured to be the emulator's. The record is reports/12.4-android-pass.md.
  • action-verdicts (openspec/changes/archive/2026-10-23-action-verdicts/): the replies the third pass on real apps called for: a click names the element its tap landed on, as the replica had it at dispatch, and warns when it is not the target; a settle right after an input waits for the input's first effect before it counts quiet, and says when none came; a stale ref whose element has a twin in the replica resolves to it and says so; open checks the app is in front, activates a running app that stayed behind and names what is in front when it cannot; a delta snapshot prints its changes as listing lines. The record is reports/12.3-action-verdicts.md.
  • real-app-fixes (openspec/changes/archive/2026-10-21-real-app-fixes/): what the first pass on real apps through the MCP server found on the Simulator's Settings, Calendar, Maps and Safari: the mirror's rule for what covers an element, so that elements on screen are no longer marked out of view (spike S14); type reads the focused field back as fill does; a wait's timeout summary issues the refs it prints; get value on a switch gives its state; wait --text names what it found; open returns when a system alert comes in front, naming it; the screenshot reply and the off-screen error name the screen's size in points; and the server's call bound caps a command's timeout and never raises it. The record is reports/12.2-real-apps.md.
  • mcp-server (openspec/changes/archive/2026-10-20-mcp-server/): mobile-agent-mcp, an MCP server over standard input and output on the official Rust SDK, rmcp: one tool per daemon action an agent drives, under agent-browser's names, with flat input schemas, the CLI's lines as results, failures with the daemon's code, screenshots inline, progress during waits, a session per process released at exit, a read-only profile and an instructions card with the agent guide behind help; the request and reply types in a crate of their own, wire, shared by the daemon, the CLI, the harness and the server; and wait --change, close --keep and cancel in the daemon and the CLI. Accepted through Claude Code and Codex; the record is reports/12.1-mcp-acceptance.md and spike S13.
  • rn-app-fixes (openspec/changes/archive/2026-10-15-rn-app-fixes/): what a production React Native app showed on an iOS 26 Simulator, fixed for every React Native app: on iOS the mirror cuts what a later sibling drawn over an earlier one covers (fixed footers, floating buttons, sticky headers); an action on an element out of view fails with a code instead of tapping stale bounds; fill reads a value back through the field's descendants and reports an entry it cannot read as unverified; text typed into a field the action just focused waits for the keyboard; tabs get refs whether selected or not, checkboxes are listed as such, and the full listing loses its duplicates; a wait whose condition already holds answers at once. Checked over seven rounds of production-app runs.
  • physical-ios (openspec/changes/archive/2026-10-14-physical-ios/): physical iPhones on USB: the crates/ios driver, with discovery and readiness checks, the CoreDevice tunnel in the daemon's own process without root, the app lifecycle, input through the developer disk image's dtuhidd from iOS 18, screenshots polled as frames, and an XCTest runner in Rust (agent-ios/) that serves the tree and text entry over the device protocol; MOBILE_AGENT_DRIVERS=ios, devices and doctor with the iPhone's readiness, and the harness's ios-device target class, measured on an iPhone SE (3rd generation) on iOS 26.6.2 (reports/11.1-ios-device.md; spikes S9 to S11).
  • microbenchmarks (openspec/changes/archive/2026-10-08-microbenchmarks/): host microbenchmarks of the codec and framing, the mirror, the daemon's request paths, the Simulator's frame pipeline and the Android paths, under criterion 0.8.2 as spike S8 chose; just micro measures only on a quiet host and compares with the committed reports/micro/baseline.json at a 5% threshold, allocations exactly.
  • mobile-automation-foundation (openspec/changes/archive/2026-10-07-mobile-automation-foundation/): the foundation, a Rust workspace with a persistent daemon and a thin CLI that follows agent-browser's grammar, refs and JSON envelope; the device protocol in CBOR with version and capability negotiation; the live UI mirror that answers snapshots, waits and settle checks from a replica kept current by events and frames; the And...
Read more