A terminal on a computer you already have

Your computer's terminal,
in any browser.

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.

The termtether dashboard. Add a box makes a tile. A new tile shows the setup command and Copy. An enrolled tile links to its address.

Start here

Four steps, in this order

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.

  1. Step 1 of 4

    Set up your account by signing in to the dashboard

    Sign Up / Sign In

    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.

  2. Step 2 of 4

    Add a box

    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.

  3. Step 3 of 4

    Run the command on that tile

    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.

    On the computer The line from the tile.
    $ 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.

  4. Step 4 of 4

    Open the address on the tile

    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

Short definitions

You can follow the steps without memorizing these. Each word below has a plain meaning.

Box
A Linux computer you own or rent, or a Mac. A VPS (a virtual server you rent), a home server, and a Raspberry Pi all count. TermTether calls each one a box. You use a computer you already have.
Terminal
The text window where you type commands. TermTether shows that window in your browser. People also call it a shell or a command line.
tmux
A program that keeps terminal sessions running after you disconnect. The installer sets it up, and you can start with that. If you already use it, you land in the same sessions.
Handle
The short name you pick for a box, such as laptop. Your page is https://sh.termtether.dev/<handle>.
SSH
A common way to log into a remote computer, usually with a key and an open network port. With TermTether the agent on the box dials out, and the box waits for nothing inbound.
curl | bash
curl downloads a file. The | hands that file to bash, which runs it. The line in step 3 downloads the termtether installer from this site and runs it. The installer checks the release's signature against a pinned key, then unpacks. You run that line on the computer, after the handle from step 2 is in it.
GitHub account
The login termtether uses. You sign in with GitHub. The app GitHub shows you is owned by the Troxel.Tech organization.

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.

End-to-end encrypted, browser to box

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.

Browserphone · laptop Your boxyour tmux direct · DTLS LAN · VPN · hole-punched TURN relay fallback only · ciphertext only
  • 1Direct, peer-to-peerYour browser and your box connect directly over WebRTC, encrypted with DTLS: over your LAN or a VPN you already run (Tailscale, say) when there is a path, NAT hole-punching otherwise.
  • 2A relay only as a fallback, carrying ciphertext onlyThe connection goes through a TURN relay only as a last resort, when no direct path works, and the relay forwards encrypted packets it can't read. There is no unencrypted fallback: if no path works, the connection fails closed and retries.
  • 3Your box proves who it isYour box's own identity key signs each connection's fingerprint. The first time you connect, a Trust prompt asks before your browser trusts that key, and names the GitHub account that published it when GitHub confirms the match. After that the key is pinned and checked on every visit, so the signaling service can't stand in for your box.

And your box decides who gets in: it checks your GitHub identity against its own list. More on security.

What it is

A terminal in front of the box you already own

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.

❯Reach it from anywhere

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.

❯tmux that stays put

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.

❯Knows what your agents are doing

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.

❯Push, and approve from it

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.

❯All your boxes, one place

Switch between machines from one screen — several open at once, each with its own alert badge — or pop one out into its own tab.

❯Files, both ways

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.

❯Open your dev server

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.

❯Built for thumbs

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).

❯Helpers that use your own AI

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.

❯Your box, your credentials

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.

❯Voice from your phone beta

Talk to your agent from the phone's microphone, straight into its own voice mode. Linux boxes with PulseAudio for now.

For engineers

How it works, under the steps

The four steps are the whole setup. This is the design, if you want it. Nothing here is a command to run.

The path from a browser to your tmux

The same four parts

  1. 1Your machineYour tmux sessions, running as usual
  2. 2termtether agentDials out to sign you in and set up the link — no open ports
  3. 3Encrypted link, direct when possibleWebRTC (DTLS) from browser to box, signed by the box's own key; a relay only if no direct path works
  4. 4Browser or phoneSame sessions, same windows

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.

What is pinned, and what fails closed

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

Your box decides who gets in

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.

  • ✓
    GitHub sign-inYou sign in with GitHub — no shared passwords, no standing keys. The app GitHub asks you to authorize is termtether's, owned by the Troxel.Tech organization — see who builds it.
  • ✓
    Authorization happens on your boxYour box re-verifies your GitHub identity and checks it against its own list. Our coordination service can only take access away — suspend, sign out, revoke — never grant it.
  • ✓
    A small, pinned first pageThe 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, and the terminal interface itself then comes from your box.
  • ✓
    No exposed surfaceNothing on your machine listens for inbound connections. The agent dials out; there's no port for anyone to scan.
  • ✓
    Signed updatesThe installer and the auto-updater check every release's signature against a pinned key and refuse downgrades. Auto-update is on by default; you can turn it off.
  • ✓
    Sign out everywhereSign out all your devices at once — enforced by your boxes themselves — or revoke one box or release a handle from your dashboard.

Who builds it

A Troxel.Tech project

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:

Tether your terminal.

Sign in with GitHub — claim your handle in seconds.

Sign in with GitHub

By signing in you agree to the Terms and Privacy Policy.