Claude Code desktop app
Everything the Code tab in the Claude desktop app can do, from parallel sessions and diff review to previews, SSH, computer use and enterprise policy.
The Claude desktop app has three tabs: Chat, Cowork and Code. This page is a working reference for the Code tab, which runs the same Claude Code engine as the CLI behind a graphical interface. If you have not installed it yet, start with the desktop quickstart. Linux users should also read desktop on Linux, and Windows users who live in WSL should read desktop with WSL.
Each conversation in the Code tab is a session with its own history, folder and changes. The sidebar lists them and lets you run several at once.
Starting a session
Four choices sit in the prompt area before you send anything:
| Choice | Options |
|---|---|
| Environment | Local (this machine), Cloud (keeps running when the app closes), an SSH connection, or a WSL distribution on Windows |
| Folder | The project Claude works in. Cloud sessions can include several repositories |
| Model | Dropdown beside the send button; changeable mid-session |
| Permission mode | Mode selector beside the send button; changeable mid-session |
Type the task and press Enter.
Working with code
Prompting and steering
Claude reads, edits and runs commands as your permission mode allows. To change direction, either click stop to interrupt at once, or type a correction and press Enter: Claude picks it up as soon as the current action finishes. The + button gives you attachments, skills, connectors and plugins.
After a reply, a greyed-out suggested next prompt may appear in the empty box. Tab or Right arrow accepts it for editing; pressing Enter before accepting does not send it. Suggestions are generated by a small background request that counts towards usage. Turn them off with Prompt suggestions under Sessions in Settings > Claude Code.
Adding context
@mentions pull a project file into context, with autocomplete. Not available in cloud or WSL sessions.- Attachments: images, PDFs and other files via the attach button or drag and drop. Ideal for bug screenshots and mock-ups.
Permission modes
The desktop app reads the same settings files as the CLI, so permissions.defaultMode sets the default for new local sessions. A mode you choose in the selector is remembered per folder and beats defaultMode, except Plan, which only lasts for the current session.
| Mode | defaultMode value | What Claude may do unprompted |
|---|---|---|
| Manual | default | Nothing: it asks before edits and commands, showing a diff to accept or reject |
| Accept edits | acceptEdits | File edits and simple filesystem commands (mkdir, touch, mv); other commands still prompt |
| Plan | plan | Read and explore only, then propose a plan |
| Auto | auto | Most things; a background classifier vets risky actions such as shell commands and network calls |
| Bypass permissions | bypassPermissions | Everything except actions no mode auto-approves, safety checks on external sites, and desktop actions that always ask (like archiving a session). Equivalent to --dangerously-skip-permissions |
Notes:
- Older builds called these Ask permissions, Auto accept edits and Plan mode.
dontAskexists only in the CLI.- Bypass on Pro and Max is switched on under Settings > Claude Code ("Allow bypass permissions mode"); on Team and Enterprise it is controlled by organisation policy. Use it only in a disposable container or VM.
- Auto appears when available: on the Anthropic API it needs Opus 4.6 or later, Sonnet 4.6 or later, Haiku 5.5, or a Fable model. Admins can remove it with
disableAutoMode. Enterprise deployments routing Desktop to Google Cloud's Agent Platform also get it by default. - Cloud sessions offer Accept edits, Plan and Auto. Because cloud sessions pre-approve edits,
defaultshows as Accept edits. Bypass is never available in the cloud, including self-hosted environments.
My habit: start anything substantial in Plan, approve the plan, then flip to Accept edits. See permission modes and best practices.
Reviewing diffs
When files change, a counter such as +31 -7 appears. Click it for a file list and per-file diff. Click any line to add a comment, add as many as you like, then submit them together with Cmd+Enter (macOS) or Ctrl+Enter (Windows). Claude revises and you get a fresh diff.
Having Claude review its work
Type /code-review. In local, SSH and WSL sessions the findings arrive as a Code review card grouped by file. Walk through in diff steps through each finding at its line, with Fix this one or dismiss. Apply fixes asks Claude to fix everything still open. See code review.
Watching a pull request
After you open a PR, a CI status bar appears. Desktop polls checks using the GitHub CLI, so gh must be installed and signed in (Desktop offers to install it the first time you create a PR). Click CI to enable:
- Auto-fix CI & address comments: Claude reads failures and iterates. In local sessions it also handles new review comments from people other than you, if the author is the repo owner, an org member, a collaborator or a GitHub App.
- Auto-merge when ready: squash-merges once checks pass. Auto-merge must be allowed in the GitHub repository settings first.
Turn on Auto-archive after PR merge or close in Settings > Claude Code to tidy finished sessions away.
Previewing your app
Claude can start your dev server and open it in the Browser pane, then test it: screenshots, DOM inspection, clicking, filling forms, hitting API endpoints and reading server logs. By default it auto-verifies after every edit.
From the Browser pane you can use the app yourself, start and stop servers from the Dev servers menu, and choose Keep cookies in the ⋮ menu so you stay logged in across restarts. Clear browsing data wipes it. Turning off Browser tools in Settings > Claude Code disables the pane completely. Clicking an HTML, PDF, image or video path in the chat also opens it here.
.claude/launch.json
Claude writes its detected server setup to .claude/launch.json in the folder you opened. That folder is the working directory, so if you opened a parent folder, servers in subfolders will not be found automatically; open the subfolder or add a configuration. The file accepts JSON with comments.
Here is a configuration for a Django API alongside a Vite front end:
{
"version": "0.0.1",
"autoVerify": true,
"configurations": [
{
"name": "frontend",
"runtimeExecutable": "pnpm",
"runtimeArgs": ["dev"],
"cwd": "web",
"port": 5173,
"autoPort": true
},
{
"name": "api",
"runtimeExecutable": "python",
"runtimeArgs": ["manage.py", "runserver", "8000"],
"cwd": "backend",
"port": 8000,
"autoPort": false,
"env": { "DJANGO_SETTINGS_MODULE": "config.settings.dev" }
}
]
}
| Field | Type | Purpose |
|---|---|---|
name | string | Unique label for the server |
runtimeExecutable | string | Command to run, e.g. npm, yarn, node |
runtimeArgs | string[] | Arguments for that command |
port | number | Listening port; default 3000 |
cwd | string | Working directory relative to the project root (default the root; ${workspaceFolder} refers to it explicitly) |
env | object | Extra environment variables. The file is committed, so no secrets here; use the local environment editor instead |
autoPort | boolean | Port conflict behaviour (below) |
program | string | A script to run directly with node |
args | string[] | Arguments for program |
url | string | Address to open instead of http://localhost:<port> |
Top-level autoVerify (default on) can be set to false per project, or toggled with Auto-verify changes in the Browser pane's ⋮ menu. Preview tools still work when it is off; Claude just will not check automatically.
program or runtimeExecutable? Use runtimeExecutable plus runtimeArgs to go through a package manager (npm run dev). Use program (plus args) to run a standalone script with node, e.g. "program": "server.js".
Port conflicts via autoPort:
true: pick a free port and pass it in thePORTenvironment variable.false: fail with an error. Use this when the port is baked into OAuth callbacks or CORS rules.- unset: Claude asks whether the exact port matters and saves your answer.
Custom URLs. Set url for local HTTPS, *.localhost subdomains or sign-in redirects. Localhost URLs (localhost, *.localhost, 127.0.0.1, ::1) must be a bare origin with no path or query, and the port must match port; otherwise you get a configuration error explaining the fix. Other addresses may include paths but prompt for permission the first time (Always allow remembers it), and organisation restrictions still apply. To attach to a server you already run, give url without any command. URLs must be http or https with no embedded username or password.
Browsing external sites
The Browser pane is a full tabbed browser. Open it with Cmd+Shift+B / Ctrl+Shift+B or the Browser button in the title bar. You can sign in to sites there, including pop-up OAuth flows. The first external link you click asks whether links should open in the pane or your default browser; change that later with Open links in built-in browser. Cmd- or Ctrl-click always uses your default browser.
Claude can read and act on external pages with extra safeguards:
- Safety classifiers check every write action (clicking, typing) on external pages in every mode, and prompt you if something looks off.
- Outside Auto and Bypass, a domain allowlist check runs before navigating somewhere new.
- The first action on each site (subdomains count separately) shows Allow once, Always allow (saved on the device, revocable in Settings) or Deny. Local dev servers and project files never need approval.
- Even on approved sites, Claude will not buy things, create accounts or solve CAPTCHAs without you.
The pane uses a clean profile with none of your logins. When you want Claude acting as you in your real browser sessions, use Claude in Chrome instead.
For admins: the pane honours the same site allow and block lists as the Chrome extension. browserExternalPageTools: "disabled" lets people browse but stops Claude's tools on external pages; disableBrowserExternalNavigation: true blocks external sites for everyone while leaving localhost previews working.
Arranging the workspace
The Code tab is made of panes: chat, diff, browser, terminal, file, plan, tasks, subagent, and the iOS Simulator on macOS. Drag headers to move them and edges to resize. Cmd+\ or Ctrl+\ closes the focused pane. The title bar has Terminal, Changes and Browser buttons, and its ⋮ menu holds the rest (such as Files). Panes can be popped out into separate windows and docked back. This layout system needs Desktop v1.2581.0 or later.
- Terminal: Ctrl+` or the title bar button. It opens in the session's working directory with the same environment Claude sees. Add tabs with +, or right-click a folder in chat and choose Open in terminal. Local and SSH sessions only.
- File pane: click a path to open and edit it, then Save. If the file changed on disk you can overwrite or discard. Local and SSH only; in the cloud, ask Claude.
- Right-click a path for Attach as context, Open in (VS Code, Cursor, Zed and so on), Show in Finder / Show in Explorer, and Copy path.
View modes
Cycle with Ctrl+O or choose Transcript view from the session title menu.
| Mode | Shows |
|---|---|
| Normal | Collapsed tool summaries and full replies |
| Thinking | As Normal, plus Claude's thinking (appears once there is some) |
| Verbose | Every tool call and step, plus thinking |
Builds before 1.46388.1 also had a Summary mode; sessions set to it open in Normal after updating.
Shortcuts
Cmd+/ (or Ctrl+/) lists them all. On Windows read Cmd as Ctrl; session cycling, the terminal and view modes use Ctrl everywhere.
| Keys | Does |
|---|---|
| Cmd+N / Cmd+W | New / close session |
| Ctrl+Tab, Ctrl+Shift+Tab | Next / previous session |
| Cmd+Shift+] / Cmd+Shift+[ | Next / previous session |
| Esc | Stop the response |
| Tab or Right arrow | Accept suggested prompt |
| Cmd+Shift+D | Diff pane |
| Cmd+Shift+B | Browser pane |
| Cmd+Shift+S | Pick an element in the Browser |
| Ctrl+` | Terminal |
| Cmd+\ | Close focused pane |
| Cmd+; | Side chat |
| Ctrl+O | Cycle view modes |
| Cmd+Shift+M / I / E | Permission mode / model / effort menus |
| 1 to 9 | Choose an item in an open menu |
Unlike the terminal, Shift+Tab does not cycle permission modes here.
The usage ring next to the model picker shows this session's context usage and your plan usage across all Claude Code surfaces.
Managing sessions
Parallel sessions and worktrees
+ New session or Cmd+N starts another. In git repositories, tick worktree beside the branch name to give the session its own isolated checkout via git worktrees. Worktrees live in <project-root>/.claude/worktrees/ unless you change Worktree location in Settings > Claude Code, where you can also set a branch prefix. Add a .worktreeinclude file to copy gitignored files such as .env into new worktrees. Archiving a session removes its worktree. Auto-archive on PR merge or close applies only to finished local sessions. Worktrees need Git installed.
Cmd- or Ctrl-click a sidebar session to view two side by side. Filter and group the sidebar by status, project or environment; rename a session by clicking its title. When context fills, Claude compacts automatically; /compact does it early. You get an OS notification when a session you are not looking at finishes (project sessions use the project's notifications).
Side chats
Cmd+; / Ctrl+; or /btw opens a side chat that can read the main thread but adds nothing back to it. Good for "what does this function actually do?" without derailing the task. Available in local, SSH and WSL sessions; side chats are not saved once you close the app.
Background tasks
When a session has subagents, background shell commands or workflows running, Background tasks in the title bar's ⋮ menu opens the tasks pane. Click an entry to see output or stop it.
Working across sessions
Ask in plain English: "which session was working on the invoice export?", "tell the API session the schema changed", "archive the sessions whose PRs merged". Claude can list, read, message, rename and archive other sessions, but only ones the desktop app runs itself (local, SSH, WSL). It cannot see cloud sessions or sessions from the terminal or VS Code, never lists the session you are in, sees the 20 most recently active by default, and skips archived ones unless asked. For reaching terminal sessions too, see cross-session messaging.
Messages show in the receiving session as a card naming the sender with a link back; if the receiver is busy, the message waits. Safeguards:
- Archiving another session always asks you, even in Auto or Bypass.
- Unattended sessions (such as scheduled task runs) cannot send or receive these messages.
- The receiving session's inbound controls apply; setting
crossSessionInboundtorefusedrops them (before v2.1.234 every such message to a session without cross-session messaging was dropped). - Incoming messages are quoted and attributed, and the receiver's own permissions still govern what it does.
Claude may also offer out-of-scope fixes as a task chip; clicking it starts that work in a new session with its own worktree.
Cloud sessions from Desktop
Choose Cloud for long refactors, migrations or test marathons; the session carries on with the app closed and is visible on claude.ai/code and the mobile app. Add extra repositories with + beside the selected repo, each with its own branch picker. For coordinated multi-session work, create a project from Projects in the sidebar. More in Claude Code on the web.
Moving a session elsewhere
From the session menu (caret by the title, or the sidebar row) choose Open in:
- Cloud continues it as a cloud session with the conversation carried over as a summary. The dialog tells you whether files move and whether the local session will be archived. Not available for SSH or WSL sessions.
- An editor or file manager opens the folder there.
Showing sessions on other devices
A local session appears on claude.ai/code and in the mobile apps once Remote Control connects it, either because you flipped its Remote Control switch (or typed /remote-control), or because Connect new sessions to Remote Control is on in Settings > Claude Code. If you have never touched that setting, Desktop follows remoteControlAtStartup in your user or managed settings, then the organisation default. A highlighted laptop icon before the title means connected.
To keep sessions private:
- One session: turn off its switch. Typing
/remote-controlin an auto-connected session just saysRemote Control is already on. This session connected automatically when it started.with a Turn off option. - All new Desktop sessions: turn off the setting (toggle it on then off if it already looks off, so the choice is saved; it then overrides
remoteControlAtStartup). - Everything on this machine, CLI included: set
disableRemoteControl: truein~/.claude/settings.json. Already-connected sessions stay connected until switched off.
Archiving a session in Desktop also archives its Remote Control copy.
Dispatch
Dispatch is a long-running conversation in the Cowork tab that you can message from your phone. Coding work (bug fixes, dependency bumps, test runs, PRs) becomes a Code session, either because you asked or because Dispatch decided; research and documents stay in Cowork. Those sessions show a Dispatch badge, and you get a push notification when they finish or need approval. With computer use on, Dispatch sessions can use it, but app approvals expire after 30 minutes. Dispatch needs Pro or Max.
Computer use
Computer use lets Claude operate native apps by seeing your screen and clicking and typing. It is a research preview on macOS and Windows, for Pro and Max only (not Team or Enterprise), and the app must be running. On macOS it can also run in the background in approved apps while you work.
Warning: This is not sandboxed. Claude acts on your real desktop with whatever you approve. It checks actions and flags likely prompt injection from on-screen content, but treat it with care.
Claude reaches for the most precise tool first: a connector, then Bash, then Claude in Chrome for browser work, then the iOS Simulator pane for iOS apps, and only then screen control. See computer use for the CLI equivalent.
Turning it on: update the app, then Settings > This computer > System > Computer use > Enable computer use. Windows is done at that point. macOS also needs Accessibility (to click and type) and Screen Recording (to see); the settings page shows their status and links to System Settings. No toggle? Check you are on macOS or Windows with Pro or Max, then update and restart.
Per-app approval: the first use of each app prompts Allow for this session or Deny. Control levels are fixed by category:
| Tier | Allowed | Applies to |
|---|---|---|
| View only | Screenshots only | Browsers, trading platforms |
| Click only | Click and scroll, no typing or shortcuts | Terminals, IDEs |
| Full control | Click, type, drag, shortcuts | Everything else |
Powerful apps (terminals, Finder or File Explorer, System Settings) show an extra warning. The same settings section has Denied apps (never prompt, always refuse) and Unhide apps when Claude finishes (restores windows Claude hid while working in the foreground).
Extending Claude Code
Customize in the sidebar manages connectors, skills and plugins in one place. That configuration syncs through your claude.ai account (and is what Cowork uses), and terminal sessions signed into the same account also load the enabled skills and plugins.
Connectors
In local and SSH sessions, + > Connectors adds services such as GitHub, Slack, Linear, Notion or Google Calendar, before or during a session. Manage them in Settings > Connectors. Connectors are MCP servers with a friendly setup flow; anything else can be added as an MCP server in settings files. The + menu is missing in cloud and WSL sessions; routines set connectors when created.
Skills
Type / or use + > Slash commands to browse built-in commands, your skills, project skills and plugin skills. You can send a command while Claude is mid-turn (since v2.1.206 this no longer leaves the session stuck). Local sessions load ~/.claude/skills/; SSH sessions read it from the remote home directory. Local and cloud sessions also load the skills enabled on your claude.ai account (cloud sessions use these instead of ~/.claude/skills/), unless your organisation sets disableSideloadFlags for local sessions.
Plugins
+ > Plugins lists installed plugins; Add plugin opens the marketplace browser, Manage plugins enables, disables or removes them. Scope them to user, project or local. Centrally managed plugins apply as in the CLI, apart from any withheld by disableSideloadFlags. Plugins are unavailable in cloud and WSL sessions, desktop-installed plugins do not reach cloud sessions, and cloud sessions do not install plugins declared in a repo's .claude/settings.json.
Environments in detail
Local
The app does not inherit your whole shell. On macOS, launched from the Dock or Finder, it reads your shell profile only for PATH and a fixed set of Claude Code variables. On Windows it inherits user and system variables but not PowerShell profiles.
To set variables for local sessions and dev servers, open the environment dropdown, hover Local, click the gear and use the local environment editor. Values are stored encrypted on your machine. The env key in ~/.claude/settings.json reaches Claude sessions but not dev servers. See environment variables.
Extended thinking is on by default. On the Anthropic API, set MAX_THINKING_TOKENS=0 in the editor to switch it off, except on Opus 5.5, Sonnet 5.5, Haiku 5.5 and the Fable models, which always think. With thinking off, Claude Code sends effort high to models such as Opus 5 that reject higher levels without thinking. On adaptive-reasoning models a positive value is ignored; Opus 4.6 and Sonnet 4.6 can use a fixed budget with CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1.
If an admin sets disableDesktopLocalSessions, Local (and on Windows, WSL, which has its own governance) is greyed out with a tooltip. New sessions default to the first SSH connection if one exists.
Cloud
Cloud sessions count against your plan with no separate compute charge. In the environment dropdown under Cloud, use Add cloud environment, or hover one of yours and click the gear to edit or archive it. See cloud environments.
SSH
Use SSH to work on code that lives on a VM, dev container or beefy server. SSH > Add SSH connection… asks for:
- Name
- SSH host:
user@hostnameor a~/.ssh/confighost - SSH port: 22 by default, or from your SSH config
- SSH key (optional): e.g.
~/.ssh/id_ed25519; leave blank to use config or agent
The remote must run Linux or macOS. Desktop installs Claude Code there on first connect. Permission modes, connectors, plugins and MCP servers all work.
SSH deep links
A claude://code/new link can open Desktop ready to connect to a host and folder (Desktop v2.110.0+). Handy in runbooks:
claude://code/new?ssh_host=ops%40ci-runner-03.internal&ssh_folder=~/deployments&q=Why%20did%20last%20night%27s%20deploy%20roll%20back%3F
| Parameter | Value |
|---|---|
ssh_host (required) | host or user@host. Cannot start with -; host part allows letters, digits, ., _, :, - |
ssh_port | 1 to 65535 |
ssh_folder | Remote path starting / or ~/, or ~ |
q | URL-encoded prompt text |
~/.ssh/config aliases only work for people who have them. Desktop always asks before using a matching connection or before adding a new one, saves nothing until you confirm, and never sends the prompt for you. The prompt is treated as plain text, so /, ! and @ do nothing special. Links cannot carry keys, passwords or commands, and sshHostAllowlist still applies. If nothing happens: sign in, close other dialogs, check the link is valid, update Desktop, or ask whether SSH has been disabled. See deep links.
Managed SSH for teams
Push connections with sshConfigs in managed settings; they appear in everyone's dropdown and cannot be edited or deleted. Each needs id, name and sshHost; sshPort and sshIdentityFile are optional. Users can also add sshConfigs in their own settings.
{
"sshConfigs": [
{ "id": "gpu-box", "name": "GPU workstation", "sshHost": "ml@gpu-01.lab.example", "sshIdentityFile": "~/.ssh/lab_ed25519" }
],
"sshHostAllowlist": ["*.lab.example", "jump.example.net"]
}
sshHostAllowlist restricts connections to hosts whose resolved hostname (after ssh -G, so aliases and ProxyJump are fine) matches a pattern. Patterns are case-insensitive; * matches anything and *.example.com matches the domain and its subdomains. An empty array disables SSH sessions. It is read only from managed settings, only by the desktop app, and does not restrict ssh run via the Bash tool, so pair it with network controls.
Warning: If you use server-managed settings, put
sshHostAllowlistthere. Desktop reads it from the highest-ranked managed source that delivers policy keys, silently ignoring lower sources. Also keep the same list on each machine's top-ranked local source, because Desktop does not cache server settings and uses the local list until a fetch succeeds.
Enterprise configuration
Admin console
In the Claude Code admin settings, Team and Enterprise admins control Desktop (access to Claude Code in the app), Cloud sessions and Remote Control. In HIPAA-enabled Enterprise organisations Desktop starts off and an Owner can enable it, but applying the HIPAA configuration turns it off again; cloud sessions and Remote Control cannot be enabled under HIPAA.
The Cowork OpenTelemetry form in the admin console only affects Cowork sessions. For Code tab telemetry, set CLAUDE_CODE_ENABLE_TELEMETRY and OTEL_* variables in managed settings env. See monitoring.
Managed settings keys
| Key | Effect |
|---|---|
permissions.disableBypassPermissionsMode | "disable" removes Bypass permissions |
disableAutoMode | "disable" removes Auto (also accepted under permissions) |
autoMode | Tune what the auto mode classifier trusts; see auto mode config |
browserExternalPageTools | "disabled" stops Claude's tools on external pages |
disableBrowserExternalNavigation | true (boolean) blocks external browsing for everyone |
disableMobileSimulatorTools | true (boolean) removes Claude's control of the iOS Simulator pane |
sshConfigs | Pre-configured, locked SSH connections |
sshHostAllowlist | Allowed SSH host patterns (managed only) |
disableDesktopLocalSessions | true turns off on-device Code sessions (managed only, Desktop v1.37937.0+) |
disableSshSavedPasswords | true stops saving, using or showing SSH passwords (managed only, v1.49585.0+; existing ones are not deleted) |
managedMcpServers | Third-party Desktop deployments only: push MCP servers (http, sse or stdio) with optional toolPolicy. Delivered via managed file, MDM or a Claude apps gateway policy's desktop block (gateway needs Claude Code v2.1.232+). Not the same shape as Claude Code's own key of that name |
Bypass and auto mode keys also work in user and project settings, but managed settings stop users overriding them. Model restrictions such as availableModels apply as in the CLI.
Where managed policy comes from depends on the session:
- Local: on-disk managed files, plus admin-console settings when the login is eligible, using normal settings precedence.
- Cloud: server-managed settings only (self-hosted runners also read the file in their image).
- SSH: the managed file on the remote host; Desktop itself reads the SSH and local-session keys locally.
- Cowork: never fetches admin-console settings; reads device policy unless
requireCoworkFullVmSandboxis set.
In local and SSH sessions, claude.ai connectors are handed to Claude Code directly, so no MCP setting or managed-mcp.json affects them. Use your organisation's connector tool controls. See managed MCP.
Device management
- macOS: the
com.anthropic.claudefordesktoppreference domain via Jamf, Kandji and similar. - Windows: registry under
SOFTWARE\Policies\Claude. - Linux: root-owned
/etc/claude-desktop/managed-settings.json(refused if anyone else can write it or its folder). This is not Claude Code's managed settings file.
Policies cover enabling Claude Code, auto-updates (macOS and Windows) and a custom deployment URL. Deploy with the .dmg through MDM on macOS, or the MSIX package on Windows, including silent install.
Network allowlist
Desktop needs HTTPS on 443 to these (wildcard form):
anthropic.com *.anthropic.com
claude.ai *.claude.ai
claude.com *.claude.com
claude.app *.claude.app
*.claudeusercontent.com
*.claudemcpcontent.com
If you want fewer wildcards, the narrower list is: anthropic.com, api.anthropic.com, a-api.anthropic.com, a-cdn.anthropic.com, s-cdn.anthropic.com, assets-proxy.anthropic.com, claude.ai, a.claude.ai, assets.claude.ai, downloads.claude.ai, *.livepreview.claude.ai, claude.com, platform.claude.com, *.livepreview.claude.app, *.claudeusercontent.com, *.claudemcpcontent.com.
With an organisation IP allowlist, route bridge.claudeusercontent.com through the same egress as claude.ai and api.anthropic.com, or allowlist a dedicated (not shared) proxy egress address; otherwise Claude in Chrome and other bridge features break. Artifacts may request fonts.googleapis.com and fonts.gstatic.com (optional; fallback fonts are used) and libraries from cdnjs.cloudflare.com, cdn.jsdelivr.net, cdn.tailwindcss.com, code.jquery.com and unpkg.com (no fallback). If you block any of them, reject fast rather than dropping silently. See network configuration for proxies and custom CAs.
SSO and data
Team and Enterprise can enforce SSO; see authentication. Local and SSH sessions send conversation context to whichever model provider you configure (Anthropic by default); cloud sessions, including self-hosted, send it to Anthropic's API. See data usage.
Coming from the CLI
Desktop and CLI share the engine and configuration, can run on the same project at the same time, and keep separate session lists.
- CLI to Desktop:
/desktop(alias/app) saves the session, opens it in the app and exits the CLI. From a shell,claude --desktop(v2.1.285+) opens the app on the current directory; add--continuefor the latest conversation here or--resume <session-id>(from/status; names do not work). It will not move a session open elsewhere or still running, and prints a download link if Desktop is missing. Both need macOS or x64 Windows with a subscription login, not an API key or Bedrock, Agent Platform or Foundry. - Inside Desktop: close the terminal session, type
/resumein a local session, search by title, folder or branch, and pick it. It is the same session, soclaude --resumestill finds it later.
I use Desktop when juggling several sessions or reviewing visually, and the CLI for scripting and anything headless.
Flag equivalents
| CLI | In Desktop |
|---|---|
--model / ANTHROPIC_MODEL | Model dropdown |
--resume, --continue | Sidebar, or /resume for CLI sessions |
--permission-mode | Mode selector |
--dangerously-skip-permissions | Bypass permissions mode |
--add-dir | + to add repos in cloud sessions |
--allowedTools, --disallowedTools | No per-session control; settings rules still apply |
--verbose | Verbose view mode |
--print, --output-format | Not available |
MAX_THINKING_TOKENS | Local environment editor |
What is shared
CLAUDE.md and CLAUDE.local.md, MCP servers in ~/.claude.json or .mcp.json, hooks, skills, and settings in ~/.claude.json and ~/.claude/settings.json. See memory and settings.
Local Code sessions also load servers from the chat app's claude_desktop_config.json. If a name clashes with ~/.claude.json or .mcp.json, the claude_desktop_config.json version wins. For stdio servers defined both at the top level of ~/.claude.json and in .mcp.json, Desktop prefers ~/.claude.json, which differs from the CLI's precedence. The standalone CLI ignores claude_desktop_config.json; on macOS and WSL, claude mcp add-from-claude-desktop imports them.
Differences
| CLI | Desktop | |
|---|---|---|
| Permission modes | All, including dontAsk | Manual, Accept edits, Plan, Auto, plus Bypass when enabled |
| Providers | Bedrock, Agent Platform, Foundry | Anthropic API by default; gateways and 3P via separate setup |
| MCP | Settings files | Connectors UI or settings files |
| Plugins | /plugin | Plugin manager |
| File mentions | Text | Autocomplete (local and SSH) |
| Attachments | No | Images, PDFs |
| Isolation | --worktree | worktree option |
| Recurring work | cron, CI | Scheduled tasks |
| Computer use | via /mcp on macOS | macOS and Windows |
| iOS simulator | via computer use | Dedicated pane |
| Scripting | --print, Agent SDK | No |
Not in Desktop: inline autocomplete-style suggestions, agent teams (use workflows or cross-session messaging instead), computer use on Linux, and terminal-dialog commands. Commands with no argument form such as /permissions reply isn't available in this environment; /config just opens Settings > Claude Code.
Troubleshooting
API errors such as 529 Overloaded are the same everywhere; see the error reference.
Find your version: Claude > About Claude (macOS) or Help > About Claude (Windows). Click the number to copy it.
Error 403: Forbidden in the Code tab. Sign out and back in. Confirm a paid plan. If the CLI works but Desktop does not, fully quit and reopen. Check proxy settings.
Blank or frozen window. Restart, update (Linux via apt), check the firewall allows the hosts above, and on Windows look in Event Viewer under Windows Logs > Application.
Failed to load session. The folder may be gone, Git LFS may be missing, or permissions block access. Pick another folder or restart.
Tools such as npm not found. Check they work in a normal terminal and that your profile sets PATH, then restart the app.
"Git is required". Install Git (Git for Windows on Windows). Windows builds before 1.49585.0 wanted Git even without worktrees; update. For "Git LFS is required by this repository but is not installed", install it, run git lfs install and restart.
MCP servers misbehaving on Windows. Check configuration, restart, confirm the process in Task Manager, read the server logs.
Will not quit. Cmd+Q or Force Quit (Cmd+Option+Esc) on macOS; Task Manager on Windows.
Windows install quirks. Open a new terminal for PATH changes; for a phantom "installation in progress" error, run the installer as Administrator.
"Branch doesn't exist yet" opening a cloud session locally. Use Copy branch name, then git fetch origin <branch> and git checkout <branch>.
Still stuck? Help > Get Support in the app. For bugs that reproduce in the CLI, the anthropics/claude-code repository on GitHub takes issues. Include the app version, OS, exact error and logs (Console.app or Event Viewer), scrubbed of private paths.