kernel-typescript-sdk — скилл для Claude Code: автоматизация браузера
Скилл для автоматизации браузера Kernel из TypeScript: сессии, профили, прокси и корректная очистка ресурсов.
npx skills add kernel/skills --skill kernel-typescript-sdk -a claude-codeЧто делает kernel-typescript-sdk
Скилл помогает писать код на TypeScript поверх @onkernel/sdk: создавать браузерные сессии, гонять их через серверный Playwright или подключаться по CDP, сохранять состояние в профилях и ходить через прокси. Пригодится, когда нужно собрать автоматизацию на стороне сервера, а не возиться с локальным браузером.
Внутри два пути. Серверный Playwright через kernel.browsers.playwright.execute() — код выполняется рядом с браузером, локальная установка Playwright не нужна. CDP-подключение берут, когда Playwright должен управлять библиотекой на своей машине или когда отлаживают вручную. Каждый вызов execute получает свежий контекст, поэтому зависимые шаги держат в одном вызове или возвращают состояние наружу.
Главное правило скилла — удалять сессию в finally. Idle timeout тут страховка, а не штатный путь очистки. Для CDP сначала закрывают локальный клиент, потом удаляют сессию в Kernel: browser.close() ресурсы Kernel не освобождает. Профили создают до привязки, а save_changes: true ставят только если изменения должны пережить сессию. Перед работой понадобится ключ KERNEL_API_KEY в окружении, а для CDP — ещё и playwright-core. Профиль не переименовывают, пока браузер ссылается на него по имени: изменения сессии могут не сохраниться.
Для разовых команд kernel ... есть отдельный скилл kernel-cli.
Какие задачи решает
- создать браузерную сессию Kernel из TypeScript и закрыть её без утечек
- прогнать сценарий через серверный Playwright без локальной установки
- подключиться к браузеру по CDP и переиспользовать его контекст
- сохранить логин между запусками через профиль
- проверить прокси перед запуском автоматизации
Примеры запросов агенту
- напиши скрипт на TypeScript: создай сессию Kernel и прогони через серверный Playwright переход на страницу, верни заголовок
- подключись к сессии по
cdp_ws_urlчерезplaywright-coreи закрой клиент перед удалением сессии - создай профиль
example-loginсsave_changes: trueи привяжи его к новой сессии
Как установить kernel-typescript-sdk
1Через Skills CLI (Vercel)
npx skills add kernel/skills --skill kernel-typescript-sdk -a claude-code2Вручную: положить файлы
~/.claude/skills/kernel-typescript-sdk/SKILL.mdПапка скилла целиком; для одного проекта — .claude/skills/kernel-typescript-sdk/
1Через Skills CLI (Vercel)
npx skills add kernel/skills --skill kernel-typescript-sdk -a codex2Вручную: положить файлы
.agents/skills/kernel-typescript-sdk/SKILL.mdДля всех проектов — ~/.agents/skills/
1Через Skills CLI (Vercel)
npx skills add kernel/skills --skill kernel-typescript-sdk -a cursor2Вручную: положить файлы
.cursor/skills/kernel-typescript-sdk/SKILL.mdCursor читает и .agents/skills/, и .claude/skills/
1GitHub CLI
gh skill install kernel/skills kernel-typescript-sdk2Вручную: положить файлы
.github/skills/kernel-typescript-sdk/SKILL.md1Через Skills CLI (Vercel)
npx skills add kernel/skills --skill kernel-typescript-sdk -a gemini-cli2Командой платформы
gemini skills install https://github.com/kernel/skills --path plugins/kernel-sdks/skills/kernel-typescript-sdkВручную: положить файлы
.devin/skills/kernel-typescript-sdk/SKILL.mdСтарый путь .windsurf/skills/ тоже читается
Через Skills CLI (Vercel)
npx skills add kernel/skills --skill kernel-typescript-sdk -a opencodeClaude.ai
Упакуйте папку в zip и загрузите в Settings → Capabilities → Skills
По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов
Из того же набора3
Похожие
Рядом в теме «Браузер и парсинг»
Все скиллы по теме «Браузер и парсинг» →Вопросы о kernel-typescript-sdk
Как установить kernel-typescript-sdk в Claude?
Выполните npx skills add kernel/skills --skill kernel-typescript-sdk -a claude-code. Скилл окажется в ~/.claude/skills/kernel-typescript-sdk/SKILL.md.
Что делает kernel-typescript-sdk?
Помогает писать автоматизацию браузера Kernel на TypeScript: создание сессий, серверный Playwright или CDP, профили, прокси и удаление сессий.
Что нужно для работы скилла?
Пакет @onkernel/sdk и ключ KERNEL_API_KEY в окружении. Для CDP-пути дополнительно ставят playwright-core.
Исходный текст
SKILL.md · MIT
---
name: kernel-typescript-sdk
description: Build Kernel browser automation in TypeScript with server-side Playwright or CDP, including profiles, proxies, and reliable session cleanup.
context: fork
---
# Kernel TypeScript SDK
## When to Use This Skill
Use this skill to create and automate Kernel browser sessions from TypeScript, persist browser state with profiles, route sessions through proxies, or package automation as Kernel actions.
For one-off `kernel ...` commands, use the `kernel-cli` skill instead.
## Install and Initialize
```bash
npm install @onkernel/sdk
# Only CDP-based automation also needs a local Playwright client:
npm install playwright-core
```
```typescript
import { Kernel } from "@onkernel/sdk";
const kernel = new Kernel(); // Reads KERNEL_API_KEY from the environment.
```
Request and response fields use `snake_case` (`timeout_seconds`, `session_id`, `cdp_ws_url`). SDK methods use JavaScript casing (`deleteByID`, `captureScreenshot`).
## Choose an Automation Path
Prefer **server-side Playwright** with `kernel.browsers.playwright.execute()` for most automation. Code runs beside the browser with low latency and does not require a local Playwright installation.
Use a **CDP connection** when a local library must control Playwright directly or when debugging interactively. Connect with `browser.cdp_ws_url` and reuse the browser's existing context.
## Server-Side Playwright Lifecycle
Always delete a created session in `finally`. The idle timeout is a safety net, not the normal cleanup path.
```typescript
import { Kernel } from "@onkernel/sdk";
const kernel = new Kernel();
const session = await kernel.browsers.create({
stealth: true,
timeout_seconds: 300,
});
try {
const response = await kernel.browsers.playwright.execute(session.session_id, {
code: `
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
return { title: await page.title(), url: page.url() };
`,
timeout_sec: 60,
});
if (!response.success) {
throw new Error(response.error ?? response.stderr ?? "Playwright execution failed");
}
console.log(response.result);
} finally {
await kernel.browsers.deleteByID(session.session_id);
}
```
Use `return` inside `code` to populate `response.result`. Each call uses a fresh execution context, so keep dependent steps in one call or return the state needed by the next call.
## CDP Lifecycle
Close the local CDP client, then delete the Kernel session even if connection or automation fails.
```typescript
import { Kernel } from "@onkernel/sdk";
import { chromium } from "playwright-core";
const kernel = new Kernel();
const session = await kernel.browsers.create({ stealth: true, timeout_seconds: 300 });
try {
const browser = await chromium.connectOverCDP(session.cdp_ws_url);
try {
const context = browser.contexts()[0];
if (!context) throw new Error("Kernel browser has no default context");
const page = context.pages()[0] ?? (await context.newPage());
await page.goto("https://example.com", { waitUntil: "domcontentloaded" });
console.log(await page.title());
} finally {
await browser.close();
}
} finally {
await kernel.browsers.deleteByID(session.session_id);
}
```
Do not treat `browser.close()` as Kernel resource cleanup; always call `deleteByID()`.
## Profiles
Create profiles before attaching them. Set `save_changes: true` only when changes from this session should persist when the session ends.
```typescript
const profile = await kernel.profiles.create({ name: "example-login" });
const session = await kernel.browsers.create({
profile: { id: profile.id, save_changes: true },
stealth: true,
});
try {
// Authenticate or automate with playwright.execute or CDP.
} finally {
await kernel.browsers.deleteByID(session.session_id);
}
```
Prefer profile IDs for long-running work. Do not rename a profile while a browser references it by name; that can prevent session changes from saving. Delete a profile only when it was created as temporary test data, and only after deleting its browser sessions:
```typescript
await kernel.profiles.delete(profile.id);
```
## Proxies and Direct Connections
Attach an existing proxy by ID at creation:
```typescript
const session = await kernel.browsers.create({
stealth: true,
proxy_id: process.env.KERNEL_PROXY_ID!,
});
```
Check a configured proxy against a public HTTP(S) target before use when target reachability matters:
```typescript
const checked = await kernel.proxies.check(process.env.KERNEL_PROXY_ID!, {
url: "https://example.com",
});
if (checked.status === "unavailable") throw new Error("Proxy is unavailable");
```
For a running stealth session, clear an explicit proxy and disable Kernel's default stealth proxy to connect directly:
```typescript
await kernel.browsers.update(session.session_id, {
proxy_id: "",
disable_default_proxy: true,
});
```
Set `disable_default_proxy: false` to re-enable the default stealth proxy. `kernel.proxies.update(id, { name })` only renames a proxy; recreate it to change its type or configuration. Delete temporary proxies only after all sessions using them are deleted.
## Binary Data
Do not return screenshots or file bytes from `playwright.execute`. Use the dedicated response endpoints:
```typescript
const screenshot = await kernel.browsers.computer.captureScreenshot(session.session_id);
const screenshotBuffer = Buffer.from(await screenshot.arrayBuffer());
const file = await kernel.browsers.fs.readFile(session.session_id, {
path: "/tmp/output.pdf",
});
const fileBuffer = Buffer.from(await file.arrayBuffer());
```
## Cleanup Rules
1. Wrap every created browser session in `try/finally` immediately after creation.
2. Delete sessions with `kernel.browsers.deleteByID(session_id)` on success and failure.
3. For CDP, close the local client before deleting the session.
4. Delete temporary profiles and proxies only after dependent sessions are gone.
5. Keep credentials and proxy passwords in environment variables; never embed them in source or logs.
## References
- **Kernel Documentation**: https://www.kernel.sh/docs
- **Quickstart Guide**: https://www.kernel.sh/docs/quickstart
- **TypeScript Types**: Use the declarations and hover docs shipped with `@onkernel/sdk`
- **Additional integration examples**: [examples](./examples/examples.md)
© kernel · MIT · kernel/skills