A native macOS terminal · built on Ghostty

One terminal. Every Mac you own. The people you trust.

Tandem is a terminal where two or more Macs share the same live session: same cells, same cursor, same scrollback, one authoritative shell. Your agent sessions stop being trapped in the laptop that started them.

True AppKit native, not Electron Ghostty engine, pinned One writer at a time, always
tandem · api-refactor · one shared shell you're typing

the cursor belongs to exactly one person at a time; the other Mac watches live

Sessions

Your agent sessions, titled and findable.

Most terminal tabs today are Claude or Codex sessions. Tandem treats them that way: every session leads with an AI title, a two-line summary, and a quiet project · branch line. Start an agent in any directory with one keystroke, or resume a past session by name.

Healthy is silent. No green dots, no "Live" badges; only reconnecting and offline get a marker.

A session hosted on your other Mac appears as an ordinary, quietly cloud-marked tab.

Fix flaky auth tests Migrate billing webhooks perch · main
# claude · api-refactor · branch fix/auth-retry ▸ rewriting the retry backoff in auth/session.ts… ✓ 12 passing · 0 flaky after 40 runs ⌘⏎ start an agent here · ⌘K resume by name
host this macengine ghosttyblocks osc-133
Make Local · api-refactor
# moving from studio-mac → this macbook repo state clean · branch fix/auth-retry · ahead 3 agent session checkpointed · 142 turns background jobs 2 paused · will resume here › review & switch · the old host fences off atomically
epoch 17 → 18rollback 60s window

Hand-off

Leave the office. Keep the session.

Make Local pulls a session onto the Mac you're on; Make Remote pushes it to another machine or a cloud runner. Not a screen share and not a copy: the repo, the whole agent conversation, and the background jobs move, then the old host steps down atomically.

A running process isn't secretly duplicated. Hand-off is checkpoint and restore, with a staged review before anything switches.

Exactly one accepted host at a time; stale output from an old host is rejected, not merged.

Sharing

Share your terminal without sharing the keyboard.

Invite someone into a live session read-only, or grant write turns: the first device to type holds a short renewable turn, the other waits its turn rather than interleaving keystrokes. The owner can revoke instantly.

Roles are explicit: owner, editor, viewer, external. Everyone sees who holds the turn.

Secrets are masked before the renderer, before persistence, before anything leaves the machine.

When the network drops you get a calm "Reconnecting…", never a lost session.

api-refactor · shared
▸ claude · refactoring the auth middleware… ⧉ mira joined read-only · requested a write turn grant 5m · one writer at a time, revoke any time roster: robin (owner) · mira (editor · 4:12 left) · sam (viewer)
writer miraviewers 2secrets masked

The rules it never breaks

Boring guarantees, so the exciting parts are safe.

01

One authority

Each session has exactly one live host. No active-active shells, ever.

02

Nothing lost, nothing doubled

Output is journaled before it's sent, deduplicated by id, and gap-filled exactly on reconnect.

03

Secrets stay masked

Redaction happens before rendering, storage, or relay. A shared screen never shows your keys.

04

Humans approve the big stuff

Commit, push, install, and host transfer are confirmed by a person. Always.

Everywhere you are

Native on the Mac. Along for the ride everywhere else.

macOS

The real app

AppKit and Metal over the pinned Ghostty engine. Real keyboard, IME, selection, links, and command blocks; a terminal, not a web view.

iPhone

The companion

Watch a session from the couch, approve a hand-off, grant a write turn, or nudge an agent along. Reading first, typing when you must.

Web

The viewer

A read-only browser view for sharing with people who'll never install anything. Same session, same masking, zero setup.

Runs beautifully with Relay. Relay keeps your agent's accounts and models flowing; Tandem keeps the terminal they live in shareable and movable. Cloud runners show up in both.

About Relay →

Tandem beta

Stop asking which Mac the session is on.

Join the beta