From browserbase-cli
Deploys Playwright browser automation as serverless cloud functions using Browserbase CLI. For scheduled/cron jobs, webhooks, or cloud execution.
npx claudepluginhub browserbase/skills --plugin browserbase-cliThis skill uses the workspace's default tool permissions.
Deploy serverless browser automation using the official `bb` CLI.
Executes Browserbase CLI (`bb`) commands for functions dev/deploy/invoke, managing sessions/projects/contexts/extensions, Fetch/Search APIs, and scaffolding templates. Activates on `bb` requests.
Automates browser tasks with Playwright: tests pages, fills forms, screenshots, responsive design, UX validation, login flows, link checks. Auto-detects dev servers, runs visible browser.
Builds browser automation workflows in Cloudflare Workers using Puppeteer/Playwright for screenshots, PDFs, web scraping, session management, and error handling.
Share bugs, ideas, or general feedback.
Deploy serverless browser automation using the official bb CLI.
Get API key and Project ID from: https://browserbase.com/settings
export BROWSERBASE_API_KEY="your_api_key"
export BROWSERBASE_PROJECT_ID="your_project_id"
pnpm dlx @browserbasehq/sdk-functions init my-function
cd my-function
This creates:
my-function/
├── package.json
├── index.ts # Your function code
└── .env # Add credentials here
echo "BROWSERBASE_API_KEY=$BROWSERBASE_API_KEY" >> .env
echo "BROWSERBASE_PROJECT_ID=$BROWSERBASE_PROJECT_ID" >> .env
pnpm install
import { defineFn } from "@browserbasehq/sdk-functions";
import { chromium } from "playwright-core";
defineFn("my-function", async (context) => {
const { session, params } = context;
// Connect to browser
const browser = await chromium.connectOverCDP(session.connectUrl);
const page = browser.contexts()[0]!.pages()[0]!;
// Your automation
await page.goto(params.url || "https://example.com");
const title = await page.title();
// Return JSON-serializable result
return { success: true, title };
});
Key objects:
context.session.connectUrl - CDP endpoint to connect Playwrightcontext.params - Input parameters from invocationpnpm bb dev index.ts
Server runs at http://127.0.0.1:14113
curl -X POST http://127.0.0.1:14113/v1/functions/my-function/invoke \
-H "Content-Type: application/json" \
-d '{"params": {"url": "https://news.ycombinator.com"}}'
The dev server auto-reloads on file changes. Use console.log() for debugging - output appears in the terminal.
pnpm bb publish index.ts
Output:
Function published successfully
Build ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Function ID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
Save the Function ID - you need it to invoke.
| Command | Description |
|---|---|
pnpm dlx @browserbasehq/sdk-functions init <name> | Create new project |
pnpm bb dev <file> | Start local dev server |
pnpm bb publish <file> | Deploy to Browserbase |
For invocation examples, common patterns, and troubleshooting, see REFERENCE.md.