When to Use This Skill
Use the Kernel TypeScript SDK when you need to:
- Build browser automation scripts - Create TypeScript programs that control remote browsers
- Execute server-side automation - Run Playwright code directly in the browser VM without local dependencies
- Manage browser sessions programmatically - Create, configure, and control browsers from code
- Build scalable scraping/testing tools - Use browser pools and profiles for high-volume automation
- Deploy automation as actions - Package scripts as Kernel actions for invocation via API
When NOT to use:
- For CLI commands (e.g.,
kernel browsers create), use the kernel-cli skill instead
- For quick one-off tasks, the CLI may be simpler than writing code
Core Concepts
SDK Architecture
The SDK is organized into resource-based modules:
kernel.browsers - Browser session management (create, list, delete)
kernel.browsers.playwright - Server-side Playwright execution
kernel.browsers.computer - OS-level controls (mouse, keyboard, screenshots)
kernel.browserPools - Pre-warmed browser pool management
kernel.profiles - Persistent browser profiles (auth state)
kernel.auth.connections - Managed auth (create, login, submit, follow, retrieve, delete)
kernel.credentialProviders - External credential providers (1Password)
kernel.proxies - Proxy configuration
kernel.extensions - Chrome extension management
kernel.deployments - App deployment
kernel.invocations - Action invocation
Two Automation Approaches
1. Server-side Execution (RECOMMENDED)
- Execute Playwright code directly in browser VM using
kernel.browsers.playwright.execute()
- Response accessed via
response.result - MUST use return in code to get data back
- Best for: Most use cases, production automation, parallel execution, actions
2. CDP Connection (Client-side)
- Connect Playwright/Puppeteer to browser via CDP WebSocket URL (
browser.cdp_ws_url)
- Code runs locally, browser runs remotely; requires local Playwright installation
- Best for: Complex debugging, specific local development needs
Patterns Reference
SDK Initialization
import { Kernel } from "@onkernel/sdk";
const kernel = new Kernel(); // Reads KERNEL_API_KEY from environment
Attribute Access: Use snake_case (e.g., browser.session_id, browser.cdp_ws_url)
Binary Data Handling
Binary data does not serialize through playwright.execute (returns undefined). Use dedicated APIs:
// For screenshots:
const response = await kernel.browsers.computer.captureScreenshot(browser.session_id);
// For files:
const response = await kernel.browsers.filesystem.readFile(browser.session_id, { path: '/path/to/file' });
// Convert to buffer:
const blob = await response.blob();
const buffer = Buffer.from(await blob.arrayBuffer());
Note: This differs from the Python SDK where binary data CAN be returned via playwright.execute as a Buffer object. In TypeScript, always use dedicated APIs.
References
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: kernel-typescript-sdk3description: Build browser automation scripts using the Kernel TypeScript SDK with Playwright, CDP, and remote browser management. Use when this capability is needed.4---56## When to Use This Skill78Use the Kernel TypeScript SDK when you need to:910- **Build browser automation scripts** - Create TypeScript programs that control remote browsers11- **Execute server-side automation** - Run Playwright code directly in the browser VM without local dependencies12- **Manage browser sessions programmatically** - Create, configure, and control browsers from code13- **Build scalable scraping/testing tools** - Use browser pools and profiles for high-volume automation14- **Deploy automation as actions** - Package scripts as Kernel actions for invocation via API1516**When NOT to use:**17- For CLI commands (e.g., `kernel browsers create`), use the `kernel-cli` skill instead18- For quick one-off tasks, the CLI may be simpler than writing code1920## Core Concepts2122### SDK Architecture2324The SDK is organized into resource-based modules:2526- `kernel.browsers` - Browser session management (create, list, delete)27- `kernel.browsers.playwright` - Server-side Playwright execution28- `kernel.browsers.computer` - OS-level controls (mouse, keyboard, screenshots)29- `kernel.browserPools` - Pre-warmed browser pool management30- `kernel.profiles` - Persistent browser profiles (auth state)31- `kernel.auth.connections` - Managed auth (create, login, submit, follow, retrieve, delete)32- `kernel.credentialProviders` - External credential providers (1Password)33- `kernel.proxies` - Proxy configuration34- `kernel.extensions` - Chrome extension management35- `kernel.deployments` - App deployment36- `kernel.invocations` - Action invocation3738### Two Automation Approaches3940**1. Server-side Execution (RECOMMENDED)**41- Execute Playwright code directly in browser VM using `kernel.browsers.playwright.execute()`42- Response accessed via `response.result` - **MUST use `return` in code to get data back**43- Best for: Most use cases, production automation, parallel execution, actions4445**2. CDP Connection (Client-side)**46- Connect Playwright/Puppeteer to browser via CDP WebSocket URL (`browser.cdp_ws_url`)47- Code runs locally, browser runs remotely; requires local Playwright installation48- Best for: Complex debugging, specific local development needs4950## Patterns Reference5152**SDK Initialization**53```typescript54import { Kernel } from "@onkernel/sdk";55const kernel = new Kernel(); // Reads KERNEL_API_KEY from environment56```5758**Attribute Access**: Use `snake_case` (e.g., `browser.session_id`, `browser.cdp_ws_url`)5960**Binary Data Handling**6162Binary data does not serialize through `playwright.execute` (returns `undefined`). Use dedicated APIs:6364```typescript65// For screenshots:66const response = await kernel.browsers.computer.captureScreenshot(browser.session_id);67// For files:68const response = await kernel.browsers.filesystem.readFile(browser.session_id, { path: '/path/to/file' });6970// Convert to buffer:71const blob = await response.blob();72const buffer = Buffer.from(await blob.arrayBuffer());73```7475> **Note:** This differs from the Python SDK where binary data CAN be returned via `playwright.execute` as a Buffer object. In TypeScript, always use dedicated APIs.7677## References7879- **Kernel Documentation**: https://www.kernel.sh/docs80- **Quickstart Guide**: https://www.kernel.sh/docs/quickstart81- **Templates**: https://www.kernel.sh/docs/reference/cli/create#available-templates82- **TypeScript Types**: Available in `@onkernel/sdk` package83- **Examples**: [examples](./examples/examples.md)8485---86> Converted and distributed by [TomeVault](https://tomevault.io/claim/kernel) — claim your Tome and manage your conversions.87<!-- tomevault:4.0:skill_md:2026-04-11 -->