Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion browsers/bot-detection/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,11 @@ Most detection systems look for inconsistencies between how a real user's browse
These systems are heuristic and probabilistic — small mismatches can still trigger blocks. The goal isn't to “beat” detection but rather emulate the real-world conditions of a normal browser session.

## Kernel Features That Help
### Anti-detection defaults
Every Kernel browser launches with anti-detection chrome configuration applied. No setup required.

### [Stealth Mode](/browsers/bot-detection/stealth)
A basic configuration that launches Kernel's browser through a residential proxy and integrates a Google [reCAPTCHA solver](https://www.google.com/recaptcha/api2/demo).
On top of the defaults, stealth mode adds a default residential proxy and an automatic CAPTCHA solver. Both are opt-out so you can BYO proxy and/or CAPTCHA tooling.

### [Configurable Proxies](/proxies/overview)
Bring your own proxy network or use Kernel's managed pool (selectable down to ZIP-code level). If needed, use the same IP to reduce detection and allow for regional testing or QA.
Expand Down
21 changes: 18 additions & 3 deletions browsers/bot-detection/stealth.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,14 @@
title: "Stealth Mode"
---

Kernel browsers can be configured to `stealth` mode, which automatically adds our recommended proxy to your browser instances. It also adds a `reCAPTCHA solver` to the browser, so it automatically solves [reCAPTCHAs](https://www.google.com/recaptcha/api2/demo) on your behalf.
All Kernel browsers ship with anti-detection optimizations by default — you don't need stealth mode for this baseline.

Enabling `stealth` mode adds two managed services on top:

1. **Default residential proxy** — traffic routes through Kernel's residential proxy pool.
2. **Automatic CAPTCHA solver** — solves [reCAPTCHAs](https://www.google.com/recaptcha/api2/demo), Cloudflare challenges, and similar tests automatically.

Both are opt-out so you can [bring your own](#bring-your-own-proxy-or-captcha-solver) where it makes sense.

To turn on stealth mode, set its flag when instantiating Kernel browsers:

Expand All @@ -28,7 +35,15 @@ kernel_browser = kernel.browsers.create(
```
</CodeGroup>

If you're looking for proxy-level configuration with Kernel browsers, see [Proxies](/proxies/overview). To disable the default proxy on a running stealth browser, see [Disable default proxy](/proxies/overview#disable-default-proxy-on-stealth-browsers).
## Bring your own proxy or CAPTCHA solver

Anti-detection is the platform default, so you can freely mix in your own networking or CAPTCHA tooling. Common patterns:

- **BYO proxy, keep CAPTCHA solver** — launch a stealth browser with your own [proxy](/proxies/overview) via `proxy_id`. Replaces the residential default; CAPTCHA solver stays loaded.
- **BYO proxy, no CAPTCHA solver** — launch a non-stealth browser with your own `proxy_id`. Full anti-detection config, no managed proxy or CAPTCHA extension.
- **Disable the default proxy at runtime** — on a running stealth browser, set [`disable_default_proxy`](/proxies/overview#disable-default-proxy-on-stealth-browsers) to route directly while keeping the CAPTCHA solver.

If you're looking for proxy-level configuration with Kernel browsers, see [Proxies](/proxies/overview).

## CAPTCHA Handling Behavior

Expand All @@ -46,4 +61,4 @@ When encountering a Cloudflare challenge, our auto-CAPTCHA solver will attempt t

<Info>
After the "Ready" message appears, don't click the Cloudflare CAPTCHA checkbox — this can interfere with the solver.
</Info>
</Info>
11 changes: 11 additions & 0 deletions changelog.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,17 @@ import { YouTubeVideo } from '/snippets/youtube-video.mdx';
For API library updates, see the [Node SDK](https://github.com/onkernel/kernel-node-sdk/blob/main/CHANGELOG.md), [Python SDK](https://github.com/onkernel/kernel-python-sdk/blob/next/CHANGELOG.md), and [Go SDK](https://github.com/onkernel/kernel-go-sdk/blob/main/CHANGELOG.md) changelogs.
</Note>

<Update label="April 19" tags={["Product", "Docs"]}>
## Product updates

- Anti-detection chrome configuration is now applied to **every** Kernel browser by default — previously only stealth browsers. Stealth mode now exclusively manages the default residential proxy and CAPTCHA solver, both of which remain [opt-out](/browsers/bot-detection/stealth#bring-your-own-proxy-or-captcha-solver).

## Documentation updates

- Rewrote the [Stealth Mode](/browsers/bot-detection/stealth) page to clarify anti-detection defaults and document BYO proxy / CAPTCHA patterns.
- Added a [Bring your own proxy](/proxies/overview#bring-your-own-proxy) section to the proxies overview.
</Update>

<Update label="April 17" tags={["Product", "Docs"]}>
## Product updates

Expand Down
20 changes: 20 additions & 0 deletions proxies/overview.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -251,6 +251,26 @@ The update is synchronous — when the call returns, the proxy swap is fully app
If you swap the proxy on a browser acquired from a pool, the browser will be reset back to the pool's default proxy configuration when it is released. Releasing the browser will be delayed by the swap duration (~2-3 seconds) while the proxy is restored to the pool default.
</Info>

### Bring your own proxy

Attach a custom `proxy_id` to any browser — stealth or non-stealth — and Kernel's anti-detection config still applies. For full anti-detection without the managed proxy or CAPTCHA solver, launch a non-stealth browser with your own `proxy_id`:

<CodeGroup>
```typescript Typescript/Javascript
const browser = await kernel.browsers.create({
stealth: false,
proxy_id: myProxy.id,
});
```

```python Python
browser = kernel.browsers.create(
stealth=False,
proxy_id=my_proxy.id,
)
```
</CodeGroup>

### Disable default proxy on stealth browsers

[Stealth browsers](/browsers/bot-detection/stealth) are automatically assigned a proxy. To disable this on a running stealth browser and route traffic directly, set `disable_default_proxy` to `true`:
Expand Down
Loading