Infinity-apk is the Kotlin/Jetpack Compose Android companion app for Infinity. It pairs with the desktop agent over the Infinity-api relay and lets you monitor remote execution, view terminal output and unified diffs, receive notifications, and approve or control sensitive commands from your phone.
All payloads to and from the desktop are end-to-end encrypted. The Android app stores private keys in the Android Keystore.
- Android Studio Ladybug or newer
- Android SDK 35 (compileSdk) with SDK 26+ device or emulator
- JDK 17 or newer
- Infinity-api running and reachable from the device/emulator
- A Google account for OAuth sign-in
Create or edit local.properties in the project root with your Windows SDK path
(using forward slashes):
sdk.dir=C:/Users/<you>/AppData/Local/Android/SdkOpen app/src/main/res/values/strings.xml (or the equivalent build-config
source set) and set the Infinity-api base URL and WebSocket URL that the
app should use:
<resources>
<string name="app_name">Infinity Companion</string>
<!-- Add or update these for your environment -->
<string name="api_base_url">[REDACTED-IP_ADDRESS]:3000</string>
<string name="api_ws_url">ws://[REDACTED-IP_ADDRESS]:3000/ws</string>
<string name="supabase_client_id">your-supabase-client-id</string>
</resources>Use [REDACTED-IP_ADDRESS] (emulator loopback) when running against Infinity-api
on the emulator host. On a real device, replace with your LAN IP or hostname.
From PowerShell in the project root:
./gradlew.bat --no-daemon assembleDebugThe APK is written to:
app/build/outputs/apk/debug/app-debug.apk
./gradlew.bat testDebugUnitTestConnect a device or start an emulator, then run:
./gradlew.bat --no-daemon connectedDebugAndroidTest- Sign in with Google on both the desktop agent and the Android app.
- On the desktop, open the pairing screen to display a QR code.
- In the Android app, scan the QR code to request pairing.
- Approve the pairing request on the desktop.
Once paired, both devices exchange public keys so all relay traffic can be encrypted end-to-end.
- View live execution status and terminal output
- Receive notifications when human approval is needed
- Inspect unified diffs produced by the desktop agent
- Pause, resume, or stop an active execution
- Approve or deny sensitive commands from the approval dialog
- Messages are encrypted with the desktop's public key before leaving the device.
- The Android private key is generated and stored in Android Keystore.
- The Infinity-api relay cannot read message contents; it forwards encrypted envelopes only.