首页龙虾技能列表 › Functions

Functions

v1.0.0

Guide Claude through deploying serverless browser automation using the official bb CLI

0· 1,442·1 当前·1 累计
by @peytoncasper·MIT-0
下载技能包
License
MIT-0
最后更新
2026/4/14
安全扫描
VirusTotal
可疑
查看报告
OpenClaw
可疑
medium confidence
The SKILL.md describes legitimate Browserbase/`bb` CLI workflow and correctly requires a Browserbase API key and project ID, but the registry metadata claims no required environment variables and the skill has no known source/homepage — this mismatch and lack of provenance is concerning.
评估建议
This skill's instructions look legitimate for deploying Browserbase functions, but exercise caution before using it: 1) Verify the skill's provenance — find an official homepage or repo and confirm @browserbasehq/sdk-functions and the `bb` CLI are the real packages. 2) Do not paste API keys or passwords into public chat; prefer a secrets manager or CI environment variables instead of committing a .env file. 3) Avoid passing real user credentials in function params unless you control the storage ...
详细分析 ▾
用途与能力
The skill's stated purpose (deploy serverless browser automation with the official bb CLI) matches the instructions, but the registry metadata lists no required environment variables or credentials while the SKILL.md clearly requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID. The skill's source and homepage are unknown, which reduces provenance for a tool that requests an API key.
指令范围
The SKILL.md stays within the claimed scope: it walks through initializing a function project, adding a .env with Browserbase credentials, running pnpm/`bb` dev and publish, and invoking functions. It also shows patterns for authenticated automation (filling login forms) which is consistent with browser automation but elevates risk because user account credentials may be passed into functions/params.
安装机制
This is an instruction-only skill with no install spec or code files, so nothing will be written or executed by the skill itself. That lowers installer risk — the user runs the commands. The SKILL.md recommends using pnpm dlx and pnpm install which pull packages from npm; that's expected for this workflow but you should verify the packages are official.
凭证需求
The SKILL.md requires BROWSERBASE_API_KEY and BROWSERBASE_PROJECT_ID (and the example uses them in curl and process.env). Those credentials are proportionate to the task, but the registry metadata omits them — an inconsistency. The skill also encourages storing credentials in a .env file and passing sensitive site login credentials through function params, which can lead to accidental exposure if not handled securely.
持久化与权限
The skill does not request persistent presence (always:false), does not modify other skills' configs, and declares no config paths. It does not request elevated system privileges.
安全有层次,运行前请审查代码。

License

MIT-0

可自由使用、修改和再分发,无需署名。

运行时依赖

无特殊依赖

版本

latestv1.0.02026/2/6

Initial release of the "functions" skill for Browserbase: - Provides a comprehensive guide for deploying serverless browser automation using the official bb CLI. - Includes getting started instructions, credential setup, project initialization, and .env configuration. - Details development workflow, including local dev server, testing, auto-reloading, and debugging. - Explains deployment, invocation (via curl and code), and polling for results. - Offers recipes for common patterns: parameterized scraping, authentication workflows, and error handling. - Features CLI reference and troubleshooting tips for typical setup and runtime issues.

● 可疑

安装命令 点击复制

官方npx clawhub@latest install functions
镜像加速npx clawhub@latest install functions --registry https://cn.clawhub-mirror.com

技能文档

Guide Claude through deploying serverless browser automation using the official bb CLI.

When to Use

Use this skill when:

  • User wants to deploy automation to run on a schedule
  • User needs a webhook endpoint for browser automation
  • User wants to run automation in the cloud (not locally)
  • User asks about Browserbase Functions

Prerequisites

1. Get Credentials

Get API key and Project ID from: https://browserbase.com/settings

2. Set Environment Variables

Set directly:

export BROWSERBASE_API_KEY="your_api_key"
export BROWSERBASE_PROJECT_ID="your_project_id"

Creating a Function Project

1. Initialize with Official CLI

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

