🎩 You're Invited:Meet the Socket team at Black Hat in Las Vegas, August 3-6.RSVP
Sign In

browserbash-cli

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

browserbash-cli

Vendor-independent natural-language browser automation CLI. Run plain-English objectives against local Chrome, LambdaTest/TestMu, BrowserStack, any CDP endpoint, or Playwright MCP.

Source
npmnpm
Version
1.1.0
Version published
Weekly downloads
118
131.37%
Maintainers
1
Weekly downloads
 
Created
Source

browserbash-cli

Vendor-independent, natural-language browser automation CLI.

Give it a plain-English objective. An AI agent drives a real browser and returns structured results. Both layers are swappable:

Engines (who interprets the English)

EngineWhat it isLicense
stagehand (default)Stagehand — open-source AI browser automation framework by Browserbase. act/extract/observe/agent primitives, self-healing, supports Anthropic/OpenAI/Google models.MIT
builtinIn-repo Anthropic tool-use loop driving Playwright. Used automatically for grids Stagehand can't attach to (LambdaTest, BrowserStack).Apache-2.0

Providers (where the browser runs)

ProviderWhere the browser runsEngineAuth
local (default)Chromium/Chrome on this machinestagehand or builtinnone
cdpAny Chrome DevTools Protocol endpoint (your grid, docker, Playwright MCP-managed browser)stagehand or builtinnone
browserbaseBrowserbase cloud browsersstagehand onlyBROWSERBASE_API_KEY / BROWSERBASE_PROJECT_ID
lambdatestLambdaTest / TestMu AI cloud gridbuiltin (auto)LT_USERNAME / LT_ACCESS_KEY
browserstackBrowserStack Automate cloud gridbuiltin (auto)BROWSERSTACK_USERNAME / BROWSERSTACK_ACCESS_KEY

LLM backends (who does the thinking) — open source first

Default model is auto, resolved in this order:

  • Ollama running locallyollama/<OLLAMA_MODEL or first installed model> — free, open source, no keys
  • ANTHROPIC_API_KEY set → claude-opus-4-8
  • OPENAI_API_KEY set → openai/gpt-4.1
  • otherwise: error with setup guidance
