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+

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.

guest keystrokes, when the host allows it YOUR MAC % zsh one pty Your terminal loopback · never leaves the Mac Tandem relay nothing for you to set up routes ciphertext · cannot read it Guest macOS app Guest any browser · nothing installed

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.

ONE SHELL San Francisco São Paulo Berlin Bangalore Sydney
dana San Francisco HOST

      
priya is read-only
priya Berlin GUEST · BROWSER

      
read-only nothing installed
priya joins read-only and watches

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.

VOICE listening Command
“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

Download for macOS

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.