Warp vs iTerm2 When You Live in Claude Code and tmux
If tmux is your session manager and Claude Code is your main interactive process, use iTerm2. It is free, open source, macOS native, and it is the only
NexaSphere Team
Author

If tmux is your session manager and Claude Code is your main interactive process, use iTerm2. It is free, open source, macOS native, and it is the only mainstream terminal with real tmux control mode integration. Warp is a well built product, but almost everything you pay for in Warp stops applying the moment you type tmux attach.
If you do not use tmux, the answer flips and gets more interesting. Warp's editing surface, command palette, and block model are genuinely better than iTerm2's for ad hoc shell work, and Claude Code runs fine in it.
The rest of this article is about why that split exists, and the specific configuration that makes either one work properly with Claude Code.
tmux flattens the terminal into a renderer
This is the part most comparison posts miss. When you attach to a tmux session, tmux takes over the screen, the scrollback, the copy buffer, the splits, the tabs, and the keybindings. Your terminal emulator is demoted to a font rasterizer with a clipboard.
That is not a criticism of tmux. It is the entire point. It is why you can close your laptop lid, lose Wi-Fi, quit your terminal by accident, and still find a three-hour Claude Code session exactly where you left it.
But it does mean the comparison is not "which terminal is better." It is "which terminal gets out of tmux's way, and which one fights it."
What Warp gives up when you attach to tmux
Warp's differentiator is blocks. Every command and its output become a discrete, addressable unit that you can collapse, copy, share, and search. It is a good idea, well executed.
Inside tmux, it stops working the way you want. tmux is one long-running process drawing to an alternate screen. Warp cannot see where one command ends and the next begins, because from its perspective nothing is ending. You get one enormous block that never closes.
The same applies to Warp's other headline features. Its native splits and tabs now duplicate tmux's splits and windows, and you have to decide which layer owns which keybinding. Its command history and palette do not see inside the tmux session. Its input editor, which is the thing most people actually fall in love with, is bypassed whenever a TUI like Claude Code owns the keyboard.
Then there is Warp Agent Mode. It is a capable agent, but if you are reading this you already chose Claude Code. You would be paying for a second agent you will not use, inside a terminal whose main advantages you just disabled.
None of this makes Warp bad. It makes Warp redundant in this specific configuration.
What iTerm2 gives you that is specific to tmux
iTerm2 supports tmux control mode. You start your session with tmux -CC (or tmux -CC attach) and tmux windows become native iTerm2 tabs, tmux panes become native iTerm2 splits, and native scrollback, native search, and native mouse selection all start working again.
You get tmux's persistence with the terminal's interface. Detach, quit iTerm2, reopen it, run tmux -CC attach, and your layout comes back as real tabs. As far as I know, no other terminal implements this.
Control mode is not free of quirks. Nested sessions and some plugin-heavy configs behave oddly, and you have to pick either control mode or plain tmux for a given session rather than switching mid flight. Try it for a week before deciding. Plain tmux attach in iTerm2 is still perfectly good if control mode does not fit your habits.
The settings that actually matter for Claude Code
Most of the pain people blame on their terminal is terminfo and timing. Put these in ~/.tmux.conf:
set -g default-terminal "tmux-256color"
set -ga terminal-overrides ",*:RGB"
set -g history-limit 100000
set -sg escape-time 10
set -g focus-events on
set -g mouse on
set -g monitor-bell on
Why each one matters:
Truecolor. Claude Code renders diffs with 24 bit color. Without the RGB override you get 256 color approximations, and red and green diff lines start looking the same. If tmux-256color fails to load, macOS is shipping an older terminfo database than tmux expects. Either install a newer ncurses or fall back to screen-256color and keep the override.
escape-time. The default makes tmux wait after an escape byte to see if a key sequence is coming. In an interactive TUI this shows up as ESC feeling sticky. Ten milliseconds is enough.
history-limit. Your terminal's scrollback is irrelevant inside tmux. tmux's own buffer is the only one that exists, and the default is small enough to lose the start of a long agent run.
monitor-bell. Claude Code can be configured to ring the terminal bell when it finishes or needs input. tmux swallows that bell unless you tell it not to, and iTerm2 can then turn it into a real macOS notification. This is the single highest value thing on the list if you run long tasks and switch away from the terminal.
Multiline input. Claude Code ships a /terminal-setup command that configures Shift+Enter for a newline instead of submit in supported terminals. Run it once. If your terminal is not supported, \ followed by Enter still works.
Mouse mode tradeoff. With mouse on, scrolling enters tmux's copy mode, and dragging selects inside tmux rather than natively. In iTerm2, hold Option while dragging to force a native selection that ignores mouse reporting. That single shortcut resolves most copy and paste complaints about tmux.
A layout for running several agents at once
The reason to be in tmux at all is that one Claude Code session is rarely the whole job. My working pattern is one git worktree per task, one tmux window per worktree, three panes in each: the agent, a test watcher, and a free shell for git operations.
git worktree add ../proj-auth feature/auth
tmux new-window -n auth -c ../proj-auth
Agents that run in separate worktrees do not collide on the same working tree, and detaching means a long refactor keeps running while you close the laptop. If a session does die, claude --continue picks the last conversation back up and claude --resume lets you choose an older one.
Where Warp genuinely wins
I do not want to strawman it. Warp is better than iTerm2 at:
- Editing a long command. Real cursor behavior, real selection, real undo, without configuring anything.
- Onboarding. Sensible defaults out of the box, where iTerm2 expects you to visit its preferences window.
- Sharing output. Copying one clean block beats hunting for where a command started.
- Cross platform consistency, since Warp has expanded past macOS and iTerm2 has not.
If you are a single-window developer who runs local commands, does not need persistence across disconnects, and wants Claude Code as one tab among several, Warp is a reasonable home for it.
Two caveats worth knowing before you commit. Warp is closed source commercial software with cloud-connected features and account tiers, and its AI functionality sits behind those tiers, so check the current terms yourself rather than trusting any blog post's numbers. Some developers rule it out on those grounds alone. Others do not care. Both positions are defensible, but decide it deliberately.
The honest third option
If your real complaint is that iTerm2 feels heavy, the answer is probably not Warp. It is Ghostty, WezTerm, kitty, or Alacritty. They are fast, native or near native, and they stay out of tmux's way by design. You lose iTerm2's control mode integration and its deeper feature set, and Ghostty in particular has become a common choice for exactly this workflow.
The order I would try things: iTerm2 with tmux -CC first, Ghostty with plain tmux second, Warp only if you decide to drop tmux.
FAQ
Does Claude Code run worse in Warp? No. It runs fine. The issue is not compatibility, it is that Warp's advantages do not survive contact with tmux.
Can I use Warp's blocks and tmux together? Not meaningfully. tmux presents itself as one continuous process, so block boundaries do not form. You can use Warp without tmux and get blocks, or with tmux and not get them.
Is iTerm2 too slow for streaming agent output?
For normal use, no, especially with the Metal renderer enabled. If you routinely cat enormous files or tail extremely noisy logs, a lighter terminal will feel better. That is a rendering workload question, not a Claude Code question.
Do I need tmux at all if I use Claude Code? Only if you care about sessions surviving a disconnect, want several agents running in parallel, or work over SSH. If none of those apply, tmux is overhead you do not need.
Why do my Claude Code diffs look wrong in tmux?
Almost always missing truecolor. Set the RGB terminal override shown above, restart the tmux server with tmux kill-server, and check with a truecolor test script.
Bottom line
Pick the terminal that matches which layer owns your workflow. If tmux owns it, iTerm2 is the correct answer because it is the only terminal that integrates with tmux rather than competing with it. If nothing owns it but you, Warp is a pleasant place to work. Either way, spend the twenty minutes on tmux.conf and notifications. That configuration will change your day more than the choice of emulator does.
Free tool
Find any chat in seconds, across ChatGPT, Claude and Gemini
Search every conversation you have ever had, in one place, without scrolling the sidebar. Free, and it works on the chats you already have.
Works on your existing chats. No account needed.