-
-
Notifications
You must be signed in to change notification settings - Fork 15
Ava Fleet
Turn one Ava device into a local management station for every other Ava terminal in the home. Discover peers on the local network, join Android devices through ADB, inspect status, control the screen, send keys and gestures, open a shell, read logs, manage Mods, browse files, and edit Ava configuration without walking to each panel.
Introduced in 0.6.1 ("Every Screen, One System") and hardened for long-running daily use in 0.6.2.
Ava Fleet turns the device it runs on into a control room for the rest of the home. Ava terminals discover each other over UDP on the local network, while Android devices reached through ADB can join the same operational wall even when they are not yet running the Fleet service. When UDP discovery and ADB refer to the same IP, Fleet merges both sources into one device instead of showing duplicates.
The device wall has been rebuilt as a responsive control-room view with full-frame previews, grid and list modes, search, uptime and concise status overlays. Cached screenshots remain visible during refresh, skeleton states replace empty flashes, and the layout adapts from a two-column phone view to larger desktop grids. Light and dark appearances are distinct, while optional Motion-powered transitions are loaded from a CDN and respect reduced-motion preferences.
Open a device to inspect its complete status, control its screen, send Android keys and gestures, open a shell, read logs, manage installed Mods, review Bluetooth settings, or edit Ava configuration. For an ADB-connected device, Fleet first warms a screenshot and then loads manufacturer, model, Android version, uptime, CPU, memory and thermal data only when its Parameters page is opened. This keeps the device wall light while still providing a full inspection on demand.
Fleet has two independent toggles under Ava Settings → Experimental:
| Toggle | What it does |
|---|---|
| Cluster Management | Runs the Fleet HTTP agent on this device. Other Ava terminals can discover it over UDP and pull its status, settings, logs and screen. |
| Web Console | Serves the Fleet single-page web app from the same device so you can open the console from any browser on the local network. Implies Cluster Management when turned on. |
Both flags are off by default. Turning on Web Console automatically enables the cluster agent — you do not need to enable both manually.
Path: Ava Settings → Experimental → Cluster Management
Once Web Console is enabled on a device, open it from any browser on the same local network:
http://<device-ip>:8888/
The device IP is shown on the Fleet settings screen. The first time you open the console you will be asked for the Fleet password.
- Initial password:
1234 - Change it under Ava Settings → Experimental → Cluster Management → Access Password before using Fleet on a shared network.
- The password is stored as a 16-character Base64 wire token in
experimental.clusterAccessTokenand never leaves the device except for the deep-link URL form below.
Fleet can build a one-click access URL that carries the plain password in a query parameter, useful for bookmarks or for opening the console from Home Assistant:
http://<device-ip>:8888/?password=<plain>
The browser may present either the plain password or the 16-char Base64 wire token. The server accepts both via the X-Ava-Fleet-Token header, an Authorization: Bearer <token> / Token <token> header, or the ?password= / ?token= / ?fleetToken= query parameters.
All sensitive API routes require authentication. The console auto-locks after inactivity and re-opens only after the password form is submitted again.
The device wall is the landing view of the console.
- Grid and list modes with search, uptime and concise status overlays.
- Cached screenshots remain visible during refresh; skeleton states replace empty flashes.
- Responsive layout from a two-column phone view to larger desktop grids.
-
Light and dark appearances are distinct; optional Motion-powered transitions load from a CDN and respect
prefers-reduced-motion. - Source merging: when UDP discovery and ADB refer to the same IP, Fleet merges both sources into one device card instead of showing duplicates.
For an ADB-connected device, Fleet first warms a screenshot and then loads telemetry (manufacturer, model, Android version, uptime, CPU, memory, thermal) only when the Parameters page is opened. This keeps the wall light while still providing full inspection on demand.
Open a device card to reach the inspection and control surface.
| Tab | Capabilities |
|---|---|
| Parameters | Manufacturer, model, Android version, uptime, CPU, memory, thermal. Loaded on demand the first time the tab is opened for a visit. |
| Screen | Oneshot screenshot, MJPEG preview, and — when Root or Shizuku is available — an embedded scrcpy live view with tap, swipe and key input. A lightweight one-shot screenshot path remains available for monitoring and device-wall previews, avoiding a permanent high-bitrate stream on every terminal. |
| Settings | Edit the selected device's Ava configuration. The editor follows Ava's real in-app settings structure, saves changes back to the device, and supports backup, import, export, reusable templates and transferring a configuration between devices. |
| Mods | Browse and install Mods directly from Fleet (added in 0.6.2). |
| Files | Multi-device access to shared storage: browse roots and folders, upload, download, create folders, rename, delete. The file-manager UI is loaded from an online CDN instead of increasing the APK size; all operations are restricted to shared-storage paths. |
| Apps | List user, system, disabled or all packages. Open, force-stop, enable, disable, clear data, export APK, or install a new APK. |
| Logs | Read the device's log buffer. |
| Shell | Open a remote shell on the device (local device uses the embedded terminal; ADB peers use adb shell). |
| Bluetooth | Review the device's Bluetooth settings. |
-
Tap / Swipe / Key are sent through
/v1/input/*for the local device and/v1/adb/input/*for ADB peers. - Right-click on the live view is debounced to Android Back.
- The scrcpy service is launched only when Root or Shizuku is available; otherwise the oneshot screenshot path is used for previews.
Fleet includes an on-device ADB host so Android devices that are not running the Fleet service can still join the wall.
- Primary path: connects to devices already exposing ADB on port 5555.
-
Android 11+ wireless debugging: pairing available as a separate flow (
/v1/adb/pair). - Remembered connections: the local host remains available for self-management; network devices can be removed without confusing them with the host's own ADB transport.
ADB Host is no longer bundled directly in the APK. It is downloaded on demand and verified with SHA-256 when Fleet first needs it.
- First use requires a network connection.
- Execution still depends on the device allowing a native program for the corresponding architecture (the binary is a compact ARM build).
- The download route is selected by interface language: Chinese and Russian environments prefer the GitHub mirror with direct fallback; other languages prefer GitHub directly.
The Fleet settings editor follows Ava's real in-app settings structure (the same groups used by SettingsScreen on the device) and writes changes back through /v1/settings/apply. Long descriptions can be expanded when needed, and the layout scales across portrait, landscape and unusual DPI configurations.
| Feature | Description |
|---|---|
| Live edit | Dirty-flag tracking, auto-save timer, JSON sync view. |
| Backup / Import / Export | Pull a device's full configuration as a backup, push a backup onto a device, or transfer a configuration between devices. |
| Reusable templates | Save a configuration as a template and apply it to multiple devices. |
| HA settings preview | Read-only view of the Home Assistant entities the device exposes. |
| Optimistic concurrency | A monotonic settings revision guards apply/import against stale writes. |
The per-device Mods tab can browse the online Mod Store catalog and install Mods directly onto the selected device. The catalog is fetched by the browser from GitHub/raw (not via the device's /v1 API), so the managing device needs internet access; the target device receives the install command.
Application and file caches remain available while switching pages, and file/APK downloads carry the required access token.
Fleet exposes a versioned HTTP API on port 8888. All routes except /v1/hello, / and /index require authentication.
| Method | Route | Purpose |
|---|---|---|
| GET | /v1/hello |
Handshake: device name, port, advertised flags. |
| GET | /v1/auth/check |
Report whether auth is required and the default password is still in use. |
| GET |
/v1/status · /api/status
|
Full device status (voice, screen, telemetry, mods). |
| GET | /v1/devices |
Local + discovered peers + ADB fleet, merged. |
| GET |
/v1/telemetry · /v1/metrics
|
CPU, memory, thermal, battery. |
| GET | /v1/events |
Server-Sent Events stream (status/telemetry deltas). |
| Method | Route | Purpose |
|---|---|---|
| GET |
/v1/screen/frame.jpg · /v1/screen/frame
|
Oneshot screenshot (JPEG). |
| GET | /v1/screen/mjpeg |
MJPEG preview stream. |
| GET | /v1/screen/scrcpy |
scrcpy service status. |
| POST |
/v1/screen/scrcpy/start · /v1/screen/scrcpy/stop
|
Start/stop embedded scrcpy. |
| POST | /v1/screen/capture |
Trigger a fresh capture. |
| POST |
/v1/input/tap · /v1/input/swipe · /v1/input/key
|
Send input to the local device. |
| Method | Route | Purpose |
|---|---|---|
| GET |
/v1/settings · /v1/settings/schema · /v1/settings/ha
|
Read settings, schema, or HA-facing entities. |
| GET | /v1/settings/export |
Export a full backup payload. |
| POST |
/v1/settings/apply · /v1/settings/import
|
Write settings / import a backup. |
| Method | Route | Purpose |
|---|---|---|
| POST | /v1/cluster/probe |
Probe a peer for merge eligibility. |
| POST |
/v1/cluster/pull-settings · /v1/cluster/push-settings
|
Pull/push settings between peers. |
| POST |
/v1/cluster/pull-logs · /v1/cluster/shell
|
Pull logs / run shell on a peer. |
| Method | Route | Purpose |
|---|---|---|
| GET |
/v1/adb · /v1/adb/devices
|
ADB host status / discovered ADB devices. |
| POST |
/v1/adb/start · /v1/adb/download
|
Start host / download the ADB binary on demand. |
| POST |
/v1/adb/pair · /v1/adb/connect · /v1/adb/disconnect · /v1/adb/forget
|
Android 11+ pairing, connect, disconnect, forget. |
| POST | /v1/adb/install |
Install an APK on a peer. |
| GET |
/v1/adb/screen · /v1/adb/screen.jpg
|
Oneshot screenshot from an ADB peer. |
| GET |
/v1/adb/apps · /v1/adb/apps/detail · /v1/adb/apps/apk · /v1/adb/apps/icon
|
List apps, detail, export APK, icon. |
| POST |
/v1/adb/apps/action · /v1/adb/apps/install
|
App action (open/force-stop/enable/disable/clear) / install APK. |
| GET |
/v1/adb/files/roots · /v1/adb/files/list · /v1/adb/files/download
|
File browser roots/list/download. |
| POST |
/v1/adb/files/mkdir · /v1/adb/files/delete · /v1/adb/files/rename · /v1/adb/files/upload
|
File operations. |
| GET |
/v1/adb/logs · /v1/adb/telemetry · /v1/adb/metrics
|
Peer logs / telemetry. |
| POST |
/v1/adb/shell · /v1/adb/input/tap · /v1/adb/input/swipe · /v1/adb/input/key
|
Peer shell / input. |
| Method | Route | Purpose |
|---|---|---|
| GET | /v1/logs |
Local log buffer. |
| GET |
/v1/shell · POST |
/v1/shell/exec |
| POST | /v1/accessibility/open-settings |
Open Android settings via accessibility. |
The 0.6.2 release gave Fleet another usability and long-running reliability pass:
- Settings navigation now follows Ava's on-device structure more closely.
- Mods can be browsed and installed directly from Fleet.
- Application and file caches remain available while switching pages.
- File and APK downloads carry the required access token.
- Device lists, pagination, loading states, and phone layouts are more compact.
- Release obfuscation no longer corrupts settings field data.
- Shizuku and scrcpy control paths are preserved correctly in release builds.
- Interrupted ADB screenshot reads no longer crash the entire Ava process.
- Confirm Web Console is enabled on the target device.
- Confirm the device and your browser are on the same local network.
- Confirm port
8888is not blocked by a firewall or VPN. - Try
http://<device-ip>:8888/v1/hello— it should return JSON without auth.
- The default password is
1234; if you changed it, use the new value. - The browser may have cached an old token — clear site data or use
?password=<plain>. - If you forgot the password, set a new one under Ava Settings → Experimental → Cluster Management → Access Password.
- Confirm Cluster Management is enabled on the peer.
- Confirm UDP discovery is not blocked by the router (Ava uses mDNS-style beacons).
- If the peer is behind a different subnet, add it manually via ADB Host instead.
- Confirm the target device exposes ADB on port
5555, or use Android 11+ wireless debugging pairing. - Confirm the ADB binary has been downloaded (first use requires network).
- Confirm the host device allows native execution for the ARM binary.
scrcpy requires Root or Shizuku on the device serving the live view. Without it, Fleet falls back to the oneshot screenshot path for previews.
Back to Home