The same agentic core of Claude Code is available through several surfaces, and choosing between them is a choice of environment and trust boundary, not just taste. A local IDE sees your files, a cloud session works with a fresh clone, Remote Control drives the local host. So the question is not "which UI is nicer" but "where exactly should this task run and what will it see". The right surface saves both time and risk; the wrong one creates extra of both.
The VS Code extension gives native editor integration. It brings native input, file and folder mentions, selection context, diff review right in the editor, sessions, checkpoints, git and worktree work, plugins and the built-in IDE MCP for editor diagnostics. It is installed from the marketplace by the name Claude Code from Anthropic. The extension settings have the claudeCode prefix; it is important to remember that the CLI and the extension share project files, but the UI state and some hotkeys are separate.
Hence a practical flow and one trap. You work like this: open a trusted repository, choose the model and permission mode, attach a selection or @file instead of copying large blocks, send the task contract, check the inline diff and the Problems panel, run tests in the integrated terminal, and use checkpoint and rewind only as a supplement to git. The trap is simple: "works in the CLI" does not prove that the IDE terminal is not intercepting a needed key combination before Claude Code.
The JetBrains plugin integrates with its IDEs: it passes the selection and current file, shows diffs and runs Claude Code in the IDE environment, and mode switching in terminal-style interaction follows the CLI via Shift+Tab. The version caveat matters especially here: the list of supported IDEs and versions changes faster than any book, so before rolling out to the team you check the official list rather than what was true at the time of reading.
The Desktop app emphasizes parallelism and visual control. It combines parallel sessions with git isolation, diff review and comments, a terminal, a file editor, a browser preview, an iOS simulator, computer use and the Local, Cloud, SSH and WSL environments. Each conversation is a separate session with its own history, folder and changes. Before the start you choose the environment, folder and repositories, model and permission mode - and these four choices set the conditions the work will run in.
Desktop has its own configuration details. For local sessions it reads the same Claude Code settings; the mode chosen in the UI is remembered per-folder and may have priority over the default, while Plan stays a session choice. On Windows Git for Windows is needed, and on Linux Desktop is still in beta and installed separately by the official instructions. This matters on rollout: the same project policy applies, but the platform requirements of the surfaces differ.
It helps to gather tasks and their suitable surfaces into a table once, to choose by the task rather than by habit. Below is such a map: a pointed edit next to editor diagnostics - the IDE; shell-heavy work and scripts - the CLI; several visually controlled sessions and an app preview - Desktop; a long task with no local host - the web; continuing a local session from a phone - Remote Control. Each task has its natural surface.
| Task | Surface |
|---|---|
| A pointed edit next to editor diagnostics | VS Code / JetBrains |
| Shell-heavy work and scripting | CLI |
| Several visual sessions and an app preview | Desktop |
| A long task with no local host | Web / cloud |
| Continue a local session from a phone | Remote Control / mobile |
The engineering conclusion matters more than the choice of a specific UI: standardize the repository contract and policy, not your favorite shell. Good CLAUDE.md, settings, tests and skills must work the same across several surfaces, and UI-specific instruction lives separately. The typical failure is tying the team's process to one shell's specifics, so it breaks when moving to another. Keep portable what defines the agent's behavior, and change the surface freely for the task.