I Used tmux for 10 Years. Here's Why I Switched to Beam for AI Agents
Let me be clear up front: tmux is one of the finest pieces of software ever written. I have used it nearly every day for over a decade. My .tmux.conf is 200+ lines of carefully accumulated muscle memory. I still SSH into production boxes and immediately type tmux attach without thinking. None of that is changing.
But six months ago, my daily workflow shifted. I stopped writing most code by hand and started orchestrating AI agents instead. Claude Code in one terminal. A second agent reviewing its output. A dev server watching for changes. A git log tailing in a split pane. Multiply that by two or three active projects and suddenly my tmux setup — the setup I spent years perfecting — started to feel like the wrong tool for the job.
This is the story of what broke, what I tried, and why I eventually settled on Beam for my local multi-agent development workflow. I will be honest about the tradeoffs. tmux is not going anywhere, and for many tasks it remains unmatched.
A Love Letter to tmux
If you are reading this, you probably already know why tmux is great. But let me say it anyway, because I think the context matters.
tmux is the closest thing we have to a universal terminal multiplexer. It runs everywhere. It survives SSH disconnects. It has zero dependencies beyond a C compiler and libevent. The keybinding system is infinitely composable. The scripting API lets you automate anything. And it is rock-solid — I have had tmux sessions running for months on production servers without a single hiccup.
For server administration, remote pair programming, and long-running processes on headless machines, tmux is still the right answer. Full stop. Nothing I write below changes that.
The issue is not tmux itself. The issue is that AI agent workflows introduced a set of requirements that tmux was never designed to solve.
Where tmux Falls Short for AI Agent Workflows
When you run multiple AI coding agents simultaneously, a few friction points compound quickly:
No 1-Click Agent Installation
Every time I set up a new machine or helped a teammate get started, the same ritual played out: install Node, install the Claude CLI, configure API keys, set up the right shell integration. In tmux, each of those steps is manual. There is no concept of "this terminal should have Claude Code ready to go." You are always starting from raw shell.
No Persistent Memory Across Sessions
AI agents work best with context. Claude Code uses CLAUDE.md files, project-specific instructions, and memory that persists across conversations. But tmux sessions are ephemeral by nature. Kill the session, lose the context. Yes, you can script around this with tmux-resurrect or tmux-continuum, but those plugins restore pane layouts, not the semantic context your agents were operating in.
No Project-Aware Workspaces
tmux sessions are just named groups of windows. They have no concept of "this session is for Project X and should start in /home/user/project-x with these environment variables loaded." You can script this with tmuxinator or tmux-sessionizer, but now you are maintaining YAML files or shell scripts for every project. It works. It is also another thing to maintain.
Manual Session Naming and Navigation
With three projects and four agents each, you end up with a dozen tmux windows. Switching between them means either memorizing window numbers or using prefix + w to get a list. Compare that to a fuzzy-search quick switcher where you type "backend claude" and jump directly to the right pane.
The Weekend of Yak-Shaving
Naturally, my first instinct was to solve all of this inside tmux. I have done this before. I wrote custom scripts, set up tmuxinator configs for each project, built a little shell wrapper that would spawn a named session with the right working directory and pre-run claude in the first pane.
It looked something like this:
# ~/.local/bin/agent-session
#!/bin/bash
PROJECT=$1
SESSION="ai-${PROJECT}"
tmux new-session -d -s "$SESSION" -c "$HOME/src/$PROJECT"
tmux rename-window -t "$SESSION:0" "claude-1"
tmux send-keys -t "$SESSION:0" "claude" Enter
tmux new-window -t "$SESSION" -n "claude-2" -c "$HOME/src/$PROJECT"
tmux send-keys -t "$SESSION:1" "claude" Enter
tmux new-window -t "$SESSION" -n "devserver" -c "$HOME/src/$PROJECT"
tmux send-keys -t "$SESSION:2" "npm run dev" Enter
tmux new-window -t "$SESSION" -n "git" -c "$HOME/src/$PROJECT"
tmux attach -t "$SESSION"
This worked. For one project. Then I needed to handle the case where the session already exists. Then I wanted split panes instead of separate windows for certain layouts. Then I wanted to save and restore layouts per project. Then I wanted the agent sessions to auto-restart if they crashed.
I spent an entire weekend on this. By Sunday night I had a 400-line Bash script, three tmuxinator YAML files, and a growing suspicion that I was solving the wrong problem.
The Yak-Shaving Test
If you are a tmux power user, ask yourself honestly: how many hours have you spent configuring your terminal environment versus actually using it to build things? There is a point where the meta-work exceeds the actual work. For me, multi-agent orchestration was that inflection point.
What Beam Adds on Top
Beam is not a tmux replacement in the way that, say, Zellij is. It is a different category. Beam is a native macOS terminal built specifically for the workflow where you are running multiple AI coding agents across multiple projects simultaneously. Here is what shifted my daily routine:
Agent Auto-Install
Open Beam, click the agent button, and Claude Code is installed and ready. No manual Node setup, no CLI configuration dance. The agent is a first-class citizen in the terminal, not a process you happen to run inside it.
Project System with Working Directories
Create a project in Beam and it remembers the working directory, the workspace layout, and which agents you had running. Switch between projects with ⌘P and the entire context snaps back — not just the pane layout, but the right directory, the right environment, and the right configuration.
Shared Memory Files
Beam understands the CLAUDE.md convention natively. Your agent memory persists across sessions and is visible to every agent in the project. In tmux, this is a file on disk that you manage yourself. In Beam, it is a first-class part of the workflow.
50+ Keyboard Shortcuts
I was worried about losing tmux's keyboard-driven workflow. That concern evaporated quickly. Beam has over 50 shortcuts: ⌘T for new tab, ⌘N for new workspace, ⌘⌥⌃T for split pane, ⌘⌥←→ to switch workspaces. The muscle memory transfers faster than you would expect because the keybindings follow macOS conventions you already know.
Visual Workspace Hierarchy
This is the one I did not know I needed. Beam gives you a sidebar showing all your workspaces, tabs, and split panes in a tree. When you have eight agents running across three projects, being able to glance at a sidebar and see the full picture is worth more than any status bar configuration.
Side-by-Side: 3-Agent Workflow Setup
Let me show the concrete difference. Same goal: set up a project with three Claude Code agents — one for frontend, one for backend, one for tests — plus a dev server.
tmux: ~15 Commands
# Create session
tmux new-session -d -s myapp -c ~/src/myapp
# Window 1: Frontend agent
tmux rename-window -t myapp:0 "frontend"
tmux send-keys -t myapp:0 "claude" Enter
# Window 2: Backend agent
tmux new-window -t myapp -n "backend" -c ~/src/myapp
tmux send-keys -t myapp:1 "claude" Enter
# Window 3: Test agent
tmux new-window -t myapp -n "tests" -c ~/src/myapp
tmux send-keys -t myapp:2 "claude" Enter
# Window 4: Dev server
tmux new-window -t myapp -n "devserver" -c ~/src/myapp
tmux send-keys -t myapp:3 "npm run dev" Enter
# Attach
tmux attach -t myapp
Plus you still need to manually tell each Claude instance what its role is, maintain your tmuxinator config if you want to reproduce this layout later, and hope you remember the window numbers when switching.
Beam: ~30 Seconds
- Open Beam. Create a project pointing to
~/src/myapp. - Press ⌘T three times to create four tabs. Rename each by double-clicking: Frontend, Backend, Tests, DevServer.
- In the first three tabs, launch Claude Code from the agent menu (or type
claude). - In the fourth tab, run
npm run dev. - Press ⌘S to save the layout.
Tomorrow, open Beam, select the project, and the entire workspace is restored. Switch to a different project with ⌘P and come back whenever you want.
The difference is not that tmux cannot do this. It can. The difference is the number of moving parts you need to maintain and the cognitive overhead every time you sit down to work.
When to Use tmux vs. When to Use Beam
Here is my honest take after six months of using both:
Use tmux when:
- You are on a remote server. Beam is a local macOS app. tmux runs anywhere with a terminal. For SSH work, server administration, and anything on a headless machine, tmux is the only real answer.
- You need session persistence across reboots on servers. tmux's ability to detach and reattach is genuinely irreplaceable for long-running remote processes.
- You are working in a constrained environment. Docker containers, minimal VMs, CI/CD runners — tmux's zero-dependency footprint is a huge advantage.
- You have a mature tmux config and your workflow is not agent-heavy. If you are not running multiple AI agents daily, there is no reason to switch. tmux is excellent at what it does.
Use Beam when:
- You are running multiple AI coding agents locally. The project system, agent integration, and workspace management are purpose-built for this workflow.
- You switch between projects frequently. Beam's quick switcher and project persistence eliminate the context-switching tax that tmux imposes.
- You want keyboard-driven efficiency without the configuration overhead. 50+ shortcuts out of the box, no
.tmux.confrequired. - You are tired of maintaining shell scripts to automate your terminal layout. Beam saves and restores layouts natively.
- You value visual overview. The sidebar navigator gives you an at-a-glance view of every workspace, tab, and pane across all projects.
They Can Coexist
I still use tmux every day — on servers. My local development workflow, where I spend 80% of my time orchestrating AI agents, runs entirely in Beam. There is no rule that says you have to pick one. Use the tool that fits the context.
The Real Question
The question is not whether tmux is good. It is great. The question is whether your local multi-agent workflow deserves a purpose-built tool, or whether you want to keep maintaining the scaffolding yourself.
I maintained that scaffolding for years. I was good at it. But at some point, the time I spent configuring tmux for agent workflows was time I was not spending on the actual work those agents were helping me do. Beam gave me that time back.
If you are running even two AI coding agents regularly, it is worth trying. The muscle memory transfers faster than you think, and you can always tmux attach when you need to.
Try Beam Free
Keep tmux for your servers. Use Beam for your local multi-agent workflow. See the difference in one session.
Download Beam for macOS