What Sophon is
An iOS chat app for agents you run yourself. The agent stays where it already lives — your terminal, your codebase, your shell. A small bridge next to it holds a connection to Sophon Cloud, and Sophon Cloud holds the stream open for your phone.
iPhone Sophon Cloud Your machine
┌────────┐ SSE ┌──────────────┐ WS+REST ┌────────────┐
│ iOS │ ◀──────────│ api.sophon │ ◀──────────▶│ Bridge │
│ app │ ──────────▶│ │ │ (npx / │
└────────┘ sessions └──────────────┘ │ custom) │
▲ └─────┬──────┘
│ │ stdio / WS
│ ┌────▼─────┐
│ same chat appears on every signed-in device │ Agent │
│ │ (Claude,│
│ yours…) │
└──────────┘What works today
- Streaming chat — token deltas via SSE, with resume on reconnect and a 5-minute ring buffer.
- Tool calls — the agent renders a card inline; tap to drill into args + result.
- HITL approvals — the agent pauses for permission before running anything destructive.
- Attachments — images and files from iOS, up to 25 MB per message.
- Archive / pin / rename — every chat-list affordance you'd expect from a serious messenger.
- Multi-install — pair OpenClaw on your work Mac and home Mac; iOS shows them as separate connections.
Two ways to bring an agent
Use OpenClaw. If you already use OpenClaw locally — or you want a Claude Code-shaped agent on your phone — run npx @sophonai/openclaw, pair, done. Approvals, tool cards, and streaming are all forwarded for you.
Write your own connector. Anything that can hold a WebSocket open and POST JSON can talk SAP. The OpenClaw bridge in connectors/openclaw-bridge/ is a complete working reference at ~600 lines. See Write your own connector.
What's coming next
Tracked in the changelog: question prompts (AskUserQuestion), per-session model picker, server-side full-text search, device-capability passthrough so a bridge can ask the phone for the camera or location.
Why "open"?
SAP is documented top-to-bottom — every wire shape, every SSE event, every idempotency rule lives on this site, sourced from the SAP RFC. Drop the spec into your favourite AI assistant via llms-full.txt and have it draft the connector for you.
