How Astra Scout works
See how the macOS app, local server, and device drivers fit together on your Mac.
Astra Scout is made of a few cooperating pieces, all running on your Mac.
Astra Scout macOS app (native, SwiftUI / AppKit)
│ HTTP / SSE on localhost:5050
▼
astra-scout-server (Go)
│
├── maestro-runner ──► WebDriverAgent ──► iOS Simulator / real iPhone
│ └─► DeviceLab driver ─► Android emulator / device
├── xcuiax (Swift) ► iOS Simulator UI tree (iOS 27+)
├── devicehid (Swift) ► direct touch on a real iPhone (optional)
└── your AI CLI (Claude Code / Codex / Gemini CLI), read-onlyThe app
The app is a native macOS app. Its window holds the navigator (files, find, runs), the code editor with the test runner below it, and an inspector with the device screen and the AI assistant. Settings, Explore app and bug reporting open from the menus and in their own windows. The app starts the bundled server itself.
The server
astra-scout-server is a Go server that listens on port 5050. It exposes the same API shape as the original Maestro Studio, plus extras for the AI features, Jira and tracking. It owns device connections, runs flows, stores run history and serves the MCP endpoint that AI CLIs use (http://localhost:5050/mcp).
If port 5050 is busy, the app starts the server on another port and writes the real URL to ~/.astra-scout/mcp.json.
The runner
Flows run through maestro-runner. On iOS it drives the device through WebDriverAgent (WDA); on Android it uses the DeviceLab driver. The first time you connect an iOS device, maestro-runner builds WDA, which takes about 3 to 10 minutes. Later connections reuse the build.
Screen mirroring
| Device | How the screen reaches the app |
|---|---|
| iOS Simulator | The app renders it in-process through Xcode's SimulatorKit; input goes through devicehid |
| Real iPhone | CoreDevice media stream (HEVC), wired or Wi-Fi |
| Android | scrcpy-based H.264 stream, with a screenshot-based fallback |
Where your data lives
| What | Location |
|---|---|
| Server log | ~/Library/Logs/Astra Scout/server.log |
| App data (database, MCP token, Team ID) | ~/Library/Application Support/Astra Scout/data |
| WDA builds | ~/Library/Application Support/Astra Scout/maestro-runner |
| Flow videos | <workspace>/artifacts/runs/ |
| Plugin copy used for AI CLIs | ~/.astra-scout/plugin |
Nothing is sent to a cloud service. The only network calls beyond your machine are the ones you start: your AI CLI talking to its provider, and Jira when you confirm a bug report.
Verdicts are computed by the app
The AI never decides whether a run passed. Astra Scout computes the verdict from structured facts such as step results and driver errors. See Run flows.
