# Control plane

Part of the Oya Browser docs. All of it: https://oyabrowser.com/docs.md

## Control Plane Architecture

Raw browser runners like **Browserbase**, **Steel**, **Anchor**, and **Browser Use** are execution targets: they spin up headless Chromium instances inside isolated containers or VMs.

**Oya is the Control Plane.** It sits above the execution targets and manages the state, identity, authentication, challenge resolution, and orchestration that production agent fleets require:

- **Universal Router:** Exposes unified CDP (`/connect`), MCP, and REST interfaces. Route requests across providers with priority order and automatic failover.
- **Deterministic Personas:** Mathematically seeded device profiles. Canvas, WebGL, audio, and client rects stay byte-identical across restarts, bound to a dedicated cookie jar and proxy.
- **Sign-In-Once Desktop Pairing:** Transfer authenticated sessions from real desktop Chrome (with WebAuthn, passkeys, and Google SSO) to remote personas via single-use encrypted codes.
- **Two-Tier Challenges:** Automatic native delegation to CAPTCHA solvers, automated TOTP and SMS/email relays, and sub-second interactive live stream handoffs for human intervention.
- **Fleet Governance:** High-density console for 1,000+ browsers, real-time command activity logs, Prometheus metrics (`/metrics`), and hourly spend attribution per tenant key.

By decoupling the *control plane* from the *execution engine*, your agent codebase never has to know or care which cloud provider or bare-metal machine runs a session.

## Why Oya: The 10x Advantage

Directly coding agents to single-vendor browser runners creates brittle architectures. Here is why an orchestrating control plane is 10x better than relying on raw point solutions:

| Dimension | Raw Runners (Browserbase, Steel, Anchor, Browser Use) | Oya Control Plane |
| --- | --- | --- |
| Architecture | Single-vendor lock-in. Outages or regional IP blocks halt all agents. | Unified control plane. Dynamic routing across multiple providers with automatic failover. |
| Device Identity | Ephemeral dumb sessions or random fingerprints that trigger bot-farm heuristics. | Deterministic Personas. Cryptographically seeded hardware fingerprints byte-identical across restarts. |
| Authentication | Fragile scripted headless logins that fail on Google SSO, passkeys, and Cloudflare. | Sign-In-Once Desktop Pairing. Log in once on desktop; cookies sync securely to cloud personas. |
| Challenges & 2FA | Fails or hangs on push approvals or unexpected verification prompts. | Two-Tier Engine + Live Takeover. Automated TOTP/SMS relay + sub-second interactive takeover. |
| Observability | Opaque session IDs, black-box execution, post-mortem static videos. | 1,000+ browser console, real-time activity log, Prometheus metrics, hourly spend attribution. |
| Protocol Freedom | Proprietary SDKs and bespoke API wrappers. | Universal Gateway: Native CDP (/connect), MCP streamable HTTP, TS SDK, and CLI. |
| Stealth Testing | Unverifiable marketing claims of "undetectable" scrapers. | Open benchmark suite (oya stealth-test --live) scored against CreepJS and Bot.Sannysoft. |

## Multi-Provider Routing & Failover

Configure providers in the dashboard under **Control → Providers** or via the API. Each provider has a unique route name, vendor type, priority (0 goes first), and session capacity.

```
// Point any CDP client at the Oya Control Plane gateway:
const browser = await chromium.connectOverCDP(
  "wss://oyabrowser.com/connect?token=YOUR_OYA_KEY"
);

// Oya selects the highest-priority available provider.
// If Steel errors or hits rate limits, Oya instantly fails over to Browserbase or Oya Cloud.
```

When a connection attempt to an upstream vendor fails, the control plane immediately catches the error, puts the failing route into a cooldown period, and dispatches the connection to the next healthy provider in priority order. Your client application never observes a disconnect.

## Stealth & Live Benchmarks

Rather than making unsubstantiated marketing claims about detection resistance, Oya includes an open testing suite that benchmarks browser evasion against real detectors:

```
oya stealth-test            # Score local probe suite
oya stealth-test --live     # Benchmark live against Bot.Sannysoft and CreepJS
```

The suite tests canvas noise, WebGL renderer and vendor strings, AudioContext noise, client rects, plugins, `navigator.webdriver`, `userAgentData`, media devices, and `Function.prototype.toString` masking.

Oya deliberately does **not** double-layer custom stealth over providers that already ship tuned anti-bot stealth (Anchor, Browserbase, Steel, Browser Use). Double-masking causes internal contradictions that anti-bot heuristics detect. On those providers, Oya manages the persona identity, cookie jar, residential proxy, and concurrency limits.
