← Blog

BLOG

Browserbase Reached: What Changes When Agents Hit Production

Browserbase reached production scale for many teams. Here is what that milestone means, where hosted Chromium fits, and how to evaluate a browser runtime.

October 13, 20269 min readRemote Browser

# Browserbase Reached: What Changes When Agents Hit Production

"Browserbase reached" is a phrase developers type when they want to know what happened to a hosted browser platform, or when they are searching for a milestone announcement. The honest answer is that the interesting part is not the announcement itself. It is the moment a browser automation project stops being a demo and starts running against real sites, real sessions, and real failure modes. That is the point where a hosted runtime stops being optional.

This post explains what that transition looks like, how to read browser-use and Browserbase-style tooling once you are past prototyping, and what to check before you commit to any cloud browser. If you are still choosing a runtime, start with Remote Browser for AI agents for the architectural picture.

What "Browserbase Reached" Actually Signals

Browserbase is a hosted browser platform for AI agents and automation. When a project "reaches" Browserbase — or any comparable runtime — it usually means one of three things:

  1. The team outgrew local Chrome. Playwright and Puppeteer on a laptop work until you need ten concurrent sessions, persistent logins, or a machine that does not sleep.
  2. The agent needs a stable target. LLM-driven agents retry, branch, and recover. A browser that dies mid-task turns a recoverable error into a lost run.
  3. Someone asked about cost and limits. Once you are paying per session, "how much does a browser-hour cost" becomes a real engineering input, not a curiosity.

None of these are marketing moments. They are operational ones. The keyword "reached" tends to appear alongside "browser-use reached" and "browser-use production" because the same inflection point hits every agent stack.

The Three Things That Break First

When a browser automation project moves from script to service, the failures cluster in predictable places.

1. Session lifecycle

A local script opens a browser, does work, and exits. A production agent may hold a session open across multiple model calls, pause for human review, or resume after a worker restart. If your runtime cannot keep a session alive and reattach to it, you rebuild state on every hop.

2. Identity and profiles

Logged-in workflows need cookies, local storage, and sometimes a consistent IP. A fresh browser per task is clean but useless for anything behind a login. Persistent profiles solve this, but they introduce their own questions: where does profile data live, how long does it persist, and can two workers share it safely?

3. Observability

When an agent fails at step 7 of 12, you need to see what the page looked like. A live viewer and session recording turn a vague "it didn't work" into a reproducible bug. Without them, debugging agent behavior is guesswork.

If your current setup handles all three, you may not need a hosted runtime yet. If it handles none, that is the signal.

Hosted Chromium vs. Local Chrome: A Production Comparison

The table below is the decision most teams actually face. It is not "cloud good, local bad" — local is faster to start and cheaper for one-off tasks.

CriterionLocal Chrome / PlaywrightHosted Chromium runtime
Setup timeMinutes, but per machineOne connection URL
ConcurrencyBounded by your hardwareBounded by your plan
Session persistenceManual, fragile across restartsManaged profiles and reattach
Live debuggingScreenshots and logs you wire upLive viewer and session replay
IP and networkYour office or CI egressConfigurable proxy settings
Cost modelYour compute, your timeMetered browser-hours
Scaling modelAdd machinesAdd sessions
Failure isolationOne crash can kill the runSession isolation per task

The cost row is where most debates happen. Local compute looks free until you price the engineer time spent on browser infrastructure. Hosted runtimes look expensive until you compare them to a dedicated SRE maintaining a Chrome fleet.

For a deeper look at the online-runtime trade-off, see remote browser online.

How browser-use Fits In

Browser-use is an agent framework: it gives an LLM a way to perceive a page and act on it. It is not a browser. That distinction matters because people conflate the two constantly.

  • browser-use decides *what* to do — click, type, scroll, extract.
  • The browser runtime decides *where* it happens and whether the session survives.

You can run browser-use against a local Chrome instance. You can also point it at a hosted Chromium session over CDP. The second option is what most teams move to when they need concurrency, persistence, or a stable target for long-running agents.

If you want the framework-level comparison, Browser Use vs Agent Browser covers where the boundary sits. The short version: pick your agent framework for reasoning quality, and pick your runtime for reliability.

Connecting Over CDP: The Concrete Path

Most hosted runtimes expose a Chrome DevTools Protocol endpoint. Playwright's connectOverCDP is the standard way to attach to it. Here is a minimal TypeScript example that connects to a remote session, opens a page, and extracts content.

import { chromium, Browser, Page } from 'playwright';

interface RemoteSession {
  cdpUrl: string;
  sessionId: string;
}

