Revyl Cloud Device Integration¶
Trailblaze can use Revyl cloud devices instead of local ADB or Maestro. This lets you run the same AI-powered tests against managed Android and iOS devices without a local device or emulator.
Overview¶
The Revyl integration provides:
- RevylCliClient (
trailblaze-revyl) – Shells out to therevylCLI binary for all device interactions. - RevylTrailblazeAgent (
trailblaze-host) – Maps every Trailblaze tool to arevyl deviceCLI command. - RevylNativeToolSet (
trailblaze-revyl) – Revyl-specific LLM tools (tap, type, swipe, assert) using natural language targeting and AI-powered visual grounding.
Core data classes and the CLI client live in the trailblaze-revyl module. Host-level wiring (agent, blaze support) lives in trailblaze-host/.../host/revyl/.
Prerequisites¶
- Install the
revylCLI binary on your PATH:
curl -fsSL https://raw.githubusercontent.com/RevylAI/revyl-cli/main/scripts/install.sh | sh
# Or with Homebrew:
brew install RevylAI/tap/revyl
- Set the
REVYL_API_KEYenvironment variable (or configure it in Settings > Environment Variables in the desktop app).
Optional overrides:
REVYL_BINARY– Path to a specificrevylbinary (skips PATH lookup).
Architecture¶
flowchart LR
subgraph trailblaze["Trailblaze"]
LLM["LLM Agent"]
AGENT["RevylTrailblazeAgent"]
CLI["RevylCliClient"]
end
subgraph cli["revyl CLI"]
BIN["revyl device *"]
end
subgraph revyl["Revyl Cloud"]
PROXY["Backend Proxy"]
WORKER["Worker"]
end
DEVICE["Cloud Device"]
LLM --> AGENT
AGENT --> CLI
CLI -->|"ProcessBuilder"| BIN
BIN --> PROXY
PROXY --> WORKER
WORKER --> DEVICE
- The LLM calls Trailblaze tools (tap, inputText, swipe, etc.).
- RevylTrailblazeAgent dispatches each tool to RevylCliClient.
- RevylCliClient runs the corresponding
revyl devicecommand viaProcessBuilderand parses the JSON output. - The
revylCLI handles auth, backend proxy routing, and AI-powered target grounding transparently. - The cloud device executes the action and returns results.
Quick start¶
// Prerequisites: revyl CLI on PATH + REVYL_API_KEY set
val client = RevylCliClient()
// Start a cloud device with an app installed
val session = client.startSession(
platform = "android",
appUrl = "https://example.com/my-app.apk",
)
println("Viewer: ${session.viewerUrl}")
// Interact using natural language targets
client.tapTarget("Sign In button")
client.typeText("user@example.com", target = "email field")
client.tapTarget("Log In")
// Screenshot
client.screenshot("after-login.png")
// Clean up
client.stopSession()
Supported operations¶
All 12 Trailblaze tools are fully implemented:
| Trailblaze tool | CLI command |
|---|---|
| tap (coordinates) | revyl device tap --x N --y N |
| tap (grounded) | revyl device tap --target "..." |
| inputText | revyl device type --text "..." [--target "..."] |
| swipe | revyl device swipe --direction <dir> |
| longPress | revyl device long-press --target "..." |
| launchApp | revyl device launch --bundle-id <id> |
| installApp | revyl device install --app-url <url> |
| eraseText | revyl device clear-text |
| pressBack | revyl device back |
| pressKey | revyl device key --key ENTER |
| openUrl | revyl device navigate --url "..." |
| screenshot | revyl device screenshot --out <path> |
Limitations¶
- No local ADB or Maestro; all device interaction goes through Revyl cloud devices.
- View hierarchy from Revyl is minimal (screenshot-based AI grounding is used instead).
- Requires network access to the Revyl backend.
See also¶
- Architecture – Revyl as an alternative to HostMaestroTrailblazeAgent.
- Revyl CLI – Command-line tool for devices and tests.
- Revyl docs – Full CLI and SDK documentation.