BackendModel flagNeeds
Ollama — local, free, OSS (preferred)auto or ollama/<model> e.g. ollama/qwen3Ollama running; OLLAMA_BASE_URL to override http://localhost:11434/v1, OLLAMA_MODEL to pin auto-detection. Same flag works for any OpenAI-compatible server (vLLM, LM Studio, llama.cpp).
Anthropicclaude-opus-4-8ANTHROPIC_API_KEY
OpenAI / Googleopenai/gpt-4.1, google/gemini-2.5-flashprovider key (Stagehand engine)
OpenRouter — hundreds of models, one keyopenrouter/<vendor>/<model> e.g. openrouter/anthropic/claude-sonnet-4-6, openrouter/meta-llama/llama-3.3-70b-instructOPENROUTER_API_KEY (https://openrouter.ai/keys); override endpoint with OPENROUTER_BASE_URL
Anthropic-compatible gatewayclaude-* + ANTHROPIC_BASE_URLbuiltin engine routes through any Anthropic-compatible endpoint (e.g. a LiteLLM proxy fronting local models)

Fully free / open-source stack (the default)

ollama pull qwen3                 # or any tool-capable local model
browserbash run "Open https://example.com and store the heading as 'h1'"

Stagehand engine (MIT) + local Chromium + Ollama (MIT) — zero cloud cost, no API keys. Tip: small models (≤8B) are flaky on multi-step objectives; Qwen3 / Llama 3.3 70B class works best.

Note: cloud-grid providers (lambdatest, browserstack) use the builtin engine, which speaks the Anthropic API — pair them with ANTHROPIC_API_KEY or an ANTHROPIC_BASE_URL gateway.

Install

npm install
npm run build
npm link        # exposes the `browserbash` command

Requires Node ≥ 18 and Google Chrome stable (for the local provider).

Quick start

export ANTHROPIC_API_KEY=sk-ant-...

# One-shot objective, local browser, Stagehand engine (default)
browserbash run "Open https://news.ycombinator.com and store the top story title as 'top_story'"

# Browserbase cloud (Stagehand native)
export BROWSERBASE_API_KEY=... BROWSERBASE_PROJECT_ID=...
browserbash run "..." --provider browserbase

# Cloud grid (auto-switches to builtin engine)
export LT_USERNAME=... LT_ACCESS_KEY=...
browserbash run "..." --provider lambdatest --headless

# Attach to an existing browser (CDP / Playwright MCP)
browserbash run "..." --cdp-endpoint ws://localhost:9222/devtools/browser/<id>

# Force the builtin engine
browserbash run "..." --engine builtin

Agent mode (for AI coding tools & CI)

--agent switches stdout to NDJSON — one JSON object per line, stable schema:

browserbash run "<objective>" --agent --headless --timeout 120
  • Progress events: {"type":"step","step":1,"status":"passed","action":"navigate","remark":"..."}
  • Terminal event: {"type":"run_end","status":"passed|failed|error|timeout","summary":"...","final_state":{...},"duration_ms":...,"test_url":"..."}

Exit codes: 0 passed · 1 failed · 2 error · 3 timeout.

Full agent integration guide: docs/agents.md.

Test files (*_test.md)

Committable, reviewable Markdown tests:

# Login flow

- Open {{base_url}}/login
- Type {{username}} into the email field
- Type {{password}} into the password field and press Enter
- Verify the dashboard heading is visible
- Store the logged-in user name as 'user_name'
browserbash testmd run ./.browserbash/tests/login_test.md --provider browserstack

Composition via @import ./helpers/login.md (steps are spliced in place). After every run a Result.md is written next to the test file.

Variables

{{key}} placeholders are substituted in objectives and test steps. Load order (highest priority last):

  • Global: ~/.browserbash/variables/*.json
  • Project: ./.browserbash/variables/*.json
  • --variables-file <path>
  • --variables '<json>'

Mark sensitive values {"value": "...", "secret": true} — they are masked as ***** in all logs and NDJSON output.

Configuration

browserbash init                          # scaffold ./.browserbash/
browserbash config show
browserbash config set defaultProvider lambdatest
browserbash providers                     # list providers
browserbash login --provider lambdatest --username "$USER" --access-key "$KEY"
browserbash whoami

Precedence: flags > env vars > ~/.browserbash/config.json defaults.

CI recipe (GitHub Actions)

- run: npm ci && npm run build
- run: |
    node dist/index.js login --provider lambdatest --username "$LT_USERNAME" --access-key "$LT_ACCESS_KEY"
    node dist/index.js testmd run .browserbash/tests/smoke_test.md --agent --headless --timeout 180
  env:
    ANTHROPIC_API_KEY: ${{ secrets.ANTHROPIC_API_KEY }}
    LT_USERNAME: ${{ secrets.LT_USERNAME }}
    LT_ACCESS_KEY: ${{ secrets.LT_ACCESS_KEY }}

The process exit code is the test verdict — no output parsing needed.

Architecture

src/
├── index.ts            # CLI (commander): run, testmd, login, config, providers, init
├── runner.ts           # engine routing + provider session + vendor status reporting
├── engine/
│   ├── stagehand.ts    # default engine: Stagehand agent (stagehand.dev, MIT) — LOCAL / cdpUrl / Browserbase
│   ├── agent.ts        # builtin engine: Anthropic tool-use loop (manual loop → NDJSON step events)
│   └── tools.ts        # builtin browser tools: navigate, snapshot, click, type_text, wait_for, extract, done
├── providers/          # vendor abstraction — add a new vendor by implementing BrowserProvider
│   ├── types.ts        # BrowserProvider / ProviderSession interfaces
│   ├── local.ts        # system Chrome
│   ├── cdp.ts          # attach to any CDP endpoint (incl. Playwright MCP browsers)
│   ├── lambdatest.ts   # LambdaTest/TestMu grid + setTestStatus reporting
│   └── browserstack.ts # BrowserStack Automate grid + setSessionStatus reporting
├── testmd/             # *_test.md parser (@import, ordered steps) + Result.md writer
├── config.ts           # ~/.browserbash/config.json + credential resolution
├── variables.ts        # {{var}} substitution, secrets masking
└── output.ts           # NDJSON / human reporter

Adding a vendor = one file implementing BrowserProvider (connect() returning a Playwright Browser/Page) + one registry line in providers/index.ts.

License

Apache-2.0

Keywords

browser-automation

FAQs

Package last updated on 12 Jun 2026

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts