A plain-English guide to the black-or-blue boxes that confuse everyone — on Windows, Mac, and Linux. The one big idea that clears up the confusion: the window and the shell are two different things. Once you see that, all the names stop being a maze.
cmd, PowerShell, Git Bash, pwsh, conhost, Windows Terminal, Terminal.app, iTerm2, zsh, bash, gnome-terminal, kitty — they sit in only two buckets.
Every "terminal" is actually two pieces of software stacked on top of each other:
The actual window you see on screen. It draws the text, handles your keystrokes, gives you tabs (or doesn't), lets you resize, copy, paste, change the font. It doesn't understand any commands. It just paints letters and forwards what you type.
Examples: Windows Terminal, conhost, Terminal.app, iTerm2, gnome-terminal, kitty, alacritty.
The program running inside the window that actually reads your commands. When you type ls, the shell is what figures out what that means and runs it. It has no window of its own — it borrows the terminal's.
Examples: cmd, PowerShell, pwsh, Git Bash, bash, zsh, fish.
ls work?" you're asking about the shell. Every confused question about terminals collapses once you know which layer you're really asking about.
A useful analogy: the shell is the engine; the terminal is the car body around it. You can put the same engine in different bodies, or different engines in the same body. On Windows you can run cmd or PowerShell or Git Bash inside either conhost or Windows Terminal — nine combinations.
This is the question everyone asks first. Look at the title bar, the prompt, and one quick command.
The window title usually announces what's running inside. A few common ones:
pwsh — modern cross-platform PowerShell, usually in Windows Terminal.C:\WINDOWS\system32\cmd.exe — old-school cmd, classic conhost.The line waiting for your input is a giveaway:
| If the prompt looks like… | It's probably… |
|---|---|
C:\Users\you> | cmd.exe (Windows Command Prompt) |
PS C:\Users\you> | PowerShell (either 5.x or 7) |
you@machine MINGW64 ~$ | Git Bash |
you@machine:~$ | bash on Linux or WSL |
you@MacBook ~ % | zsh on macOS (Catalina and newer) |
~ > or a custom one | fish, or a starship/powerlevel10k theme over bash/zsh |
If you're still not sure, type one of these:
echo $SHELL$PSVersionTableverAnd to see which terminal window is hosting you, on Windows:
$env:WT_SESSION # PowerShell — has a value only inside Windows Terminal
echo $WT_SESSION # Git Bash / bash — same idea
If it prints a long string, you're in Windows Terminal. If it prints nothing, you're in classic conhost.
Windows is where the host-vs-shell distinction matters most, because Microsoft kept three of each lying around for compatibility. Here they are.
The boxy black window that opens when you launch cmd or PowerShell from the Start menu. It's the original Windows console. Works, but minimal.
no tabs limited Unicode no transparency
Microsoft's modern replacement, free in the Microsoft Store or via winget. Tabs, splits, themes, full Unicode, GPU-accelerated. Hosts cmd, PowerShell, pwsh, WSL, Git Bash — whichever you launch.
tabs splits themes emoji
The original DOS-style shell. Still works, still useful for dir, copy, batch files. Limited compared to anything modern.
Open: Win → type cmd → Enter.
The PowerShell that ships with Windows. Object-oriented pipeline, verbose Verb-Noun commands. Frozen at version 5.1 — no new features, just bug fixes.
Open: Win → powershell.
The current, actively-developed PowerShell. Same syntax, more features, runs on Windows / Mac / Linux. Installs side-by-side with 5.x.
Install: winget install Microsoft.PowerShell. Run: pwsh.
A bash shell on Windows, plus Linux-style tools (ls, grep, ssh). Lives inside its own little terminal called mintty. Many tutorials assume you have it.
Install: git-scm.com/download/win.
A real Linux distribution running alongside Windows. Open a Windows Terminal tab labeled "Ubuntu" and you're typing into a real bash shell with a real Linux filesystem.
Install: wsl --install in an admin PowerShell.
Modern alternatives with structured data, Python integration, prettier defaults. Worth knowing they exist; not worth learning until you've outgrown the standard ones.
# Install both in one go (PowerShell, as you):
winget install Microsoft.WindowsTerminal
winget install Microsoft.PowerShell
winget install Git.Git
Tabs only exist if your host supports them. On Windows that means Windows Terminal.
In classic conhost (the old Command Prompt window), there are no tabs. The only way to get a second one is a second window: Win+R, type the shell name, Enter.
macOS has one built-in terminal (Terminal.app), one popular replacement (iTerm2), and one default shell (zsh). Almost everyone has the same setup.
Found in Applications → Utilities. Tabs (⌘+T), splits (⌘+D), profiles. Perfectly adequate for daily work.
tabs splits no GPU rendering
The most popular Mac terminal replacement. Hotkey window, advanced splits, tmux integration, infinite scrollback. Free from iterm2.com.
tabs hotkey window tmux
Newer GPU-rendered terminals. Faster scrolling, smoother fonts, ligatures. Great if you spend all day in the terminal; overkill if you don't.
Since Catalina (2019), zsh is the default. Before that it was bash. They're close enough that day-to-day commands (cd, ls, grep) work identically. Differences only show up in scripting and prompts.
Linux has the most variety because nothing is built-in — every distro picks defaults, and every user replaces them. The shell picture is the same as Mac; the terminal picture is wider.
Ships with Ubuntu, Fedora Workstation, and any GNOME desktop. Tabs, profiles, transparency. The "just works" default.
Ships with KDE. Same idea as gnome-terminal but with more configuration knobs. Splits, tabs, profiles, bookmarks.
Fast, modern, scriptable. Configured by text files. Popular with developers who live in terminals.
The original X11 terminal from 1984. Still works, still installed on most systems. Use it as a last resort when nothing else launches.
By far the most common on Linux:
There's a fourth kind of terminal worth knowing about: the one your cloud provider hosts inside your browser. DigitalOcean has one. So do AWS, Azure, Google Cloud, GitHub Codespaces, Linode, Vultr, and Hetzner. They all work roughly the same way and they all share the same handful of pitfalls.
The model bends the host/shell idea a little:
Every keystroke you type travels through the network into a process on the far end. That one detail explains every quirk and limitation below.
The main star, since this is the one you'll meet first if you've got a droplet. To open it:
DigitalOcean actually ships two consoles, and it's worth knowing which is which:
A real terminal session over websockets. Fast-ish, supports color, mostly behaves. This is what opens by default. Good for quick fixes and inspection.
A VNC-backed console that talks to the droplet's virtual screen, not its network. Use it when you've locked yourself out — broken firewall, bad sshd_config, full disk — and the HTML5 console can't connect either. Slow and clunky; that's fine, it's a lifeboat.
| Pros | Cons |
|---|---|
| No SSH key on this machine. Works from a borrowed laptop, a phone, an internet cafe — anywhere with a browser and your DO login. | Laggy. Every keystroke is a network round-trip. Typing feels rubbery, scrolling stutters, paste can take a second to land. |
Survives a broken SSH config. Forgot to allow your IP through the firewall? Bricked sshd_config? The recovery console still gets you in. |
Clipboard is awkward. Browsers can't grant arbitrary clipboard access to a web page; you click a paste icon, paste into a popup, hit OK. Multi-line pastes sometimes mangle the trailing newline. |
Authentication is your cloud login. Same MFA you already use. No key management, no ~/.ssh/config. |
Some keys are stolen by the browser. Ctrl+W closes your tab. Ctrl+T opens a new browser tab. F-keys may not pass through. Ctrl+N opens a window. |
| Nothing to install. Zero local setup. Useful for first-time droplet bring-up before you've copied an SSH key over. | No tabs, no splits, no scrollback search. The browser tab is the terminal. Want two shells side by side? Two browser tabs — and they don't share history, kill rings, or anything else. |
| Audit trail. The provider can log who opened a console session and when. Useful on a shared account. | No file transfer, no port forwarding. No scp, no ssh -L, no sshfs. Move a file or tunnel a port — you need real SSH. |
| Works on a phone. Not well, but it works. Genuinely lifesaving at 2am from a hotel. | Idle timeout disconnects you. Step away for ten minutes; come back to a dropped session and lost shell state. |
claude inside the DigitalOcean Droplet Console. The lag, the clipboard friction, the keys the browser steals, the missing tabs — every one of those gets worse over a long Claude session. And the idle timeout will drop you mid-task.
tmux on the server — reconnect later with tmux attach and pick up exactly where you left off.
The working pattern, for the common case:
ssh root@your.droplet.ip
tmux new -s claude # first time
claude # start Claude inside the tmux session
# Disconnect any time. Reconnect later from anywhere:
ssh root@your.droplet.ip
tmux attach -t claude # same session, same state
Now your local terminal has tabs, your remote session has persistence, and the DigitalOcean console goes back to being what it's good for: emergencies and first-time setup.
If you use a different provider, same model, same trade-offs. Worth recognizing the names so you know what kind of thing you're looking at:
| Provider | Console name | Worth knowing |
|---|---|---|
| AWS | EC2 Instance Connect, Session Manager | Session Manager works without opening port 22 at all — the connection goes through AWS's control plane. Same lag and clipboard quirks as DO. |
| Azure | Cloud Shell, Bastion | Cloud Shell drops you into a managed bash / PowerShell container, not your VM. Bastion is the per-VM console equivalent. |
| Google Cloud | Cloud Shell | Like Azure Cloud Shell — a managed Linux container, not the VM you're trying to reach. |
| GitHub | Codespaces | A different beast: a whole VS Code in the browser, not just a terminal. Tabs and splits work because the host is VS Code. |
| Linode · Vultr · Hetzner | "Web Console" / "noVNC" | Almost identical to DigitalOcean's recovery console. Same lifeboat use case. |
Whatever you end up in, these basics work the same. Day-one literacy:
| Goal | cmd | PowerShell | bash / zsh / Git Bash |
|---|---|---|---|
| Show current folder | cd | pwd | pwd |
| List files | dir | ls or dir | ls |
| Change folder | cd path | cd path | cd path |
| Go up one folder | cd .. | cd .. | cd .. |
| Make a folder | mkdir name | mkdir name | mkdir name |
| Show a file's contents | type file.txt | Get-Content file.txt | cat file.txt |
| Clear the screen | cls | cls or clear | clear or Ctrl+L |
| Re-run a previous command | F7 | arrow ↑ | arrow ↑ |
| Stop a runaway command | Ctrl+C | Ctrl+C | Ctrl+C |
| Exit the shell | exit | exit | exit or Ctrl+D |
Here's what a healthy Windows Terminal session running PowerShell 7 looks like. Note the tab bar across the top, the PS prefix on the prompt, and the version line:
And here's classic Command Prompt in old conhost — no tabs, no WT_SESSION:
ls and it said 'not recognized'"You're in cmd, where the list command is dir. Or switch to PowerShell / Git Bash, where ls works.
You're in Git Bash (mintty) or old conhost. Use Shift+Insert, or right-click. In Windows Terminal, Ctrl+V works as you'd expect.
You opened classic conhost, not Windows Terminal. They look almost identical at first. Check the title bar — if it says "Command Prompt" or "Windows PowerShell", you're in conhost. Install Windows Terminal to get tabs.
wt doesn't run"That stub file at C:\Users\you\AppData\Local\Microsoft\WindowsApps\wt.exe exists for every Windows user even if Windows Terminal isn't installed. The fix is to actually install the app:
winget install Microsoft.WindowsTerminal
The execution policy is blocking a script. The standard fix (run once, in an admin PowerShell):
Set-ExecutionPolicy -Scope CurrentUser RemoteSigned
You probably forgot to press Enter. Or the command genuinely produced no output (many Unix commands stay quiet on success). Try one that always prints, like echo hello, to confirm the shell is alive.
You don't need any of these on day one. Reach for them when you outgrow the basics.
You've met every terminal there is. So which one should you actually run claude inside? Strip the question down and one criterion swamps the rest:
Claude Code is a back-and-forth that often runs for many minutes at a stretch. You keep wanting a second shell open next to Claude. Three concrete patterns you'll hit on day one:
cat the current state, check git status, glance at a log — without interrupting Claude. Open a second tab. Done.claude in ~/projects/A. A question pops up about project B. New tab, cd ~/projects/B, fresh claude, no context-mixing.None of these are technically impossible without tabs — you can always open a second window. But two unrelated windows for the same task is friction. Tabs are the right shape for how Claude Code actually feels.
| Terminal | Tabs? | Verdict for Claude |
|---|---|---|
| Windows Terminal winget / Microsoft Store |
✅ yes Ctrl+Shift+T |
Use this. Modern, free, hosts every shell you have. The right answer for Claude on Windows, no caveats. |
| VS Code integrated terminal comes with VS Code |
✅ yes | Great if you live in VS Code. Tabs and editor side-by-side, so you watch Claude touch files in real time. The only downside: you're inside an editor. |
| Git Bash (standalone mintty) comes with Git for Windows |
❌ no | OK in a pinch — but better inside Windows Terminal. Add Git Bash as a profile in WT and you get bash on Windows with tabs. Best of both. |
| Classic Windows Console (conhost.exe) what opens when you launch cmd or PowerShell from Start menu, with no Windows Terminal installed |
❌ no | Don't. No tabs means every "let me check..." becomes a second window or an interrupted Claude. Constant friction. This is the trap most beginners fall into without noticing. |
| ConEmu / Cmder third-party, legacy era |
✅ yes | Skip. Did the right thing in 2015. Windows Terminal has caught up and is more actively maintained now. |
| Terminal | Tabs? | Verdict for Claude |
|---|---|---|
| iTerm2 free, third-party |
✅ yes ⌘+T, splits, hotkey window |
Use this. The hotkey window alone is worth it — bind a global key, summon Claude over any app, dismiss it again. |
| Terminal.app built into macOS |
✅ yes | Perfectly fine. If you don't want to install anything, this works. iTerm2 is just nicer. |
| kitty / wezterm | ✅ yes | Power-user upgrade. GPU-rendered, scriptable. Worth it if you live in the terminal; overkill if you just want to run Claude. |
| alacritty | ❌ no | Pair with tmux or skip. Fast, beautiful, tab-less by design. Adds friction for Claude work unless you're already a tmux person. |
| Terminal | Tabs? | Verdict for Claude |
|---|---|---|
| gnome-terminal / konsole your distro's default |
✅ yes Ctrl+Shift+T |
Use what shipped. The defaults are fine. Don't over-think this. |
| kitty / wezterm | ✅ yes | Power-user upgrade. GPU-rendered and scriptable. Worth the switch if you outgrow the defaults. |
| alacritty | ❌ no | Pair with tmux. Same story as on Mac — fast but tab-less. |
| xterm | ❌ no | Last resort only. Painful for a long Claude session. Fine for a one-shot command on a server you ssh'd into. |
If you remember nothing else from this page:
Windows Terminal + PowerShell 7 (with a Git Bash profile alongside) + the Ctrl+Shift+T habit.
iTerm2 + zsh + a global hotkey for the iTerm hotkey window.
Whatever shipped with your distro (gnome-terminal / konsole) + your favorite shell. Upgrade to kitty or wezterm only when you outgrow the defaults.
SSH from your local tabbed terminal (Windows Terminal / iTerm2 / gnome-terminal) into the server, then tmux on the server for sessions that survive disconnects. Save the provider's in-browser console (DigitalOcean, AWS, Azure, GCP) for emergencies — not Claude work.
Whichever path you pick, you end up in the same place: a window with tabs, a shell you trust, and claude one keystroke away.
Once you know which window you're in and which shell is running inside it, every "weird terminal thing" stops being weird.
Now install Claude Code →