← Blog

BLOG

Automated Browsercore: The Production Runtime for Web Agents

Automated Browsercore explained: how hosted Chromium, CDP, and persistent sessions solve browser automation reliability for AI agents.

September 2, 202610 min readRemote Browser

# Automated Browsercore: The Production Runtime for Web Agents

Automated Browsercore is the infrastructure layer that keeps browser automation reliable in production. When your AI agent or test suite depends on a browser session that stays alive across workers, connects over CDP, and survives network hiccups, a local Chrome instance isn't enough. This guide explains what automated Browsercore means in practice, why hosted Chromium beats local setups, and how to connect your Playwright or Selenium code to a remote browser that behaves like infrastructure—not a flaky process.

What Is Automated Browsercore?

Automated Browsercore refers to the core runtime that powers browser automation at scale. It's the combination of a real Chromium engine, a remote session manager, and a protocol layer (CDP) that lets your code drive the browser from anywhere. Unlike a local browser that dies when your laptop sleeps or a worker restarts, an automated Browsercore runtime keeps sessions alive, isolates workloads, and exposes a stable API.

Remote Browser provides this runtime as a hosted service. You get a real Chromium instance in the cloud, accessible via Playwright, Puppeteer, or Selenium. Your code connects to a session, runs automation, and disconnects—without killing the browser. This is the missing piece for AI agents that need to browse, click, and extract data over long horizons.

Why Local Browsers Fail in Production

Local browser automation works in development. You launch Chromium, run a script, and see results. In production, the same approach breaks down for concrete reasons:

  • Session loss: Cloud workers restart, containers recycle, and your browser state vanishes. An AI agent mid-task loses its login session, cookies, and navigation history.
  • Resource contention: A single machine running multiple browser instances exhausts memory and CPU. Chromium is heavy; ten instances on one box is a recipe for crashes.
  • Network egress: Local browsers route traffic through your server's IP. If that IP is flagged or rate-limited, your automation gets blocked.
  • No live debugging: When a headless browser fails, you have logs—not a visual of what went wrong. Debugging becomes guesswork.

Automated Browsercore solves these by decoupling the browser process from your application code. The browser runs in a managed environment, and your code connects over the network.

How Remote Browser Implements Automated Browsercore

Remote Browser's architecture is straightforward: hosted Chromium sessions exposed via CDP and WebSocket. Here's how it works under the hood.

Hosted Chromium Sessions

Each session is a real Chromium instance running in an isolated container. You don't share a browser with other customers. The session has its own memory, disk, and network namespace. This isolation matters for two reasons: security (your agent's cookies aren't visible to others) and stability (a crash in one session doesn't affect another).

Sessions are long-lived. You can connect, run automation, disconnect, and reconnect later. The browser stays alive in between. This is critical for AI agents that need to pause while an LLM generates the next action.

CDP Access

The Chrome DevTools Protocol is the native language of Chromium. Every browser automation tool—Playwright, Puppeteer, Selenium—ultimately speaks CDP. Remote Browser exposes a CDP endpoint for each session, so you can connect with any tool that supports connectOverCDP.

Here's a TypeScript example using Playwright to connect to a Remote Browser session:

import { chromium } from 'playwright';

// Connect to an existing Remote Browser session via CDP
const browser = await chromium.connectOverCDP(
  'wss://remote-browser.dev/cdp/session/your-session-id'
);

// The default context includes any persistent state (cookies, localStorage)
const context = browser.contexts()[0];
const page = await context.newPage();

// Run your automation
await page.goto('https://example.com');
await page.click('button[data-testid="login"]');

// Disconnect—the browser session stays alive
await browser.close();

The key detail: browser.close() disconnects your client but doesn't terminate the remote browser. The session persists, ready for your next connection. This is the opposite of local Playwright, where closing the browser kills everything.

Persistent Profiles

