Claude Code Browser: How I Let Claude Test Its Own Changes in the Desktop App

David IyaDavid Iya September 27, 2026 9 min read
A modern laptop on a dark walnut desk showing a blank glowing browser window, a small brass magnifying glass and a mechanical keyboard beside it, moody evening light from a warm desk lamp
Original image, Claude Code Club

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 runsInside the Code tab, own clean profileYour Chrome, Edge, or other Chromium browser
Your loginsNone, fresh profileShared, Claude acts as you
Best forTesting your own app, docs, sites that do not need your identityGmail, Notion, your CRM, anything behind your login
How it startsCmd+Shift+B, or Claude opens it to verify an editExtension 1.0.36 or later, then Claude uses it for browser work
Plan neededThe desktop appA direct Anthropic plan, signed in with /login, not an API key
SafetyClassifier on write actions plus a per-site allow promptSame 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.

  1. "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.
  2. "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.
  3. "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.
  4. "Click every link in the footer and report any that do not return a page." Dead links after a route rename, every time.
  5. "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.

Free Claude Code drops, straight to your inbox

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

David Iya

Written by

David Iya

Forbes 30 Under 30 · Y Combinator

Keep reading

Claude CodeWorkflows

Claude Code Scheduled Tasks: How I Set Up a Daily Review in the Desktop App

Claude Code scheduled tasks are recurring jobs you create from the Routines page in the desktop app. Each one starts a fresh Claude Code session at the time you pick, in the folder you choose, with its own permission mode and model, and the run shows up in the sidebar for you to review. They run on your machine, so the app has to be open and the computer awake. Here is how I set up a weekday review of the previous day's commits, what went wrong in the first week, and the version of the prompt I run now.

David Iya 9 min
Read article
Claude CodeBuilding

Claude Code Effort Levels: Which One I Set for Each Job (After Opus 5.5)

Claude Code effort levels are five settings - low, medium, high, xhigh, and max - that control how much the model thinks before it answers, and therefore how long a task takes and what it costs. You set one with /effort. Opus 5.5 defaults to medium while every other model defaults to high, so if you switched models this week you are already running one notch lower than you were. Here is what each level actually changes, how to set it in the desktop app, and the ladder I use to pick.

David Iya 9 min
Read article

Ready to build it yourself?

Join Claude Code Club, the #1 community for learning claude code, for $9/month.

← Back to the blog