wikis / Claude Code / wiki / syntheses / surface-picker.md view as markdown
Surface Picker: Terminal CLI vs Desktop App vs IDE Extension vs Web
All four surfaces wrap the same Claude Code engine (the official error reference notes CLI, Desktop, and web "all wrap the same Claude Code CLI"), so models, CLAUDE.md, skills, and permission semantics carry over. The choice is about where it runs and how you supervise it.
Comparison
| Dimension | Terminal CLI | Desktop app (Code tab) | IDE extension (VS Code / JetBrains) | Claude Code on the web |
|---|---|---|---|---|
| Runs on | Your machine (any OS incl. Linux) | macOS / Windows x64 & ARM64 — no Linux | Your machine, inside the IDE | Anthropic-managed VM (4 vCPU / 16 GB RAM / 30 GB disk) |
| Best for | Scripting (claude -p), CI, power users, worktree parallelism, full flag surface |
Visual parallel sessions, diff review + commenting, app preview, PR monitoring | Staying in your editor: IDE diff viewer, selection context, lint/diagnostic sharing | Fire-and-forget cloud tasks; sessions persist after you close the browser; monitor from mobile |
| Parallelism | Manual via git worktrees / claude agents |
Sidebar sessions, each in its own worktree | One session per IDE window (it's the CLI under the hood) | Many isolated VM sessions |
| Permission modes | All, incl. dontAsk (CLI-only) and bypassPermissions via --dangerously-skip-permissions |
Ask / Accept edits / Plan / Auto / Bypass (admin-gateable) | Same as CLI | Accept edits / Plan / Auto; no Bypass (already sandboxed) |
Local config (~/.claude/*) |
Full | Full | Full | Repo-only: user-level CLAUDE.md, user skills, claude mcp add servers do NOT carry over — commit to .claude/ / .mcp.json instead |
| Extras | /fast mode (not in VS Code ext.), --safe-mode, full env-var control |
Integrated terminal & file editor, embedded browser preview with auto-verify, computer use, Dispatch from phone, scheduled tasks | Cmd+Esc/Ctrl+Esc quick launch, @src/auth.ts#L1-99 references |
Setup scripts (root on Ubuntu 24.04), env caching, network allowlists, --remote/--teleport handoff |
| Network | Yours | Yours | Yours | Filtered: Trusted allowlist by default; 403 x-deny-reason: host_not_allowed for off-list domains |
| Known rough edges | — | Cowork tab on Windows: home-dir-only folders, virtualization false negatives, VM DNS issues (casebook runtime) | JetBrains+WSL2 detection failures (NAT/firewall); IDE-terminal Node false positives (casebook install auth) | No secrets store; no interactive auth (AWS SSO); gh CLI not pre-installed; ZDR orgs excluded |
Analysis
- The surfaces compose rather than compete. Web onboarding pairs with
/web-setupfrom the terminal;--remotepushes a local task to the cloud and--teleportpulls a cloud session into your terminal; Desktop lets you open files in VS Code from a session. Pick per task, not per identity. - Local config is the biggest portability trap. Everything in
~/.claude/(user CLAUDE.md, user skills/agents/commands, user-scoped plugins, MCP servers added viaclaude mcp add) silently disappears in cloud sessions. Teams that commit.claude/and.mcp.jsonto the repo get identical behavior on all four surfaces. - Supervision density differs. The CLI is keyboard-first single-session attention; Desktop is built for scanning multiple sessions (Summary view mode, usage ring, CI status bar with Auto-fix/Auto-merge); web is built for not watching (persists after browser close, mobile monitoring).
- Windows reality check from the casebooks: the IDE-integrated terminal is a recurring failure surface (Node-version false positives, transcript-saving bug fixed in 2.1.170), and the Desktop Cowork tab had three launch blockers at the Feb 2026 Windows launch. The plain CLI in Windows Terminal is the most reliable Windows path.
Recommendations
- Pick the terminal CLI if: you script or automate (
claude -p, fan-out loops, CI), want every flag and mode (incl.dontAsk,/fast), run Linux, or are troubleshooting (only surface with--safe-mode). - Pick the Desktop app if: you run several sessions in parallel and want visual diff review with inline comments, embedded app preview with auto-verification, or PR monitoring with auto-fix/auto-merge. Requires macOS/Windows + Git for Windows.
- Pick an IDE extension if: your center of gravity is the editor — you want diffs in the IDE diff viewer, automatic selection/diagnostic sharing, and quick launch. JetBrains on WSL2 needs firewall/
wsl -d <distro> -- bash -lic "claude"setup first. - Pick the web if: the task is self-contained against a GitHub repo and you want it to run unattended on Anthropic's infrastructure — bug-fix batches, dependency bumps, Auto-fix on PRs. Avoid it when the task needs local credentials, interactive SSO, >16 GB RAM, or non-allowlisted hosts (or use Remote Control on your own hardware instead).
- Default split that works: interactive feature work in CLI or IDE → parallel review/preview in Desktop → overflow and scheduled/batch work on the web.
