Skills functions
Deploy serverless browser automation as cloud functions using Browserbase. Use when the user wants to deploy browser automation to run on a schedule or cron, create a webhook endpoint for browser tasks, run automation in the cloud instead of locally, or asks about Browserbase Functions.
install
source · Clone the upstream repo
git clone https://github.com/browserbase/skills
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/browserbase/skills "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/functions" ~/.claude/skills/browserbase-skills-functions && rm -rf "$T"
manifest:
skills/functions/SKILL.mdsource content
Browserbase Functions
Deploy serverless browser automation using the official
bb CLI.
Prerequisites
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"
Creating a Function Project
1. Initialize
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
2. Add Credentials to .env
echo "BROWSERBASE_API_KEY=$BROWSERBASE_API_KEY" >> .env echo "BROWSERBASE_PROJECT_ID=$BROWSERBASE_PROJECT_ID" >> .env
3. Install Dependencies
pnpm install
Function Structure
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:
- CDP endpoint to connect Playwrightcontext.session.connectUrl
- Input parameters from invocationcontext.params
Development Workflow
1. Start Dev Server
pnpm bb dev index.ts
Server runs at
http://127.0.0.1:14113
2. Test Locally
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"}}'
3. Iterate
The dev server auto-reloads on file changes. Use
console.log() for debugging - output appears in the terminal.
Deploying
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.
Quick Reference
| Command | Description |
|---|---|
| Create new project |
| Start local dev server |
| Deploy to Browserbase |
For invocation examples, common patterns, and troubleshooting, see REFERENCE.md.