> ## Documentation Index
> Fetch the complete documentation index at: https://outcrawl.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Browsers

> Run Scout on Outcrawl's cloud, on a local Chromium it launches, or on any browser you already run over CDP.

export const OutcrawlStyles = () => {
  if (typeof document !== 'undefined' && !document.getElementById('outcrawl-overrides')) {
    const s = document.createElement('style');
    s.id = 'outcrawl-overrides';
    s.textContent = `
      /* Match the product's radius grid (4 / 6 / 8 / 9999), not Mintlify's default. */
      .rounded-sm { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-md { border-radius: 0.375rem !important; } /* 6px, --r-ctl */
      .rounded-lg { border-radius: 0.5rem !important; }   /* 8px, --r-panel */
      .rounded-l-sm { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-sm { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-md { border-top-left-radius: 0.375rem !important; border-bottom-left-radius: 0.375rem !important; }
      .rounded-r-md { border-top-right-radius: 0.375rem !important; border-bottom-right-radius: 0.375rem !important; }
      .rounded-l-lg { border-top-left-radius: 0.5rem !important; border-bottom-left-radius: 0.5rem !important; }
      .rounded-r-lg { border-top-right-radius: 0.5rem !important; border-bottom-right-radius: 0.5rem !important; }

      /* Cards: never pure white in light mode, matching the one-big-card surface tone. */
      .card { background-color: #fcfcfc !important; border-radius: 0.5rem !important; }
      html.dark .card { background-color: #141311 !important; }

      /* Docs hero box */
      .oc-hero { background-color: #fcfcfc; border: 1px solid #e5e2dc; }
      html.dark .oc-hero { background-color: #141311; border-color: #26241f; }
      html.dark .oc-hero h1 { color: #edeae4; }

      /* Thin, transparent-track, hide-until-hover scrollbar. */
      ::-webkit-scrollbar { width: 6px; height: 6px; background-color: transparent; }
      ::-webkit-scrollbar-track { background-color: transparent; }
      ::-webkit-scrollbar-thumb { background-color: rgba(155, 155, 155, 0.5); border-radius: 10px; transition: opacity 0.3s ease; opacity: 0; }
      ::-webkit-scrollbar-thumb:hover { background-color: rgba(155, 155, 155, 0.7); }
      *:hover::-webkit-scrollbar-thumb,
      *:focus::-webkit-scrollbar-thumb,
      *:active::-webkit-scrollbar-thumb { opacity: 1; }
      * { scrollbar-width: thin; scrollbar-color: rgba(155, 155, 155, 0.5) transparent; }
    `;
    document.head.appendChild(s);
  }
  return null;
};

<OutcrawlStyles />

Scout drives any Chrome or Chromium, so moving between browsers is one line. Your models and your task stay the same. Pass exactly one of the three.

```ts theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
// Outcrawl's cloud browser (recommended). Reads OUTCRAWL_API_KEY.
browser: 'outcrawl'

// A local Chromium, launched and closed by Scout.
browser: { launch: {} }

// Any browser you already run, over CDP.
browser: { cdpUrl: 'http://127.0.0.1:9222' }
```

Whichever you pick, Scout opens a fresh tab of its own for the run. When the run ends it closes that tab and its connection, and closes the browser only when Scout launched it or allocated it. A browser you passed in stays running.

## Outcrawl's cloud

**The best way to run Scout.** Many sites stop a browser that runs from a data center or behaves like a script; on the cloud, Scout gets a browser built to get through, with nothing to install. See [Outcrawl's cloud](/docs/scout/cloud) for what it adds and how a session is billed.

`browser: 'outcrawl'` uses the defaults. To set anything, pass `browser: { outcrawl: { ... } }`:

```ts theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
browser: {
  outcrawl: { apiKey, proxy: 'http://user:pass@host:port', record: false },
}
```

| Option | Default | What it does |
| - | - | - |
| `apiKey` | `OUTCRAWL_API_KEY` from the environment | Your Outcrawl API key. Without one, the run throws `ScoutConfigError` before it opens anything. |
| `proxy` | an Outcrawl exit | Your own proxy URL for the session's traffic, instead of an Outcrawl exit. |
| `record` | `true` | Records the session for replay. `false` records nothing, and the result carries `recordingDeclined: true` instead of a `replayUrl`. |
| `baseUrl` | `https://api.outcrawl.ai` | The API's base URL. |

On the cloud the browser plans every pointer move, scroll and keystroke itself, so Scout sends it plain actions.

## A local Chromium

`browser: { launch: {} }`, or an empty `browser: {}`, starts a local browser for the run and closes it afterwards.
Scout uses `playwright-core` if it is installed, with the Chromium that Playwright downloads.
Otherwise it uses `puppeteer-core`
with the Chrome you have installed. Both are optional peer dependencies; install one.

```bash theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
npm i playwright-core && npx playwright install chromium
# or, to drive your installed Chrome
npm i puppeteer-core
```

| Option | Default | What it does |
| - | - | - |
| `headless` | `true` | Run without a window. `false` lets you watch it work. |
| `executablePath` | the Chromium Playwright downloads, or your installed browser | Path to the browser binary to run. |
| `args` | none | Extra command-line switches for the browser. Without a `--window-size` switch, Scout adds `--window-size=1280,800`. |
| `driver` | `playwright-core` if installed, then `puppeteer-core` | Which installed library launches it: `'playwright'` or `'puppeteer'`. |

```ts theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
browser: {
  launch: {
    headless: false,
    executablePath: '/path/to/browser',
    args: ['--lang=en-GB'],
    driver: 'puppeteer',
  },
}
```

If neither library is installed, or the one `driver` names is missing, the run throws `ScoutBrowserError` with the install command.

## A browser you already run

`browser: { cdpUrl }` connects to any browser that exposes the DevTools protocol. Pass a `ws://` or `wss://` WebSocket URL, or an `http://` or `https://` address such as `http://127.0.0.1:9222`, from which Scout reads the WebSocket URL at `/json/version`. Scout opens its own tab, closes it after the run, and leaves your browser running.

```ts theme={"theme":{"light":"github-light","dark":"catppuccin-mocha"}}
browser: { cdpUrl: 'http://127.0.0.1:9222' } // or the ws:// webSocketDebuggerUrl
```

## Input

On a local or CDP browser, Scout plans pointer and keyboard input with its bundled input planner, `agenthands`. On the cloud it sends plain actions, because the browser plans input itself. To plan input your own way, pass a `HandsPort` as `hands` in the `Scout` options; it replaces the default on every browser.

<CardGroup cols={2}>
  <Card title="Outcrawl's cloud" icon="cloud" href="/docs/scout/cloud">
    Residential connections, captcha solving and replays.
  </Card>

  <Card title="Models" icon="brain" href="/docs/scout/models">
    Name a model for each job.
  </Card>
</CardGroup>


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.