async function runTask(session: RemoteSession): Promise<string> {
  let browser: Browser | undefined;

  try {
    // Attach to the hosted Chromium instance over CDP.
    browser = await chromium.connectOverCDP(session.cdpUrl);

    // Reuse the existing context so persistent profile state applies.
    const context = browser.contexts()[0] ?? await browser.newContext();
    const page: Page = await context.newPage();

    await page.goto('https://example.com', {
      waitUntil: 'domcontentloaded',
      timeout: 30_000,
    });

    // Wait for a stable signal rather than a fixed sleep.
    await page.waitForSelector('main', { state: 'visible' });

    const title = await page.title();
    const text = await page.locator('main').innerText();

    console.log(`[${session.sessionId}] ${title}`);
    return text;
  } finally {
    // Disconnect without killing the remote session if you plan to reattach.
    await browser?.close();
  }
}

Two details matter more than the rest:

  • `browser.contexts()[0]` — hosted runtimes usually pre-create a context tied to a persistent profile. Creating a new one discards that state.
  • `browser.close()` vs. session termination — in most runtimes, closing the CDP connection does not destroy the remote session. Confirm this behavior in your runtime's docs before relying on it.

The official Playwright `connectOverCDP` documentation is the authoritative reference for the connection semantics.

What to Evaluate Before You Commit

Once you are past the demo, the evaluation criteria change. Here is what to check, in rough order of how often it bites teams.

Session and profile semantics

  • Can a session survive a worker restart?
  • Are profiles isolated per task, or shared?
  • How long does profile data persist, and can you delete it on demand?

Network and identity controls

  • Are proxy settings configurable per session?
  • Can you pin a region or route traffic through a specific egress?
  • What browser settings are exposed — and which are fixed?

Be careful with vendor claims here. "Stealth" and "anti-detection" mean different things to different providers. Ask what is actually configurable rather than assuming every provider offers the same set of identity controls. Our stealth browser runtime post covers what is realistic.

Observability

  • Is there a live viewer you can open mid-run?
  • Can you record and replay a session for debugging?
  • Do you get console logs, network traces, and screenshots?

Metering and limits

  • Is billing per browser-hour, per session, or per task?
  • What happens when you hit a concurrency ceiling?
  • Are there commitments, or is it pay-as-you-go?

Pricing models vary enough that you should read the current numbers directly rather than trust a blog post. See /pricing for how Remote Browser meters usage.

The browser-hour Question

"Browser-hour" is the unit most hosted runtimes use, and it is worth understanding because it shapes architecture.

A browser-hour is one browser session running for one hour. If you run ten sessions for six minutes each, that is one browser-hour total. This model rewards short, efficient tasks and punishes agents that idle.

Practical implications:

  • Close sessions when the task ends. An agent waiting on a human review should not hold a browser open unless it must.
  • Batch where possible. Ten tasks in one session usually cost less than ten sessions.
  • Watch retries. A flaky agent that retries five times pays five times.

If your agent spends most of its time thinking rather than browsing, consider decoupling the two. Let the model reason, then open a browser only when there is a page to act on.

For a fuller breakdown of the metering model, see browser-hour developer.

Where Remote Browser Fits

Remote Browser is a browser API and runtime for AI agents and browser-use workflows. It provides:

  • Hosted Chromium sessions with CDP access
  • Playwright, Puppeteer, and Selenium compatibility
  • A live viewer for real-time debugging
  • Persistent profiles for logged-in workflows
  • Configurable proxy and browser settings
  • Session isolation so one failure does not cascade
  • Usage controls so you can see what you are spending

It is not a framework. It does not decide what your agent should do. It gives your agent a browser that behaves like infrastructure — connect, run, disconnect, reattach.

If you are wiring up an agent for the first time, the documentation walks through connection, session management, and the CDP surface. If you are comparing runtimes, remote web browser covers the general category.

A Practical Migration Checklist

If you are moving from local Chrome to a hosted runtime, this is the order that causes the least pain.

  1. Abstract the browser connection. Put your connectOverCDP call behind a function that takes a URL. Do not hardcode chromium.launch().
  2. Separate session creation from task execution. Create a session, get its CDP URL, pass it to your agent, close it when done.
  3. Make profiles explicit. Decide per workflow whether you need a persistent profile or a clean one.
  4. Add a live viewer to your debug loop. Being able to watch a failing run beats reading logs.
  5. Instrument browser-hours. Log session start and end times so you can see where time goes.
  6. Test reattach behavior. Kill a worker mid-task and confirm the session survives.

Step 6 is the one teams skip, and it is the one that matters most in production.

What "Reached" Should Mean for You

If you searched for "browserbase reached" because you wanted a milestone, the useful takeaway is this: the milestone that matters is not a vendor's. It is yours — the moment your agent has to run reliably against the open web, on a schedule, without you watching.

That moment is when you should care about session lifecycle, profiles, observability, and metering. It is also when a hosted Chromium runtime stops being a nice-to-have and starts being the layer that keeps your agent from falling over.

Pick the runtime that makes those four things boring. Then go build the agent.

For current usage details, see /pricing. For connection and session APIs, see /documentation.