alpha · macOS + Android first · Windows + iOS coming

Watch your Mac's AI agent.
From your phone.

A tiny daemon on your Mac runs Claude Code in the background. Every tool call streams to your phone in real time — approve, send a follow-up prompt, or hit the kill switch from across the room. Code stays local; only event metadata syncs.

Free tier · ₹0 forever · BYOK from day one · No credit card

offsync · session attached
claude-sonnet-4-6
// type a request — the agent does the rest
$ offsync new "rewrite the webhook to verify signatures"

▎ Reading apps/server/src/routes/billing.ts…
▎ Diff prepared (12 lines added, 4 removed)
▎ tool_call → write_file  awaiting approval…
Offsync · Approval now
write_file · routes/billing.ts
#dev-agent · Slack now
Approve write_file for the billing webhook?
#dev-team · Discord now
write_file · routes/billing.ts (12+ / 4-)

One tool_call_requested event · fanned out to every surface · raced against your local CLI prompt

X25519
Ephemeral DH · QR pairing
<100ms
Event round-trip · India
⌘⇧.
Kill switch · anywhere
₹0
Free tier · forever

The flow

Daemon on the Mac. Cockpit on the phone.

No code leaves your Mac. The daemon publishes only event metadata — what tool ran, what diff was prepared, exit codes — so your phone shows the right card and you can steer without ever opening a laptop.

01

Daemon on your Mac

A tiny background process spawns claude in stream-json mode and parses every event. Files, BYOK keys, and the Claude session stay on the Mac you're sitting at.

$ offsync start
02

Pair with one QR scan

Settings shows a QR with an ephemeral X25519 public key. Scan it from the phone, confirm the fingerprint matches, done. Same scan derives a shared secret for future E2E payloads — no static long-term keys.

fingerprint a3:7f:12:…
03

Watch + steer from the phone

Every assistant_text, tool_call, and tool_result streams to the phone in real time. Send a follow-up prompt, approve a risky tool, or hit the kill switch — all from the cockpit.

⌘⇧. kill_switch via=phone

Surfaces

Two surfaces now. More as we ship.

M1 alpha is the Mac daemon plus the Android cockpit. Windows, iOS, team chat, and the web replay viewer are mapped on the roadmap with concrete milestones — no “coming soon” vapor.

Mac daemon

live

Spawns claude, parses stream-json, publishes to the relay. Tray + kill-switch hotkey + Settings window. Apple Silicon, macOS 12+.

Android cockpit

live

QR-scan pairing with X25519 DH, live AgentEvent stream, prompt input, kill switch. Side-load APK today; Play Store at M3.

Windows daemon

M4

Same daemon, three install channels: npm, NSIS .exe, portable .zip. Identical wire protocol — your Android cockpit pairs to any Mac or Windows machine you own.

iOS cockpit

M5

SwiftUI rebuild of the cockpit. Same protocol as Android. TestFlight invites open after Apple Org enrolment + Sign in with Apple land.

Slack & Discord

M3

Channel-level approval flows. Block Kit + Discord buttons, HTTP-interaction bot (no gateway). Same event stream the phone subscribes to.

Web replay viewer

M3

Browse archived sessions from any browser. Same card-stack rendering as the phone, read-only. For when you want to revisit yesterday's debug session at a real keyboard.

Stack

Claude Code today. Codex, Aider, Gemini at M3.

The daemon is agent-neutral by design. M1 ships against Anthropic's claude CLI; the same parser + relay slot in around any agent that emits structured stream-json — adapters land at M3.

claude code · live openai codex · M3 aider · M3 gemini cli · M3 mcp servers · M2 + open spec · adapter your own

Your keys, your Mac

BYOK lives in macOS Keychain only — never on our backend, never on the relay. The daemon spawns claude with whatever auth your CLI already has, or an explicit key you set.

  • Keychain-resident · 0 server copies
  • falls back to claude.ai OAuth
  • rotate without re-pair

Ephemeral DH pairing

QR-scan pairing uses X25519 ephemeral keys — both halves are GC'd seconds after pairing. The shared secret feeds end-to-end payload encryption at M2; the backend never holds either secret half.

  • 128-bit pid · 5-min QR TTL
  • 60-s typed-code fallback
  • 5/min per-user rate limit

Append-only event log

Every session is a strictly ordered, replay-from-seq stream. Reconnects pick up exactly where they left off — no duplicate events, no lost approvals. Per-machine isolation in the relay.

  • monotonic seq · sinceSeq replay
  • in-memory ring · 500 events
  • resumes mid-flight

Ship while you walk to the coffee machine.

A two-minute install. No credit card. The free tier is enough to get the feel.