Dedicated skill that guides OpenClaw agents to use --openclaw mode.
No Chrome extension or daemon needed — runs adapters directly through
OpenClaw's CDP browser.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Run site adapters directly through OpenClaw's built-in Chrome browser,
without needing bb-browser's Chrome extension or daemon.
bb-browser site v2ex/hot --openclaw
bb-browser site zhihu/hot 3 --openclaw --jq '.items[].title'
The bridge (openclaw-bridge.ts, ~40 lines) uses `npx openclaw browser`
commands: tabs/open/evaluate. Adapter JS is passed directly via
execFileSync to avoid shell escaping issues.
Existing daemon-based flow is unchanged when --openclaw is not set.
Closes#28
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Previously the extension would stop reconnecting after 5 attempts
(~93s total). If the daemon wasn't running when the extension started,
users had to manually reload the extension after starting the daemon.
Now the extension retries indefinitely with exponential backoff capped
at 60s, and suppresses error logs when daemon is simply not running.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ensureDaemonRunning() previously returned as soon as the daemon HTTP
server was ready, but the Chrome extension might not have connected
via SSE yet. This caused intermittent "extension not connected" (503)
or "Failed to fetch" errors on the first command.
Now polls /status for extensionConnected (up to 10s) after daemon
starts, ensuring the full CLI → daemon → extension pipeline is ready
before sending any command.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Spawn a detached `git pull --ff-only` in the background after each
site command. Non-blocking, no output, keeps community adapters fresh
without user intervention.
Closes#20
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Only show domains with >= 5 visits
- Exclude localhost and non-domain strings (e.g. Chrome extension IDs)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The previous patch only modified extension/manifest.json (build output,
gitignored) instead of packages/extension/manifest.json (source). Every
vite build overwrote the fix. Now the source manifest has the history
permission so it survives rebuilds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Quick Start: replace `site list` with `site recommend`
- Update platform count: 36 platforms, 103 commands
- Add Xueqiu to Finance category
- Document --jq and site info with examples
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
New commands:
- `history search/domains` — query Chrome browsing history via chrome.history API
- `site recommend` — cross-reference history with adapters for personalized discovery
- `site info <name>` — expose full adapter @meta (args, example, domain)
- `--jq <expr>` — inline jq-like JSON filtering (inspired by gh CLI)
Agent UX improvements:
- --help grouped by intent, "开始使用" section first with site examples
- --help top hint explicitly guides Agents to use site commands over browser automation
- `open` command shows 💡 hint when the URL has available site adapters
- `--jq` auto-strips `.data.` prefix for Agent tolerance
- `site update` post-install nudge for site recommend
- AGENTS.md with full UX writing spec for contributors
Closes#21, closes#23, relates #24
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Document the --host flag for daemon bind address customization:
- 127.0.0.1 for IPv4-only (fixes macOS IPv6 issues, ref #18)
- 0.0.0.0 for remote access via Tailscale / ZeroTier
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update numbers: 10 platforms → 35, 50+ → 97 commands
- Add "The idea" section: browser IS the API, not the other way around
- Add "What this means for AI agents": files + terminal + entire internet
- Add "10 minutes to add any website" with tier system and parallel AI proof
- Full platform table by category
- Bilingual (EN + ZH)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Group commands by function (site adapters, navigation, interaction,
page info, network/debug, daemon) instead of a flat list.
Move site adapter section to the top with usage examples, making
the most powerful feature immediately visible.
Closes#13
Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Lead with 50+ site commands across 10 platforms instead of
generic browser automation. That's what makes bb-browser different.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
MCP server now sends instructions on connect so agents immediately
understand what bb-browser can do (capabilities, site adapters, etc).
New top-level `bb-browser guide` command teaches how to turn any
website into a site adapter — reverse engineer, write, test, contribute.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
reportHint now shows two options for agents:
1. gh issue create --repo epiral/bb-sites
2. bb-browser site github/issue-create epiral/bb-sites
Agents choose whichever tool is available.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a site adapter fails, include a reportHint field telling the
agent how to file an issue via `gh issue create --repo epiral/bb-sites`.
Agents decide themselves whether to use gh CLI or bb-browser's own
github site adapter.
Remove site report subcommand — agents handle reporting autonomously.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Check both error and hint fields for auth keywords.
When detected, replace with actionable login URL hint.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a site adapter returns 401/403/unauthorized errors, automatically
suggest the user to log in to the site's domain in their browser.
Works in both CLI and JSON output modes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
MCP server now spawns daemon automatically on first tool call,
same as CLI does. Only shows setup hint for extension not connected.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Show actionable setup guide when:
- Daemon not running (ECONNREFUSED)
- Extension not connected (HTTP 503)
Hints include install steps and GitHub releases link, guiding both
users and AI agents to complete the setup.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
`bb-browser --mcp` spawns the MCP server with stdio transport.
Users can configure AI tools with: npx -y bb-browser --mcp
Also fixes root tsup bundling to properly exclude ws while
bundling all other deps (MCP SDK, ajv, zod).
Bump version to 0.4.1.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bump version to 0.4.0
- Add MCP runtime deps (ajv, ajv-formats, @modelcontextprotocol/sdk)
- Bundle all deps in root tsup for npx compatibility
- Fix repo URL to epiral/bb-browser
- Add mcp keyword
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace broken `import("@bb-browser/daemon")` with `spawn(getDaemonPath())`
so `bb-browser daemon` works both in dev monorepo and npm install scenarios.
- Export getDaemonPath() from daemon-manager
- daemon command uses spawn with stdio: "inherit" for foreground mode
- Pass --host flag through to daemon process
Fixes#6, fixes#10
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- parseArgs: remove `&& !result.command` guard so --tab value is not
leaked into command args (e.g. network filter)
- site: respect --tab, stop calling tab_select (no foreground steal)
- fetch: stop calling tab_select (no foreground steal)
- site --json: wrap output in standard {id, success, data} envelope
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README.md: English (default)
- README.zh-CN.md: Chinese
- Cross-linked via header
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rename narrative: bb = BadBoy Browser
- Tagline: "Your browser is the API. No keys. No bots. No scrapers."
- Add fetch, site, network --with-body to command reference
- Bilingual: English (default) + Chinese section
- Reframe positioning: not automation, not scraping — being the browser
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Via CDP Network.loadingFinished + Network.getResponseBody, capture:
- Request headers and body (POST data)
- Response headers, body, and mimeType
- Memory management: 256KB/response, 64KB/request, 8MB/tab total
- Eviction: oldest bodies removed first when over budget
- Graceful error handling: bodyError field for failed captures
This enables a new paradigm for site adapters: instead of reverse-engineering
API signing (like Xiaohongshu's X-s), just navigate to a page and read the
response bodies from requests the page already made with proper authentication.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- `bb-browser fetch <url>`: browser-native fetch with auto same-origin tab routing.
Like curl but with browser login state. No API keys, no anti-bot.
- `bb-browser recipe`: manage and run community/private fetch recipes.
- recipe list: scan ~/.bb-browser/recipes/ (local) and ~/.bb-browser/bb-recipes/ (community)
- recipe search <query>: keyword search across recipes
- recipe run <name> [args]: execute a recipe via eval
- recipe update: git clone/pull community recipes from epiral/bb-recipes
- recipe <name> [args]: shorthand for recipe run
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>