Files
opencode-mobile/AGENTS.md

2.3 KiB

Mobile App - AGENTS.md

Overview

React Native / Expo mobile client for opencode. Connects to an opencode server instance via HTTP + SSE for real-time updates.

Architecture

packages/mobile/
├── app/                    # Expo Router file-based routing
│   ├── (tabs)/             # Tab navigation (sessions, connections, settings)
│   ├── session/[id].tsx    # Chat screen
│   └── connection/         # Add/edit connection screens
├── src/
│   ├── components/         # Reusable UI components
│   │   ├── markdown/       # Markdown renderer (wraps react-native-marked)
│   │   └── AuthGate.tsx    # Biometric auth gate
│   ├── lib/
│   │   ├── sdk.ts          # HTTP + SSE client for opencode server API
│   │   └── types.ts        # Re-exported types
│   └── stores/             # Zustand state stores
│       ├── sessions.ts     # Session list, messages, parts
│       ├── connections.ts  # Server connections, client lifecycle
│       ├── events.ts       # SSE event stream, status tracking, permissions, questions
│       └── auth.ts         # Biometric auth

Key Patterns

  • SSE for real-time: The events.ts store connects to /global/event and dispatches to other stores
  • Fire-and-forget sends: sendMessage posts to the API but doesn't await response; SSE events drive all UI updates
  • Session status: Derived from session.status events (idle/busy/retry) + last part type for status text
  • Markdown: react-native-marked wrapped in our own Markdown component with custom CodeBlock (copy button). Designed to be swappable/publishable later.

Style Guide

Follow the root repo AGENTS.md style guide:

  • Prefer const over let
  • Avoid else statements, use early returns
  • Prefer single-word variable names
  • Avoid try/catch where possible
  • Avoid any type
  • Use Bun APIs where applicable (for scripts, not in RN runtime)

Running

cd packages/mobile
bun install
bun start        # Expo dev server
bun run ios      # iOS simulator
bun run android  # Android emulator

Connecting

Run opencode serve --hostname 0.0.0.0 --port 4096 on your machine, then add a connection in the app with your machine's local IP and port 4096.