Motebit

Mobile App

Expo setup, dual providers, voice input, goals, and MCP trust.

The mobile app is a React Native + Expo surface with full parity to the desktop. Same identity, memory, and governance — different body. The creature renders via expo-gl + Three.js, and all persistence uses expo-sqlite with the same adapter pattern.

Running the mobile app

pnpm --filter @motebit/mobile start

This launches the Expo dev server. Scan the QR code with Expo Go, or press i for iOS simulator / a for Android emulator.

First launch

On first launch, the app generates an Ed25519 keypair, stores the private key in the device keychain (expo-secure-store), and creates your motebit identity. No account creation, no server — the identity lives on your device.

Choosing a provider

Open settings (gear icon, top right) to configure your LLM:

ProviderSetup
Ollama (default)Requires a running Ollama instance. Set the endpoint URL in settings (default http://localhost:11434).
AnthropicEnter your API key. Stored in the device keychain, never on disk.
HybridUses Anthropic as primary, falls back to Ollama on failure. Requires both an API key and an Ollama endpoint.

Set the model name in the Model field. Default: llama3.2.

Voice input

Voice input uses a 5-state pipeline:

  1. Off — Microphone disabled
  2. Ambient — VAD (Voice Activity Detection) listens for speech onset
  3. Voice — Recording active, user is speaking
  4. Transcribing — Whisper STT processes the audio
  5. Speaking — TTS plays the agent's response

Enable voice in the Voice settings tab. Requirements:

  • STT: Requires an OpenAI API key (Whisper transcription)
  • TTS: OpenAI TTS (with expo-speech as fallback if no key)
  • VAD: Neural model enabled by default for accurate speech detection

Voice settings:

SettingDefaultDescription
Voice enabledOffMaster toggle for voice pipeline
TTS voicealloyOpenAI voice (alloy, echo, fable, onyx, nova, shimmer)
Auto-sendOnAutomatically send transcribed text
Voice responseOnSpeak the agent's reply aloud
Neural VADOnUse neural model for speech detection

Slash commands

Type / in the chat input to use commands:

CommandAction
/model <name>Switch model
/conversationsList past conversations
/newStart a new conversation
/memoriesBrowse stored memories
/syncTrigger manual sync
/exportExport all data (JSON)
/settingsOpen settings
/summarizeSummarize current conversation
/helpShow available commands

Goal execution

The mobile app supports plan-based goal execution — the same system as the desktop and CLI. Goals run on a 60-second scheduler tick in the background.

Access goals from the top-left Goals button. When a goal executes:

  1. The PlanEngine breaks it into steps
  2. Each step runs with tool access
  3. Tool calls that require approval surface as approval cards in chat
  4. A running indicator shows goal status

Goal outcomes (completed/failed) appear as system messages with summaries.

MCP servers

Connect external tools via MCP (Model Context Protocol). Mobile supports HTTP transport only (no stdio).

In the Tools settings tab:

  1. Tap Add Server — enter name, URL, and optional trust toggle
  2. On connect, the manifest is SHA-256 hashed and pinned
  3. Subsequent connections verify the manifest matches — trust is revoked on mismatch

Per-server trust

Each MCP server has a trust toggle:

Trust levelBehavior
Untrusted (default)Every tool call requires explicit approval
TrustedTools execute automatically (same as builtin tools)

Toggle trust on any connected server from the Tools tab. Trust changes take effect immediately — tools are re-registered with updated approval requirements.

Operator mode

Operator mode unlocks high-risk tools. Toggle it in settings:

  1. First time: set a 4-6 digit PIN
  2. Subsequent times: enter your PIN to enable
  3. Reset PIN available in settings

Multi-device pairing

Pair with another device running the same motebit identity:

  1. On existing device: Initiate pairing (generates a 6-character code)
  2. On new device: Claim pairing with the code
  3. On existing device: Approve or deny the claim
  4. Sync link establishes automatically

Requires a sync relay URL (configured in settings).

Settings overview

The settings modal has 7 tabs:

TabControls
IntelligenceProvider, model, API key, Ollama endpoint
AppearanceColor preset (8 options: borosilicate, amber, rose, violet, cyan, ember, sage, moonlight)
GovernanceApproval preset (cautious/balanced/autonomous), operator mode
MemoryPersistence threshold, secret rejection, max memories per turn
VoiceEnable/disable, TTS voice, auto-send, response, VAD
ToolsMCP servers, trust management, budget (max calls per turn)
SyncRelay URL, device linking, pairing

Configuration storage

DataStorage
Settings JSONAsyncStorage (@motebit/settings)
API keysDevice keychain (expo-secure-store)
Identity, events, memoriesSQLite (expo-sqlite, WAL mode)
MCP server configsAsyncStorage (@motebit/mcp_servers)
Identity fileAsyncStorage (@motebit/identity_file)