Your mobile tests, in any CI, with one command.
The .mob scripts and Maestro flows you run locally work the same way in GitHub Actions or any other CI, and Workflows run there on the fast Jev and Clef runners. Each run keeps the screen and UI tree at every step, plus a video and device logs when you turn them on, so a failure tells you what happened.
Running 2 test(s) on mobai-sim-run checkout ✓ 4.2s app "run.mobai.shelf" fresh ✓ 1.9s tap "Sign in" ✓ 0.6s wait_for "Email" ✗ 85.8s tap "Continue" no element found matching predicate: "Continue" sign-in FAIL checkout (103.8s) PASS sign-in (29.3s) 1 passed, 1 failed in 133.1s Error: Process completed with exit code 1.
Set it up in a minute
mobai-ci runs Workflows, .mob scripts and Maestro YAML, including Maestro flows on a real iPhone. Install it as a GitHub Action or with one curl command on macOS and Linux.
mobai-ci test ./tests
- uses: MobAI-App/mobai-ci@v1
The test doesn't care where the device is
- iOS simulators on macOS runners
- Android emulators on Ubuntu runners
- A real iPhone or Android phone on a self-hosted macOS or Linux runner
- A phone on another machine, over Tailscale (Pro)
- BrowserStack, Sauce Labs, AWS Device Farm (Pro)
A failed test should tell you what happened
- A video of every test, with
--recording - Device logs for every test, with
--device-logs - A screenshot and the UI tree at every step
- JUnit and Allure reports for your CI
- The device itself: with
--hold-on-failure, join the failed simulator from the MobAI app (Pro)
Watch it run. Keep it when it breaks.
Open the CI device from the MobAI app while the test runs. Free with a MobAI account.
With Pro, a failed test keeps the device open for as long as you set with --hold-on-failure, so you can join it, tap around, read the UI tree and see what went wrong.
test: checkout step: tap "Continue" error: no element found matching predicate: "Continue"Open the device

Every run in one place
The cloud dashboard keeps your team's runs:
- Pass rate and run time over time
- Each test's history
- Every failure with its screenshot, UI tree and logs
Runs from the desktop app and from CI land in the same project, shared with your team. Pro includes 5 GB of run files. Your local runs show up in the app's dashboard for free.
Finish the suite sooner
Split the suite across runners with sharding. On a self-hosted Mac, simslim lets more simulators run side by side.