redroid/README.md
Natalie b6709a755d feat(redroid): the shared redroid Android box app
Owns the box-side services for the lilith screening tools (Mr. Number, WhatsApp),
extracted from the duplicated cloud/ dirs in @mr-number / @whatsapp:
- cloud/adb-keyboard, cloud/ocr-service (mrnumber-ocr systemd unit), cloud/terraform
  (read-only IaC reference; droplet owned by uvlava).
- deploy/deploy-droplet.sh — push + (re)start the box services.

The screening apps drive this box over adb; they no longer carry their own copies.
Shared client code lives in @lilith/redroid-client (PyPI) + @lilith/redroid-mcp (Verdaccio).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 15:07:59 -04:00

2.5 KiB

@redroid — the shared redroid Android box

A headless Android-on-DigitalOcean droplet (lilith-store-redroid, 45.55.191.82) that runs the apps the lilith screening tools drive — Mr. Number and WhatsApp — on one device. This repo owns the box-side services; the screening apps (@mr-number, @whatsapp) drive it over adb and reuse its services without deploying it.

The split

@redroid (this repo) ── the box ──────────────────────────────────────────────
  cloud/adb-keyboard/      adb-keyboard console server   :8001  (loopback/SSH)
  cloud/ocr-service/       mrnumber-ocr (tesseract OCR)  :8003  (app-agnostic)
  cloud/terraform/         IaC reference (read-only; owned by uvlava)
  ws-scrcpy (on box)       browser console               :8000  (sign-in/calibration)
  deploy/deploy-droplet.sh push + (re)start the box services

@lilith/redroid-client (PyPI) ── shared client *code* ─────────────────────────
  RedroidDevice (adb base), vision extraction, screening recorder

@lilith/redroid-mcp (Verdaccio) ── shared MCP *code* ──────────────────────────
  createRedroidServer / runRedroidMcp factory

@mr-number / @whatsapp ── the screening apps ──────────────────────────────────
  client/*_lookup.py  (subclass RedroidDevice)   +   mcp/index.ts (factory call)
  per-app plum console-tray LaunchAgent (redroid-{mrnumber,whatsapp}-console)

Each screening app is a consumer of this box and of the two packages. The box runs both target apps off one /data volume.

Deploy the box services

deploy/deploy-droplet.sh        # scp adb-keyboard + ocr-service, (re)start, status

The droplet itself is provisioned by the uvlava infranet IaC — not from here. cloud/terraform/android-redroid.tf.reference is read-only context.

The WhatsApp constraint

WhatsApp allows one registration per number; the box uses a dedicated Quinn-controlled number for WhatsApp (registering her primary would log her phone out). Mr. Number has no such constraint.

Verify

bash -n deploy/deploy-droplet.sh
python3 -m py_compile cloud/ocr-service/server.py cloud/adb-keyboard/server.py
ssh -i ~/.ssh/id_ed25519_1984 root@45.55.191.82 'adb devices'

Repo on cocotte-forge: ssh://git@134.199.243.61:2222/platform/redroid.git.