How I Organize a Dozen AI Agents in One Terminal

A dense vertical sidebar of Claude Code session tabs, each with its own real title, glimpsed at a glance
What 4 to 12 agents actually looks like, glanceable.

How I Organize a Dozen AI Agents in One Terminal

I regularly run 4 to 12 Claude Code agents at once, in one terminal window, and I can tell what every single one is doing without clicking into any of them. Three small, deliberate habits make that possible, and none of them are complicated: how the tabs are laid out, a second kind of tab that isn’t a tab at all, and tabs that spawn their own tabs.


Why terminal layout becomes a real problem

I run a lot of Claude Code agents at once. Not two or three; 4 to 12 most days. One’s fixing a bug, one’s drafting a Linear card, one’s waiting on a webhook, one’s just idling until I need it. At that scale the bottleneck isn’t remembering what each agent is doing, it’s seeing which tab is which without clicking into every single one to check. Scroll through a wall of identical-looking tabs and you’ve spent five minutes doing manual bookkeeping instead of work.

A dense sidebar of many distinct, real-looking tab titles. The problem is scanning that many at a glance, not that they're unlabeled.
Every tab already has a real title; the problem is scanning this many of them at a glance.

Vertical over horizontal

iTerm2 defaults to horizontal tabs across the top, and that’s fine until you cross maybe six or seven of them. Past that, titles truncate to ellipses and you’re staring at a row of dots. Switch to vertical tabs. A vertical strip holds two dozen full titles down the side of the screen before you’d ever need to scroll. It’s just the right axis for the problem; you have more vertical pixels to spare than horizontal ones once you’re past a handful of tabs.

Top: a horizontal row of ten tabs, most titles truncated to ellipses. Bottom: the same ten tabs as a vertical list, every title fully readable.
Same ten tabs, two orientations. Horizontal truncates, vertical doesn’t.

Tab headers: fake tabs used as folder dividers

The other habit is entirely mine, and it’s dumb simple: fake tabs that exist only as section dividers. A header is just an idle tab with a title, an emoji, and a slightly different background color that never gets selected or run.

A section of the tab sidebar showing an emoji-labeled project-header row sitting between two normal work tabs, with no keyboard shortcut of its own.
A section of the tab sidebar showing a grey, emoji-labeled header row sitting between two normal work tabs, with no keyboard shortcut of its own.

I use them the way you’d use folder headers in a file browser: drop one in above a related cluster of work tabs and the vertical sidebar reads like an outline instead of a flat list. iTerm has no native concept of this; it’s just an idle tab used as furniture.

Tabs spawning tabs

The last piece is that this isn’t limited to me hitting Cmd+T. iTerm2 exposes a real, documented Python API: you can script the creation, closing, and selection of tabs and panes from outside the app entirely. I use it so an agent can open a brand new tab running a genuinely separate Claude Code session, not a sub-agent living inside its own conversation, an actual independent process with its own context, spawned the same way I’d spawn one by hand. That’s a meaningfully different thing from a sub-agent: it gets its own terminal identity, its own tab title, its own place in this whole layout system, and it keeps running even if the session that spawned it closes.

A sidebar showing a parent task row, immediately followed by two newly-spawned session rows indented beneath it.
An agent opened these two on its own; each one a real, independent session.