Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Mobile App

ankurCES edited this page Jun 8, 2026 · 6 revisions

Mobile App (blugo)

blugo is blumi's companion phone app for Android — a Flutter client that mirrors the blumi terminal UI (TUI) and talks to a blumi serve gateway over your local network. It lets you drive the same blumi AI coding-agent session from your phone: chat with streaming replies, approve tool calls, manage sessions, delegate work across a grid of machines, and use voice — all without anything leaving your Wi-Fi. blumi is a terminal-first AI coding assistant; blugo is how you carry that assistant in your pocket. It's tuned for the Pixel 9 Pro Fold (single-pane in portrait, multi-pane unfolded) but runs on any modern Android device.

TL;DR / Key facts

  • blugo is blumi's Android phone app, built with Flutter; it mirrors the blumi TUI.
  • It connects to a blumi serve gateway over your LAN — REST + Server-Sent Events (SSE), same session as the terminal and browser.
  • Gateways are auto-discovered over mDNS (multicast DNS) and shown on an interactive network diagram; you can also add one by IP (host:port).
  • Tool calls are gated with on-phone permission cards — Allow once / Allow session / Deny (safe commands auto-approve).
  • Dispatch gives each node its own chat thread plus a Broadcast channel, with push notifications via Firebase Cloud Messaging (FCM).
  • Push is Android-only today and zero-config on the LAN once a Firebase service account is dropped on the gateway.
  • Voice: text-to-speech (ElevenLabs / OpenAI) and microphone-to-text (Whisper).
  • Built with Flutter 3.44.1; install a signed release APK via adb install or build it yourself.

What is blugo?

blugo is the official blumi phone app for Android. It is a Flutter client that connects to a blumi serve gateway running on your computer and renders the exact same blumi session you see in the terminal — streaming chat, tool approvals, sessions, the grid, and voice. Because it talks to your own gateway over your LAN, your code and prompts stay on your network.

Welcome · interactive grid Chat · streaming Control center Command palette
welcome grid diagram chat control command palette

The whole app rides one design system (Living-Rose tokens + a reusable widget kit), so every screen shares a consistent, animated look — gradient wordmarks, accent-bordered chat bubbles, status colors, pressable cards, and reduced-motion-aware transitions.

When the agent calls a gated tool (and YOLO is off), an inline permission card appears — Allow once, Allow session, or Deny, right from the phone (safe commands like echo auto-approve; writes and dangerous commands are gated):

blugo permission card — Allow once / Allow session / Deny for a FileWrite

Welcome screen — your grid at a glance

The welcome screen is an interactive network diagram of your blumi grid (drawn natively, no WebView): this device is the hub at the center, your saved gateways orbit it on gradient spokes, and auto-discovered (mDNS) gateways appear as dashed/dotted nodes with a + badge. A radar sweep animates while it scans the LAN.

  • Tap a saved nodeConnect · Edit · Delete (the forget button sits on the side).
  • Tap a dashed (discovered) node → a connect sheet with the password auto-focused; the name, host, and port are pre-filled from discovery.
  • + Add → add a gateway by IP (host:port).
  • A saved gateway whose token went stale prompts for the password again on connect.

How do I connect the phone app to a gateway?

Start a blumi serve gateway on your machine, then tap its node on the blugo welcome diagram (or add it by IP) and enter the gateway password. The same session is then live in the TUI, the web UI, and the phone.

  1. On your machine, start a gateway → Gateway:
    blumi serve pair
    blumi serve install --host <LAN-ip>
  2. Open blugo. Saved + discovered gateways appear as nodes on the welcome diagram — tap a node to connect, or + to add one by IP (host:port).
  3. Enter the gateway password. Done — the same session is live in the TUI, web UI, and phone.

You can save multiple gateways by name and switch between them; discovered-but-unsaved ones appear automatically as dashed nodes.

What's inside

  • An interactive grid welcome diagram (above) — connect, edit, forget, or add gateways by tapping nodes.
  • A / command palette (also from the composer) for quick actions: new session, compact, undo, YOLO, control center, speak last reply, switch gateway.
  • Streaming chat with markdown + syntax-highlighted code, tool cards, and the animated thinking mascot.
  • Approval / clarify / plan cards — approve tools (once / session / deny) right from the phone.
  • Sessions — new / resume; transcript auto-refreshes after each turn (+ pull-to-refresh).
  • Control center — model, persona, theme, YOLO, and tabs for Status, Tasks, Grid, Usage, Skills, Memory, and Voice.
  • Grid — delegate a task across your LAN grid right from the phone: pick all peers or one, type a task, and get each machine's result back (hostname + output + latency). It's a direct dispatch, so it works on any model — no tool-calling required. See Grid.
  • Voice — TTS (ElevenLabs / OpenAI) and mic→text (Whisper). See Voice.
  • Dispatch — a Telegram-style inbox: one isolated quick-chat thread per node + a Broadcast channel, with push notifications so you can fire-and-forget and get the reply back. See below.

