Tools · 08

A browser
your AI
can drive.

Dev-browser is the missing link between Claude and the web. You ask your AI to look at a page, fill in a form, take a screenshot, compare two sites. No human click. Just a tiny script (a mini-program) that Claude writes for you. I use it every day to scrape (pull the content off a page), test my pages, check sources. Here's how it works, how to install it, and why it's become essential.

11 min read Level Beginner Tools Claude Code · dev-browser
Jérémy Sagnier Jérémy Sagnier · I test AI every day · I share what helped me Published · Updated April 24, 2026
In 30 seconds

What you'll walk away with

  • Dev-browser is a windowless browser your AI drives in JavaScript (the language of web pages). You say what you want, it writes the script, runs it, and hands you the result.
  • 3 everyday use cases: scraping a page, testing a page locally, taking a screenshot. And you never write any code yourself — Claude does it.
  • Install: 1 line in your terminal (the black window where you type commands). Setup: zero. Use: you tell Claude "open this page and tell me what you see." Written with Claude, reviewed by me.

Brand new to AI?

If some terms lose you (Claude Code, terminal, agent, MCP, skill…), start with the beginner guide first and keep the glossary open in another tab. You'll come back here with the basics.

Before we start

Ever tried asking ChatGPT or Claude to go read a web page? Then you know the frustration. Sometimes it manages, sometimes it tells you "Sorry, I can't access that URL." Or worse: it hallucinates content it never saw, tells you things that don't exist, quotes made-up numbers. You click the link to check, and you realize the page is about a completely different topic.

Dev-browser fixes that. It's a windowless browser (Chromium behind the scenes, like Chrome without the ads) that your AI drives by writing a tiny script. You never open Chrome yourself. You say what you want, Claude writes the script, it runs in an invisible Chrome, and you get back whatever you're after · the text of an article, a precise figure in a table, a screenshot of a page, the render of a page you just edited. Under the hood, dev-browser relies on the same machinery as Playwright and Puppeteer (the two reference libraries for driving a browser), but you never touch their API: Claude does it for you.

I installed it on my Mac two months ago. Today, I use it almost every day: checking that a page is properly deployed, scraping a site Claude doesn't know, taking a screenshot to sign off a design, testing my site's signup form without opening Chrome by hand, capturing a competitor's article before it changes.

The lightbulb moment for me was when I realized dev-browser isn't a dev tool. It's a tool for a curious founder who wants their AI to actually do what they ask. You're no longer fighting with "I can't access," you're no longer copy-pasting content by hand, you're no longer opening ten Chrome tabs to check ten pages. You delegate, and your AI actually does it.

Here are the main alternatives at a glance, to place dev-browser in the ecosystem.

Tool Target audience Price Learning curve Large-scale scraping
dev-browser Non-dev / curious dev Free (open source) Low Limited (1 local browser)
Playwright Dev Free (open source) Medium to high Excellent
Puppeteer Dev Free (open source) Medium Excellent
Apify All levels Pay-as-you-go (~$50/month) Low (UI) Excellent (cloud)
Browserbase Dev Paid (~$30/month) Medium Excellent (cloud)

My take in 5 seconds

If you use Claude Code every day and you touch the web at all (a site, sources to check, the occasional scrape), dev-browser belongs on your machine. It makes your AI genuinely useful for anything that touches the internet. Three minutes to install, payback in ten minutes. I don't know a single tool in the Claude Code galaxy with a better effort-to-value ratio.

The concept · a browser you never see

The real problem it solves

Claude knows a huge number of pages thanks to its training. But there are two limits:

  1. It doesn't know recent pages (created after its cutoff, meaning the date its training stopped).
  2. It can't interact with a page: click, fill in, wait for a JS script to fire, scroll.

Dev-browser fixes both. It actually opens a browser (Chromium behind the scenes, like Chrome without the ads) with no graphical window. Claude sends it orders in JavaScript: "go to this page, wait 3 seconds, grab the text of the h1, click this button."

How it works, no jargon

Picture a robot that opens Chrome for you and does exactly what you tell it. That's dev-browser. Except the robot is your computer, and the Chrome window is one you never see. It all happens behind the scenes.

