Loading...
Loading...
Browser automation CLI for AI agents - create, test, and deploy web automations
npx skill4agent add browserbase/skills-old browsebrowsenpm install -g @browserbasehq/browse-cli @browserbasehq/sdk-functionsexport BROWSERBASE_API_KEY="your_api_key"
export BROWSERBASE_PROJECT_ID="your_project_id"browse open https://example.combrowse snapshotbrowse screenshot exploration.png[@0-5] button: "Submit"
[@0-6] textbox: "Email"
[@0-7] textbox: "Password"browse fill @0-6 "test@example.com"
browse fill @0-7 "password123"
browse click @0-5
browse wait load networkidle
browse snapshotbrowse network on
# perform actions
browse network path
# inspect captured requests in the directorypnpm dlx @browserbasehq/sdk-functions init my-automation
cd my-automationpackage.json.envtsconfig.jsonindex.tsindex.tsimport { defineFn } from "@browserbasehq/sdk-functions";
import { chromium } from "playwright-core";
defineFn("my-automation", async (context) => {
const { session } = context;
const browser = await chromium.connectOverCDP(session.connectUrl);
const page = browser.contexts()[0]!.pages()[0]!;
// Your automation steps here
await page.goto("https://example.com");
await page.fill('input[name="email"]', context.params.email);
await page.click('button[type="submit"]');
// Extract and return data
const result = await page.textContent('.result');
return { success: true, result };
});pnpm bb dev index.tscurl -X POST http://127.0.0.1:14113/v1/functions/my-automation/invoke \
-H "Content-Type: application/json" \
-d '{"params": {"email": "test@example.com"}}'pnpm bb publish index.tscurl -X POST https://api.browserbase.com/v1/functions/<function-id>/invoke \
-H "Content-Type: application/json" \
-H "x-bb-api-key: $BROWSERBASE_API_KEY" \
-d '{"params": {"email": "test@example.com"}}'data-testidtext=SubmitwaitForSelectorpage.evaluate()defineFn("price-monitor", async (context) => {
const { session, params } = context;
const browser = await chromium.connectOverCDP(session.connectUrl);
const page = browser.contexts()[0]!.pages()[0]!;
await page.goto(params.productUrl);
await page.waitForSelector('.price');
const price = await page.evaluate(() => {
const el = document.querySelector('.price');
return el?.textContent?.replace(/[^0-9.]/g, '');
});
return {
url: params.productUrl,
price: parseFloat(price || '0'),
timestamp: new Date().toISOString(),
};
});