macOS · guests join from any browser
Share a real terminal.
Not a video of one.
Everyone in the session is attached to the same shell. You type, they see it. They type, you see it. No pasting commands back and forth, no read-only screen share, no handing out SSH.
Free · Apple silicon and Intel · macOS 13+
dana@studio ~ % ./deploy --dry-run checking 14 services ... ok registry auth ......... ok would restart: api, worker dana@studio ~ % █
Pasting commands
They typo it. You re-paste it. Nobody is sure which machine produced the output on screen.
Screen sharing
Read-only and re-compressed. They can see your terminal. They can't use it.
Handing out SSH
All-or-nothing access to a box, and no record of who did what.
As easy to join as a call
Tandem is a terminal you can invite people into. Start a session, send the link, and they're looking at your live shell — in a browser, in seconds. No install, no account, no SSH keys to hand out. The same "click a link and you're in" as a video call, except what everyone joins is a real running shell.
Send a link, they're in
Guests open it in Chrome or Safari and get a full terminal — on Windows and Linux too, up to a hundred at once. They arrive watching, and you grant typing per person whenever you want it.
Say it instead of typing it
Tap the right ⌘ key and describe what you want. Deepgram transcribes as you speak, and the phrase comes back as a shell command sitting on your prompt — for you to read and run, or not.
Work in it together
Chat that can't reach the shell, a log of who joined and who typed, kick and ban, and tabs so you can host one session while watching another.
One shell, many people
The host runs a real login shell in a pty. Every byte it emits fans out to everyone; every keystroke that's allowed goes back into the same pty. There is only one shell, so there is nothing to merge and nothing to drift.
Guests need nothing
Send a link. It opens a full terminal in the browser — no account, no install, no extension. Works on Windows and Linux today.
Read-only by default
Everyone arrives watching. Grant typing per person, revoke it mid sentence.
Real terminal, real programs
vim, top, colors, job control. Bytes pass
through untouched, so nothing is emulated badly.
Chat that can't touch the shell
A separate frame type, not a filter — there is no code path from a chat message to your pty.
Tabs
Each tab is its own session with its own shell. Host one while watching another.
Nobody sees your network
The listener binds loopback only. No inbound port, no firewall change, and guests never see each other's addresses.
One terminal. Everyone who needs it.
Five people on four continents, attached to one running shell. Nobody is watching a recording of anybody's screen — the bytes arrive when they arrive. Here are two of them.
An illustration of a real session, scripted so it plays the same way every time.
Say it. Don't type it.
Tap the right ⌘ key, say what you want, tap it again. The command appears at your prompt — and stops there. Return is yours to press.
“what's that command to list the files in the directory…” → heard what's that command to list the files in the directory → staged timmy@mac tandem % ls -al▊ ⏎ to run it · edit it first · or just delete it
Command default
Describe the goal. It comes back as a shell command, typed at the prompt but never executed — there is no code path from your voice to a running process that doesn't pass through your Return key.
Dictate
Types exactly what you say, with no interpretation. For a REPL, a chat box, or an agent like Claude Code that wants prose rather than a command.
Stopping is the trigger
Not a pause detector. Thinking mid-sentence used to send half a thought; now the second tap means I'm done. One key, no hold, and no Accessibility permission to grant.
Guests can talk too
The browser client has the same control — so the person you invited can drive the shell by voice with nothing installed, if you've let them type.
No key in the browser
Audio goes to Tandem's relay as plain 16 kHz PCM and it holds the speech credential. A guest's browser never sees one.
Read it before it runs
A wrong transcription is a wrong suggestion, sitting on the prompt where you and everyone watching can see it.
Voice isn't end-to-end encrypted, and it can't be: turning speech into a command means something has to hear it. Between the two taps, audio goes to Tandem's relay and on to Deepgram for transcription, and the phrase goes to Anthropic to become a command. Tandem keeps no recording, and the microphone is off the rest of the time — but the bytes do leave your machine in the clear to those services. If that trade isn't one you want on a given session, don't press the key; everything else works the same.
Built for sharing something real
1 A token in the link
24 characters, checked during the HTTP handshake — before a WebSocket exists. Scanners that find the hostname get a refusal, not a terminal.
2 A passcode that isn't in the link
Shared out of band. Until it passes, that connection receives zero terminal bytes. Three wrong tries drops the connection; ten locks joining until you re-open it.
End-to-end encrypted
Terminal traffic is AES-GCM encrypted between host and guest. The key travels in the link's fragment, which browsers never send to a server — so the relay routes your session without being able to read it.
Kick, ban, and a log
Remove someone with a message explaining why. Every join, refusal and permission change is recorded with a timestamp.
Worth saying plainly: a guest you let type has your shell, as you. There is no command filtering. Grant it to people you'd hand the keyboard to.
Get it
Signed and notarized by Apple · Apple silicon and Intel · macOS 13+
Drag it to Applications. Nothing else to install, no account to make — and it updates itself from then on.