Concretely, here's what happens when you ask Claude "go check if my page is live":

  1. Claude writes a tiny script (a 5-10 line mini-program, in JavaScript, the language of web pages).
  2. The terminal launches Chrome in the background · what's called "headless" (no head, no visible window). It opens, but on a screen no one sees.
  3. Dev-browser intercepts the script and runs it in that invisible Chrome: go to the URL, wait for the page to load, read the content, click a button, whatever you want.
  4. The result comes back in your terminal · the text it grabbed, the screenshot image, the extracted data. Claude reads the result and replies to you in plain English in the conversation.

You never saw Chrome open. You never clicked. You never wrote a line of code. You just asked in plain English, and you got the answer in plain English. That's it.

What the script looks like (just so you know)

You'll never write this yourself, but here's what Claude types in your terminal when you ask it to grab the title of jerwis.fr:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://jerwis.fr");
      const title = await page.evaluate(() => document.querySelector("h1").innerText);
      console.log(title);
    EOF
    

In plain English: "open a browser, go to jerwis.fr, grab the text of the big headline (the h1), print it in the terminal." Done. The browser closes on its own, the title shows up, Claude hands it to you. Five seconds flat.

Terminal screenshot showing a dev-browser command run and its output: H1 title retrieved, screenshot saved to disk.
What it looks like in my terminal · a dev-browser command and its output

The golden rule I follow

You never type a dev-browser script yourself. You ask Claude for what you want in plain English. Claude writes the script. You stay 100% in your role of the founder who asks, never the developer who codes.

5 real cases · even if you're not a dev

On paper, dev-browser sounds like a "dev tool for scraping and testing." In real life, it's an assistant that unblocks tasks you'd otherwise do by hand, badly, wasting time. Here are 5 cases where I use it that have nothing to do with code.

Case 01 · Check that your site is actually live

You push a change, dev-browser confirms it's rendering correctly

You edit a page on your site (a piece of text, a price, an image), you push it to your host. Before, you'd open Chrome, go to the page, eyeball it. Now you ask Claude: "check that my site's pricing page shows €49 and not €39." It launches dev-browser, loads the page, reads the price, confirms it.

I use it on every deploy. It saves me from the "I forgot to clear the browser cache, I'm seeing the old version." Dev-browser loads the clean page and tells me what's actually live for visitors.

The command Claude runs for you:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://yoursite.com/pricing");
      const text = await page.evaluate(() => document.body.innerText);
      console.log(text.includes("€49") ? "OK €49 visible" : "MISSING");
    EOF
    
Case 02 · Scrape a site ChatGPT can't read

Cookie wall, login, blocked page · dev-browser gets through anyway

You ask ChatGPT or Claude "read this article and summarize it." The reply: "sorry, I can't access that URL." Why? The site blocks bots, asks you to accept cookies, redirects to a login page. Dev-browser, on the other hand, mimics a real user: it accepts the cookies, waits for the load, reads the page like you would.

Last time, I needed a precise figure in a McKinsey study tucked behind a cookie wall. ChatGPT blocked. Claude + dev-browser: 10 seconds to grab the figure plus the source. Same for partial paywall articles (Le Monde, Les Échos when the opening is readable): dev-browser reads what's visible, Claude summarizes.

The typical command:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://blocked-site.com/article");
      await new Promise(r => setTimeout(r, 3000));
      const article = await page.evaluate(() => document.querySelector("article").innerText);
      console.log(article);
    EOF
    
Case 03 · Capture a design for inspiration

You spot a beautiful site, you want to share it with your designer · screenshot in 5 seconds

