> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://platform.bctrl.ai/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://platform.bctrl.ai/_mcp/server.

# BCTRL

> Managed browser runtimes for software and AI agents, with flexible control and observable Run history.

BCTRL gives your application or AI agent a managed browser it can control.

Launch an isolated browser Runtime. Drive it with Playwright or Selenium, call
typed Tools, or send a goal through a Conversation. Every active browser
session produces a Run that brings status, traces, events, files, usage, and an
optional recording together.

#### [Run your first browser](/sdk/quickstart)

Create a Runtime, perform browser work, and inspect the resulting Run.

#### [Explore the API](/api)

Browse the public v1 operations and request schemas.

## What can you build?

#### [Automate from your code](/sdk/connect-cdp)

Connect Playwright, Puppeteer, or another CDP client to a browser hosted by
BCTRL.

#### [Build AI workflows](/sdk/conversations)

Send multi-step browser goals, stream progress, and make bounded Tools
available when needed.

#### [Embed automation for customers](/cookbook/multi-tenant-isolation)

Isolate each customer with a subaccount, track usage separately, and provide
hosted or embedded Views.

#### [Operate with confidence](/sdk/runs)

Follow active work and investigate traces, events, recordings, files, and
usage.

## Choose how to automate

* **Connect your framework** when you want full browser control or already use
  [Playwright or Puppeteer](/sdk/connect-cdp) or
  [Selenium](/sdk/connect-webdriver).
* **Call a [Tool](/sdk/tools)** for a bounded, typed operation such as opening a
  page, performing a semantic action, or extracting structured data.
* **Start a [Conversation](/sdk/conversations)** when a browser goal spans
  multiple steps and you want to stream its progress.

All three approaches operate through an active Runtime, and BCTRL records their
activity in its Run.

## How BCTRL organizes access and work

Public API requests are authenticated with a BCTRL API key. The key sets the
maximum account boundary:

* An **Organization key** can work at the Organization root or narrow supported
  requests to one of its Subaccounts.
* A **Subaccount key** stays inside its own Subaccount.

**Account context can narrow access; it cannot expand it.**

```text
API key
└─ Account context: organization or one subaccount
   └─ Space: shared storage, Vault, and AI configuration
      └─ Runtime: managed browser
         └─ Run: one start-to-stop session record
```

A Space configures the environment available to its Runtimes. A Runtime is the
durable browser resource. Each time it starts, BCTRL creates a Run that records
what happened.

## Choose your integration

* **[SDK](/sdk/quickstart)** — build from application code with a typed
  TypeScript or Python client.
* **[API](/api)** — call the public v1 API directly from any HTTP stack.
* **[CLI](/cli)** — create, inspect, and automate BCTRL resources from a
  terminal or CI job.
* **[MCP](/mcp)** — let a compatible AI client discover and call BCTRL
  operations and schemas.