Rysh vs tmux and Zellij: twenty years of panes meet the agent era
A love letter to the multiplexers I grew up in — and the exact spot where rysh forked the road: a pane is a conversation, not a shell.
This one is a love letter first and a comparison second.
I have lived inside tmux for years. Detach on the office machine, attach from home, session still warm — that trick alone shaped how a generation of us works. And Zellij took the same idea and gave it modern ergonomics: discoverable keybindings, sane layouts, a multiplexer you could recommend to someone without handing them a config file first.
Rysh is, unapologetically, a descendant of that lineage — conceptually closest to Zellij. Tabs, panes in groups, Ctrl+P pane mode, Ctrl+T tab mode, Zellij-style navigation, detach with Ctrl+O d, rysh attach <session>. If you're a multiplexer person, your hands already know most of it.
So why does rysh exist? Because of one question the classics never had to answer.
The fork in the road: what is a pane?
For tmux and Zellij, the answer has been stable for twenty years: a pane is a shell. A rectangle around a PTY. The multiplexer's job is arranging rectangles and keeping them alive. At that job, they are superb — free, ubiquitous, fast, scriptable, on every server you'll ever SSH into.
Rysh's answer: a pane is a conversation. It contains a real shell (PTY-backed — vim and htop work, full-screen apps auto-detect into raw mode). But the same pane, one Double-Escape away, is an AI conversation wired to your files, shell, and APIs. Or an autonomous agent spawned from a markdown file. Or a live external channel. Panes read each other's output. Panes are addressable by name.
Every difference below falls out of that one answer.
What falls out
Agents as first-class tenants. In tmux, "running an agent" means running a CLI in a dumb rectangle. In rysh, ##agent spawn-all ./team turns a folder of markdown files into named agents; @reviewer check the diff @tests produced is a normal thing to type; ##pane listen reviewer streams one pane's output into another. The multiplexer is the message bus.
Sharing beyond the SSH boundary. The classic way to share a tmux session is "give someone access to the same box" — a security decision disguised as a collaboration feature. Rysh shares at the application layer: ##share pane view (read-only) or ##share pane control, subscribed from a teammate's own terminal via ##upstream subscribe, with shared sessions restrictable to a command allowlist enforced at the messaging layer.
Governance, because agents need it. tmux never needed approval gates — humans typed everything. The moment agents type too, you want what rysh builds in: every tool call visible, dangerous operations behind explicit approval, secrets swapped for reversible tokens client-side (##snat) so the provider never receives the value.
Persistence with structure. Both worlds survive detach. Rysh additionally persists workspace state — panes, modes, buffers, agent status — in an embedded JetStream KV store, and lets you drive a detached session headlessly: rysh send work "run the smoke suite" --pane 3.
The honest table
| tmux / Zellij | rysh | |
|---|---|---|
| License / cost | Free, open source, ubiquitous | Not open source; self-hostable; private beta |
| A pane is… | a shell | a conversation: shell, agent, chat, or channel |
| Maturity | Decades (tmux) / years (Zellij) of hardening | Early. Genuinely. That's what design partners are for |
| Runs everywhere | Any box, any distro, offline | Your infra + your Anthropic key (it runs on Claude) |
| AI / agents | None (by design) | Native: agents, approvals, budget-leashed loops |
| Sharing | Same-host access | App-layer pane sharing, view/control |
| Scriptability | Legendary | ## command language + rysh send; younger ecosystem |
That left column has real wins. Don't let anyone — including me — talk past them.
When to pick tmux or Zellij
- You need free, open-source, install-anywhere software. Rysh is self-hostable but not open source, and runs on Claude with your own Anthropic key — if either of those is a dealbreaker, the classics are your tools and they are great tools.
- You're on servers where nothing new gets installed. tmux is already there. That ubiquity took twenty years to earn.
- You don't want AI in your terminal. Legitimate. A multiplexer that does one thing perfectly beats a platform you won't use.
- You depend on deep ecosystem: plugins, copy-mode muscle memory, decades of Stack Overflow.
When to pick rysh
- Agents are part of your daily work, and you're tired of being the copy-paste bus between a chatbot window and your shell.
- You want to watch several agents work — in panes, with separate output streams — not scroll one interleaved transcript.
- You want to hand a live session to a teammate without handing them SSH keys.
- You want the same agent that helps in the terminal to answer on Slack, email, or your website — one markdown file, every surface.
The lineage, honored
tmux taught us sessions should outlive terminals. Zellij taught us multiplexers could be humane. Rysh is trying to teach the next thing: that a pane can hold a colleague, not just a process — and that once it does, you'll want the visibility, approvals, and ownership that colleagues require.
Twenty years of panes got us here. The agent era gets its own multiplexer.
Rysh is in private beta — access via the design-partner program: free access, direct line to the founder, roadmap influence → apply here.
More in this series: "So it's tmux with AI?" — a five-minute tour that says otherwise · Every pane is a conversation