Matron is a chat system for talking to Claude Code agents from your phone, desktop, or browser. This repo is the native Android client — Kotlin + Jetpack Compose. Sign in and watch an agent's conversations arrive and update live: streaming replies, tool-call and diff cards, live terminal output, inline answer prompts. Talk back with messages, slash commands (with autocomplete), file and photo attachments, and voice notes. Full-text search across every conversation; biometric app lock. It is a port of matron-apple and speaks matron-journal, a purpose-built server protocol.
Available on Google Play. You can also build it from source with the steps below.
Push notifications aren't wired up on Android yet (no Firebase project) — the app live-updates while open.
| Project | Description |
|---|---|
| matron-android | Android client (this repo) |
| matron-apple | iOS + macOS client |
| matron-journal | Sync server |
| matron-bridge | Runs beside the agent CLI on each dev machine and publishes to the journal |
| dev-boxer | One-command Ubuntu 24.04 agent box |
| matron-desktop | Desktop client |
| matron-web | Web client |
The app keeps a local Room (SQLite) mirror of the journal and renders entirely from it; a single sync engine applies server frames to the mirror behind an integer cursor that only advances after a committed write. Every failure mode — dropped socket, backgrounded app, server restart — converges the same way: reconnect and resume from the stored cursor, with no wedge states and no required app restart.
Enter your journal's server URL, username, and password. If you already have a signed-in device, use From another device instead: tap Scan QR code and scan the QR the other device shows — scanning uses the Play-services code scanner, so the app never requests camera permission. Once signed in, link further devices from Settings → Link a Device.
- Build host: JDK 21 (Robolectric requires it to run unit tests against SDK 36) and Android SDK 36 (
ANDROID_HOMEset, orsdk.dirinlocal.properties) - Runtime: an Android 8.0+ (API 26) device or emulator
- A matron-journal server to talk to (see its Run section for setup)
./gradlew :app:assembleDebug
./gradlew :app:testDebugUnitTestchat.matron.android.integration.JournalServerTests is a wire-compatibility
suite that boots a real matron-journal Node server as a subprocess (fresh temp
SQLite DB + free port per test) and drives the actual JournalApi +
JournalSyncEngine + JournalStore against it over real OkHttp sockets. It
covers sign-in/snapshot/live round-trip, cursor resume across an engine restart,
and a 200-event chaos-reconnect convergence test.
./gradlew :app:testDebugUnitTest --tests 'chat.matron.android.integration.*'The suite auto-skips (JUnit Assume) when the matron-journal checkout, node,
or node_modules are missing, so CI stays green without one; a real startup
failure fails the test rather than skipping. Set MATRON_JOURNAL_PATH (default
~/Dev/matron-journal) and run npm install there once — see
JournalServerHarness.kt
for the details.
tools/screenshots.sh boots a seeded matron-journal plus a headless AVD and regenerates the Play Store screenshots under docs/store-assets/screenshots/.
AGPL-3.0 with commercial licensing available by arrangement. See LICENSE and NOTICE.
Promo site: matron.chat · Privacy policy


