Claude Code in iTerm2 vs. Crystl: What Changes When You Use a Purpose-Built Terminal

iTerm2 is a great terminal. I used it for years before building Crystl, and I still think it’s the best general-purpose terminal on macOS. This isn’t a hit piece.

But “general-purpose” is the key phrase. When you start running Claude Code sessions that last hours, juggling multiple agents across repos, and approving dozens of file edits per session, the gaps in a general-purpose terminal become hard to ignore.

This is what changes when you move Claude Code into a terminal built for it.

Project organization: tabs vs. gems

In iTerm2, you organize Claude Code sessions with tabs and window arrangements. Maybe you use profiles to color-code different projects. It works, but it’s manual — you’re building structure on top of a tool that doesn’t know what a “project” is.

In Crystl, projects are first-class objects called gems. Each gem is tied to a directory, has its own set of terminal sessions (shards), its own MCP server configuration, and its own API key selection. When you open a gem, you’re dropped into a workspace that already knows what you’re working on.

The Crystal Rail — a navigation bar anchored to the side of your screen — shows all your gems and their active shards at a glance. You can read more about how gems and shards work, but the short version is: context switching between projects goes from “find the right tab cluster” to “click the right gem.”

Approval flow: inline prompts vs. floating panels

This is the one that changes your daily experience the most.

In iTerm2, Claude Code’s permission prompts appear inline in the terminal output. You have to scroll to find them, and they mix in with everything else Claude is printing. If you’re doing something else — reading docs, checking a browser — you might not even notice a prompt is waiting.

Crystl intercepts these approval requests and presents them as floating glass panels. They appear over your terminal without stealing focus, showing exactly what Claude wants to do. You hit Allow or Deny without losing your place. You can configure different approval modes per gem depending on how much autonomy you want to give the agent.

It sounds like a small thing until you’ve approved your fiftieth file write in a session. The cumulative time savings add up.

Parallel sessions: tab management vs. isolated shards

Running two Claude Code instances on the same repo in iTerm2 is asking for trouble. Both agents will edit files in the same working directory, and you’ll get merge conflicts, race conditions, or worse — silent overwrites.

Crystl’s isolated shards solve this with git worktrees. Each isolated shard gets its own branch and working directory, so two agents can work on the same codebase without stepping on each other. When the work is done, you merge the branches. You get true parallel AI-assisted development without the chaos.

You can run a refactoring agent in one shard and a feature-building agent in another, on the same repo, at the same time. Isolated sessions make this safe by default.

Session persistence: scrollback vs. conversation history

iTerm2 has a scrollback buffer. You can increase it, even set it to unlimited. But close the tab and it’s gone. The conversation, the reasoning, the decisions Claude explained — all evaporated.

Crystl preserves every shard’s full conversation history automatically. Close a shard, reboot your Mac, come back next week. The conversation is there — structured, scrollable, and rendered properly. Not a raw text dump, but the actual conversation with prompts, responses, code blocks, and tool calls intact.

For anyone who works with Claude Code regularly, this alone might be reason enough to switch. See conversation history for the details.

Notifications: polling vs. push

In iTerm2, you find out a Claude Code session needs your attention by checking the tab. If you have six tabs running, that means cycling through them to see which ones have pending prompts.

Crystl sends macOS notifications when a shard needs attention — when an approval is pending, when a task completes, or when an error occurs. You can focus on other work and respond to agents only when they need you. Notifications keep you informed without requiring you to babysit.

MCP servers and API keys: global vs. per-project

iTerm2 doesn’t have opinions about your Claude Code configuration. MCP servers and API keys are configured globally or manually per session.

Crystl lets you configure MCP servers and API keys per gem. One project might use a database MCP server and your work API key, while another uses a different set entirely. The configuration travels with the gem, so you never accidentally run a client project against the wrong API key.

What iTerm2 still does better

Fair is fair. iTerm2 has decades of polish for general terminal tasks. If you need advanced tmux integration, extensive shell customization, or you’re doing non-Claude terminal work alongside your AI sessions, iTerm2’s maturity shows.

Crystl is purpose-built for Claude Code. It does one thing and tries to do it well. If you’re splitting your time between AI-assisted coding and traditional terminal work, you might keep both around.

Picking the right tool

The best terminal for Claude Code on Mac isn’t necessarily the best terminal for everything. It’s the one that understands what Claude Code sessions need: project-aware organization, non-disruptive approvals, safe parallel execution, and persistent conversation history.

If you’re spending more than a couple hours a day in Claude Code, the workflow improvements compound fast.

Crystl is free — sign up at crystl.dev/login.