Pairing
The host on your computer has its own key pair, made on the computer and kept in ~/.tavi. The pairing code that npx tavi-host connect shows carries the computer's public key, so scanning it tells your phone exactly which key to expect.
You then compare the fingerprint, a short code like 7F3A 91C2 · 0BE4 5D17, on both screens. If they match, the phone has the right computer. A code pairs one phone, for five minutes, and disappears from the screen once it's used.
When it pairs, your phone gets its own credential, beside a device key made in the phone's Secure Enclave that never leaves it. Through the relay, the credential counts only together with that key.
Every connection
Every connection is TLS 1.3, ended by the host on your computer with the key your phone pinned when it paired. The phone refuses any other key, so nothing in between can pose as your computer. Your phone's credential travels inside that encryption.
The same encrypted session runs whichever way it travels:
- Direct. On the same network, your phone connects straight to your computer.
- Through Tavi. Anywhere else, through Tavi's relay on Cloudflare.
- Fast path. For a terminal in active use, through Cloudflare's TURN service.
- Your session, encrypted end to end
- Passes bytes it can't read
The relay and TURN pass the encrypted bytes along without being able to read them.
What the relay can and can't see
Can't see
- What you type
- What your terminals show
- Your code, files and previews
- Your prompts and the agents' replies
- Your phone's credential
Sees, to connect you
- Your computer's identifier and public key
- Your phones' public keys
- The IP addresses each end connects from
- When, for how long, and how much data
What the relay stores, and what Cloudflare keeps, is in the Privacy Policy. You can turn the relay off on your computer, and then your phone reaches it only on the same network.
On your phone
The app keeps its credentials in the iPhone's Keychain, on that device only. Turn on Face ID lock and Tavi locks whenever it goes to the background, and the app switcher doesn't show your terminal.
On your computer
- The host's plain API listens only on the computer itself. Your phone always comes in through the encrypted, pinned connection.
- Every API and terminal connection needs a credential. The computer keeps only hashes of your phones' credentials.
- Previews of a dev server go through a separate door that forwards nothing without a ticket your phone got over the encrypted connection. Each ticket is bound to one phone and one
localhostport, and ends when the preview closes. - Don't expose the host's local ports,
8787and8788, directly to the internet.
If something leaks
Treat the host token and each phone's access as shell access: whoever holds one and can reach the computer can run commands as you.
- A phone is lost. On the computer,
tavi deviceslists the paired phones andtavi devices revoke <id>cuts one off without touching the others. - The token or
~/.tavileaked.tavi identity resetreplaces the computer's key and host token and revokes every phone. Pair the phones you keep again withnpx tavi-host connect.
Open source host
The host runs with shell access on your computer, so it should be readable. tavi-host is open source under the Apache License 2.0, and anyone can audit what it does.
Report a vulnerability
Email security@tavihost.com. It reaches the same inbox as support@tavihost.com. Please include what you found, how to reproduce it, and what it would let someone do.
- Test only against computers and phones you own.
- Don't access other people's data, and don't degrade the relay for others.
- Give us reasonable time to fix the problem before you publish it.
We read every report and reply as soon as we can. Our security.txt has the same details.