Dispatch — chat each node, get a push back

Dispatch is a lightweight inbox for talking to your nodes without babysitting a session. Open it from the Dispatch icon on any screen, or from a node's Dispatch action on the welcome diagram.

Inbox Thread + push Broadcast · all nodes
dispatch inbox dispatch thread with push broadcast
  • A row per node. Each saved gateway gets its own dispatch thread — an isolated session (stable id dispatch) that's separate from the workbench chat you see in HomeShell, so dispatching never disturbs whatever you're doing in the main session (and vice-versa). The same thread is live whether you reach it from the inbox or a tapped push.
  • Fire-and-forget with push. Send a message, background the app, and when the node finishes its turn a push notification lands with a preview of the reply. Tap it to jump straight into that node's thread.
  • Broadcast. The top Broadcast row fans one message to every saved gateway at once and shows each node's reply in its own card (with a per-node timeout, so one offline node can't block the rest). Great for "say OK", "what branch are you on?", or a quick health-check across the grid.

Push setup (zero-config on LAN)

Push is on by default and needs no settings in the app. To enable backgrounded delivery, drop a Firebase service account on each gateway machine:

# on the gateway (the machine running `blumi serve`)
cp your-firebase-adminsdk.json ~/.blumi/fcm-service-account.json
chmod 600 ~/.blumi/fcm-service-account.json

That's it — the gateway auto-detects the file and starts sending turn-complete pushes via FCM HTTP v1 (the project id is read from the file; registered device tokens are pruned automatically when they go stale). Without the file the gateway is a silent no-op — dispatch still works in-app, you just don't get backgrounded pushes. See Configuration for details.

Push is Android-only for now. The app build needs its own android/app/google-services.json (gitignored); without it the app still builds and falls back to local notifications. Neither the service account nor google-services.json is ever committed.

How do I install blugo?

blugo is distributed as a signed Android APK that you sideload — it is not (yet) on an app store. Build the APK with flutter build apk --release and install it over USB with adb.

A signed release APK is produced by flutter build apk --release. Sideload it:

adb install -r build/app/outputs/flutter-apk/app-release.apk

Build it yourself

Prereqs: Flutter 3.44.1 stable, Android SDK + JDK 17 (flutter doctor all green).

cd blugo
flutter pub get
flutter run -d <device> # debug
flutter build apk --release # release (signing: see blugo/README.md)

Release signing reads android/key.properties + a keystore (both gitignored). Full steps are in blugo/README.md.

Tips

  • The app and gateway must be on the same LAN/Wi-Fi. If discovery fails, add the gateway by IP and check the gateway is running (blumi serve status).
  • Backgrounding the app and returning reconnects automatically (SSE with Last-Event-ID replay).

FAQ

Which platforms does blugo support?

blugo is Android-only today. It's a Flutter app tuned for the Pixel 9 Pro Fold (single-pane in portrait, multi-pane unfolded) and runs on any modern Android device. Push notifications are also Android-only and rely on Firebase Cloud Messaging (FCM).

Is there an app-store download?

No — blugo is sideloaded as a signed APK. Build it with flutter build apk --release and install over USB with adb install -r build/app/outputs/flutter-apk/app-release.apk. Full signing steps are in blugo/README.md.

How does blugo find gateways on my network?

It discovers blumi serve gateways automatically over mDNS (multicast DNS) and draws them as nodes on an interactive welcome diagram — saved gateways on solid spokes, auto-discovered ones as dashed nodes with a + badge. If multicast is blocked, tap + to add a gateway by IP (host:port).

Does my code leave my network when I use the phone app?

No. blugo talks only to your own blumi serve gateway over your LAN using REST and Server-Sent Events (SSE), so prompts and code stay on your Wi-Fi. The one optional outbound path is push notifications, which the gateway sends via Firebase Cloud Messaging (FCM) only if you add a Firebase service account.

How do tool permissions work on the phone?

When the agent calls a gated tool and YOLO mode is off, an inline permission card appears with Allow once, Allow session, or Deny. Safe commands (like echo) auto-approve, while writes and dangerous commands are always gated.

Do I get notified when a node finishes while the app is backgrounded?

Yes, on Android. Dispatch sends a push notification with a preview of the reply when a node completes its turn; tap it to jump into that node's thread. Backgrounded push needs a Firebase service account on the gateway (~/.blumi/fcm-service-account.json) — without it, dispatch still works in-app and falls back to local notifications.

Clone this wiki locally

AltStyle によって変換されたページ (->オリジナル) /