CONTRIBUTING says big changes should start as an issue. This is that, before
any Android code.
The iOS companion is already in-tree (ios/ + companion/, via #146 / #160 /
#161 / #204). I'd like to add the same OpenMausMobile for Android: a native
Kotlin + Compose client in android/, next to ios/. Same product, same
sidecar — so people can use the companion on either phone.
I have not started a PR. I want agreement on putting it in this repo, and on
the split, first.
What this is (and is not)
The phone is a thin remote client of the existing sidecar, not the desktop UI
on a smaller screen and not a hosted copy of the web app.
phone ──LAN / Tailscale──▶ companion :8810 ──loopback──▶ harness :8799
token, allowlist, Origin refused
- The computer still owns agents, keys, transcripts, and computers.
- Pairing stays Settings → Companion (QR / 6-digit / Bonjour / manual /
MagicDNS). The Android app only redeems openmausbot://pair.
- Same HTTP + SSE allowlist in
companion/src/routes.ts.
- Same decode/fold contract as
ios/Sources/CompanionCore, pinned by
ios/Tests/CompanionCoreTests/Fixtures.
server/ stays untouched. companion/ stays untouched unless a route the
merged iOS app already uses is missing — I don't think any is.
What I am actually asking
Do you want android/ in this repo?
Native Kotlin + Compose, sitting next to ios/. A fine answer is no — it can
live in a fork.
A Play Store listing can wait. Sideload / Play Internal is enough for a first
merge. Same review note as iOS: a reviewer with no OpenMausBot install still
needs a path that opens (demo/preview).
Proposed v1 (parity with merged ios/ on main)
In: pair, roster, chat, approvals, tasks/search/versions/reactions/share,
computer preview + cloud join, local notifications while connected.
Out of v1: voice/call, keys, connectors, VM, killed-app push, and anything
not yet on main in ios/. Follow the merged iOS app; don't outrun it.
How I would split it
android/core — models, SSE, fold, client, pairing, failover. Tests
against the existing iOS fixtures. No Activity.
- Session + pair + roster + chat + approvals.
- Tasks / search / versions / reactions / share.
- Computer preview + cloud join + settings + local notifications.
- CI:
:core:test on Ubuntu; :app:assembleDebug when the SDK job exists.
Each PR stays additive under android/. No dist-server/, no new sidecar
route without its own review.
What I will not do
- Bind the harness to the LAN
- Serve
src/ in a WebView
- Widen the allowlist "just in case"
- Ship push/relay or a hosted copy of local data
If this isn't a direction you want, that's fine — say so and I'll pick
something else.
CONTRIBUTING says big changes should start as an issue. This is that, before
any Android code.
The iOS companion is already in-tree (
ios/+companion/, via #146 / #160 /#161 / #204). I'd like to add the same OpenMausMobile for Android: a native
Kotlin + Compose client in
android/, next toios/. Same product, samesidecar — so people can use the companion on either phone.
I have not started a PR. I want agreement on putting it in this repo, and on
the split, first.
What this is (and is not)
The phone is a thin remote client of the existing sidecar, not the desktop UI
on a smaller screen and not a hosted copy of the web app.
MagicDNS). The Android app only redeems
openmausbot://pair.companion/src/routes.ts.ios/Sources/CompanionCore, pinned byios/Tests/CompanionCoreTests/Fixtures.server/stays untouched.companion/stays untouched unless a route themerged iOS app already uses is missing — I don't think any is.
What I am actually asking
Do you want
android/in this repo?Native Kotlin + Compose, sitting next to
ios/. A fine answer is no — it canlive in a fork.
A Play Store listing can wait. Sideload / Play Internal is enough for a first
merge. Same review note as iOS: a reviewer with no OpenMausBot install still
needs a path that opens (demo/preview).
Proposed v1 (parity with merged
ios/on main)In: pair, roster, chat, approvals, tasks/search/versions/reactions/share,
computer preview + cloud join, local notifications while connected.
Out of v1: voice/call, keys, connectors, VM, killed-app push, and anything
not yet on
maininios/. Follow the merged iOS app; don't outrun it.How I would split it
android/core— models, SSE, fold, client, pairing, failover. Testsagainst the existing iOS fixtures. No Activity.
:core:teston Ubuntu;:app:assembleDebugwhen the SDK job exists.Each PR stays additive under
android/. Nodist-server/, no new sidecarroute without its own review.
What I will not do
src/in a WebViewIf this isn't a direction you want, that's fine — say so and I'll pick
something else.