Mobile App
Sophon on iOS and Android — chat, voice, workflows, documents, approvals, push notifications, personalized home feed.
Sophon Mobile is a native iOS and Android app built with Expo React Native. It gives you the full platform in your pocket: chat streams, voice mode, workflow runs, document Q&A, approval queues, scheduled-job management, and a personalized home feed powered by Insights.
Installation
Sophon Mobile is not on the App Store or Google Play yet. Public store releases are planned; nothing in this release is published to either store, and there is no public TestFlight link.
Until then the app is distributed directly by whoever runs your Gateway:
- Android — a signed
.apkyou install on the device, or an internal-distribution build from Expo Application Services (EAS). - iOS — an internal-distribution EAS build, provisioned for the specific devices on your Apple developer team.
- Identifiers — bundle ID and package are both
com.buildersoft.sophon.
Expo Go is not a supported way to run Sophon: push registration needs a development or standalone build.
First-run onboarding
On first launch:
- Welcome — brief intro.
- Server URL — paste your Gateway URL (e.g.,
https://gw.example.com). The app performs a health check; green checkmark means reachable. - Appearance — pick dark / light / system.
- Login — email + password. If multi-tenant, pick a tenant.
- Notification permission — allow push. If declined, you can enable later in device settings.
- Ready — you're in.
The server URL is stored once; subsequent launches go straight to the tab bar.
The five tabs
The app uses a 5-tab bottom navigator:
Home
- Hero card — greeting, date, streak, token budget
- Daily thought — rotating curated quote
- AI summary — narrative of the last week's activity
- Insight cards — scrollable
- Active tasks — live-updating
- Recent sessions — quick-jump
- On this day — LLM-generated historical reflection
Pull-to-refresh to recompute metrics now (bypasses the 30-min cache).
Chat
Session list with search. Tap a session → streaming chat view with:
- Markdown rendering (bold, links, code blocks, tables)
- Tool-call expansion (tap to see inputs/outputs)
- Plan tracker (if the agent generated a plan)
- Agent-activity bar (live status as the agent thinks)
- Approval cards and info-request cards inline, each showing how it ended — Approved, Rejected, Cancelled or Timed out, rather than collapsing everything that isn't an approval into "Rejected". A settled card stays settled across a reload, and closes on its own if the same approval is answered elsewhere
- File attachment picker
- Voice overlay (tap mic to speak; animated orb indicates listening/thinking/speaking)
Voice
Full-screen voice experience:
- Animated orb reflecting state (idle / listening / thinking / speaking), with an agent picker above it
- Tap to talk, tap again to stop. There is no long-press; the mic button toggles
- Transcript of what you said and what came back, plus the pending prompt card
- Response plays through device audio, from your text-to-speech provider when one is active, otherwise the device's own voice
- Tap the mic while Sophon is thinking or speaking to interrupt and talk
- A banner if the device has no speech recognition at all: voice input is off, but you can still hear replies
Voice Center — opened from this tab or More → Settings — is the hub for listening and speech settings (see Sophon Voice).
Workflows
List of your workflows with last-run status. Tap to see the workflow definition and execution history. Run workflows manually with Trigger Now.
More (Settings & navigation hub)
Menu of everything else:
- Agents — list + detail view, SOUL.md preview, read-only Heartbeat info card (enabled, interval, active hours, session mode, autonomy flags — see Heartbeat)
- Channels — which channels are connected
- Skills — installed skills, per-agent toggles
- Memory — browse shared memory entries
- Approvals — pending approval queue
- Cron Jobs — scheduled jobs + history
- Account — profile settings
- Appearance — themes, AMOLED, Material You, haptics
- Voice Center — listening (STT) + speech (TTS) settings, per-user overrides
- Models — LLM provider keys
- Connections — OAuth + API-key services
- Notifications — push categories + quiet hours
Design: Material 3
Version 1.11.0 rebuilds the app on Material 3: native ripple press feedback, edge-to-edge layout with transparent system bars, predictive back gesture, and large touch targets. Motion follows the same system — fade-through tab transitions and collapsing headers on chat, workflows, and documents.
Three complete themes live in More → Appearance:
| Theme | Mode | Notes |
|---|---|---|
| Daylight | Light | |
| Indigo Core | Dark | Default |
| AMOLED | Dark | Pure-black variant of Indigo Core; toggle appears when dark mode is active |
On Android 12+, a Material You toggle syncs accent colors with your device wallpaper. The palette is computed on-device — no wallpaper data leaves the phone — and status colors and brand moments stay fixed, so success/error states read the same on every theme.
Chat reliability
Streaming on mobile is built to survive real-world network and lifecycle churn:
- Per-session stream buffers — each conversation keeps its own buffer, so running concurrent conversations (or returning from background) never drops messages.
- Mid-stream reconciliation — joining or reconnecting to a session with an in-flight task replaces the partial stream with the full persisted message, so you never see a truncated reply.
- Orphaned-stream cleanup — if a task ends while you're disconnected, the stale partial stream is removed instead of lingering in the conversation.
- Pending-approval recovery — on reconnect, the app re-fetches pending approvals, so you can approve or reject requests that arrived while you were offline.
Push notifications
Mobile push is built on Expo's push service, which bridges to APNs (iOS) and FCM (Android). On first launch, the app registers the device with the Gateway and uploads an Expo push token.
Notification categories
| Category | Fires when | Actionable |
|---|---|---|
newMessages | A new chat message arrives | Tap to open session |
approvalRequests | Agent needs approval | Approve / Reject buttons inline (iOS) |
workflowAlerts | Workflow completes or fails | Tap to open run detail |
heartbeat | A heartbeat run took action — controlled by the New messages toggle | Tap deep-links to the session |
systemUpdates | New Sophon release, tenant admin notices | Informational |
Toggle categories in More → Notifications. Heartbeat pushes don't have a separate switch — they're controlled by the New messages toggle.
Quiet hours
Set quiet hours (e.g., 22:00–07:00 in your device's timezone). During quiet hours no push is delivered to that device, in any category — approval requests included. Nothing is queued for redelivery and no badge is applied, so a push that would have fired during quiet hours is simply not sent.
Quiet hours change delivery only. They never decide an approval for you: an approval you don't answer runs its own countdown and expires unapproved, exactly as it would at midday. Everything is still in the app when you open it.
iOS actionable notifications
iOS approval pushes have Approve / Reject buttons directly on the lock screen or Notification Center. Tap to respond without opening the app. Android action buttons are supported where the device supports them.
Voice
See Sophon Voice for the full story, and Voice Surfaces for what differs per surface. On mobile:
- Listening is the phone's own recognizer first. The default input mode is device-first: the phone's own speech recognition produces the transcript and hands it back. That is not the same as on-device processing: the phone platform's own recognizer decides where the audio goes, and Sophon makes no claim about it. See Privacy & Data. Gateway transcription is an optional fallback you turn on, and it is not a live stream — the utterance is recorded on the phone and uploaded for transcription after you stop speaking. Mobile cannot stream audio to the server, so there are no live server-side interim transcripts on the phone, with any provider.
- Replies come from your text-to-speech provider when one is active, otherwise from the device's own voice.
- Approvals can be answered out loud, and they're risk-aware. Low and Medium take a plain "yes"; High and Critical need you to say "yes, approve" — a bare "yes" isn't enough for an action that can't be taken back. A "yes" that also contains "no", "wait" or "don't" counts as unclear, so Sophon asks again; a plain "no" rejects. An unclear answer is re-asked at most twice, then the mic closes and the card waits for a tap while its own countdown keeps running. The on-screen hint under the card always spells out which phrase is needed, because prompts aren't always read aloud.
- Voice only answers prompts from its own conversation. An approval raised by an unrelated session — including a child session that escalates — is never answered by this voice session.
- Questions are not spoken on Mobile. When the agent asks a question with options, answer it on screen. Reading questions aloud on the phone is roadmap, not shipped.
- Voice Center — the settings hub for listening + speech, reachable from the Voice tab and More → Settings. Input mode, the Sophon speech-to-text fallback, native speech fallback, conversation mode and per-user listening overrides live here.
Mic permission is requested on first voice use. If denied, re-enable in device settings.
Deep links
The app registers the sophon:// URI scheme. Deep links open specific screens:
| URI | Opens |
|---|---|
sophon://chat/<session-id> | A chat session |
sophon://approvals/<id> | An approval detail |
sophon://workflows/<id> | Workflow detail |
sophon://documents/<id> | Document detail |
sophon://connect?onboarding=<ticket> | Remote-access onboarding |
Notifications use deep links to open their relevant screen.
Offline behavior
The app caches session list and recent messages. If the network drops mid-chat, you see a Reconnecting… banner; queued messages send when the connection recovers. Sessions opened while offline show the cached view until reconnect.
Push notifications still arrive offline (Apple/Google deliver them independently of the app).
Biometric auth
Optional. Enable in More → Account → Biometric unlock. Uses Face ID / Touch ID on iOS; fingerprint / face on Android.
When enabled, the app requires biometric confirmation to:
- Launch (if set)
- Approve high-risk actions from push
- View memory / settings
Multi-account
More → Account → Switch account — add a second Gateway (e.g., home + work). Each account stores its own tokens and notification preferences. Switch between them without re-signing in.
Haptics
Subtle haptic feedback on:
- Message send
- Approval approve / reject
- Voice orb state changes
- Pull-to-refresh complete
Disable in More → Appearance → Haptics.
Limits and gotchas
- Expo Go doesn't support push. Push notifications require a production or development build (not the generic Expo Go app).
- Background fetch is limited — iOS especially is strict about background task scheduling. Don't rely on the app running in the background to process long jobs; let the Gateway do that and deliver pushes.
- Voice needs mic permission — and, for the default input mode, a device with speech recognition. If the phone has none, the Voice tab says so and voice input is disabled; you can still hear replies.
- No live server transcription on the phone — Gateway transcription, when enabled as a fallback, uploads the recording after you stop speaking. Streaming audio from the phone to the Gateway is roadmap.
- Questions aren't read aloud on Mobile — answer them on screen. Approvals are read aloud and answerable by voice.
- First-login requires internet — the app needs to reach the Gateway for auth. No fully offline mode.
Privacy
- Chat messages, voice transcripts, and attachments all travel directly to your Gateway. No third-party analytics track conversation content.
- Voice audio. In the default device-first input mode, recognition is handled by the phone's own speech service, and only the resulting text reaches Sophon. Do not read that as on-device processing: the platform recognizer decides where the audio goes, and it generally needs a network connection. If you turn on the Gateway transcription fallback, the recorded audio is uploaded to your Gateway and sent on to whichever speech-to-text provider your admin configured. Sophon claims no on-device processing of its own. See Privacy & Data.
- Push tokens are stored on the Gateway alongside user preferences. Revoking a device (More → Notifications → Revoke) removes the token.
- Biometric auth happens on-device — Face ID / Touch ID templates never leave the phone.
Where to go next
- Dashboard — same platform on the web
- Desktop App — native macOS / Windows / Linux
- Sophon Voice — listening + speech setup, Voice Center reference
- Heartbeat — the proactive runs behind the
heartbeatpush category - Approval Gates — how mobile push fits in