Claude Code Browser
The Claude Code browser is a pane inside the desktop app's Code tab. Open it with Cmd+Shift+B on macOS, Ctrl+Shift+B on Windows, or from the Views menu. When Claude edits a web project it starts the dev server, opens the running app in that pane, and verifies its own change: it takes screenshots, checks for errors, inspects the DOM, clicks elements, fills forms, and fixes what it finds before it tells you it is done. That auto-verify step is on by default. The pane is also a tabbed browser you can use yourself, for docs or an issue tracker, and Claude can read and act on external pages there with extra safety checks. It runs in a clean profile with none of your saved logins, which is the single fact that decides when you use it and when you use the separate Claude in Chrome extension instead.
I turned the pane on for the club site the week it shipped and have not opened a second window to check Claude's work since. The interesting part is not that Claude can click a button. It is what auto-verify caught that I would have shipped, and where the clean-profile line sent me to the extension. Both are below.
The two browsers Claude Code has, and the one question that picks between them
Claude Code can drive a browser two ways, and people mix them up because both are called "browser" in the docs. The Browser pane lives inside the desktop app and uses its own clean profile. The Claude in Chrome extension lives in your real Chrome or Edge and shares your login state. The CCC Clean-or-Signed-In Rule is the whole decision: does the task need to happen as you? If no, use the pane. If yes, use the extension. I have not found a third case.
Browser pane vs Claude in Chrome extension, per Anthropic's Claude Code docs
| Browser pane (desktop app) | Claude in Chrome extension | |
|---|---|---|
| Where it runs | Inside the Code tab, own clean profile | Your Chrome, Edge, or other Chromium browser |
| Your logins | None, fresh profile | Shared, Claude acts as you |
| Best for | Testing your own app, docs, sites that do not need your identity | Gmail, Notion, your CRM, anything behind your login |
| How it starts | Cmd+Shift+B, or Claude opens it to verify an edit | Extension 1.0.36 or later, then Claude uses it for browser work |
| Plan needed | The desktop app | A direct Anthropic plan, signed in with /login, not an API key |
| Safety | Classifier on write actions plus a per-site allow prompt | Same safety model, site permissions set in the extension |
The extension has a few tricks the pane does not: it can attach files from your machine to an upload field, record a browser session as a GIF, and save screenshots to disk. The pane has one the extension does not: it is where auto-verify runs, next to the diff and the chat, without you switching windows. If you set both up, the desktop app routes browser work to the extension when the task calls for it and uses the pane for verifying your app.
How auto-verify works, and what it caught on a real build
When autoVerify is on, Claude verifies code changes after editing files. It screenshots the result, checks for errors, and confirms the change works before it finishes its response. You do not prompt for this. It is a setting in the .claude/launch.json file at the root of the folder you opened, and it defaults to on. Set "autoVerify": false in that file, or flip it from the server dropdown in the session toolbar, and the preview tools stay available but only run when you ask.
On the club site, the first change I watched it verify was a form. I asked for a required-field check on the email input. Claude made the edit, the pane reloaded, and instead of stopping there it submitted the form empty, read the page, and noticed the error message rendered but the submit button stayed disabled afterwards. It went back and fixed the button state. I would have merged the first version, because in the diff it looked complete. That is the pattern: auto-verify catches the class of bug that only exists once the page is running, and diffs never show those.
Two things to know before you rely on it. First, the pane can also open static HTML, PDFs, images, and videos from your project, so a landing page with no server still gets checked; click the file path in the chat to open it. Second, verification costs tokens and time on every edit. On a long refactor where I know the page does not change, I turn it off from the dropdown and ask for one verification at the end. [Claude Code context management](/blog/claude-code-context-management) covers why that matters on big sessions.
Set up the preview server once with .claude/launch.json
Claude detects your dev server the first time and writes the configuration to .claude/launch.json in the folder you selected when you started the session. If your project uses a different command, say yarn dev instead of npm run dev, or a non-default port, edit that file or click Edit configuration in the server dropdown. The file accepts comments. You can list more than one configuration, which is how I run the frontend and the API server side by side and let Claude test an endpoint and the page that calls it in the same pass.
- Start the session in the folder that owns the dev server. Preview uses the selected folder as its working directory, so if you opened a parent folder, a subfolder's server is not detected. Either open the subfolder directly or add its configuration by hand.
- Turn on Persist sessions in the server dropdown. Cookies and local storage then survive server restarts, so Claude is not logging into your own app again after every reload.
- Use the dropdown to stop all servers when you are done. A forgotten dev server on a laptop is a surprisingly good way to lose an afternoon to a port conflict.
- If you need to clear saved session data, or turn the Browser off entirely, both toggles are under Settings, Claude Code.
This is the same launch.json that the deploy step reads when you get to shipping, so getting it right here pays twice. [How to deploy an app with Claude Code](/blog/how-to-deploy-an-app-with-claude-code) picks up from a working preview.
Browsing external sites: the two extra safety checks
The pane is a real tabbed browser, so you can open documentation or an issue tracker next to your app, and you can sign in to sites in it, including popup flows like Google sign-in. Claude can read and act on those pages with the same tools it uses to verify your app, plus two checks that do not apply to localhost. Safety classifiers review Claude's write actions on external pages, clicking and typing, in every permission mode, and when one flags an action you get a prompt regardless of mode. And in every mode except Auto and Bypass permissions, a domain allowlist check runs before Claude navigates to a new site.
The first time Claude acts on an external site, a card appears with Allow once, Always allow, or Deny, and Claude waits. Always allow is saved per site on your device, subdomains count as separate sites, and you can revoke it in Settings. Your local dev servers and project files never need approval, which is why auto-verify keeps running without interrupting you. Even on an approved site, Claude will not buy things, create accounts, or get past a CAPTCHA without you. If you are doing client work in the pane, [is Claude Code safe for client work](/blog/is-claude-code-safe-for-client-work) covers what else to lock down.
The prompts I run in the Browser pane
Auto-verify handles the edit you just made. These are the checks I ask for on purpose, usually before a commit, and they are short because the pane gives Claude the page, so I do not have to describe it.
- "Open the signup page, submit it with a bad email and then with an empty password, and tell me exactly which error messages render." Form validation is where the diff lies most.
- "Load the dashboard and check the console for errors on load. Only report errors and warnings, not every log line." Telling it what to look for keeps a noisy console out of the context window.
- "Resize to a phone width, screenshot the pricing section, and fix anything that overflows." The pane screenshots at whatever size you set, and layout bugs are cheaper to find here than in a client's reply.
- "Click every link in the footer and report any that do not return a page." Dead links after a route rename, every time.
- "Walk the checkout from add-to-cart to the confirmation page and stop at the first step that fails." One prompt, one full user flow, and it stops where you need to look.
If a check fails and Claude's fix is not obvious, the pane is also where I debug, because it can read the failing state instead of my description of it. [How to debug with Claude Code](/blog/how-to-debug-with-claude-code) is the longer method; the short version is that a screenshot plus the DOM beats a paragraph of me explaining what I saw.
What the pane will not do, and what to reach for instead
- Act as you. That is the extension's job by design. Install Claude in Chrome, sign in to Claude Code with /login rather than an API key, and Claude uses it for browser work that needs your identity.
- Test an iOS app. The desktop app has a separate iOS Simulator pane on macOS for that, and it does not go through the browser at all.
- Drive a native desktop app. That is computer use, a different feature with its own permission tiers, and browsers are deliberately capped at view-only there so Claude is steered back to the pane or the extension.
- Run in the terminal version. The pane is a desktop-app feature. In the CLI you get the extension route with the --chrome flag, and nothing verifies your edits automatically.
Let Claude check its work before you do
Turn the pane on, leave auto-verify at its default for a week, and read what it fixes after each edit. Then decide where to switch it off. That order matters: most people turn it off first because it feels slow, and never learn which bugs it was quietly catching.
Short, practical drops on skills, MCP, agents, prompts, and more. No spam, unsubscribe anytime.
Frequently asked questions
What is the Claude Code browser?
The Browser pane inside the Claude Code desktop app's Code tab. Claude starts your dev server, opens the app in the pane, takes screenshots, inspects the DOM, clicks elements, fills forms, and fixes issues it finds. It is also a tabbed browser you can use yourself for documentation or any other site. Open it with Cmd+Shift+B on macOS or Ctrl+Shift+B on Windows.
What is the difference between the Browser pane and the Claude in Chrome extension?
The Browser pane runs in a clean profile with none of your logins and is meant for testing your own app and browsing sites that do not need your identity. The Claude in Chrome extension runs in your real Chrome or Edge and shares your login state, so Claude can act as you in Gmail, Notion, a CRM, or any site you are signed into. The extension needs version 1.0.36 or later and a direct Anthropic plan signed in with /login.
How do I turn off auto-verify in Claude Code?
Add "autoVerify": false to the .claude/launch.json file at the root of the folder you opened, or toggle it from the server dropdown in the session toolbar. Preview tools stay available when it is off; Claude just waits for you to ask before it verifies a change.
Does Claude Code ask permission before using the browser on other websites?
Yes. The first time Claude acts on an external site you get Allow once, Always allow, or Deny, saved per site including subdomains. Safety classifiers also review clicks and typing on external pages in every permission mode, and outside Auto and Bypass a domain allowlist check runs before Claude navigates somewhere new. Local dev servers and project files need no approval.
Why is my dev server not detected in the Browser pane?
Preview uses the folder you selected when you started the session as its working directory. If you opened a parent folder, a subfolder's dev server is not detected. Start the session in the subfolder, or add a configuration for it by hand in .claude/launch.json using Edit configuration in the server dropdown.
Last reviewed by David Iya on September 27, 2026


