What travels between your phone and your Mac, which way it goes, and what anything in the middle can see.
A remote desktop sends a picture of a screen. Tilde sends what the shell writes — the same bytes a terminal receives, escape sequences and all — and the phone draws the screen itself.
That choice decides almost everything else. An hour of work is about a megabyte instead of two gigabytes, the text stays sharp at any size, and it can be selected and searched because it is text. It also means the Mac has no picture to send: when a connection is lost and comes back, what gets replayed is the stream, not a screenshot.
Your Mac shows a code. It contains a public key, a single-use token and where to find the machine. Scanning it runs a handshake that only completes if both sides saw the same token — someone who reaches the network but not the screen cannot finish it.
Then the Mac asks a person to approve the device by fingerprint. A handshake proves a key; only you can say the key belongs to your phone.
Away from home, neither side can call the other: both sit behind routers that accept no incoming connections. So both make an outgoing one instead, to a rendezvous that introduces them and then copies bytes between the two.
| Sees | Cannot see | |
|---|---|---|
| Rendezvous | An opaque room identifier, how much data passed, and the network addresses of two connections. | Commands, output, file names, your machine's name, or which device is on the other end. |
| Your network | That a connection exists. | Anything inside it. |
| Us | Nothing. There are no accounts and no analytics. | — |
The app tells you which path a session took, because latency and reachability both depend on it.
A phone changing from Wi-Fi to mobile data loses its connection, and a session that died with it would take the work along — a build, a long command, an agent halfway through a task.
Restarting the agent is a different matter: that ends every session. Work inside tmux or zellij survives it, which is the main reason to keep long-running things in one.
The part that interprets escape sequences and keeps the grid of characters — the terminal emulator — runs on the phone, not on the Mac. The agent only moves bytes between a pseudo terminal and the network.
This is why the text is crisp: the phone renders characters with its own fonts at its own resolution, rather than scaling someone else's picture. It is also why a reconnect replays a stream instead of a screenshot, and why the same core can serve a second kind of app without the agent knowing anything about it.