A deterministic mobile test runner for AI coding agents. One Zig binary drives real iOS and Android targets, returns typed pass or fail, and writes replayable evidence with no LLM in the execution path.
Evidence boundaryThis is a public developer preview that I built independently. It demonstrates deterministic mobile execution, typed agent interfaces, and replayable evidence. It does not establish production adoption or client delivery, and it does not claim broad cloud-device-farm certification.
Problem
AI coding agents can change a mobile app quickly, but screenshot descriptions vary and a chat transcript is not a repeatable merge gate. A reviewer needs evidence of which scenario ran, what the device showed, where it failed, and whether the same check will return the same verdict in CI.
Constraints
The same scenario contract must drive React Native, Expo, Flutter, and native applications without moving orchestration into each framework.
Agent-facing tools must return typed observations and results instead of terminal prose that callers have to scrape.
The merge gate must remain deterministic and free of per-run model cost even when an AI agent initiated the check.
Device screenshots, UI trees, logs, and action inputs may contain sensitive data, so trace export needs explicit redaction and claim boundaries.
iOS and Android expose different native automation surfaces, but callers should not need different scenario models.
Product evidence
The static trace viewer keeps the device state, actions, timings, and artifacts together.The CLI returns a typed failure, names the failed step, and records the passing rerun.
Architecture
One engine, two device backends
Parallel
AI coding agentRequests mobile verification and consumes typed observations and results.
Continuous integrationReplays committed scenarios as a deterministic merge gate.
Parallel
MCP and JSON-RPCExpose versioned agent and client methods over structured protocols.
CLI and JSON scenariosExpose the same engine to people and repository-owned checks.