Skip to content
KNOOP edited this page Jul 28, 2026 · 1 revision

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.


Overview

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.


Enable Fleet

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


Access the Console

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.

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.clusterAccessToken and never leaves the device except for the deep-link URL form below.

Authenticated Deep Link

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.


Device Wall

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.


Per-Device Controls

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.

Screen Control Details

  • 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.

ADB Host

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 Binary (changed in 0.6.2)

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.

Settings Editor

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.

Mods from Fleet (0.6.2)

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.


API Reference (read-only)

Fleet exposes a versioned HTTP API on port 8888. All routes except /v1/hello, / and /index require authentication.

Status & Discovery

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).

Screen

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.

Settings

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.

Cluster Peer Operations

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.

ADB Host

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.

Other

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.

Reliability & Hardening (0.6.2)

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.

Troubleshooting

Console does not open

  1. Confirm Web Console is enabled on the target device.
  2. Confirm the device and your browser are on the same local network.
  3. Confirm port 8888 is not blocked by a firewall or VPN.
  4. Try http://<device-ip>:8888/v1/hello — it should return JSON without auth.

Password rejected

  1. The default password is 1234; if you changed it, use the new value.
  2. The browser may have cached an old token — clear site data or use ?password=<plain>.
  3. If you forgot the password, set a new one under Ava Settings → Experimental → Cluster Management → Access Password.

Peer not discovered

  1. Confirm Cluster Management is enabled on the peer.
  2. Confirm UDP discovery is not blocked by the router (Ava uses mDNS-style beacons).
  3. If the peer is behind a different subnet, add it manually via ADB Host instead.

ADB device does not appear

  1. Confirm the target device exposes ADB on port 5555, or use Android 11+ wireless debugging pairing.
  2. Confirm the ADB binary has been downloaded (first use requires network).
  3. Confirm the host device allows native execution for the ARM binary.

scrcpy live view unavailable

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

Clone this wiki locally