open source · free · self-host or hosted

Your terminal.
Anywhere.

Set Terminal.app's shell to pt. From then on every terminal you open appears on your phone as a live session. Drive a build, tail a log, ssh into a server or network switch, run vim, restart a dev server, control a bot — or approve Claude / Codex / Aider tool calls and watch live $-burn. Any CLI.

Every shell, automatically
Works with vim, htop, ssh, tmux
Bubbles + $-meter for agents
Themeable · MIT · self-host
[operator@pocket-t ~ % claude]
Claude Code v2.1.147
Opus 4.7 · 1M ctx · Max
~/pocket-t-relay
> Try "fix the failing test" or "deploy to staging"
> run the test suite and fix what breaks
Reading src/session.ts
Found 1 failing test in connection handling.
Bash(npm test)
Do you want to run this command? (esc to skip)
Yes
2. Yes, and don't ask again
3. No, tell Claude what to do differently
> fix the failing test ↑ from phone
Edit(src/session.ts)
87- if (this.state == 'idle')
87+ if (this.state === 'idle')
Re-running tests
Bash(npm test)
  ⎿  ✓ 18 passing (642ms)
All tests pass. 28s · 2 files edited · $0.42
>
» accept edits on (shift+tab to cycle) · for agents 2 claude.ai connectors need auth · /mcp
9:41
pt-7c39
$0.42
Term Bub
> operator@pocket-t ~ % claude
Claude Code v2.1.147
Opus 4.7 · 1M ctx · Max
~/pocket-t-relay
What are we working on?
* Cogitated for 1s
session live · mirrored from Mac
> run the test suite and fix what breaks
Found 1 failing test.
claude now
Allow Bash(npm test)?
> fix the failing test phone
Edit(src/session.ts)
- if (state == 'idle')
+ if (state === 'idle')
Bash(npm test)
⎿ ✓ 18 passing (642ms)
All tests pass
28s · 2 files · $0.42
Esc
Tab
Ctrl
+
Approve tool calls from anywhere — it hits the real agent.
Claude Code· Claude CLI· Codex· Aider· Gemini CLI· OpenClaw· Hermes· NanoClaw· Cursor· Claude Desktop· any CLI · MCP· Claude Code· Claude CLI· Codex· Aider· Gemini CLI· OpenClaw· Hermes· NanoClaw· Cursor· Claude Desktop· any CLI · MCP·
§ The difference

A bot relays commands.
Pocket-T is the terminal.

Telegram-bot setups type a command into a black box and hope. You don't see the screen, you can't scroll, you can't approve a tool call mid-run, and it only knows the one shell you wired it to. Pocket-T isn't a relay. It's your actual terminal window — every one of them — on your phone.

A Telegram / chat bot

  • You type a command blind and wait for whatever it decides to echo back.
  • One wired-up shell. Open a new terminal? The bot has no idea it exists.
  • No live screen. No scrollback. No cursor. No TUI.
  • An agent asks to run a tool — it just stalls. You can't approve from your phone.
  • A wrapper around your shell. Not your shell.

>_Pocket-T

  • Every terminal you open shows up automatically — Terminal.app, iTerm2, Ghostty, all of them.
  • You see the real rendered screen, live — output as it happens, not a summary.
  • Tap a tool-call approval and it goes straight through to the running agent.
  • Type back into the real session. Start new ones from your phone.
  • No wrappers. No extra commands. Just your normal terminals — elsewhere.
§ How it works

Three steps.
Then never think about it again.

01

Install

One line. A small daemon and a native shell proxy go on your Mac. Nothing intrusive, nothing in your way.

02

Point Terminal at pt

Terminal.app → Settings → Profiles → Shell → /usr/local/bin/pt. New windows on that profile are Pocket-T sessions immediately. iTerm2, Ghostty, WezTerm: same idea.

03

Scan the QR on your phone

Start the daemon with --tunnel and a public URL + QR code prints in your terminal. Scan it. Your Mac terminals are now on your phone — LTE, hotel WiFi, anywhere.

# clone, install, expose to your phone — under two minutes
git clone https://github.com/Josh-Gi3r/POCKET-T
cd pocket-t && bash install.sh
pnpm --filter @pocket-t/daemon pt-registry serve --tunnel
# scan the QR code, open the URL on your phone, done
§ Works with

If it runs in a terminal,
it runs in your pocket.

Pocket-T doesn't integrate with anything — it captures the terminal itself. So it works with every CLI agent and tool, including ones that don't exist yet. Claude gets full agent-aware bubbles + live cost meter today; other CLIs get a clean terminal view + sidebar vendor badge while their dedicated parsers ship.

Claude Code
Claude CLI
Codex
Aider
Gemini CLI
OpenClaw
Hermes
NanoClaw
Cursor
Claude Desktop
MCP servers
…anything else

It's the real screen — not a transcript

Pocket-T streams the rendered terminal, so a full-screen TUI agent looks like what's actually on your Mac. Scrollback, prompts, the lot. You're looking at the session, not a bot's paraphrase of it.

Approve from anywhere

An agent asks to run a destructive tool — approve or deny it from your phone, on the train, in a meeting. Tap goes straight to the running agent.

Live

Live cost meter

A Claude session burns through tokens — Pocket-T shows you the dollar count, live, in a pill at the top. Sonnet, Opus, Haiku, the lot. No one else ships this.

