One Claude Code session is productive. Five Claude Code sessions aren't productive times five. They're chaos times five, unless you've solved the window-management problem underneath.
This guide walks through three things, in order: installing Claude Code on Mac, running it in a terminal, and the actual hard problem, which is keeping track of what a bunch of parallel agents are doing at once.
Installing Claude Code on Mac
Two paths. Pick whichever fits your setup.
Via npm (most common):
npm install -g @anthropic-ai/claude-code
You need Node 18 or later. Homebrew users can get it with brew install node first. Once installed, claude --version should print a version string.
Via the native installer: download from code.claude.com. This gives you the same CLI, pre-signed, no Node required.
First launch will prompt you to authenticate. Claude Code opens your browser, you sign in with the same Anthropic account that backs Claude.ai, and the token lands in your macOS keychain. No separate API key needed for a subscribed account.
Verify with:
cd ~/code/some-repo
claude
You should see the Claude Code prompt, ready for a task.
Running one Claude Code session
The minimum-viable workflow is boring on purpose:
cdinto your project directory (a git repo gives Claude better context, but it isn't required).- Type
claude. - Give it a task in plain English: "add JWT auth middleware to the user router".
- Watch it read files, propose changes, write them, and (if you let it) run your tests.
- Approve, reject, or redirect as it works.
This is fine for one task. The whole thing starts to be useful when you stop doing one task at a time.
Running five Claude Code sessions in parallel
The pattern I actually use: one terminal per concurrent task. Different features, different repos, different branches, all running their own Claude Code session at the same time.
It looks like this, conceptually:
- Terminal 1:
apirepo,feat/jwt-authbranch — Claude adding auth middleware. - Terminal 2:
apirepo,feat/testsbranch (git worktree) — Claude writing integration tests. - Terminal 3:
frontendrepo,feat/dashboard— Claude building the new dashboard page. - Terminal 4:
frontendrepo,main— Claude reviewing an open PR. - Terminal 5:
infrarepo — Claude writing a Terraform module.
Each session is an independent process. There's no shared state by default. A Claude Code session in Terminal 1 doesn't know what Terminal 3 is doing. If two sessions are touching the same repo, use a git worktree per session to keep their filesystem views isolated.
That's the easy part. The hard part is the windows.
The window-management problem
Start with one terminal. Easy. Open a second, alt-tab between them, still fine. Open a third, maybe tile them manually. At five terminal windows open on a single screen, you're doing one of the following:
- Losing track of which agent is waiting for your input.
- Alt-tabbing through windows like a Wordle game trying to find the one that finished five minutes ago.
- Manually arranging the windows in a grid every time you add or close one.
- Switching to the other monitor hoping three of them are over there.
None of these scale. There are three honest ways out.
Option 1: tmux or Zellij
The classic Unix answer. tmux (or the more modern Zellij) gives you panes inside a single terminal, keyboard-driven navigation, persistent sessions that survive network drops.
If you already use tmux and it fits your head, run Claude Code inside tmux panes. It works fine, Claude is just a CLI. No integration needed.
If you don't already use tmux, I wouldn't pick it up just for this. There's a real configuration and muscle-memory cost (prefix keys, session names, pane arithmetic) and you're now managing two layers of keyboard shortcuts: tmux's for windows, Claude's for code. Learning tmux because you want to run multiple AI agents is like buying a kiln because you needed a coffee. See tmux alternatives on Mac for the longer version of this argument.
Option 2: Multiple terminal windows, manually arranged
If you're disciplined and your laptop has a big screen, this works. Command-N for a new Terminal.app or iTerm2 window, drag into position, live with the overlap. Everyone does this at some stage.
It stops scaling at about four windows, when arranging them evenly becomes a second job. You can buy one of the dozens of tiling window managers for macOS (Rectangle, Magnet, Moom, Amethyst), which helps with the arranging but still requires you to be the one pressing the keys each time a new terminal opens.
Option 3: A terminal that auto-tiles
This is the category Waffle sits in, and in fairness, the reason I built it. Open a terminal, it's fullscreen. Open a second, they split 50/50. Four become a 2×2 grid. Nine become 3×3. You don't arrange anything.
The workflow for running five Claude Code sessions in parallel becomes:
- Press ⌘N for a new terminal. It tiles automatically.
- Type
claudeto start a session. - Repeat four more times. You now have a 3×2 grid of live Claude Code sessions, all visible at once.
- Use ⌘←/⌘→/⌘↑/⌘↓ to move focus between agents.
- Use ⌘⏎ to zoom the current one to fullscreen while it works; ⌘⏎ again to return to the grid.
Waffle also auto-detects git repos and colour-codes sessions by project. A grid of three repos × two agents each shows you at a glance which agent is in which codebase, because each project gets its own accent colour and its own filter tab.
Keyboard flow reference
The shortcuts I actually use running five agents in parallel. Works in Waffle; substitutes in tmux or iTerm2 exist but are longer.
| Shortcut | What it does |
|---|---|
| ⌘N | New terminal (auto-tiles) |
| ⌘W | Close current terminal |
| ⌘← / ⌘→ / ⌘↑ / ⌘↓ | Move focus between sessions |
| ⌘⏎ | Zoom current session fullscreen (and back) |
| ⌘] / ⌘[ | Cycle project-group filter |
Practical tips for running many agents at once
Use git worktrees for same-repo sessions
If two Claude Code sessions need to work in the same repository, give each one its own worktree so they don't fight over the working tree. git worktree add ../repo-feature feat/x then cd into the worktree in the new terminal. This lets Claude run tests and commit without one session stomping another.
Name your task out loud in the first prompt
When you're running five agents, it's easy to lose track of what each one is working on. The first prompt you give each Claude Code session is effectively its label in the grid. Write it like a Git branch name: short, concrete, unambiguous.
Don't ask too many agents to run tests at once
Five agents running tests in parallel will start fighting over the same ports, test databases, and cache directories. Stagger test runs or keep one session as a "reviewer" that runs tests after others finish writing code.
Keep one terminal free for you
Not every terminal in your grid needs a Claude. I usually keep one in the corner for git status, gh pr list, shell commands, a REPL. Anywhere I want to poke around without bothering an agent.
FAQ
How do I install Claude Code on Mac?
Two options. Install via npm: npm install -g @anthropic-ai/claude-code (requires Node 18+). Or download the native installer from code.claude.com. Either way, run claude in a terminal to authenticate on first launch through your Anthropic account — no separate API key needed for a subscribed account.
How do I use Claude Code in a Mac terminal?
Open any macOS terminal (Terminal.app, iTerm2, Ghostty, or Waffle), cd into your project directory (a git repo gives Claude better context), and type claude. Give it a task in plain English — "add JWT auth middleware", "write tests for the parser" — and it reads your code, proposes changes, applies them, and (with your approval) runs your tests. Exit with Ctrl-D, Ctrl-C twice, or the /exit command.
Can I run multiple Claude Code sessions in parallel?
Yes. Each Claude Code session is a separate process in its own terminal. There's no shared state by default. Open a new terminal for each task, cd into the target repo (or git worktree), and run claude again. Five to ten parallel sessions works comfortably on a modern Apple Silicon Mac.
What's the best terminal for running multiple Claude Code sessions?
Live on SSH? tmux. Local on a Mac with five agents going? Waffle is built for exactly that. Any terminal runs Claude Code itself — the real choice is about window management when you scale past three parallel sessions. tmux and Zellij solve it inside a terminal (with configuration cost). Waffle solves it by auto-tiling every session into a single native macOS window with zero config.
Do parallel Claude Code sessions share context or memory?
No. Each claude invocation is an independent process with its own conversation history. Sessions in different terminals don't see each other's prompts or edits. If two sessions need to work on the same repo, use git worktree (one worktree per session) to keep their filesystem state isolated.
Does Claude Code work with tmux?
Yes. Claude Code runs fine inside a tmux pane. It's just a CLI program. The question is whether tmux is the right host. If you already use tmux, pair them. If you're reaching for tmux just to manage windows while running parallel agents, a native window manager like Waffle removes an entire layer of configuration.
How much does it cost to run Claude Code in parallel?
Claude Code can run on an Anthropic subscription (Pro or Max) or a pay-per-token API key. Use the subscription — for typical Claude Code workloads it's dramatically cheaper than the API. A single Max plan covers what would cost hundreds of dollars per month at API rates for the same workload.
From there, five sessions don't cost more per task than one. Total token usage is the same whether you run tasks in series or in parallel. What does change: you'll hit per-minute rate limits and daily allowances much faster, since you're doing five times the work per hour. Check your plan's rate limits before leaving a grid of five running unattended.