Beacon iOS

The cockpit, in your pocket.

A native SwiftUI client for the same Prometheus daemon your desktop already pairs with. No separate account, no separate backend — pair it once and it becomes sessions, chat, approvals and a live status view, plus a lock-screen look at a run in progress.

The Screens Beacon Desktop

iOS · SwiftUI · 5 screens · TestFlight pending

Status: v0.1 — same daemon, same control plane, smaller screen.

Prometheus Live — Open Source

The agent harness. Stands alone on your hardware.

Beacon Live — Hardening

The desktop cockpit. Sits on Prometheus.

Beacon iOS Live — Beta

The cockpit in your pocket. Same daemon, same control plane.

Cognition In Development
Blackboard In Development
iPhone lock screen showing a Beacon Live Activity for a running coding round — 'onion-router demo, round 3, tool, bash, 3 tools' with 2:22 elapsed

A coding run, live on your lock screen — round, tool and elapsed time, no unlock required.

Why A Phone

The Pocket

Three things a desktop can't do.

Beacon Desktop is where you drive; Beacon iOS is where you get told. It isn’t a smaller copy of the desktop app — it’s a different relationship with the same daemon, built around three things only a phone in your pocket can do.

The Screens

Five Screens

Every session, wherever it started

Search, and three filters — All, Unread, Voice. Sessions group by Pinned, Today and Earlier — the same day-boundary grouping Desktop uses, so “Today” means today even close to midnight. A two-letter badge on each row says where a session came from: a coding run kicked off from the phone itself, a thread from Beacon Desktop, a conversation that started in Telegram — one list, whichever surface you used.

Beacon iOS Sessions tab — search bar, All/Unread/Voice filters, sessions grouped into Pinned, Today, and Earlier This Week with two-letter source badges

Sessions — pinned, grouped by day, tagged by source.

Chat that still knows the whole toolset

Replies render as markdown — headings, bold, lists — with a composer that shows the active model, an Agent | Chat toggle, and a context reading that says ctx ? no reading yet rather than guess at a number it doesn’t have. In this thread the agent offers to open a draft in Documents so the wording can be tweaked before it ships — Documents has no tab on the phone, but chat isn’t limited to screens the phone happens to render. It’s the same daemon and the same toolset Desktop uses.

Beacon iOS chat thread 'Draft the v0.3 changelog' — a user request and a markdown-formatted assistant reply with a changelog and an offer to open Documents

A finished reply — markdown rendering, and an offer to use a tab the phone doesn’t have.

An approval terminal, not just a viewer

A blocked tool call shows the exact command — here, a pytest run gated before it ships — how long ago it fired, and a countdown to when the request expires. Approve once, deny, or expand “Remember this decision” to grant it going forward; grants land in a Remembered Grants list you can see, and — the empty state says it outright — nothing is remembered until you choose to remember it. The tab badge carries the pending count even while you’re looking at something else.

Beacon iOS Approvals tab — a pending bash command approval with Approve once and Deny buttons, a 'Remember this decision' option, and an empty Remembered Grants list

Approval required — the command, an expiry, and a choice.

The Armilla, ported — and just as honest

Status carries the same armillary-sphere visualization from Desktop’s Mission view — the stand is Beacon, the moving rings are live daemon telemetry, and the sphere sits inert the moment nothing is actually happening. Below it, the same discipline Desktop is built on shows up on a four-inch screen.

Same Rule, Smaller Screen

The capture above reads Couldn’t list background tasks — this is not a statement that none are running, and the same for artifacts. A screen that can’t check something and a screen with nothing to report look identical unless the app is willing to say which one it is. Beacon iOS says which one — on the same screen where a coding run, seed-onion-router · running · 3 rounds, is visibly in progress underneath.

Beacon iOS Status tab — the Armilla armillary-sphere visualization, daemon online, a running coding run 'seed-onion-router', and two warnings that background tasks and artifacts could not be confirmed

Status — the Armilla, a live coding run, and two lines that refuse to guess.

Pairing goes through Desktop, not a retyped code

This isn’t Desktop’s own six-digit daemon setup — it’s a phone joining a daemon Desktop is already paired to. Open Devices on Beacon Desktop, and the phone scans the QR it shows, or — camera unavailable, as in a simulator or a locked-down machine — pastes the beacon://pair link instead. Either way, the phone ends up talking to the same daemon, over the same tailnet, that Desktop already trusts.

Beacon iOS 'Pair with daemon' sheet — a camera viewfinder reading 'camera unavailable, paste the link below', the prompt 'Scan the pairing code shown by Beacon Desktop', and a field to paste a beacon://pair link

Pair with daemon — scan, or paste the link if there’s no camera.

Known Limits

The things Beacon iOS doesn’t do yet, so you’re not surprised mid-tap:

Get Beacon iOS v0.1 · TestFlight pending

Not yet on the App Store.

I not yet

iOS

TestFlight · in progress
Request access↗

Opens a request on GitHub. You’ll also want Beacon Desktop already paired to your daemon — iOS joins through it.

The daemon it pairs with is open today — Prometheus.