You stumble on a site you love (a competitor, a slick landing page, a freelancer's portfolio). You want to send it to your designer or drop it into a meeting. You tell Claude: "take a screenshot of stripe.com at desktop size." It launches dev-browser, captures the image at 1920×1080, shows it in the conversation, and you save it.

Also handy for archiving a page before it changes. A promo, a legal notice, a version of a competitor's page you want to keep. Dev-browser freezes the moment, and you've got the proof.

The command:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.setViewportSize({ width: 1920, height: 1080 });
      await page.goto("https://stripe.com");
      await page.screenshot({ path: "stripe-home.png", fullPage: true });
      console.log("Screenshot saved: stripe-home.png");
    EOF
    
Full screenshot of the anthropic.com home page captured by dev-browser at 1440x900.
Example capture · anthropic.com at 1440×900, taken by dev-browser while I was writing this tutorial
Case 04 · Test your signup form

Fill in the form, submit, check the email · without clicking 10 times

You edit your newsletter signup form. You want to confirm the whole flow works: fill in, submit, get the confirmation message, see the email arrive. Before: you'd test by hand, create fake emails (which polluted your list), forget edge cases. Now, you tell Claude: "go to my home page, fill in the newsletter form with test@example.com, click submit, tell me if the success message shows up." It does it, it reports back.

Bonus: you can ask it to test with a fake address to see if validation works, with an already-subscribed email to see the error message. Three scenarios in 30 seconds, where doing it by hand would have taken you 10 minutes.

The command:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://yoursite.com");
      await page.fill("input[type=email]", "test@example.com");
      await page.click("button[type=submit]");
      await new Promise(r => setTimeout(r, 2000));
      const message = await page.evaluate(() => document.querySelector(".success-msg")?.innerText);
      console.log(message || "No success message found");
    EOF
    
Case 05 · Check that a page is actually responsive

Mobile + desktop capture to see if anything breaks

You deploy a new page. On your computer, it looks great. But on mobile? You could open Chrome, hit F12, switch to mobile mode, scroll. Or you can ask Claude: "capture my pricing page on mobile (iPhone 14) and on desktop, compare them." It launches dev-browser twice (once at mobile size, once at desktop size), shows you both images, tells you what overflows.

I use this on every big UI overhaul. Especially for hero sections, where the H1 can break on a small screen. Dev-browser shows you the truth, without you needing to pull out your phone.

The command:

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.setViewportSize({ width: 390, height: 844 });
      await page.goto("https://yoursite.com/pricing");
      await page.screenshot({ path: "pricing-mobile.png", fullPage: true });
      console.log("Mobile captured");
    EOF
    

How I use it every day

For 2 months now, dev-browser has been running 10 to 15 times a day on my Mac. Here's my typical routine:

In the morning (5 min) · "Claude, check that jerwis.fr and my 3 other sites respond fine and that the home page loads in under 3 seconds." It runs dev-browser on each one, tells me if everything's nominal. I start my day relaxed, without having opened a single browser.

Before every push · "capture the page I just edited before/after, tell me what changes visually." Keeps me from breaking a design without noticing.

When Claude gets stuck on a site · if Claude tells me "I can't access that URL," I retry with "use dev-browser." 9 times out of 10, it gets through. The last 1/10 is a site with a captcha (max-level Cloudflare) · there I let it go.

In the evening · "capture the 5 new pages on my site and list the typos." Dev-browser walks through them, Claude proofreads, I fix. My free proofreader, who never sleeps.

My 3 favorite commands · ready to copy

You don't need to memorize these commands. You can copy them, paste them into your terminal swapping out the URL, and you're off. Or better: show them to Claude once and say "this is my command style, keep it," and it'll reuse them on its own from then on.

Command 01 · Screenshot of a whole page

The daily bread. Capture a full site, top to bottom, at default desktop size.

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://jerwis.fr");
      await new Promise(r => setTimeout(r, 2000));
      await page.screenshot({ path: "capture.png", fullPage: true });
      console.log("Screenshot saved: capture.png");
    EOF
    

The capture.png file shows up in the folder where you ran the command. You change the URL, run it again, and you get a new capture.

Command 02 · Check that a page contains a word or a number

Great for confirming a change is live without opening a browser. Answer in 1 line in your terminal.

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://jerwis.fr/articles");
      const text = await page.evaluate(() => document.body.innerText);
      console.log(text.includes("dev-browser") ? "OK found" : "ABSENT");
    EOF
    

You swap "dev-browser" for any word, price, name. Handy for checking that a price change is rendering, that a new article shows up in the list, that a promo is actually visible.

Command 03 · Submit a form and capture the result

The newsletter, contact, or order signup test. Fill in, submit, check the confirmation message.

dev-browser --headless <<'EOF'
      const page = await browser.getPage("main");
      await page.goto("https://jerwis.fr");
      await page.fill("input[type=email]", "test@example.com");
      await page.click("button[type=submit]");
      await new Promise(r => setTimeout(r, 3000));
      await page.screenshot({ path: "form-result.png", fullPage: true });
      console.log("Form submitted, capture saved");
    EOF
    

You adapt the field selector (input[type=email]) and the button selector (button[type=submit]) to your page. If you don't know them, ask Claude: "look at the HTML of this page and tell me which selectors to use for the newsletter form." It finds them, it adapts the command.

The habit to build

You memorize nothing. You save these 3 commands in a dev-browser-commands.md file on your desktop. When you need one, you copy it, swap the URL, paste it. Show them to Claude once so it knows your preferred format, and after that you just ask in plain English · it'll reuse them as a template.

5 bonus uses · that I'm testing right now

Beyond the 5 truly daily cases, here's what I've been experimenting with for a few weeks. Not all of it is polished, but it's already usable if you want to push further.

Bonus 01 · Monitor a competitor's price

Dev-browser checks once a day, alerts you if the price moves

You sell a product or a service, and you want to know if your competitor moved their price. You run dev-browser on a cron (scheduled to run automatically, say every morning at 8am). It goes to the page, reads the price, compares it to the previous day's. If it changed, you get an email or a Slack message. Cost: 5 minutes of setup with Claude, and you've got a competitor radar running on its own.

Bonus 02 · Check that your sales funnel works

From the "buy" click all the way to the Stripe confirmation · simulated in 30 seconds

You edit your sales page and want to confirm the whole funnel still works. Dev-browser can simulate a buyer: go to the home page, click "buy," fill in the Stripe test card form (the official number 4242 4242 4242 4242, valid on any Stripe site in test mode), confirm, check the confirmation page. In 30 seconds, you know if something's broken. Handy before every go-live on an e-commerce site.

Bonus 03 · Capture an X / LinkedIn thread to archive

A viral post, an inspiring thread · screenshot before it disappears

You spot an X thread you love, a LinkedIn post you want to keep. The account can be deleted, the post wiped, the platform can block access. You ask Claude: "capture this X URL full-screen, keep the whole thread visible." Dev-browser scrolls automatically, captures the full thread, hands you a PNG. Your personal archive of gems is safe.

Bonus 04 · Compare 2 sites side by side

To decide between 2 designs, 2 competitors, 2 versions of your page

You're torn between 2 designs. Or you want to compare 2 competitors. Dev-browser captures both sites at the same resolution, Claude generates an image with the 2 captures side by side, and you see the difference at a glance. Great for meetings where you want to show "here's what they do, here's what we do, here's the difference."

Bonus 05 · Extract all the images from a page

To analyze a design or grab some inspiration

You want to extract all the images from a page (a portfolio, a product gallery). You ask Claude: "go to this URL, download all the images in high resolution, sort them into a folder." Dev-browser walks the page, identifies each image, downloads it. Your moodboard is ready in 1 minute, where by hand it would have taken 30 right-clicks.

Install · 3 minutes flat

Prerequisites

  • Mac or Linux (Windows Subsystem for Linux works too)
  • Node.js already installed (check with node --version · if it prints a number, you're good)
  • Claude Code Max (or at least Claude Code free)

Step 1 · Install

Open your terminal. Paste the command Claude gives you when you ask it "install dev-browser for me." It usually goes through npm install -g @anthropic-ai/dev-browser (or whatever the equivalent is for the current version · ask Claude for the exact current command).

Step 2 · Test

Still in your terminal, type:

dev-browser --help
    

If you see a list of options scroll by (something like the screenshot below), it's installed. If not, restart your terminal or ask Claude to help you debug.

Terminal screenshot showing the output of the dev-browser --help command: QuickJS sandbox, browser API, invocation examples.
Output of dev-browser --help · what you should see if the install went well

Step 3 · First use

Open Claude Code in any folder, and tell it:

"Use dev-browser to go to jerwis.fr and give me the title of the page"

Claude will write a tiny script, run it, and hand you back "Follow AI. Without being a dev. Without spending your evenings on it." (my current H1). If it works, you're set. If not, Claude will help you fix it.

The classic trap I hit

The first time I ran dev-browser, a Chrome window popped open on my screen and made me jump. That's because I'd forgotten the --headless flag. Without that flag, the browser really shows up. Always ask Claude to add --headless by default. You won't see anything anymore, just as it should be.

The 3 limits I've run into

Limit 1 · Sites that detect bots

Some sites (X/Twitter, logged-in LinkedIn, Reddit sometimes) detect automated browsers and block them. Dev-browser can connect to your existing Chrome with the --connect flag (a flag = an option you pass to the command), but that's more technical. For the general public, I simply accept that 10% of sites refuse · I move on to something else.

Limit 2 · Very JavaScript-heavy pages

Some pages take 5-10 seconds to fully load. By default, dev-browser waits 2 seconds. If Claude can't find an element, it's often a timing issue. The fix: ask Claude to add await new Promise(r => setTimeout(r, 5000)). It'll know what to do.

Limit 3 · Not the answer if you want to scrape at scale

Dev-browser is built for one-off tasks · checking a page, testing a flow, grabbing one precise piece of data. If you want to scrape 10,000 pages for a massive project, you need other tools (Apify, Bright Data, or custom code — built to order). For everything else, dev-browser is enough.

My personal rule: as long as I stay under 50 pages at once, dev-browser does the job without flinching. Beyond that, I switch to a dedicated tool or split it into several batches. 95% of my uses fit comfortably within that limit.

My checklist before every use

(1) The --headless flag is there. (2) I ask Claude in plain English, not in code. (3) I sanity-check the result it hands me before taking its word for it. → These 3 habits cover 95% of my usage.

— FAQ

FAQ dev-browser.

Is dev-browser free?

Yes, totally. It's an open source package you install in 1 line. No subscription, no quota, no credit card to hand over. The only cost is your Claude Code subscription (around $20/month for the Pro plan, or free with limits).

Does it work on Windows?

Yes, but you have to go through WSL (Windows Subsystem for Linux), a Linux built into Windows. Three minutes to turn on in the Windows settings, and after that it works just like on a Mac. If you've never touched WSL, ask Claude to walk you through it.

Do you need to know how to code to use dev-browser?

No, not at all. You ask Claude in plain English "go to this page and do that," it writes the script, it runs it, and hands you the result. You never write a single line of code. The only moment you touch the terminal is to copy-paste the install command, once.

Does dev-browser replace Apify or Bright Data?

No. Apify and Bright Data are built for industrial-scale scraping (10,000+ pages, IP rotation, captcha bypassing). Dev-browser is built for personal, one-off uses (checking 1 page, capturing 5 sites, testing 1 form). For 99% of solo founders, dev-browser is more than enough.

What's the legal risk of scraping with dev-browser?

Scraping public pages is generally tolerated, as long as you respect the site's robots.txt (RFC 9309 describes the standard). On the other hand, scraping content behind a login, getting around a paywall, or mass-harvesting personal data → gray zone, or even off-limits (see the CNIL's positions). My rule: I use dev-browser for what I'd already be looking at by hand.

How long until you master it?

10 minutes for your first use that works. A week to have 5 ready commands you reuse. A month for it to become a reflex. No steep learning curve because Claude is the one writing the code.

What's the difference with Playwright or Puppeteer?

Playwright and Puppeteer are the browser-automation libraries devs have used for years. Dev-browser sits on top of them but adds an abstraction layer built for Claude: you say what you want in plain English, the AI writes the script, and the QuickJS sandbox runs it. You don't have to learn the Playwright API to use it.

Do my captures stay private?

Yes. Dev-browser runs locally on your machine through a Chromium driven by a local daemon. The screenshots and extracted content are stored in ~/.dev-browser/tmp/ on your computer. Nothing goes anywhere else unless you upload it yourself or Claude Code analyzes the image in the conversation.

How much does it cost to use dev-browser every day?

The tool itself is free. The cost comes from Claude writing and reading the scripts: at 10-15 runs a day with short prompts, I barely notice the difference on my Claude Code Max bill. Count on $1 to $3 of tokens a day depending on the size of the pages you scrape.

What do you do if dev-browser gets stuck on a captcha?

You accept that this site isn't for you. Max-level Cloudflare, visual captchas, browser fingerprinting: these are industrial anti-bot defenses, not meant to be beaten by a personal tool. For that 5-10% of sites, I move on or open the page by hand.

Where to go from here

If you want to dig deeper:

  1. Claude Code · the full setup — to install before dev-browser, obviously
  2. The Claude Code workflow tips — the logical next step to structure your sessions and combine dev-browser with other habits
  3. Claude Code loops, explained — what you trigger on a loop when dev-browser does its thing (monitoring, watch)
  4. My Tools page — the 6 tools I use alongside Claude Code every day

If you install dev-browser this week and use it for a real case, reply to my newsletter and tell me about it. It helps me know what works for other people. I read everything, I reply, and I can be wrong about your needs — your feedback sets me straight.

Spotted a mistake?

A command that changed, a deprecated option, a new version of dev-browser? Write to me at sagnier.jeremy@gmail.com · I fix it within 48h max and note the update date at the top of the article. Field feedback is worth a thousand times more than the articles — I read everything, I reply.

Jérémy Sagnier
Thanks for reading this far 👋

Shall we keep going?

I test AI for real and share what works, no jargon and no hype. If this article helped you, the easiest way to never miss anything is my Friday letter. And if you have a question or a doubt: reply to me, I read everything.

Get the newsletter → Read more articles