Runtime cloud for AI agents

Open in Claude

Launch managed remote browser runtimes for your AI agents and connect to them through native protocols like CDP. BCTRL handles everything around the runtime: profiles, proxies, credentials, files, recordings, live view, artifacts, and observability.

A working example

1import { Bctrl } from '@bctrl/sdk';
2import { chromium } from 'playwright';
3
4const bctrl = new Bctrl({ apiKey: process.env.BCTRL_API_KEY! });
5
6const space = await bctrl.spaces.create({ name: 'first-run' });
7const runtime = await space.runtimes.browser('demo', { mode: 'ephemeral' });
8const { endpoint } = await runtime.connections.create({ protocol: 'cdp' });
9
10const browser = await chromium.connectOverCDP(endpoint.url);
11const context = await browser.newContext();
12const page = await context.newPage();
13await page.goto('https://example.com');
14
15await runtime.stop();

What’s inside

How it fits together

A space is the boundary. You mount what the agent needs at creation time — browser profiles, proxies, AI provider keys, vault secrets, a storage namespace — and the space defines what’s accessible inside it.

Runtimes launched inside a space inherit those mounts automatically. A runtime can use the space’s AI credentials, decrypt vault secrets within its allowed prefixes, and read or write the space’s storage without you re-passing any of it. You drive a running runtime through a native protocol — CDP today — so you can keep using your existing automation tooling.

A run is a runtime’s lifecycle from the moment it starts to the moment it stops. Every run carries unmatched observability — live view with human takeover, full session recordings, structured event timelines, downstream artifacts, and per-runtime usage. You always know what the agent is doing, and you can replay any run afterward.

Invocations are hosted AI agent calls inside a runtime — observe, extract, act, and multi-step automation through Stagehand and browser-use. Durable, cancellable, awaitable.