TermTether is a web terminal for a Linux computer you already have — or a Mac. A small program on that computer lets you open its terminal, including tmux, from your phone, tablet, or laptop. You use your GitHub account. The connection is encrypted from your browser to that computer.
Who it is for. People who want the terminal on a computer they own or rent, whether they live in tmux or they are new to Linux.
Start here
These four steps are the dashboard, in order.
The order. Press + Add a box, run the command on the new tile, then open the address on that tile.
Step 1 of 4
By signing in you agree to the Terms and Privacy Policy.
GitHub asks you to authorize an app owned by the Troxel.Tech organization. That is this project. You arrive on your dashboard.
Step 2 of 4
On your dashboard, press + Add a box. The panel is labeled "Pick a handle for it". Type a short name, such as laptop, and press Add. A tile appears for that handle, with its address underneath: sh.termtether.dev/laptop.
Step 3 of 4
The new tile says "Not set up yet. Run this once on the machine you want to reach:" and shows one line, with Copy. Run that line in a terminal on the computer, as your normal user. With your handle filled in, it looks like this:
The $ is the prompt already on the screen. Copy the rest of the line.
$ curl -fsSL https://termtether.dev/install | TT_HANDLE=<your-handle> RELAY_BASE_DOMAIN=termtether.dev bash
What you will see: the installer runs, then a code and a link. Open the link and approve the computer with the same GitHub account. The tile then names the device and the day it enrolled.
Step 4 of 4
The tile links its address, sh.termtether.dev/<handle>. Open that link. It is the terminal for this computer, on a phone, a tablet, or a laptop.
https://sh.termtether.dev/<handle>
Runs on Linux — Ubuntu, Debian, RHEL/Rocky, Arch, Alpine, openSUSE — and macOS (Apple Silicon & Intel; headless Mac mini or desktop). Not supported: Windows hosts. Compare.
Several people, one machine? Each Unix user who installs gets their own handle, box identity, and isolated terminal. Or share one box with specific GitHub accounts (termtether-dev share, or "Share with" in Settings); they get full access as your user, and you can revoke it at any time.
How many boxes? Up to 10 per account. Each box keeps its own GitHub sign-in, and GitHub allows 10 per account for an app. Release an unused handle from your dashboard when you want another.
Words we use
You can follow the steps without memorizing these. Each word below has a plain meaning.
The security model
The steps above are enough to start. This is how the connection is protected, for anyone who wants to check the claims.
Once you have trusted the box on first connect, your session is encrypted from your browser to your box and pinned to that box on every visit after. We coordinate the connection — sign-in, and introducing your browser to your box. Your terminal runs and stays on your machine.
And your box decides who gets in: it checks your GitHub identity against its own list. More on security.
What it is
termtether puts a durable, mobile-first terminal in front of your own machine — no VPN client on the device in your hand, no port forwarding, no exposed SSH.
A full terminal (xterm.js) in any browser. Open sh.termtether.dev/you and you're at your prompt — a desktop layout with a sidebar on a laptop, a tab bar and bottom sheets on a phone.
Sessions keep running when you disconnect. Close the tab on your laptop, reopen on your phone, land in the same window. After a reboot, sessions are restored from periodic snapshots — layout and pane contents; you restart the programs.
The window list shows which windows are idle, working, or need you, recognises Claude Code, Codex, and Grok, and can sort the ones waiting on you to the top.
Your box sends web push itself: exact "needs permission" and "done" alerts for Claude Code, and an alert from any tool that rings the terminal bell. Answer a Claude Code permission prompt from the notification. Mute and quiet hours included.
Switch between machines from one screen — several open at once, each with its own alert badge — or pop one out into its own tab.
Browse the box, download files or whole folders as a zip, upload from your phone or laptop, and preview Markdown, images, audio, and video. File paths and links in the terminal are clickable.
HTTP forwarding opens a web app listening on the box's localhost in your browser, at its own origin, over the same encrypted connection. Nothing on the box is exposed to get there.
A touch toolbar for the keys phones don't have — Esc, Tab, Ctrl and Alt latches, arrows, pipe — plus one-tap snippets for the commands and prompts you repeat. Copy works from tmux (OSC 52).
Summarize an agent's last reply or tidy up a prompt before you send it. These run on your box with your own claude or codex CLI and your own subscription — nothing extra is sent to us.
Any CLI you run in tmux works, signed in with your own accounts on your own machine. Your sessions and files stay on your box, never on our servers. The agent is signed and installs as readable source.
Talk to your agent from the phone's microphone, straight into its own voice mode. Linux boxes with PulseAudio for now.
For engineers
The four steps are the whole setup. This is the design, if you want it. Nothing here is a command to run.
The same four parts
Your browser opens https://sh.termtether.dev/<handle>. That host serves a small static page. Your GitHub account is checked by a Cloudflare Worker. The browser then connects to your box over WebRTC (DTLS). A signal Worker only carries the setup messages — SDP and ICE, the messages that introduce the two sides — and it does not see terminal bytes. The agent on the box dials out. The proxy on the box listens on 127.0.0.1 only, and the box checks your GitHub identity against its own list before it serves a terminal. The terminal is tmux, drawn in the browser with xterm.js.
The first page your browser loads is a small bootstrap we serve. Your box checks it against hashes pinned in its signed agent before letting you in. Boxes fail closed on an unpinned bootstrap. The installer and the auto-updater check every release's signature against a pinned key and refuse downgrades. If no encrypted path can be built, the connection fails closed and retries. There is no unencrypted fallback. The encryption and security sections are the same rules, in full.
Security
Access is gated on an identity you already trust and checked on your own machine. Our coordination service helps you connect; it can't let anyone in.
Who builds it
termtether is built and run by Troxel.Tech. Same people, same name, all the way down — so nothing you meet on the way in should be a surprise:
Sign in with GitHub — claim your handle in seconds.
Sign in with GitHubBy signing in you agree to the Terms and Privacy Policy.