Agent-aware bubbles

Run Claude Code — see chat, thinking, tool calls and results as separate cards, on top of the same live terminal. Flip back to raw bytes anytime.

Type back into the session

From your phone, keyboard straight into the live PTY. Soft-key shortcuts for Esc, Ctrl, Tab and arrows. Paste long prompts. Send ^C when an agent's gone off the rails.

Replay every session

Every pt session writes an asciinema v2 cast file to ~/.pocket-t/recordings/. Replay with pt-registry replay, share it in a PR, or open it in any asciinema player. Forever-history is on by default.

recording-3f2a1c.cast — 04:18
00:02 claude
00:14 fix the failing test
01:42 ⏺ Edited src/session.ts
02:51 npm test · 18 passed
00:0002:51 / 04:18

Free. Open source. Yours.

MIT

Daemon, native shell proxy, relay, web app — every piece is MIT licensed and on GitHub. Self-host the relay on your own box and your own domain, or use the hosted one. Your data, your terms.

§ Pocket Skins

Your terminal,
your way.

Themes that re-paint the entire Pocket-T UI — sidebar, bubbles, terminal pane, cost pill, approval cards. A skin is a small block of CSS variables; ship one in an afternoon, send a PR, watch people use it.

Seven ship built-in. The contribution guide is one short doc.

Operator
Default · graphite + mint
Halloween
Brown + pumpkin orange
Nokia
Pixel-green nostalgia
Christmas
Pine + cranberry + gold
Cyberpunk
Magenta + cyan, all volume
Forest
Moss + sage, easy on eyes
Paper
Daylight + ink + mint
+
Ship a skin
CSS variables only · one PR · your name on the gallery
Read the contribution guide · try one now with ?theme=halloween on the URL.
§ Install

Fresh Mac to phone-from-anywhere
in 2 minutes.

One install script. One --tunnel flag. A QR code prints in your terminal. Scan it. Your Mac terminals are on your phone — any network, anywhere on earth.

# 1 — clone + install (builds pt, signs it)
git clone https://github.com/Josh-Gi3r/POCKET-T
cd pocket-t && bash install.sh

# 2 — point Terminal.app's shell at pt
#     Settings → Profiles → Shell → /usr/local/bin/pt

# 3 — start the daemon with a tunnel for your phone
pnpm --filter @pocket-t/daemon pt-registry serve --tunnel

# 4 — scan the QR code that prints in your terminal
#     opens https://random-words.trycloudflare.com
pt-registry — serve --tunnel
daemon listening on 127.0.0.1:7700
tunnel opened · cloudflared
# scan to open on your phone:
https://emerald-forest-bridge-42.trycloudflare.com
waiting for first pairing…
Prerequisites
Rust toolchain · Node 22+ · pnpm. The installer checks for them and installs cloudflared via Homebrew.
Three modes
--tunnelphone-from-anywhere (default) no flagthis Mac only · 127.0.0.1:7700 --relay wss://your-hubself-host a stable URL
§ FAQ

Straight answers.

How is this different from an SSH app or a Telegram bot?
An SSH app gives you one shell you opened by hand. A bot relays single commands into one wired-up process. Pocket-T captures every terminal automatically and shows you the real, live, rendered screen of each — with tool-call approvals and two-way input. You're not driving a relay; you're looking at your actual sessions.
Do I have to launch terminals a special way?
Set your Terminal.app profile's shell to /usr/local/bin/pt once. After that, every window on that profile is automatically a Pocket-T session — no wrapper command, no flag, no pt <cmd>. iTerm2, Ghostty, WezTerm: same idea, point them at pt.
Is it really free?
Yes. Daemon, native shell proxy, relay, web UI, skins — all MIT licensed and on GitHub. Phase 1 is open source and self-hosted only — there's no hosted relay we run for you and no paid tier. The whole product is what you clone from GitHub.
Is it secure if the relay is public?
The relay faces the internet, so it requires authentication — that's the lock on the door. Your phone, your account and your daemon are bound together; a stranger who finds the URL gets nothing. Self-host it and the relay is entirely yours.
Can I see how much a Claude session is costing me?
Yes. A live dollar pill in the toolbar shows cumulative cost per session — Sonnet, Opus, Haiku, the lot. Pocket-T reads token counts from Claude's own transcript file, so the meter is exact, not estimated.
Can I theme it?
Seven skins ship by default — Operator, Halloween, Nokia, Christmas, Cyberpunk, Forest, Paper. A skin is a small block of CSS variables; the contribution guide walks through shipping a new one in an afternoon.
What does it work with?
Anything that runs in a terminal: Claude Code, Claude CLI, Codex, Aider, Gemini CLI, OpenClaw, Hermes, NanoClaw, Cursor's terminal, Claude Desktop's, plain shells, MCP servers — and whatever ships next, because it captures the terminal, not the tool. Claude gets full agent-aware bubbles + cost; the rest get a clean terminal + sidebar badge today, dedicated parsers as they land.
Does it record sessions?
Yes. Every pt session writes a standard asciinema v2 cast file to ~/.pocket-t/recordings/. Replay with pt-registry replay <sessionId> or any asciinema player. Delete the folder anytime.

Start a build on your Mac.
Finish it from your pocket.