Skip to main content
A React Native mobile console built with Expo Router, covering the same operations surface as the web console: streaming console chat, integrations, autonomous sessions, and settings.

Stack

Tabs

console, integrations, autonomous, and settings.

Streaming console

Messages stream over SSE into a Zustand store, with header actions for starting a new chat and stopping a stream in progress. Behavior that matters on mobile specifically:
  • Streaming pauses automatically when the app moves to background.
  • A stream idle timeout retries and re-queues rather than hanging.
  • Grouped messages, time separators for long gaps and day changes, and an unread counter on the “Latest” button while scrolled away.
  • Per-message retry on failed user messages.
  • Markdown rendering with tool-call cards, and a detail modal for long tool payloads.
  • Long-press a bubble to share it; one-tap copy of the last assistant response.

Offline and network handling

  • SQLite-backed offline persistence for console, integrations, and autonomous data.
  • An offline send queue with retry and clear actions, auto-retrying while the app is active.
  • Network-aware queueing wired into React Query’s online manager.
  • React Query cache hydration, pull-to-refresh, and a focus manager that refetches on app resume.

Approvals

Human-in-the-loop approvals carry through to mobile: push notifications and deep links for approval requests, plus an approval history modal with pending counts.

Security

  • SecureStore-backed auth with cookie headers.
  • Biometric and PIN lock with an inactivity timeout, lockout after failed attempts, and a trusted-device toggle.
  • A sign-in guardrail that refuses a misconfigured production API base rather than silently pointing at the wrong environment.

Voice

A voice API settings section supports key entry and a connection test, so a bad key surfaces at configuration time rather than mid-call. Voice statistics and latency appear in the analytics tab. For the voice platform itself, see the StateSet Voice documentation.

Accessibility and haptics

Accessibility state, hints, and touch-slop targets are set across interactive controls, with a deep i18n parity test in CI. Haptic feedback fires on consequential flows — sign-out, account deletion, and retry actions. Locales: English and Spanish in the mobile app. (The web console additionally carries French and Italian.)

Diagnostics and support

A diagnostics panel exposes API and config visibility with copyable output, a release-readiness status, and diagnostics sharing for support handoff. A “report issue” action pre-fills diagnostics. Settings also carries support and account-deletion shortcuts, and an About & Legal screen with policy and support links.

Builds

EAS build profiles with native bundle identifiers are configured for both platforms.
Offline queueing and approvals interact badly if you let them. A queued action is replayed when connectivity returns, by which time the thing it approves may have been handled on the web console — so queue the intent with the record’s version and let the server reject a stale replay, rather than queueing the mutation itself. A biometric lock protects the device, not the queue.

Next steps

Console overview

The web console this mirrors.

Auth flow

The session model behind SecureStore.

Agent pipeline

What the streaming console is streaming.

Voice SDKs

Adding voice to the same surface.
Last modified on August 29, 2026