Sessions can be configured with persistent profiles. This means cookies, localStorage, IndexedDB, and other browser state survive across connections. For AI agents that need to stay logged into a service, this is non-negotiable. You authenticate once, and the session remembers.

Persistent profiles also enable consistent fingerprinting. If your automation needs to appear as the same browser across visits, a persistent profile maintains that continuity.

Playwright Connect Over CDP: The Practical Pattern

The connectOverCDP method is the bridge between your code and automated Browsercore. It's supported in Playwright for Chromium-based browsers. Here's what you need to know:

  • WebSocket endpoint: Remote Browser provides a wss:// URL for each session. Playwright connects to this endpoint.
  • Existing contexts: When you connect over CDP, Playwright attaches to the browser's existing contexts. You don't create a new browser; you attach to a running one.
  • No launch overhead: Connecting to an existing browser skips the launch sequence. Your code starts executing immediately.

This pattern is especially useful for AI agents. The agent can connect, perform a few actions, disconnect to process results with an LLM, then reconnect to continue. The browser state persists throughout.

Scaling Playwright Browser Workloads Reliably

Scaling browser automation is hard because browsers are stateful and resource-hungry. Automated Browsercore addresses this with a session-based model.

Session Isolation

Each session runs in its own container. This means:

  • A crash in one session doesn't affect others.
  • Memory leaks are contained.
  • You can run heterogeneous workloads—some sessions with proxies, others without—without interference.

Connection Pooling

Your application code can maintain a pool of connections to different sessions. When a worker needs a browser, it grabs a session from the pool. When it's done, it releases the connection—but the session stays alive for reuse.

This is more efficient than launching a browser per task. Launching Chromium takes seconds and consumes significant memory. Reusing a warm session takes milliseconds.

Horizontal Scaling

Because sessions are independent, you can scale horizontally by adding more sessions. The Remote Browser API lets you create sessions on demand. Your orchestration layer decides how many sessions you need based on queue depth or agent concurrency.

How to Keep Browser Sessions Alive Across Multiple Cloud Workers

This is the question that comes up most in production. Your AI agent runs on a platform like Modal, Railway, or AWS Lambda. Each invocation might land on a different worker. How do you maintain browser state?

The answer: don't store browser state in the worker. Store it in the remote session.

Here's the pattern:

  1. Create a session when your agent starts a task. The session ID is your handle.
  2. Pass the session ID to any worker that needs to interact with the browser.
  3. Connect over CDP from any worker. The browser runs remotely, so the worker's location doesn't matter.

This decouples browser state from compute. Your agent can run on ephemeral infrastructure while the browser persists in a stable environment.

Virtual Browser with API: What You Get

A virtual browser with API access is the essence of automated Browsercore. Remote Browser provides a REST API for session management and a WebSocket endpoint for CDP. Here's the typical workflow:

  1. Create a session via POST /sessions. Specify options like proxy settings, profile persistence, and viewport.
  2. Get the CDP endpoint from the response.
  3. Connect with Playwright, Puppeteer, or Selenium.
  4. Run automation.
  5. Disconnect or terminate the session when done.

The API also supports live viewing. You can watch a session in real-time via a web viewer, which is invaluable for debugging AI agent behavior.

Comparison: Automated Browsercore vs. Local Browser Automation

AspectLocal BrowserAutomated Browsercore (Remote Browser)
Session persistenceDies with processSurvives disconnects
Cross-worker accessNot possibleConnect from any worker
Resource usageConsumes local CPU/RAMRuns in isolated container
DebuggingLogs onlyLive viewer + CDP inspection
ScalingManual, per machineAPI-driven session creation
IP reputationTied to server IPConfigurable proxy settings
Setup timeInstall browsers, manage versionsAPI call to create session

CDP Playwright: Connecting to Existing Browsers

One common use case is connecting Playwright to an existing browser that wasn't launched by Playwright. This is exactly what connectOverCDP does. It's useful when:

  • You have a browser session created by another tool.
  • You want to attach to a session that has persistent state.
  • You need to debug a live session.

