> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runaether.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Mobile Testing

> Let agents build, install, and drive your mobile app on cloud Android emulators and iOS simulators, and watch it happen from the workspace.

Mobile testing gives every [task](/guides/tasks) in a project access to cloud devices: Android emulators, iOS simulators, and remote Xcode and Gradle build sandboxes. The agent builds your app, installs it on a device, drives it, and records what it saw. You watch the device live from the workspace and keep the screenshots and recordings as evidence. There is no device-provider account to create and no key to manage — Aether holds the provider credential and mints every device on the task's behalf.

## Turning it on

Mobile testing is a per-project setting, off by default. Open the project's settings, go to **Task Defaults**, and set **Mobile testing** to one of:

| Setting                      | Who can use devices                                                                                |
| ---------------------------- | -------------------------------------------------------------------------------------------------- |
| **Off**                      | Nobody. Agents that notice a mobile app will tell you the setting exists instead of using devices. |
| **Agent tasks**              | Tasks you start. PR-review tasks do not get devices.                                               |
| **Agent tasks + PR reviews** | Tasks you start and Aether's PR reviews, so a reviewer can run the change on a real emulator.      |

Through the API the same setting is `mobile_testing_mode` on the project: `off`, `tasks`, or `tasks_and_reviews`.

<Note>
  PR reviews with devices count against the same per-organization limits as tasks, and Aether reviews every push when auto-review is on. Choose **Agent tasks** if you would rather keep device time for the work you start yourself.
</Note>

## What the agent does

A workspace whose task is allowed by the setting receives Aether's mobile-testing skill and the device tooling: with **Agent tasks**, the tasks you start; with **Agent tasks + PR reviews**, those and Aether's PR-review tasks. A PR-review workspace in a project set to **Agent tasks** gets neither, only a one-line note that the setting exists. A typical run:

1. **Gets a device.** `aether-device create android` (or `ios`) mints an emulator scoped to the task. It is ready in a few seconds.
2. **Builds the app.** Native builds run in a remote Gradle or Xcode sandbox and upload the artifact through Aether, so the built app never needs to leave the cloud.
3. **Installs and drives it.** Taps, swipes, typing, and screenshots, using the app's element tree where it has one and screen coordinates where it does not.
4. **Records evidence.** Screen recordings and screenshots are uploaded with `aether-device upload` and embedded in the agent's messages.
5. **Releases the device** when it is done.

Two kinds of session exist. A **dev-loop** session is tied to a Metro or dev server running in the workspace and ends when the workspace stops. A **standalone** session runs a built app and outlives the workspace, so you can still poke at it after the task finishes, until it times out on its own.

## What you see

* **The device tab.** As soon as a session is ready, an **Android device** or **iOS device** tab appears in the Files pane next to your previews. It shows the device's live screen. While the agent is driving, the tab is watch-only.
* **Verify → Devices.** The Verify panel lists every live device and build sandbox for the task, with an **Open device** button for each one you can watch. When mobile testing is off for the project, the panel says so and links to the setting.
* **Verify → Media.** Every screenshot and recording the agent uploaded, newest first, with the same links the agent embedded in chat.
* **In the pull request.** With screenshot and demo-video posting enabled in the project's PR settings, the agent adds the same **Screenshots** and **Demo** sections to the PR body it uses for browser evidence, with the device captures and recording.

## Limits

Device time is bounded per organization and per task so a runaway loop cannot hold hardware indefinitely. The current defaults are:

| Limit                                                          | Default                                                                  |
| -------------------------------------------------------------- | ------------------------------------------------------------------------ |
| Concurrent devices per organization                            | 2                                                                        |
| Concurrent build sandboxes per organization                    | 4                                                                        |
| Active sessions per task, devices and build sandboxes together | 2                                                                        |
| Device time per organization                                   | 2 hours per rolling 24 hours                                             |
| Idle timeout                                                   | 10 minutes without activity for a device; 15 minutes for a build sandbox |
| Hard cap per device                                            | 60 minutes                                                               |

When a limit is reached the agent says so in the task timeline, in plain words, and continues without devices where it can: it drops iOS before Android, prefers testing a built app over a hot-reload loop, and keeps screenshots when it has to drop the video.

## Where your data goes

Devices and build sandboxes run at Aether's device provider, [Limrun](https://limrun.com), under Aether's own account. Two kinds of data reach it: the app build the sandbox produces, stored as a build artifact in a namespace private to your organization, and whatever the running app does on the device. Screenshots and recordings the agent keeps with `aether-device upload` do not go to the provider; they are stored with the task's other media in Aether, alongside browser screenshots and demo videos.

Build artifacts in your personal organization's namespace are removed when you delete your account. Artifacts in a team organization's namespace are not removed today.

The device's live-stream link is a credential: agents are instructed never to post it in messages, commit messages, or pull requests, and the workspace UI embeds it without exposing it.
