Live Rei Android turns an Android phone into a visible body for an AI agent.
The phone is not the brain. The brain stays on a host machine: your laptop, desktop, home server, or another box that runs the model, tools, memory, and text-to-speech path. The Android device gives that brain a place to appear: a home-screen surface, microphone, speaker, status terminal, and direct controls.
This repository contains the Android client and a tiny sample bridge.
Package: ai.hermes.liverei
Target: Android 8.0+ device used as a physical surface
License: MIT
A chat bot is easy to lose. It lives in a tab, a terminal, or a messaging app. That is fine for occasional commands, but it does not feel like a present assistant.
Live Rei Android is for a different setup:
- Keep an agent visible on a dedicated phone.
- Give the agent a stable home surface instead of another chat window.
- Use the phone for microphone, speaker, touch, and quick status.
- Keep model routing, tools, credentials, and memory on the host machine.
- Avoid root, custom ROMs, and system-level Android changes until a measured limitation requires them.
This is the app-first version of a physical AI device. The Android side is intentionally small. It should be easy to build, install, test, adapt, and remove.
Android phone
Live Rei app
microphone, speaker, display, buttons
|
| HTTP bridge
v
Host machine
bridge on port 18790
model runtime, tools, memory, optional TTS path
The Android app handles the body. The host handles the mind.
Current features:
- foreground home-surface UI
- animated Rei sprite states
- terminal-style status output
CHECKbridge smoke requestTALKforeground speech input- foreground wake phrase handling while the app is visible
- bridge TTS playback when available
- Android device TTS fallback when bridge TTS fails
NOTEone-shot spoken note cleanup and clipboard copy
The app declares only these runtime permissions:
android.permission.INTERNETandroid.permission.RECORD_AUDIO
RECORD_AUDIO is used for visible foreground speech input. This build is not a background listener.
This app is not:
- a local LLM runtime
- a replacement Android OS
- a root or custom ROM project
- a background always-listening assistant
- a lock-screen assistant
- a notification reader
- an image-input client
Those can be separate slices later, but they are not part of this build.
The app expects a small HTTP bridge.
Required endpoints:
GET /health
POST /v1/chat
POST /v1/tts
Chat request body:
{
"session_id": "live-rei-android-smoke",
"text": "Reply with OK only.",
"history": []
}Chat responses are read as server-sent-event style lines:
data: {"type":"delta","text":"OK"}
data: {"type":"done"}
The TTS endpoint should return audio bytes. If it fails, Android falls back to device TTS where available.
See docs/BRIDGE.md for the compact bridge reference.
The client checks bridge routes in this order:
adb reverse:http://127.0.0.1:18790android emulator:http://10.0.2.2:18790lan example:http://192.168.1.100:18790tailscale example:http://your-host.your-tailnet.ts.net:18790
For your own deployment, change the route constants in:
app/src/main/java/ai/hermes/liverei/bridge/BridgeClient.kt
Do not put keys in source code. If your bridge needs bearer auth, use the token provider path and keep values out of UI logs, screenshots, and commits.
For a first smoke test, run the sample bridge on your host:
python3 examples/minimal-bridge.pyThen use one of these network paths:
- physical device over USB:
adb reverse tcp:18790 tcp:18790 - emulator: keep the
10.0.2.2route - LAN device: replace
192.168.1.100with your host IP - private mesh network: replace
your-host.your-tailnet.ts.netwith your hostname
The sample bridge returns a short text reply and intentionally does not implement real TTS audio. The app should fall back to Android device TTS.
Start a host bridge that exposes /health, /v1/chat, and /v1/tts on port 18790.
The host should own:
- model routing
- tool access
- memory
- credentials
- TTS generation if you use bridge TTS
The phone should not need direct access to those internals.
For local debugging with USB:
adb reverse tcp:18790 tcp:18790For an emulator, use http://10.0.2.2:18790.
For a phone on the same LAN, use the LAN route and make sure the phone can reach the host IP.
For remote demos, use a private network path such as Tailscale and set the route constants accordingly.
source scripts/android-env.sh
./gradlew --no-daemon :app:assembleDebugDebug APK output:
app/build/outputs/apk/debug/app-debug.apk
bash verify.sh
bash prove.shverify.sh checks source hygiene and compiles the debug APK.
prove.sh builds the APK and inspects package, launcher, and permission boundaries.
adb install -r app/build/outputs/apk/debug/app-debug.apkIf Android reports a signing conflict, uninstall the old debug build and install again.
- Open
Live Rei. - Optionally set it as the Android home app.
- Wait for the bridge state to settle.
- Tap
CHECKto confirm the bridge path. - Tap
TALK, or use a foreground wake phrase while the app is visible. - Keep the screen on during voice input.
Accepted wake starts include:
Hey RayHey ReiWake up RayWake up ReiRay, come hereRay, listen
Speech recognition tolerance is intentional. Ray, Rei, and Rey are treated as equivalent starts in the foreground listener.
See docs/OPERATION.md for the operator checklist.
app/ Android application source and resources
docs/ Compact bridge and operation docs
examples/minimal-bridge.py Tiny standard-library bridge for smoke tests
gradle/ Gradle wrapper files
scripts/android-env.sh Local Android toolchain environment
verify.sh Source and build verification
prove.sh APK package, launcher, and permission proof
This repository is intentionally source-facing. Planning logs, review transcripts, proof screenshots, local install bundles, generated APKs, and rollback artifacts are excluded.
See CONTRIBUTING.md before changing routes, permissions, bridge payloads, or speech behavior.
This app is app-first. Normal device rollback is simple:
adb uninstall ai.hermes.livereiFor repository rollback, revert the commit that changed the app or docs:
git revert <commit-sha>
git push origin main