Claude Code is one agentic runtime with several interfaces, and confusing the interface with the product is the first mistake. The base loop is the same everywhere: the model gets context, chooses a tool, Claude Code checks permission, performs the action, returns the result to the model, and the loop continues. But the place of execution, the set of available tools, how the session is stored and the available integrations differ across surfaces - and it is exactly these differences that determine the trust model and what is even possible.
The terminal CLI is the foundation and the point of maximum control. It is there that all launch flags, headless mode and scripts are available, and there too the most transparent diagnostics. The price of control is that you must understand the shell and permissions. IDE surfaces, VS Code and JetBrains, add inline diff, selection context and plan review right in the editor; but some settings belong to the extension and some to the shared CLI, and this split must be kept in mind.
The Desktop app shifts the emphasis to parallelism and visual checking: several panes at once, a visual diff, preview, computer use, local and cloud sessions together. The availability of individual functions there depends on the OS and the account. But Desktop too does not cancel the shared files ~/.claude/ and .claude/ - the configuration stays the same, only the shell through which you work with it changes.
Two cloud surfaces are easy to confuse, and that is dangerous. Claude Code on the web runs a task in an Anthropic-managed cloud environment: it suits autonomous work with no open computer, via a branch and a PR, but requires a connected repository and a configured environment. Remote Control is fundamentally different: the code and commands stay on your local machine, and a phone or browser merely continues an already running local session.
The difference between web and Remote Control is a difference of trust, network and data-access models, not of convenience. Web moves execution to the cloud, with all the consequences for where your files and credentials live. Remote Control moves nothing to the cloud - it gives remote control over what still executes locally. Confusing the two means misjudging where your code and secrets go.
It helps to lay the surfaces into a table once - where the work executes, the strength and the main limitation of each - to choose consciously. Below is such a map: from the terminal to Chrome and computer use. You return to it when deciding on which surface to run a given task: where you need full control and diagnostics - the CLI; where you need autonomy in isolation - the web; where the process must stay on your machine - Remote Control.
| Surface | Where it runs | Strength | Limitation |
|---|---|---|---|
| Terminal CLI | On your machine or a server | Full control, flags, headless, scripts | You must understand shell and permissions |
| VS Code / JetBrains | Locally, via an extension | Inline diff, context, plan review | Some settings on the extension, some on the CLI |
| Desktop | Local and cloud sessions | Parallel panes, visual diff, computer use | Feature availability depends on OS/account |
| Web | In an Anthropic cloud environment | An autonomous task, PR workflow | Needs a connected repo and environment |
| Remote Control | The code stays local | Continuing a local session from a phone | Requires a supported subscription |
| Chrome / computer use | A browser or GUI | Checking interfaces, GUI workflow | Expands the risk surface |
The practical choice is most often this. For daily development and fine-tuning you start with the CLI - it has all the flags and the most honest diagnostics. If the main editor is VS Code, you take the extension for diff and context but keep project rules in the repository, not only in the IDE settings. The web is for an autonomous task in an isolated environment finished via a PR. Remote Control is when the process must stay on the machine with its files, credentials and local services.
A couple of commands help to check which surface and state you are in. In a session /status shows the session type, model, provider, working directory and settings sources. In the shell claude agents --json and claude daemon status reveal the background infrastructure - but the second call is meaningful only when using the agent view and background sessions. Any work is worth starting with this check rather than with an assumption about which surface is under you.
# In a session - which surface and state
/status
# In the shell - background infrastructure (only with agent view/background)
claude agents --json
claude daemon status