Atlas / Skills / browserbase / Browserbase Skills

Browserbase SkillsBLOCK

skills/browserbase/browserbase-cli

Browserbase's official collection of agent skills to access the web.

Verdict
BLOCK
Grade
D
Trust score
63 /100
Version
0.4.0
Hosts
5 documented
License
—
Stars
3,742
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

A set of skills for enabling [Claude Code](https://docs.claude.com/en/docs/claude-code/overview) to work with Browserbase through browser automation and the official browse CLI.

Skills

This plugin includes the following skills (see skills/ for details):

Read from source at commit 45d21dc75974OBSERVED · 2026-10-26
Advertisement
02

Install

Commands as the repository documents them. They are shown, not run.

npx skills add browserbase/skills
git clone <this-repo>
npm install
npm install @browserbasehq/stagehand zod
npm install -D tsx dotenv
npm install @browserbasehq/sdk
03

Host compatibility

What the documentation claims. We have not run a compatibility test.

HostStatusNotes
claude-codementioned
claude-desktopmentioned
cursormentioned
openclawmentioned
windsurfmentioned
04

What it tells the agent

The instruction file, verbatim from the audited commit — this is the text the model reads, and the surface the audit's instruction layer examines. Quoted here so you can judge it without cloning anything.

---
name: add-webmcp
description: Analyze an existing web application, identify safe user-visible capabilities across routes, forms, server actions, handlers, and schemas, then implement first-party WebMCP tools and validate discovery and invocation with Stagehand. Use when the user asks to make a codebase agent-ready, expose website features as WebMCP tools, or add WebMCP directly to an app rather than generating a standalone injection script from a URL.
compatibility: "Requires Node.js 22.18 or newer. Validation needs Chrome/Chromium locally or BROWSERBASE_API_KEY for a publicly reachable preview."
license: MIT
allowed-tools: Bash Read Grep Edit Write
---

# Add WebMCP

Turn capabilities already implemented by a web app into maintained, first-party WebMCP tools. Modify the target codebase and its tests; do not introduce a hosted proxy or third-party runtime.

Compatibility: the bundled Stagehand validator requires Node.js 22.18 or newer. Validation needs Chrome/Chromium locally or `BROWSERBASE_API_KEY` for a publicly reachable preview.

Be verbose as you work: report what each step found as you go, not only in the final report.

Use `webmcp-gen` instead when the requested output is a standalone init script derived from a live URL. This skill starts from source code and integrates tools into the application.

## 1. Establish the application boundary

Read the target repository's instructions, package manifests, framework configuration, and current git status. Preserve unrelated changes.

Set `ADD_WEBMCP_SKILL_DIR` to the directory containing this file and run the bounded scanner:

```bash
node "$ADD_WEBMCP_SKILL_DIR/scripts/scan-codebase.mjs" "$TARGET_REPO"
```

Treat scanner results as leads, not conclusions. In a monorepo, identify the actual browser app and the server packages it calls before editing.

## 2. Build a capability inventory

Trace each candidate from its user-visible entry point through the client handler, validation schema, server boundary, authorization checks, side effect, and returned state. Look at:

- routes and screens;
- forms and their submit handlers;
- server actions, API handlers, RPC procedures, and service clients;
- Zod, Valibot, Yup, Joi, JSON Schema, or equivalent validators;
- authentication, authorization, CSRF, idempotency, rate limits, and audit hooks.

Prefer complete user tasks such as `search_catalog` or `save_draft`, not a mechanical tool per endpoint. Exclude internal/admin-only operations, authentication bypasses, raw database access, secret-bearing operations, and capabilities the UI does not grant the current user.

For each selected tool, record its source files, existing validation and authorization boundary, side effects, risk class, confirmation behavior, and a safe fixture input. Read [references/implementation-and-validation.md](references/implementation-and-validation.md) for the detailed inventory and framework patterns.

## 3. Design the tool contract

- Use a stable verb-noun name and describe the user-visible effect, prerequisites, and important exclusions.
- Derive JSON Schema from the application's existing validator or domain type. Do not invent a second, looser contract. Close object schemas with `additionalProperties: false` and make the execute-time parser reject unknown fields too; a closed discovery schema backed by a permissive runtime parser is not a closed contract.
- Return compact JSON-serializable domain results. Do not return DOM nodes, credentials, cookies, tokens, or entire HTML documents.
- Call the same client/service boundary as the UI so existing validation, authorization, observability, and business rules remain authoritative.
- Validate again inside the handler. Agent-provided input is untrusted.
- Never echo the request back as the result. Read the outcome from the application's own state, and where that state is updated asynchronously (React and most reactive stores do not reflect a change on the next line), poll until it settles before reading, then report whatever is actually true. Echoing turns a silent no-op into a passing test.

Assign annotations deliberately:

| Risk | Tool design | Annotation and confirmation behavior |
| --- | --- | --- |
| Read-only | No state mutation | Register `readOnlyHint: true`; add `untrustedContentHint: true` when output includes page or user-controlled text |
| Reversible mutation | Drafts, preferences, cart edits | Register `readOnlyHint: false`; preserve auth/idempotency; test only with disposable state |
| Consequential or irreversible | Purchase, send, publish, delete, permission changes | Split preview/prepare from commit where possible; do not add declarative `toolautosubmit`; keep the final action behind the app's real confirmation control |

Registration uses the current WebMCP hint names `readOnlyHint` and `untrustedContentHint`. Stagehand v4 normalizes discovered annotations to `readOnly`, `untrustedContent`, and, for declarative forms, `autosubmit`. These are hints to the browser or agent, not security enforcement. The application must enforce permissions, validation, confirmation, idempotency, and replay protection.

## 4. Integrate with the application

Use the runtime model context exposed by the browser:

```js
const modelContext = navigator.modelContext || document.modelContext;
```

Keep both accessors: current Chrome exposes `document.modelContext` as a native `ModelContext` while `navigator.modelContext` is `undefined`, so the fallback is load-bearing rather than defensive. The surface is browser-provided and present on any page, so the application ships no polyfill.

Register imperative tools from a client-only root/provider after the application is ready. `registerTool` returns a promise and is idempotent by name — re-registering replaces the previous definition rather than duplicating it, and there is no unregister handle — so remounting and hot reload are safe without teardown. Use declarative form attributes when an existing form already represents
05

Trust audit

BLOCKgrade D · trust 63/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)FAIL
L3Class-specific surfacePASS
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (1 observation(s))
Network
declared (5 observation(s))
Shell
declared (5 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (17)

CRITICALPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
skills/agent-experience/SKILL.md:217
**Verification of agent claims using orchestrator credentials.** Before scoring, if Step 2.5 retained product-specific credentials, the orchestrator may use them to spot-check claims that subagents ma
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
skills/webmcp-gen/scripts/compile.mjs:158
if (implementationSource.includes("eval(") || implementationSource.includes("new Function")) {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/ui-test/SKILL.md:204
| Deployed/staging site | Remote | `browse open <url> --remote` | Browserbase credentials; use contexts where supported |
Why it matters. asks the agent to read credentials
MEDIUMNetwork egress · net.beacon_words · CWE-200, CWE-319
skills/browser-to-api/scripts/normalize.mjs:29
/\/track(ing)?[\/\b]/i, /\/pixel/i, /\/beacon/i, /\/log[\/\b]/i,
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/add-webmcp/SKILL.md:99
If discovery reports zero tools, check the host before suspecting the code: dev servers commonly bind `localhost` only, so `--url http://127.0.0.1:PORT` finds nothing while `http://localhost:PORT` wor
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/functions/SKILL.md:84
Server runs at `http://127.0.0.1:14113`
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/functions/SKILL.md:89
curl -X POST http://127.0.0.1:14113/v1/functions/my-function/invoke \
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
skills/autobrowse/scripts/evaluate.mjs:297
const hash = crypto.createHash("sha1").update(connectUrl).digest("hex").slice(0, 8);
LOWInsecure crypto · crypto.weak_hash · CWE-327, CWE-338
skills/browser-to-api/scripts/infer.mjs:15
return crypto.createHash('sha1').update(`${method} ${p}`).digest('hex').slice(0, 10);
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
skills/add-webmcp/references/implementation-and-validation.md:144
--url http://127.0.0.1:3000 \
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
skills/autobrowse/package.json
@anthropic-ai/sdk, dotenv
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
skills/cookie-sync/package.json
@browserbasehq/stagehand, @browserbasehq/sdk
Why it matters. 2 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
skills/safe-browser/templates/claude-agent-sdk/package.json
@anthropic-ai/claude-agent-sdk, playwright, zod
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
skills/webmcp-gen/package.json
@types/node, tsx, typescript
Why it matters. 3 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/functions/REFERENCE.md:128
cat .env
Why it matters. asks the agent to read credentials
LOWPrompt injection · prompt.persistence · CWE-94, CWE-1427
skills/autobrowse/EXAMPLES.md:51
Keep skills fresh as websites change. Add to your crontab:
Why it matters. instructs the agent to persist itself in the user's environment
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
skills/ui-test/README.md:46
- **Localhost** → `browse open <url> --local` (no API key needed)
Why it matters. asks the agent to read credentials

Gates applied: critical_finding, no_behavioural_pass, undeclared_transfer.

Audited 2026-10-26 · audit v0.4.1 · source sha 45d21dc75974full audit observations/trust-audit/skill/browserbase__browserbase-cli.json · Report an issue / request a re-scan
06

Audit history

Every audit this skill has had.

DateSourceVerdictGradeScoreChange
2026-10-2645d21dc75974BLOCKD63first audit
07

Questions

What does the browserbase-cli — browserbase/skills skill do?

Browserbase's official collection of agent skills to access the web.

Is browserbase-cli — browserbase/skills safe to install?

No — not without reading the findings first. The audit graded it D (63/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on.

What can browserbase-cli — browserbase/skills access on my machine?

The audit observed that it reaches the network, runs shell commands and reads or writes files. Each of those is consistent with what it says it does. Secrets in the source: none found.

Which assistants does browserbase-cli — browserbase/skills work with?

Its documentation mentions claude-code, claude-desktop, cursor, openclaw and windsurf. That is what the text claims, not a compatibility test we ran.

How current is this page?

The grade is for one exact copy of the source (45d21dc75974), read on 2026-10-26. The repository is watched, and a new audit runs when it changes — this is the first audit.

Add this badge to your README

Shows this page's audit result and links back to it. It updates when the audit does.

ModelsAtlas audit badge

Markdown
[![ModelsAtlas audit: Browserbase Skills](https://modelsatlas.com/skills/browserbase/browserbase-cli/badge.svg)](https://modelsatlas.com/skills/browserbase/browserbase-cli/)

Not your listing, or something out of date? Claim or update your listing.

Advertisement