Claude Code: GUI vs Terminal - A Tale of Two Workflows

Or: How I Learned to Stop Worrying and Love the Command Line.

I've been using Claude Code in the terminal for a while now. Sonnet model, JetBrains IDE open on the side, watching changes flow in real-time, git branches under my control. Life was good. Sure, there were annoyances - the dreaded "compacting conversation" message that makes you wonder what context just got sacrificed to the token gods, or losing everything when the terminal session dies. But overall? Solid workflow.

Then Anthropic dropped the GUI preview. Shiny new interface. Opus model. "This is going to be amazing," I thought.

Reader, it was not amazing.

The GUI Experience: A Horror Story in Three Acts

Act I: The Worktree From Hell

First thing I noticed: Claude Code GUI doesn't work in your project directory. Oh no. It creates its own little universe - a git worktree tucked away in some .workspaces folder, completely isolated from your actual codebase.

"That's fine," you might think. "I'll just open it in my IDE."

Nope. JetBrains sees the branch exists but throws errors when you try to switch to it. Something about worktrees. Something about suffering.

The workaround? There's a cute little "Open in VSCode" button that works because apparently VSCode and Claude are best friends now. Great for VSCode users. For those of us who've spent years customizing our JetBrains setup? Pain.

Act II: Where Did My Environment Go?

Here's the thing about git worktrees - they're a fresh checkout. You know what doesn't get checked into git? Your .env file. Your local config. All those gitignored secrets that make your app actually run.

So Claude spins up in its pristine worktree, tries to run your app, and... nothing works. No database connection. No API keys. Just vibes and error messages.

Act III: Shell Shock

I use zsh. Like most developers in 2025. Claude Code GUI? Bash only.

This means nothing on my PATH works. My aliases? Gone. My carefully curated shell environment? Invisible.

The workaround: tell Claude to wrap everything in zsh -c "...". Then put that instruction in CLAUDE.md so it doesn't forget. Then watch it forget anyway and wonder why nvm isn't a command.

The Cleanup Crew

Once you're done with a session, you get to manually:

  • Delete the orphaned git branch
  • Clean up the workspace directory
  • Question your life choices

This cruft accumulates. Your .workspaces folder grows. Your branch list becomes a graveyard of abandoned Claude sessions.

But Wait, There's Good Stuff Too

I'm not completely hating here. The GUI does solve real problems:

No more compacting. Those long sessions where terminal Claude starts forgetting your project structure? Gone. The GUI maintains full context.

Session persistence. Close the window, come back later, pick up where you left off. Terminal Claude? Session dies with the terminal.

It's pretty. Look, the interface is nice. If you're into that sort of thing.

Opus is genuinely better. This was the revelation. Working with Opus instead of Sonnet means less ping-pong. You describe what you want, Claude does it right the first time. No more "okay but you broke the tests" followed by "okay but now you broke something else" loops.

The Plot Twist

Here's the thing: you can run Opus in terminal Claude Code.

The GUI's advantages - session persistence, no compacting, better model - only one of those is exclusive to the GUI. And it's not the model.

Terminal + Opus gives you:

  • Opus-level reasoning (fewer iterations, correct on first try)
  • Your JetBrains IDE working normally
  • Your .env and gitignored files intact
  • Your zsh config and PATH
  • Clean git workflow on branches you control

You lose:

  • Session persistence (mitigate with good CLAUDE.md)
  • Conversation compacting (mitigate with good CLAUDE.md)
  • The pretty interface (you're a terminal person, you'll survive)

The Verdict

Terminal + Opus. Not even close.

The GUI preview is solving problems I don't have while creating problems I very much do have. The worktree isolation might make sense for beginners who need guardrails, but for developers with established workflows, it's actively hostile.

The real MVP features - better reasoning, fewer iterations - come from Opus, not from the GUI wrapper. Run Opus in your terminal. Keep your workflow. Watch Claude get things right the first time while you maintain full visibility in your actual IDE.

Will the GUI improve? Probably. Anthropic ships fast and iterates faster. Maybe we'll get configurable worktree behavior. Maybe JetBrains integration. Maybe zsh support.

But I'm not going to fight my tools waiting for "maybe later." Terminal + Opus works today.

Now if you'll excuse me, I have a CLAUDE.md file to update. Gotta make sure Claude remembers to use zsh... wait, that's only the GUI. Never mind. Terminal life is good.