A tiny, dependency-free Android launcher that turns a spare phone into a dedicated device for an AI agent. It boots straight into your agent app (Claude, ChatGPT, Gemini, a local model — whatever you pick) but keeps a short list of utility apps (a VPN client, mail, a password manager) one tap away — because a hard single-app kiosk can't hop to WireGuard when you need to bring a tunnel up.
Roost is pure Android framework Kotlin — no AndroidX, no Compose, no Material, no raster assets, no bundled fonts. Deliberately hackable. It's vendor-neutral: the featured tile renders the installed agent app's own icon at runtime, so Roost's identity (a little robot that lives on the phone) stands on its own.
| Mode | Home button shows | Boot |
|---|---|---|
| Curated | The robot mascot, a greeting, and one aligned grid — the featured agent (accent ring), your utility apps, and web apps | Auto-launches the agent once |
| Appliance | An ambient "at rest" face (mascot + greeting); long-press anywhere reveals the grid | Auto-launches the agent once |
Tapping the mascot (or the ringed agent tile) opens your agent. Other settings: an agent name (the greeting becomes " is home" and drives the live status line), auto-launch on boot, keep screen on while docked, a themeable accent (Honey / Slate / Sage / Violet), a favorites picker, the featured agent app, web apps (add a URL that opens fullscreen in a WebView — self-host a Homarr or Homepage dashboard as an app tile), and a "Match wallpaper to Roost" action that paints Recents/transitions in the same warm-dark palette.
- Roost registers as the
HOMEactivity, so pressing Home returns here. BootReceivercatchesBOOT_COMPLETEDand arms a one-shot flag;MainActivity.onResumeconsumes it and foregrounds the agent app. (The actualstartActivityruns from the foreground HOME activity, sidestepping Android's background-activity-launch limits.)- Favorites and settings live in
SharedPreferences(Prefs.kt) — no database, no network, no analytics. - The mascot is a
Canvasview (MascotView.kt); the palette + drawable helpers live inRoost.kt.
Requires JDK 17 and the Android SDK (platform 34, build-tools 34.0.0).
export JAVA_HOME="$(/usr/libexec/java_home -v 17 2>/dev/null || echo /opt/homebrew/opt/openjdk@17/libexec/openjdk.jdk/Contents/Home)"
export ANDROID_HOME="$HOME/Library/Android/sdk"
./gradlew assembleDebug
# → app/build/outputs/apk/debug/app-debug.apk- Enable Developer options → USB debugging (or Wireless debugging) and confirm
adb deviceslists it. - Install:
adb install -r app/build/outputs/apk/debug/app-debug.apk - Press Home once and pick Roost as the default launcher (or:
adb shell cmd package set-home-activity rocks.stump.roost/.MainActivity). - In Roost → Apps & settings → Featured agent app, set your agent app's package if it isn't the
default (
adb shell pm list packageslists what's installed).
Optional: keep the screen awake while charging (device-wide):
adb shell settings put global stay_on_while_plugged_in 3
- Sign the device into its Google account and install your agent app + your utility apps.
- Sign into the dedicated agent account, VPN, and any mail/password accounts.
- Open Roost → Apps & settings and tick the apps you want on the grid.
- One-tap VPN tunnel toggle tile.
- An "awake" mascot state (bigger eye-glow) driven by the agent actually working.
- Favorite reordering; per-favorite custom labels.
MIT. Not affiliated with any AI vendor.
