DisposableAndroidemulators.
Start one in seconds. Use it from your browser or hand it to an agent, then throw it away.For ad hoc testing, pull request reviews, and agents that build apps.
One device, three jobs.
Test a build by hand
Start a device from the dashboard or the CLI, install an APK, and try it. Throw the device away when you are done.
Review every pull request
Install the GitHub App and each PR gets its own device, built from that branch, linked in the PR.
Let an agent build the app
Claude Code or Codex gets a device it can tap, type on and screenshot. You get a link to watch and take over.
Pull requests, automatically.
With the GitHub App installed, every pull request gets a device. Three steps from an open PR to the app running in front of the reviewer.
Agents get the same device.
The CLI starts an emulator, reads the screen as a tree of elements with refs, and taps, types and screenshots by ref. Claude Code or Codex runs it as a tool. It prints a watch link: open it to see what the agent is doing, and take over whenever you want.
$ npx ramus-cli trial
{ "trial": "active", "expiresAt": "…T04:12Z" }
$ npx ramus-cli session start --apk app-debug.apk --wait
{ "id": "9f3c…", "status": "active",
"watchUrl": "https://ramus.dev/sim/9f3c…" }
$ npx ramus-cli snapshot --find "Sign in"
{ "gen": 1, "elements": [ { "ref": "e3", "text": "Sign in" } ] }
$ npx ramus-cli tap e3 --gen 1 --expect "Welcome"
{ "tapped": "e3", "verified": "Welcome" }█
Works with what you build.
No configuration. The build reads the repository, detects the framework, and runs the right build.
Kotlin
settings.gradle.kts
Jetpack Compose
androidx.compose on the classpath
Expo
app.json with expo
React Native
react-native in package.json
Flutter
pubspec.yaml
Isolated, then deleted.
Isolated by default
Each emulator runs in its own hardware-isolated virtual machine, on servers we own.
Only the branch it builds
Ramus clones the branch to build it, and nothing else. Your production data and secrets are never involved.
Deleted after use
Each build runs in a fresh environment that is deleted when the session ends.
