Every terminal on your machine, live on your phone.
Piped serves your real running sessions — the same PTYs, the same scrollback, the same blinking cursor — to your phone, your tablet, or any browser on your own Tailscale network. Not a status page. You scroll it, you type into it, you talk to it. Then you close the lid on the desk and everything keeps running.
Not shipped yet — installers land when the app is code-signed. No spam, one email on launch day.
Codex (builder) needs you: apply migration 0007 to dev? (click to open its terminal)
Terminal 2 finished — exit 0
Ctrl+Shift+D next pane that finished or needs youCtrl+Shift+1…9 jump to terminal N
Piped is not running piped-ptyd still holds 4 PTYs
Windows Terminal — claude
> claude --resume 0f3a91c2 --permission-mode acceptEdits
● resumed session · 118 messages restored
>
vite dev server · 127.0.0.1:5173→ /preview/5173 on your tailnetcert + identity from tailscale servefunnel refused · never public
Assistant · 80 tools / 11 categories
terminals: allowgit: askfiles: off
✓ opened terminal 5 · pwsh
✓ renamed 2 → codex/filesUndo
✓ moved PI-38 → ReviewUndo
✓ committed 4 filesUndo
◗ live voice · barge-in on
spend today $1.84 / cap $10.00
Assistant · watching
terminals: allowevery terminal
✓ watch_terminals · onstop
✓ read_terminal · pane 2
“Codex in remote-pwa just finished. It moved the files route onto the pane’s cwd and the suite is green — it’s asking whether to apply migration 0007 to dev.”
spend today $1.84 / cap $10.00
🛡Possible secret in clipboard
This paste (1,284 chars) looks like it contains 2 sensitive values you may not want to share with an agent:
AWS Access KeyAKIA••••••••••••7Q4B
GitHub PATghp_••••••••••••••f1c9
CancelPaste anyway
Commands
⌕Search 56 commands…
Built-inships with Piped56
▾Guide5
☆Guide Me🔒Not sure what to do next? Start here.Send▶
▾Setup30
☆Setup Authentication🔒Logins and accounts, via a provider — never rolled by handSend▶
☆Setup Secrets🔒Keys out of the repo and into somewhere they belongSend▶
☆Setup Tests🔒A suite, a runner, and a command that runs themSend▶
☆Setup Database🔒Schema, client, and a migration path that survives youSend▶
☆Setup Monitoring🔒Know it broke before your users tell youSend▶
☆Setup Backup and Recovery🔒And a restore you have actually run onceSend▶
▾Audit11
☆Audit Production Readiness🔒GO / NOT YET, scored across every launch dimensionSend▶
☆Audit Security🔒The scan you would rather run than receiveSend▶
▾Grow2
☆Connect a Custom Domain🔒DNS, certificate, and the redirect you will forgetSend▶
☆Get Your First Users🔒Where they are, and what to saySend▶
piped-ptyd · 4 PTYsterminal 1 · mirrored to 1 device · tailnet only
piped.tailnet · identity ok
1 · claude
piped-corerunning
‹
›1/9
$ npm run build:remote
vite v6.0.1 building for production
transforming 214 modules
built dist in 4.02s
$ piped ptyd status
piped-ptyd 0.9.4 · pid 4188
4 PTYs · 10 MiB scrollback each
attached: desk, phone
$ rg -n width piped-ptyd/src
mirror.rs:118 fn resize(cols, rows)
mirror.rs:214 replay(buf, width)
session.rs:77 last_known_width
$ claude --resume
resumed · 118 messages restored
● Read src-remote/src/panes.ts
the pane list, and how it attaches
$ git log --oneline -3
b796a45 width seam on reattach
1c40e12 tee the pane to two viewers
● Edit piped-ptyd/src/mirror.rs
+ replay at the recorded width
$ cargo test -p piped-ptyd
running 41 tests
test result: ok. 41 passed; 0 failed
$
Needs you 1
2codexcodexApply migration 0007 to dev? (y/n)remote-pwa
Running 4
1claudeclaudetest result: ok. 41 passed; 0 failedpiped-core
3cargo watchshellerror[E0382]: borrow of moved value: mirrorconduit
4ssh · build@nuc-01sshlistening on 127.0.0.1:8443infra
5aideraiderApplied edit to mirror.rsconduit
Idle 1
11pythonshell>>> piped.attach(2)3d-tools
ConduitDocsPricing
Realtime sync
One stream, every client.
Fan a change out to every device that is watching it, in the order it happened.
Start freeRead the docs →
12 msmedian fan-out
99.99%delivered in order
NewOffline replay
A client that was asleep catches up from its own cursor.
$ npm run build:remote
vite v6.0.1 building for production
transforming 214 modules
built dist in 4.02s
$ piped ptyd status
piped-ptyd 0.9.4 · pid 4188
4 PTYs · 10 MiB scrollback each
attached: desk, phone
$ rg -n width piped-ptyd/src
mirror.rs:118 fn resize(cols, rows)
mirror.rs:214 replay(buf, width)
session.rs:77 last_known_width
$ claude --resume
resumed · 118 messages restored
● Read src-remote/src/panes.ts
the pane list, and how it attaches
$ git log --oneline -3
b796a45 width seam on reattach
1c40e12 tee the pane to two viewers
● Edit piped-ptyd/src/mirror.rs
+ replay at the recorded width
$ cargo test -p piped-ptyd
running 41 tests
test result: ok. 41 passed; 0 failed
$ leave the cwd read, fix the traversal
heard you — hold to keep going
01:14
Thu 27 August
PipednowAgent finishedCodex — remote-pwa is done or waiting for input.
Codex (builder) needs you: apply migration 0007 to dev? (click to open its terminal)
Terminal 2 finished — exit 0
Ctrl+Shift+D next pane that finished or needs youCtrl+Shift+1…9 jump to terminal N
Piped is not running piped-ptyd still holds 4 PTYs
Windows Terminal — claude
> claude --resume 0f3a91c2 --permission-mode acceptEdits
● resumed session · 118 messages restored
>
vite dev server · 127.0.0.1:5173→ /preview/5173 on your tailnetcert + identity from tailscale servefunnel refused · never public
Assistant · 80 tools / 11 categories
terminals: allowgit: askfiles: off
✓ opened terminal 5 · pwsh
✓ renamed 2 → codex/filesUndo
✓ moved PI-38 → ReviewUndo
✓ committed 4 filesUndo
◗ live voice · barge-in on
spend today $1.84 / cap $10.00
Assistant · watching
terminals: allowevery terminal
✓ watch_terminals · onstop
✓ read_terminal · pane 2
“Codex in remote-pwa just finished. It moved the files route onto the pane’s cwd and the suite is green — it’s asking whether to apply migration 0007 to dev.”
spend today $1.84 / cap $10.00
🛡Possible secret in clipboard
This paste (1,284 chars) looks like it contains 2 sensitive values you may not want to share with an agent:
AWS Access KeyAKIA••••••••••••7Q4B
GitHub PATghp_••••••••••••••f1c9
CancelPaste anyway
Commands
⌕Search 56 commands…
Built-inships with Piped56
▾Guide5
☆Guide Me🔒Not sure what to do next? Start here.Send▶
▾Setup30
☆Setup Authentication🔒Logins and accounts, via a provider — never rolled by handSend▶
☆Setup Secrets🔒Keys out of the repo and into somewhere they belongSend▶
☆Setup Tests🔒A suite, a runner, and a command that runs themSend▶
☆Setup Database🔒Schema, client, and a migration path that survives youSend▶
☆Setup Monitoring🔒Know it broke before your users tell youSend▶
☆Setup Backup and Recovery🔒And a restore you have actually run onceSend▶
▾Audit11
☆Audit Production Readiness🔒GO / NOT YET, scored across every launch dimensionSend▶
☆Audit Security🔒The scan you would rather run than receiveSend▶
▾Grow2
☆Connect a Custom Domain🔒DNS, certificate, and the redirect you will forgetSend▶
☆Get Your First Users🔒Where they are, and what to saySend▶
piped-ptyd · 4 PTYsterminal 1 · mirrored to 1 device · tailnet only
piped.tailnet · identity ok
1 · claude
piped-corerunning
‹
›1/9
$ npm run build:remote
vite v6.0.1 building for production
transforming 214 modules
built dist in 4.02s
$ piped ptyd status
piped-ptyd 0.9.4 · pid 4188
4 PTYs · 10 MiB scrollback each
attached: desk, phone
$ rg -n width piped-ptyd/src
mirror.rs:118 fn resize(cols, rows)
mirror.rs:214 replay(buf, width)
session.rs:77 last_known_width
$ claude --resume
resumed · 118 messages restored
● Read src-remote/src/panes.ts
the pane list, and how it attaches
$ git log --oneline -3
b796a45 width seam on reattach
1c40e12 tee the pane to two viewers
● Edit piped-ptyd/src/mirror.rs
+ replay at the recorded width
$ cargo test -p piped-ptyd
running 41 tests
test result: ok. 41 passed; 0 failed
$
Needs you 1
2codexcodexApply migration 0007 to dev? (y/n)remote-pwa
Running 4
1claudeclaudetest result: ok. 41 passed; 0 failedpiped-core
3cargo watchshellerror[E0382]: borrow of moved value: mirrorconduit
4ssh · build@nuc-01sshlistening on 127.0.0.1:8443infra
5aideraiderApplied edit to mirror.rsconduit
Idle 1
11pythonshell>>> piped.attach(2)3d-tools
ConduitDocsPricing
Realtime sync
One stream, every client.
Fan a change out to every device that is watching it, in the order it happened.
Start freeRead the docs →
12 msmedian fan-out
99.99%delivered in order
NewOffline replay
A client that was asleep catches up from its own cursor.
$ npm run build:remote
vite v6.0.1 building for production
transforming 214 modules
built dist in 4.02s
$ piped ptyd status
piped-ptyd 0.9.4 · pid 4188
4 PTYs · 10 MiB scrollback each
attached: desk, phone
$ rg -n width piped-ptyd/src
mirror.rs:118 fn resize(cols, rows)
mirror.rs:214 replay(buf, width)
session.rs:77 last_known_width
$ claude --resume
resumed · 118 messages restored
● Read src-remote/src/panes.ts
the pane list, and how it attaches
$ git log --oneline -3
b796a45 width seam on reattach
1c40e12 tee the pane to two viewers
● Edit piped-ptyd/src/mirror.rs
+ replay at the recorded width
$ cargo test -p piped-ptyd
running 41 tests
test result: ok. 41 passed; 0 failed
$ leave the cwd read, fix the traversal
heard you — hold to keep going
01:14
Thu 27 August
PipednowAgent finishedCodex — remote-pwa is done or waiting for input.
Work from anywhere
Your machine, in your pocket. All of it.
Every terminal open on your desktop is live on your phone, your tablet, or any browser you can reach your tailnet from. The real session — scroll the history, type a command, answer the agent that stopped to ask you something.
Not a status page. Not a log tail. The actual PTY, at the other end of your thumb.
Nothing is handed over, either. The stream is teed: the pane on the desk and the pane in your hand are the same pane, both live, and typing into either one is typing into the process.
A tablet is enough screen to run the whole day from, several projects at once. Every workspace’s terminals arrive in one list — each row wearing that project’s colour, the ones waiting on you at the top — and any of them opens full screen. Ctrl+Shift+← and → flip between those full-screen terminals without going back to the list, Cmd too, because that is the key an iPad hand reaches for. Pinch the type to the size the screen you are actually holding wants; it remembers the size, not the pane.
Nothing is ever public. The server binds 127.0.0.1 and nothing else, and tailscale serve publishes it over your own Tailscale network — never the public internet. Tailscale supplies both the certificate and the identity header; Piped refuses funnel, the public one, so a mistaken exposure fails closed.
Claude Code offers remote for Claude Code. Piped does it for any pane: Codex, aider, a plain PowerShell, a forty-minute build, a Python REPL you left half-way through.
Anything that lives in a pane is a thing you can pick up from a phone.
codex · aider · pwsh · a long build · a REPL — any pane, not one vendor's
Downstream
The dev server on your desk, in the browser in your hand.
Piped mounts it at a real HTTPS origin on your own Tailscale network, so you tap a link and it loads in actual Safari or Chrome — real viewport, real touch targets, real fonts.
No deploy, no staging, no share link, no third party. You just wanted to see it small.
127.0.0.1:5173 → /preview/5173 on your tailnet · a real browser, a real origin
Downstream
Read what changed before you answer it.
An agent asking “shall I apply this?” is only answerable if you can see what it did. Browse the workspace, open a file, read the diff — then reply into the pane that is waiting.
File paths in terminal output are tappable, so the error is one thumb from its cause.
workspace-scoped file browser · tap a path in the output · read, then reply
Downstream
Say it, instead of thumbing it into glass.
Hold the orb and dictate straight into the focused pane. Double-tap and it becomes a full live conversation — barge-in included.
A phone keyboard is a miserable way to brief an agent. Your voice is not.
hold to dictate · double-tap for live speech-to-speech · barge-in on
Downstream
It taps you on the shoulder when a pane stops.
The same bell that pulses the tile goes out as Web Push. It is a nudge, not a conversation: Agent finished, and which agent, in which workspace, is done or waiting for input. No question text and no reply buttons — tap it and you land in that terminal, where the keys are.
One alert per pane, so a chatty agent replaces its own notification instead of stacking six. And it is not wired to this machine’s notification switch: the whole point of the phone is the hours you are not at this machine.
Web Push · title + body, no actions · one alert per pane · a tap opens that terminal
Upstream
Everything starts in a pane. Everything else is downstream.
Up to 64 live panes in one window — laid out on a grid, or taken as a preset: 1, 2, 4, 9, 16. Sixteen is the default.
Claude in one tile, Codex in the next, Gemini and OpenCode under them — and a build, a shell, an SSH session in the rest. Piped owns the PTY, not the CLI, so what goes in a pane is your business.
64 panes max · default preset 16 · claude · codex · gemini · opencode · aider · a shell
Upstream
Quit the app. Nothing dies. The panes were never the app's to kill.
The PTYs belong to a background daemon, not to the window. Close Piped, reboot your evening, open it tomorrow: the same shells and the same agents are still there, mid-task, scrollback intact.
That is why your phone can attach mid-run — it isn’t reconnecting to an app, it’s attaching to a process that never stopped. Want an agent out of the grid entirely? Pop it into its own external terminal and Piped relaunches it with --resume and the permission flags it started with.
piped-ptyd owns the PTYs · claude --resume 0f3a91c2 --permission-mode acceptEdits
Upstream
Every workspace has a colour, and everything wears it.
The rail tile, the pane chip and the ticket badge all share one colour per workspace. With sixteen panes on screen and four projects in flight, a glance is enough to know which one you are about to type into.
No reading, no hovering, no wrong terminal.
one colour per workspace · rail tile · pane chip · ticket badge
Upstream
A finished pane comes and finds you.
When a command ends or an agent needs an answer, the tile’s outline pulses amber and keeps pulsing until you look at it — clicking the pane is what clears it. A two-note chime goes with it, and an OS notification if the window is in the background. Ctrl+Shift+D walks only the panes that finished or are waiting on you — not all sixty-four, just the ones with something to say.
A bell that rings while the app is closed isn’t lost either: the daemon holds it and re-lights the workspace tile the moment you come back.
amber pulse until focused · chime · Ctrl+Shift+D walks only what needs you · bells held
One window
A browser, an editor, a board, screenshots, memory, benchmarks.
All of it in the same window as the terminals, so you stop alt-tabbing between six apps to run one agent.
The board is the one the agents actually work: cards dispatch by column, each feature in its own git worktree.
56 commands that know what shipping actually takes.
Thirty of them start with Setup — authentication, secrets, a database and its migrations, tests, monitoring, backups you have actually restored once, feature flags, incident response. Eleven are audits, including a plain-language Audit Production Readiness that scores every launch dimension and gives you a GO or a NOT YET.
This is the part nobody tells you about when they tell you to just build the thing. Piped doesn’t make you write those prompts, and it doesn’t enforce them either — drag one into a terminal, or send it and watch the agent work.
56 built in · 30 Setup · 11 Audit · drag into a pane, or send it
One window
The clipboard is checked before the terminal sees it.
65 built-in secret patterns, plus your own. The paste guard inspects what you are pasting before it reaches a pane — the one moment where stopping it still matters.
Your own keys never touch the database; they live in the OS credential store.
65 patterns + custom · pre-paste hold · history scan · redact in place
The assistant
And an assistant that can run all of it.
Eighty tools across eleven categories — terminals, the board, the swarm, files, git, benchmarks, memory, the UI itself. It opens and closes panes, types into them, reads them back, renames and rearranges them. It writes tickets onto the board, moves them between columns, assigns the agent each stage runs on, and starts the swarm working them.
Every category is set to off, ask or allow, and you can change your mind mid-sentence. Each call lands as a chip you can read; the destructive ones carry Undo. Talk to it live, or from Slack over Socket Mode — which genuinely needs no tunnel, because the connection dials out. The spend meter is visible, with hard daily caps.
80 tools · 11 categories · off / ask / allow · undo on destructive · hard spend caps
The assistant
“Keep an eye on the terminals.” Then go and do something else.
Ask it to watch and it arms the completion watcher — every terminal, or just the ones matching a name. When one rings done, it doesn’t just ping you: it reads that pane’s recent output and tells you, out loud, what happened and whether it needs anything.
Finished board tickets get announced the same way. Say stop watching and it stands down. It is the difference between a room full of agents you have to babysit and a room full of agents that come and tell you.
watch_terminals: on / once / off · reads the pane, then speaks it · tickets too
Why it’s shaped like this
Built for the attention you actually have
Piped was designed around ADHD — not as a mode you switch on, but as the reason the app has the shape it does. Every mechanism below is one you have just watched work. None of them are settings. They are what the product is.
01
Colour is the identity, not a label
Ten projects, ten hues a golden angle apart so no two neighbours look alike. The rail tile, the pane’s chip, the ticket badge and the row on your phone all wear the same one. Knowing which project you are about to type into costs a glance, not a read.
02
The pane that needs you comes and finds you
You do not have to remember which of sixteen terminals you were waiting on. The one that stopped pulses amber until you look at it, chimes, and reaches your phone if you have wandered off. Ctrl+Shift+D walks only the ones with something to say — never all sixty-four.
03
Something else does the watching
Tell the assistant to keep an eye on the terminals and it reads the pane that finished and says out loud what happened and whether it needs anything. Checking on agents is the loop that eats an afternoon. This is how you put it down.
04
One project’s worth of desk at a time
Each workspace keeps its own terminals, its own board, its own browser tabs and logins, its own agent accounts. Coming back to a project is not rebuilding the desk you had — it is still standing.
05
One window, so there is nowhere to wander
Terminal, editor, browser, board, screenshots, benchmarks. Nothing here needs alt-tab, and alt-tab is where the hour goes.
Also in the pipe
The rest of the window
Board
A board the agents work
Cards dispatch to agents by column, each feature in its own git worktree. A deterministic gate runs tests, lint and typecheck before any reviewer model spends a token, and what passes goes through a serial merge queue.
Browser
Real WebView2, not an iframe
Per-workspace tab sessions, so a client account logged in over here isn't logged in next door. Your actual password manager loads from your existing Chrome or Edge profile, so it keeps auto-updating instead of rotting in a copy.
Privacy
A workspace capture can't see
Mark a workspace private and Windows excludes the window from capture. OBS, Zoom, Teams and the Snipping Tool all record solid black — and private panes aren't painted at all until the OS confirms the blackout is live.
Screenshots
Snip every monitor at once
The frame freezes before the overlay appears, so nothing moves while you drag. Annotate, then deliver it into a terminal as a typed path the agent can actually open.
Benchmarks
Race models, judged blind
Give N models one prompt, each in its own subfolder. Blind by construction, not by promise: the slot-to-model map lives outside the judge's working tree.
Accounts & SSH
Your plans, your hosts
Bind a Claude account per workspace and run on the subscription you already pay for. Remote hosts open as ordinary panes — same blocks, same hotkeys — and the key setup asks for the password exactly once.
Pricing
Free until you need the third workspace
Free
$0
Two workspaces open at once. Everything else is the same product — the terminals, the daemon, the remote, the preview, the scanner.
no account required to try
Piped Pro · founder, first 50
$49.99 $29.99 / month
Unlimited workspaces open at once. The first 50 subscribers keep founder pricing for as long as the subscription runs.
$49.99 / month after the first 50 · cancel any time