Remote Browser supports this natively. Every session exposes a CDP endpoint that Playwright can connect to. This means you can use Playwright's high-level API against a browser that's managed by Remote Browser.

How to Give Your AI Agent Browser Access in Production

AI agents need browser access for tasks like form filling, data extraction, and multi-step workflows. But giving an agent browser access in production requires more than a launch() call.

The Agent Runtime Pattern

A production agent runtime looks like this:

  1. Task queue: The agent receives a task.
  2. Session acquisition: The agent requests a browser session from Remote Browser.
  3. Context loading: The session loads any persistent profile (cookies, login state).
  4. Task execution: The agent connects over CDP, navigates, extracts data, and makes decisions.
  5. State persistence: The session saves state for the next task.
  6. Cleanup: The session is terminated or returned to a pool.

This pattern works because the browser is a service, not a process. The agent can pause, think, and resume without losing context.

Safety and Controls

Production browser access needs guardrails. Remote Browser provides usage controls so you can limit what agents do. You can restrict navigation to specific domains, cap session duration, and monitor activity via logs. These controls are essential when AI agents operate autonomously.

Firefox CDP: What's Supported

A note on Firefox: Playwright's connectOverCDP is officially supported for Chromium-based browsers. Firefox support is limited. The Playwright documentation states that connectOverCDP works with Chromium. For Firefox, you'd need to use WebDriver BiDi, which is a different protocol.

If your workload requires Firefox, you'll need a runtime that supports WebDriver BiDi. Remote Browser focuses on Chromium, which covers the vast majority of automation use cases. For most AI agent workloads, Chromium is the right choice because of its CDP support and compatibility with Playwright and Puppeteer.

Production Criteria for Automated Browsercore

When evaluating an automated Browsercore solution, consider these criteria:

Session Lifecycle Management

Can you create, pause, resume, and terminate sessions programmatically? A production runtime needs a full lifecycle API. You shouldn't have to restart a browser to change its configuration.

Persistent State

Does the runtime support persistent profiles? For AI agents that need to maintain login state, this is critical. Without it, every task starts from scratch.

Network Configuration

Can you configure proxy settings per session? Different tasks may need different IPs. A production runtime should let you specify network egress per session.

Observability

Can you see what the browser is doing? Live viewing, session logs, and CDP inspection are essential for debugging. Without observability, you're flying blind.

Isolation

Are sessions isolated from each other? A crash in one session shouldn't take down others. Container-level isolation is the standard.

API Stability

Is the API stable and well-documented? You're building on this infrastructure. Breaking changes are costly.

Getting Started with Remote Browser

Remote Browser implements automated Browsercore as a hosted service. Here's how to start:

  1. Create an account and get an API key.
  2. Create a session via the API or dashboard.
  3. Connect using Playwright's connectOverCDP or your preferred tool.
  4. Run your automation.

The documentation covers the full API, including session management, CDP endpoints, and configuration options. For pricing details, see the pricing page.

If you're building AI agents that need reliable browser access, start with the remote browser for AI agents guide. It covers the runtime pattern in more depth.

Conclusion

Automated Browsercore is the infrastructure that makes browser automation reliable at scale. By hosting Chromium sessions in the cloud and exposing them via CDP, Remote Browser gives you persistent, debuggable, and scalable browser access. Your code connects over the network, runs automation, and disconnects—while the browser stays alive.

This model solves the core problems of production browser automation: session persistence across workers, resource isolation, live debugging, and consistent network egress. Whether you're building AI agents, running Playwright test suites, or scaling Selenium grids, automated Browsercore provides the runtime layer that local browsers can't match.

For a deeper dive into specific patterns, check out the remote browser online guide for practical setup steps, or the remote web browser post for architectural considerations. If you're debugging live sessions, the remote control browser guide covers observability patterns.

The browser is no longer a local process. It's a service. Automated Browsercore makes that service production-ready.