One Claude Code session is easy. Three is where it falls apart.
You open a tmux window for each agent, paste a different task into each, and start cycling with Ctrl+b arrow to check progress. Five minutes in you cannot remember which pane was the refactor and which was the test pass. Ten minutes in one agent has finished and is idling; another is stuck on a tool-approval prompt. You only know because you happened to look. The whole point of running three agents in parallel was to not have to babysit them, but you are.
The underlying problem is not Claude Code. Running multiple long-lived agents is a terminal-multiplexer problem, and general-purpose multiplexers like tmux were not designed around it. A tmux pane has no name that means anything to the developer (it is %3 or session:0.2). Pane activity flags fire on every byte of output, so a streaming response looks identical to a finished task. There is no way to send one agent a follow-up message from outside the pane without hand-translating a role name to a coordinate. Every missing primitive adds friction you feel most when you are trying to run more than one agent.
initech is a terminal runtime that treats each pane as an agent, not a shell. That shift changes what you can do:
eng1, eng2, eng3 in a config file. The TUI shows them by name; every CLI addresses them by name. No more hunting for pane coordinates.initech send eng1 "fix the bug in auth.go" writes to the agent's PTY and waits for confirmation. If the agent is dead or does not exist, the command returns non-zero. No silent drops.initech peek eng2 shows what an agent is doing without triggering anything. Useful before you dispatch a new task.Here is the minimum initech.yaml for a three-engineer session. Everything is declarative, so two developers on the same project get the same layout:
# initech.yaml agents: super: { role: super } # dispatcher / you eng1: { role: engineer } # Claude Code eng2: { role: engineer } # Claude Code eng3: { role: engineer } # Claude Code layout: grid-2x2 live_mode: auto
Launch with initech. Each pane opens in its own terminal window and runs claude with the role preloaded. The statusline gives you a running view of who is active, who is idle, and who finished most recently.
You walked away for fifteen minutes. Here is what initech status looks like when you come back:
$ initech status AGENT STATE LAST UPDATE CURRENT BEAD eng1 idle 8m ago ini-42 (ready_for_qa) eng2 streaming just now ini-55 (in_progress) eng3 stuck 3m ago ini-61 (in_progress) qa1 idle 15m ago —
eng1 is done and waiting. eng3 has not made progress in three minutes — probably stuck on an approval prompt or confused. eng2 is actively working. You initech peek eng3 to see what it is stuck on, initech send eng1 "start ini-78 next" to dispatch the next task, and leave eng2 alone. Thirty seconds of work.
If you are running one Claude Code session, none of this matters. The second you run two, the ergonomics start to hurt. By three, most people either accept the friction or build a custom tmux script per project. initech is that tooling, generalized. See the getting-started guide for a full walkthrough, or compare initech to tmux if you are deciding whether to switch.
macOS via Homebrew:
$ brew install nmelo/tap/initech
Or curl:
$ curl -fsSL https://initech.sh/install.sh | sh
Then initech init && initech.