$ tui2web claude --continue tui2web session is live: https://tui2web.com/session/L9-7mXweW0Y… ▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄ █ ▄▄▄▄▄ █▀█ █▄ ▀▀ █ ▄▄▄▄▄ █ █ █ █ █▀▀▀█ ▀ ▀██ █ █ █ █ █▄▄▄█ █▀ █▀▀▄▀▀▄█ █▄▄▄█ █ █▄▄▄▄▄▄▄█▄▀ ▀▄█ █ █▄▄▄▄▄▄▄█ █ ▄▄ ▀▄▄ ▄▀▄▀▀███ █ █▄█ ██ ██▀ ▄█ ▄███▄█▀ ▄▄█ ▀█▄█▄ █ █▀█▀▀ ▀▄▀█▄▄█▄█▄▄▀▄▄ ▄▀▄ ▄█ █ ██▀▄ ▄ ▄ ▄█▀ ▀▀ ▄█▄ █ █▄█▄▄█▄▄▄ ▄█▄▀▀▀ ▄▄▄ ▀▄███ █ ▄▄▄▄▄ █▄█ █▀ ▄█ █▄█ ▀▄ ▄█ █ █ █ █ ▄ █▄█▄▄ ▄ ▄ ▀ ▀ █ █ █▄▄▄█ █ ██ ▄█▀█▀▄▀▀▀ ▄█ █ █▄▄▄▄▄▄▄█▄█▄▄███████▄▄▄▄▄▄█ Anyone with this link can control this terminal. Press Ctrl+\ any time to show this link again. Press Enter to start claude (Ctrl+C to cancel)

> fix the flaky upload test ● Fixed: it awaited the wrong promise. 18 passed. > the login page is slow on mobile, can you look into it? ● I'll profile the login route first. Read(src/routes/login.ts) ⎿ Read 84 lines Bash(npm run bench -- login) ⎿ p95 1,840ms ● Each request looks the session up in the database. I'll cache it in memory. Update(src/routes/login.ts) ⎿ Added 12 lines, removed 3 Bash(npm test) ⎿ 42 passed ● Done. p95 is down to 210ms.

tui2web runs your command on your computer and streams it to a private web page. Your laptop and your phone share one live session, so wherever you are, your work is one tap away.

Put tui2web in front of any command. It prints a private link and a QR code, and waits for you to press Enter before starting the app. Lost it? Press Ctrl+\ to bring it back.

Open the link on your phone. You see the same screen your computer shows, with keys that phone keyboards are missing: Esc, Tab, Ctrl, the arrow keys and more.

Step away from your desk. Check in when your agent needs you, approve with a tap, and come back to finished work. Your computer's terminal keeps working normally the whole time.

Coding agents do most of their work on their own, then need a quick answer. With tui2web you can give it from a walk, the coffee line or the playground, over a link only you can open, instead of waiting at your desk.

Your computer connects out to the relay, like ngrok, so there are no open ports for anyone to find. No port forwarding, VPN or firewall changes.

Keystrokes from your laptop and phone go to the same session. The screen resizes to fit whichever device you last typed on.

Claude Code, Codex, opencode, Oh My Pi, Gemini CLI, aider or a plain shell. If it runs in a terminal, it runs in tui2web.

A tui2web link controls a real terminal on your computer, so it's locked down like a login.

tui2web set-password. Only a salted hash leaves your computer.Anyone with the link can type into your terminal, and a coding agent can run commands on your computer. Don't share the link, and end the session when you're done. Traffic is encrypted on the way to and from the relay, but the relay itself can see your session's contents. If that matters for your work, use Tailscale (below).

For sessions that stay open for hours or overnight, run tui2web --tailscale claude. Your computer runs the relay itself, so the session never passes through tui2web.com, and only devices signed into your Tailscale account can reach it. Even a leaked link is useless to anyone else. tui2web use tailscale makes it the default. See the setup guide.

Everything you need, in one table.

Install tui2web with npm install -g tui2web, then put tui2web in front of the command you'd normally run: tui2web claude, tui2web codex, tui2web opencode and so on. It prints a private link and a QR code. Scan it with your phone and you get the same live session in your phone's browser, with extra keys like Esc, Tab and ⇧Tab.

No. Your computer makes an outbound connection to the relay, like ngrok does, so it works from home Wi-Fi, office networks and behind NAT without opening any ports or installing an SSH server.

With SSH you start a new, separate shell. tui2web shares the session that's already running on your computer, and both screens stay in sync. You can start your agent at your desk, carry on from your phone, and come back to find your laptop terminal exactly where you left it. It also works in any mobile browser, with no SSH app or keys.

Anything that runs in a terminal: Claude Code, Codex, opencode, Oh My Pi, Gemini CLI, aider, vim, or a plain shell. Full-screen apps work too. Press Ctrl+\ at any time to bring the link back.

Each session has a random ID and a secret token, and nobody can open it without the link or your tui2web password. Traffic is encrypted on the way to and from the relay, but the relay can see what's in your session, so treat the link like a password. If that matters for your work, keep it on your own devices with Tailscale (see below).

Use Tailscale. Install it on your computer and your phone, then run tui2web --tailscale <command>. Your computer runs the relay itself, so nothing goes through tui2web.com, and only your own Tailscale devices can reach it. Traffic between your phone and your computer is encrypted end to end with WireGuard, and nothing is exposed to the internet: no public relay, no open ports. Tailscale's servers only help your devices find each other and never see your terminal. Run tui2web use tailscale to make it the default, and add tui2web set-password for a second layer. See the self-hosting guide.

The session reconnects on its own and the screen comes back as it was, including when the relay restarts. The app itself runs on your computer, so the computer needs to stay on and awake.

Run npm install -g tui2web@latest, then check with tui2web --version. Your password and settings in ~/.tui2web are kept. Sessions that are already running keep the old version until you restart them. If you use npx, npx tui2web@latest claude always runs the newest release. Self-hosting? tui2web relay updates along with the CLI; for Docker, rebuild the image.

Yes. tui2web is free and open source under the MIT license. The code for the CLI, the relay and the web viewer is on GitHub.