Skip to content
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,8 @@
*/.DS_Store
.DS_Store

node_modules/
node_modules/
venv
__pycache__/**
test.py
./kernel/**
8 changes: 5 additions & 3 deletions browsers/stealth.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
title: "Stealth Mode"
---

Kernel browsers can be configured to `stealth` mode, which adds a high performant residential proxy and auto-CAPTCHA solver to your instances.
Kernel browsers can be configured to `stealth` mode, which adds our recommended proxy configuration 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.

To turn on stealth mode, set its flag in your app code when instantiating Kernel:
To turn on stealth mode, set its flag when instantiating Kernel browsers:

<CodeGroup>
```typescript Typescript/Javascript
Expand All @@ -23,4 +23,6 @@ kernel_browser = client.browsers.create(invocation_id=ctx.invocation_id, stealth
[Anthropic Computer Use](/quickstart#sample-apps-reference) stops when it runs into a CAPTCHA. Use Kernel's auto-captcha solver by adding this to your prompt:

`"If you see a CAPTCHA or similar test, just wait for it to get solved automatically by the browser."`
</Info>
</Info>

If you're looking for proxy-level configuration with Kernel browsers, see [Proxies](/proxies/overview).
20 changes: 18 additions & 2 deletions docs.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,14 +56,30 @@
"pages": [
"browsers/create-a-browser",
"browsers/headless",
"browsers/stealth",
"browsers/standby",
"browsers/persistence",
"browsers/profiles",
"browsers/termination",
"browsers/file-io",
"browsers/live-view",
"browsers/replays"
"browsers/replays",
{
"group": "Bot Anti-Detection",
"pages": [
"browsers/stealth",
{
"group": "Proxies",
"pages": [
"proxies/overview",
"proxies/custom",
"proxies/mobile",
"proxies/residential",
"proxies/isp",
"proxies/datacenter"
]
}
]
}
]
},
{
Expand Down
68 changes: 68 additions & 0 deletions proxies/custom.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
---
title: "Custom Proxies"
---

Custom proxies allow you to use your own proxy servers with Kernel browsers. This is useful when you have existing proxy infrastructure or specific proxy requirements not covered by Kernel's managed options.

## Configuration

<Tip>
Currently, only HTTPS proxies are supported for custom proxy configurations.
</Tip>

Specify the host, port, and optional authentication credentials for your proxy server:

<CodeGroup>

```typescript Typescript/Javascript
import { Kernel } from '@onkernel/sdk';
const kernel = new Kernel();

const proxy = await kernel.proxies.create({
type: 'custom',
name: 'My Private Proxy',
config: {
host: 'proxy.example.com',
port: 443,
username: 'user123',
password: 'secure_password'
}
});

const browser = await kernel.browsers.create({
proxy_id: proxy.id
});
```

```Python Python
import kernel
client = kernel.Kernel()

proxy = client.proxies.create(
type='custom',
name='My Private Proxy',
config={
'host': 'proxy.example.com',
'port': 443,
'username': 'user123',
'password': 'secure_password'
}
)

browser = client.browsers.create(
proxy_id=proxy.id
)
```

</CodeGroup>

## Configuration Parameters

- **`host`** (required) - Proxy server hostname or IP address
- **`port`** (required) - Proxy server port (1-65535)
- **`username`** - Username for proxy authentication
- **`password`** - Password for proxy authentication (minimum 5 characters)

<Info>
When creating a proxy with authentication, provide the password. The API response will only indicate if a password exists (`has_password: true`) but won't return the actual password for security reasons.
</Info>
51 changes: 51 additions & 0 deletions proxies/datacenter.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
title: "Datacenter Proxies"
---

Datacenter proxies use IP addresses assigned from datacenter servers to route your traffic and access locations around the world. With a shorter journey and simplified architecture, datacenter proxies are both the fastest and most cost-effective proxy option.

## Configuration

Datacenter proxies require a country to route traffic through:

<CodeGroup>

```typescript Typescript/Javascript
import { Kernel } from '@onkernel/sdk';
const kernel = new Kernel();

const proxy = await kernel.proxies.create({
type: 'datacenter',
name: 'US Datacenter',
config: {
country: 'US'
}
});

const browser = await kernel.browsers.create({
proxy_id: proxy.id
});
```

```Python Python
import kernel
client = kernel.Kernel()

proxy = client.proxies.create(
type='datacenter',
name='US Datacenter',
config={
'country': 'US'
}
)

browser = client.browsers.create(
proxy_id=proxy.id
)
```

</CodeGroup>

## Configuration Parameters

- **`country`** (required) - ISO 3166 country code (e.g., `US`, `GB`, `FR`) or `EU` for European Union exit nodes
45 changes: 45 additions & 0 deletions proxies/isp.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
title: "ISP Proxies"
---

ISP (Internet Service Provider) proxies combine the speed of datacenter proxies with better legitimacy, as they use IP addresses assigned by real ISPs.

## Configuration

Create an ISP proxy with optional targeting:

<CodeGroup>

```typescript Typescript/Javascript
import { Kernel } from '@onkernel/sdk';
const kernel = new Kernel();

const proxy = await kernel.proxies.create({
type: 'isp',
name: 'My ISP Proxy'
});

const browser = await kernel.browsers.create({
proxy_id: proxy.id
});
```

```Python Python
import kernel
client = kernel.Kernel()

proxy = client.proxies.create(
type='isp',
name='My ISP Proxy'
)

browser = client.browsers.create(
proxy_id=proxy.id
)
```

</CodeGroup>

## Configuration Parameters

- **`country`** (required) - ISO 3166 country code. Not many countries are supported for ISP proxies, try to create a proxy in a country to check if it's available.
86 changes: 86 additions & 0 deletions proxies/mobile.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
---
title: "Mobile Proxies"
---

Mobile proxies use real mobile IPs from devices on cellular networks worldwide. These IPs are distributed by ISPs to mobile devices, where real users opt-in to share their connection.

## Configuration

Mobile proxies support carrier selection and advanced targeting options:

<CodeGroup>

```typescript Typescript/Javascript
import { Kernel } from '@onkernel/sdk';
const kernel = new Kernel();

const proxy = await kernel.proxies.create({
type: 'mobile',
name: 'LA Mobile',
config: {
country: 'US',
city: 'losangeles'
}
});

const browser = await kernel.browsers.create({
proxy_id: proxy.id
});
```

```Python Python
import kernel
client = kernel.Kernel()

proxy = client.proxies.create(
type='mobile',
name='LA Mobile',
config={
'country': 'US',
'city': 'losangeles'
}
)

browser = client.browsers.create(
proxy_id=proxy.id
)
```

</CodeGroup>

## Configuration Parameters

- **`country`** - ISO 3166 country code
- **`carrier`** - Mobile carrier name (see available carriers below)
- **`state`** - Two-letter state code. Only supported for US and Australia. Cannot be used with `city`
- **`city`** - City name (lowercase, no spaces, e.g., `newyork`, `losangeles`). Required if `zip` is provided
- **`zip`** - US ZIP code (5 digits). Requires `city` to be provided
- **`asn`** - Autonomous System Number. Mutually exclusive with geo-location targeting

## Supported Carriers

Major carriers worldwide are supported:

**US Carriers:**
- `att` - AT&T
- `verizon` - Verizon
- `tmobile` - T-Mobile
- `sprint` - Sprint
- `comcast` - Xfinity Mobile
- `cox` - Cox Mobile

**International Carriers:**
- `vodafone` - Vodafone
- `orange` - Orange
- `telefonica` - Telefónica
- `dt` - Deutsche Telekom
- `docomo` - NTT Docomo
- `chinamobile` - China Mobile
- `airtel` - Bharti Airtel
- `telstra` - Telstra

See API reference for complete list of carriers.

## Limitations

Highly specific geotargeting may not have available IP addresses. Try creating a mobile proxy configuration to see if a specific geotargeting combination is available. Use less specific geotargeting where not available, or use residential proxies which are the most flexible option.
Loading