# Copy from stored credentials
echo "BROWSERBASE_API_KEY=$BROWSERBASE_API_KEY" >> .env
echo "BROWSERBASE_PROJECT_ID=$BROWSERBASE_PROJECT_ID" >> .env

Or manually edit .env:

BROWSERBASE_API_KEY=your_api_key
BROWSERBASE_PROJECT_ID=your_project_id

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:

  • context.session.connectUrl - CDP endpoint to connect Playwright
  • context.params - Input parameters from invocation

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

Publish to Browserbase

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.

Invoking Deployed Functions

Via curl

# Start invocation
curl -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": {"url": "https://example.com"}}'

# Response: {"id": "INVOCATION_ID"}

# Poll for result curl "https://api.browserbase.com/v1/functions/invocations/INVOCATION_ID" \ -H "x-bb-api-key: $BROWSERBASE_API_KEY"

Via Code

async function invokeFunction(functionId: string, params: object) {
  // Start invocation
  const invokeRes = await fetch(
    https://api.browserbase.com/v1/functions/${functionId}/invoke,
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'x-bb-api-key': process.env.BROWSERBASE_API_KEY!,
      },
      body: JSON.stringify({ params }),
    }
  );
  const { id: invocationId } = await invokeRes.json();

// Poll until complete while (true) { await new Promise(r => setTimeout(r, 5000)); const statusRes = await fetch( https://api.browserbase.com/v1/functions/invocations/${invocationId}, { headers: { 'x-bb-api-key': process.env.BROWSERBASE_API_KEY! } } ); const result = await statusRes.json(); if (result.status === 'COMPLETED') return result.results; if (result.status === 'FAILED') throw new Error(result.error); } }

Common Patterns

Parameterized Scraping

defineFn("scrape", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  await page.goto(params.url);
  await page.waitForSelector(params.selector);
  
  const items = await page.$$eval(params.selector, els => 
    els.map(el => el.textContent?.trim())
  );
  
  return { url: params.url, items };
});

With Authentication

defineFn("authenticated-action", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  // Login
  await page.goto("https://example.com/login");
  await page.fill('[name="email"]', params.email);
  await page.fill('[name="password"]', params.password);
  await page.click('button[type="submit"]');
  await page.waitForURL('**/dashboard');
  
  // Do authenticated work
  const data = await page.textContent('.user-data');
  return { data };
});

Error Handling

defineFn("safe-scrape", async ({ session, params }) => {
  const browser = await chromium.connectOverCDP(session.connectUrl);
  const page = browser.contexts()[0]!.pages()[0]!;
  
  try {
    await page.goto(params.url, { timeout: 30000 });
    await page.waitForSelector(params.selector, { timeout: 10000 });
    
    const data = await page.textContent(params.selector);
    return { success: true, data };
  } catch (error) {
    return { 
      success: false, 
      error: error instanceof Error ? error.message : 'Unknown error' 
    };
  }
});

CLI Reference

CommandDescription
pnpm dlx @browserbasehq/sdk-functions init Create new project
pnpm bb dev Start local dev server
pnpm bb publish Deploy to Browserbase

Troubleshooting

"Missing API key"

# Check .env file has credentials
cat .env

# Or set for current shell export BROWSERBASE_API_KEY="your_key" export BROWSERBASE_PROJECT_ID="your_project"

Dev server won't start

# Make sure SDK is installed
pnpm add @browserbasehq/sdk-functions

# Or use npx npx @browserbasehq/sdk-functions dev index.ts

Function times out

  • Max execution time is 15 minutes
  • Add specific timeouts to page operations
  • Use waitForSelector instead of sleep

Can't connect to browser

  • Check session.connectUrl is being used correctly
  • Ensure you're using chromium.connectOverCDP() not chromium.launch()
数据来源:ClawHub ↗ · 中文优化:龙虾技能库
OpenClaw 技能定制 / 插件定制 / 私有工作流定制

免费技能或插件可能存在安全风险,如需更匹配、更安全的方案,建议联系付费定制

了解定制服务