Tandem — share a real terminal
macOS · guests join from any browser
Share a real terminal.<br>Not a video of one.
Everyone in the session is attached to the same shell. You type, they<br>see it. They type, you see it. No pasting commands back and forth, no<br>read-only screen share, no handing out SSH.
Download for macOS<br>See how it works
Free · Apple silicon · macOS 13+
dana@studio — tandem<br>3 here
dana@studio ~ % ./deploy --dry-run<br>checking 14 services ... ok<br>registry auth ......... ok<br>would restart: api, worker<br>dana@studio ~ % █
priya worker restarts drop the queue — drain first?
you good catch, draining now
Pasting commands
They typo it. You re-paste it. Nobody is sure which machine produced the<br>output on screen.
Screen sharing
Read-only and re-compressed. They can see your terminal. They can't<br>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<br>session, send the link, and they're looking at your live shell — in a<br>browser, in seconds. No install, no account, no SSH keys to hand out. The<br>same "click a link and you're in" as a video call, except what everyone joins<br>is a real running shell.
Send a link, they're in
Guests open it in Chrome or Safari and get a full terminal — on<br>Windows and Linux too. They arrive watching, and you grant typing per<br>person whenever you want it.
Say it instead of typing it
Tap the right ⌘ key and describe what you want. Deepgram<br>transcribes as you speak, and the phrase comes back as a shell command<br>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,<br>kick and ban, and tabs so you can host one session while watching<br>another.
One shell, many people
The host runs a real login shell in a pty. Every byte it emits fans out to<br>everyone; every keystroke that's allowed goes back into the same pty. There<br>is only one shell, so there is nothing to merge and nothing to drift.
guest keystrokes, when the host allows it
YOUR MAC
% zsh<br>one pty
Your terminal<br>loopback · never leaves the Mac
Tandem relay<br>nothing for you to set up<br>routes ciphertext · cannot read it
Guest<br>macOS app
Guest<br>any browser · nothing installed
Guests need nothing
Send a link. It opens a full terminal in the browser — no account, no<br>install, no extension. Works on Windows and Linux today.
Read-only by default
Everyone arrives watching. Grant typing per person, revoke it mid<br>sentence.
Real terminal, real programs
vim, top, colors, job control. Bytes pass<br>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<br>message to your pty.
Tabs
Each tab is its own session with its own shell. Host one while watching<br>another.
Nobody sees your network
The listener binds loopback only. No inbound port, no firewall change,<br>and guests never see each other's addresses.
One terminal. Everyone who needs it.
Five people on four continents, attached to one running<br>shell. Nobody is watching a recording of anybody's screen — the bytes arrive<br>when they arrive. Here are two of them.
ONE SHELL
San Francisco<br>São Paulo<br>Berlin<br>Bangalore<br>Sydney
dana<br>San Francisco<br>HOST
priya is read-only
relay
148 ms
9,100 km
priya<br>Berlin<br>GUEST · BROWSER
read-only<br>nothing installed
priya joins read-only and watches<br>Replay
A scripted illustration — not a<br>live session.
Say it. Don't type it.
Tap the right ⌘ key, say what you<br>want, tap it again. The command appears at your prompt — and stops there.<br>Return is yours to press.
VOICE<br>listening
Command
“find every file bigger than a hundred megs<br>under this directory”
→ heard find every file bigger than 100 megs under<br>this directory<br>→ staged
timmy@mac tandem % find . -size +100M▊
⏎ 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<br>but never executed — there is no code path from your voice to a<br>running process that doesn't pass through your Return key.
Dictate
Types exactly what you say, with no interpretation. For a REPL, a chat<br>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;<br>now the second tap means I'm done. One key, no hold, and no<br>Accessibility permission to grant.
Guests can talk too
The browser client has the same control — so the person you invited can<br>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<br>speech credential. A guest's browser never sees one.
Read it before it runs
A wrong transcription is a wrong suggestion, sitting on the<br>prompt where you and everyone watching can see it.
Voice isn't end-to-end encrypted, and it can't be:...