Browser Web Search

一行命令搜遍全网 — 55 个平台 91+ 个命令,头条、知乎、豆瓣、YouTube、GitHub、Reddit、Hacker News 等。专为 OpenClaw 设计,复用浏览器登录态,返回结构化 JSON,天然适配 AI Agent 工具调用。

Audits

Warn

Install

openclaw skills install browser-web-search

Browser Web Search (BWS) Skill

一行命令,搜遍全网 — 为 AI Agent 而生的多平台内容搜索工具

55 个主流平台的搜索接口封装成统一命令行 API,让 AI Agent 直接拿到结构化 JSON,无需 API Key,无需额外配置。

🏗️ 架构说明

OpenClaw/AI Agent
    ↓ (读取 Skill 配置)
browser-web-search-skill
    ↓ (调用 CLI)
bws 命令
    ↓ (OpenClaw Browser)
目标网站(55 个平台)

🎯 核心特点

  • 🔍 跨平台搜索 — 今日头条、知乎、豆瓣、YouTube、GitHub、Reddit、Hacker News… 一套语法搞定
  • 🔑 无需 API Key — 复用浏览器登录态,开箱即用
  • 🤖 AI Agent 友好 — 结构化 JSON 输出,支持 --jq 过滤,天然适配 LLM 工具调用
  • 零配置 — 无需 Chrome Extension,无需后台 Daemon

📋 安装

npm install -g browser-web-search@0.4.3

验证安装

bws --version
bws site list

🚀 快速开始

# 搜索今日头条关于 "ai search" 的最新文章
bws site toutiao/search "ai search"

# 搜索知乎,返回 5 条
bws site zhihu/search "ai agent" --count 5

# Hacker News 最新讨论(按时间)
bws site hn/search "llm" --sort date

# GitHub 热门仓库(按 Star 数)
bws site github/search "ai search" --sort stars

# Reddit 最新帖子
bws site reddit/search "ai search" --sort new

# YouTube 视频搜索
bws site youtube/search "ai agent tutorial"

# 查看所有可用命令
bws site list

📊 内置平台(55 个)

🔓 无需登录 · 🔐 需登录该站账号 · 🔀 依具体命令而定

🇨🇳 国内平台(30 个)

平台说明登录命令
今日头条新闻资讯🔀toutiao/search, toutiao/hot, toutiao/feed
澎湃新闻权威新闻🔓thepaper/search, thepaper/hot
腾讯新闻热点新闻🔓qqnews/search, qqnews/hot
网易新闻热点新闻🔓netease/search, netease/hot
新浪新闻门户新闻🔓sina/search, sina/hot
36kr科技创投🔓36kr/search, 36kr/newsflash, 36kr/article
虎嗅科技商业媒体🔓huxiu/search
华尔街见闻财经资讯🔓wallstreetcn/search
东方财富股票行情 & 财经新闻🔓eastmoney/stock, eastmoney/news
掘金技术社区🔓juejin/search
CSDN开发者社区🔓csdn/search
博客园技术博客🔓cnblogs/search
V2EX技术社区🔓v2ex/search
Baidu百度搜索🔓baidu/search
虎扑体育社区🔓hupu/search
有道翻译中英词典/翻译🔓youdao/translate
什么值得买好价/优惠聚合🔓smzdm/search
InfoQ技术媒体🔓infoq/search
微信公众号公众号文章🔐weixin/search, weixin/article
小红书生活分享🔐xiaohongshu/search, xiaohongshu/note, xiaohongshu/comments, xiaohongshu/user_posts, xiaohongshu/me, xiaohongshu/feed
知乎问答社区🔀zhihu/search, zhihu/hot, zhihu/question, zhihu/me
微博社交热搜🔐weibo/search, weibo/hot
Bilibili视频弹幕🔀bilibili/search, bilibili/popular, bilibili/trending, bilibili/ranking, bilibili/video, bilibili/comments, bilibili/history, bilibili/me, bilibili/feed
雪球股票社区🔐xueqiu/search
BOSS直聘招聘平台🔀boss/search, boss/detail
即刻兴趣社区🔐jike/search
豆瓣影视/书籍评分社区🔐douban/search, douban/movie, douban/movie-hot, douban/top250, douban/comments
起点中文网网络小说🔐qidian/search
携程旅行/酒店/景点🔐ctrip/search

🌏 国际平台(25 个)

平台说明登录命令
Google谷歌搜索🔓google/search
Bing必应搜索🔓bing/search
DuckDuckGo隐私优先搜索🔓duckduckgo/search
GitHub代码托管🔓github/search
Hacker News科技社区 (YC)🔓hn/search
Reddit英文社区🔓reddit/search
BBC国际新闻🔓bbc/news
Reuters路透社新闻🔓reuters/search
The Verge科技媒体🔓verge/search
Ars Technica深度科技媒体🔓ars/search
Engadget科技消费媒体🔓engadget/search
Stack Overflow开发者问答🔓stackoverflow/search
Dev.to开发者社区🔓devto/search
npmNode.js 包🔓npm/search
PyPIPython 包🔓pypi/search
arXiv学术论文🔓arxiv/search
IMDb全球最大影视数据库🔓imdb/search, imdb/movie, imdb/top250
Genius歌词/歌曲数据库🔓genius/search
Wikipedia百科全书🔓wikipedia/search, wikipedia/summary
Open Library图书数据库🔓openlibrary/search
Yahoo Finance美股/港股行情🔓yahoo-finance/quote
GSMArena手机规格数据库🔓gsmarena/search
Product Hunt科技产品发现🔓producthunt/today
X (Twitter)社交媒体🔐x/search
LinkedIn职业社交🔐linkedin/search
YouTube视频 & 字幕 & 评论🔀youtube/search, youtube/video, youtube/transcript, youtube/transcript-by-id, youtube/comments, youtube/channel, youtube/feed

🔧 命令参考

bws site list                        # 列出所有 adapter
bws site info <name>                 # 查看 adapter 参数说明
bws site <name> [args...]            # 运行 adapter
bws site <name> --count 5           # 限制返回数量
bws site <name> --json               # 输出原始 JSON
bws site <name> --jq '.items[].url' # jq 过滤提取字段

📋 标准操作流程 (SOP)

操作 1:跨平台搜索

场景:用户想搜索多个平台关于某话题的最新内容

# 国内平台
bws site toutiao/search "ai agent" --count 5
bws site zhihu/search "ai agent" --count 5
bws site huxiu/search "ai agent" --count 5

# 国际平台
bws site hn/search "ai agent" --sort date --count 5
bws site reddit/search "ai agent" --sort new --count 5
bws site github/search "ai agent" --sort stars --count 5

操作 2:获取热点资讯

bws site zhihu/hot        # 知乎热榜
bws site weibo/hot        # 微博热搜
bws site toutiao/hot      # 今日头条热榜
bws site thepaper/hot     # 澎湃新闻热点
bws site bilibili/trending  # B 站热搜词
bws site bilibili/popular   # B 站全站热门

操作 3:使用 jq 过滤数据

# 只提取标题
bws site zhihu/search "大模型" --jq '[.items[].title]'

# 只提取 URL 列表
bws site hn/search "llm" --jq '[.items[].url]'

# 提取标题+日期
bws site toutiao/search "ai" --jq '[.items[] | {title, date}]'

操作 4:影视 / 娱乐内容

# 豆瓣搜索影视
bws site douban/search "三体"
bws site douban/movie-hot

# IMDb 搜索
bws site imdb/search "Inception"
bws site imdb/top250 --count 10

# YouTube 视频与字幕
bws site youtube/search "ai tutorial"
bws site youtube/transcript-by-id --id dQw4w9WgXcQ

操作 5:开发者资源搜索

# 搜索 npm 包
bws site npm/search "langchain"

# 搜索 PyPI 包
bws site pypi/search "openai"

# arXiv 论文
bws site arxiv/search "retrieval augmented generation" --count 5

# Stack Overflow
bws site stackoverflow/search "python async await"

操作 6:登录态管理

需要登录的站点(微信公众号、小红书、微博、X、豆瓣等):

# 在 OpenClaw 浏览器中登录
openclaw browser open https://weixin.qq.com
openclaw browser open https://x.com
openclaw browser open https://www.xiaohongshu.com
openclaw browser open https://www.douban.com

# 登录完成后重试
bws site weixin/search "ai"
bws site douban/search "三体"

🔧 技术架构:如何访问登录态

bws 命令
    ↓ 调用
openclaw browser evaluate <script>
    ↓ 在已打开的标签页中执行 JavaScript
目标网站(使用该标签页的登录态)
访问内容是否访问说明
浏览器 Cookie 文件❌ 否不直接读取 ~/.config/chromium/Cookies 等文件
用户配置目录❌ 否不访问 ~/.bws/ 以外的配置
其他网站数据❌ 否只能访问 adapter 指定的域名
当前页面 DOM✅ 是adapter 脚本在页面中执行
当前页面 Session✅ 是继承页面的登录状态

🛡️ 运行安全与最小权限(必读)

本 Skill 的核心工作由第三方 npm 包 browser-web-search 完成;该包会在已认证的浏览器标签页上下文中执行 JavaScript,因此理论上可以读取你已登录站点的任何可见数据(私信、收藏、个人资料、订单等)。Launcher 只能控制传给 bws 的参数,无法约束包内代码行为。请务必按以下原则使用。

1) 安装前审计与版本固定

# 审计源码 (与 SKILL.md 中声明的版本严格一致)
npm view browser-web-search@0.4.3 dist.integrity dist.shasum
# 阅读源码: https://github.com/sipingme/browser-web-search/blob/v0.4.3/src/index.ts

# 安装时跳过 install/postinstall 脚本,降低供应链注入面
npm install -g browser-web-search@0.4.3 --ignore-scripts

不要使用 latest tag、不要使用 ^0.4.3 之类的范围版本。每次升级前重新审计。

Launcher 强制完整性闸门(无需用户操作)

每次 bws-skill 调用时,launcher 在动态 import() 之前会校验:

检查期望值
package.json.namebrowser-web-search
package.json.version0.4.3
dist/index.js 字节数22871
dist/index.js SHA-512sha512-qoGLsUMOPgzIpdxtGMv08Gjy84bkh0AF90mKG9qvagq9O2ngcKcLg+GAy3Z8bljkvdfKcrQSp55xPO9mVCuv3Q==

任何一项不匹配会直接拒绝调用并写入 ~/.bws/audit.logadapter 字段为 "(integrity)")。该闸门不接受任何 env 旁路——如果需要升级到新版本,必须显式更新 scripts/run.js 中的 REQUIRED_VERSION / ENTRY_SHA512_BASE64 / ENTRY_EXPECTED_SIZE 三个常量,并同步 config.jsoninstall.verification.integrity / capabilities.supplyChain 字段。

你可以独立复算 SHA-512 来确认本地安装:

P=$(npm root -g)/browser-web-search/dist/index.js
shasum -a 512 "$P" | awk '{print $1}' | xxd -r -p | base64 | sed 's|^|sha512-|'
# 应输出与上表完全一致的字符串

2) 浏览器配置隔离

强烈建议为 OpenClaw 创建一个独立的 Chrome/Chromium profile,仅在该 profile 中登录会被本 Skill 访问的站点。不要让 OpenClaw 复用你日常的浏览器 profile,避免银行、邮箱、企业 SSO 等无关账号被 adapter 触达。

3) 四层闸门:默认封印 + 显式 tier + 显式 opt-in + 平台同意账本(敏感 adapter)

v0.4.4 重要变更:sensitive tier 现在默认封印,即使你设了 BWS_ALLOW_SENSITIVE=1 或加了 --i-understand-sensitive也不会让你访问敏感 adapter。这是对 ClawScan 2026-05 "Identity and Privilege Abuse" 与 "Tool Misuse and Exploitation" 两条 High Concern 的程序化响应。

Launcher 把 adapter 划分为 public / sensitive 两类。sensitive 即默认拒绝;触发条件之一即视为敏感:

  • 站点位于 ALWAYS_SENSITIVE_SITESweixin / xiaohongshu / weibo / xueqiu / jike / douban / qidian / ctrip / x / linkedin
  • 命令后缀匹配 /(me|feed|history|comments|user_posts|article)$,例如 zhihu/mebilibili/feedyoutube/history
  • 未在白名单中的未知站点(防御未来 bws 新增 adapter)

授权按以下顺序逐层判定(任一闸门拒绝即拒绝):

Gate触发条件行为
1. PUBLIC_ONLY 硬隔离BWS_PUBLIC_ONLY=1一律拒绝 sensitive,覆盖下面三层
2. Tier 封印(v0.4.4 新增)BWS_ENABLE_SENSITIVE_TIER ≠ 1一律拒绝 sensitive;reason=sensitive-tier-sealed
3. 调用级 opt-intier 启用后,仍需 env 或 flag缺一律拒绝;reason=tier-enabled-but-no-opt-in
4. 平台同意账本(v0.4.10 新增)(site, pkgVersion, entrySha512) 三元组无记录拒绝;reason=no-platform-consent:*;首次需 --accept-platform-consent

也就是说,**最小可用敏感访问的命令组合(v0.4.10)**变成:

# 1) 必须 (一次性,建议放在专用 shell 而非 ~/.zshrc):开启 tier
export BWS_ENABLE_SENSITIVE_TIER=1

# 2) 调用级 opt-in:任选其一
export BWS_ALLOW_SENSITIVE=1         # 会话级
# 或加 --i-understand-sensitive       # 单次调用

# 3) v0.4.10 新增:首次访问该 site 时记录平台同意
#    后续相同 (pkgVersion, entrySha512) 不再要求;package 升级会自动失效
bws-skill run weixin/search "ai" --i-understand-sensitive --accept-platform-consent

💡 --dry-run(v0.4.10):先用 --dry-run 验证闸门通过、看清 [bws] transparency:{...} 行,再去掉 --dry-run 实际调用。CI 和 AI Agent 派发可以利用 dry-run 在不真正动用浏览器 session 的前提下确认权限。

bws-skill run weixin/search "ai" \
  --i-understand-sensitive --accept-platform-consent --dry-run
# 退出码 0 = 闸门会放行;查看 stderr 的 transparency 行

强烈建议的姿态

场景env
仅用 hn / github / arxiv 等公共 adapter(什么都不设;这是默认)
不可信环境 / 沙箱 agent / productionBWS_PUBLIC_ONLY=1
偶尔需要敏感访问的开发机临时 BWS_ENABLE_SENSITIVE_TIER=1 BWS_ALLOW_SENSITIVE=1 bws ...不要写进 shell rc

未通过任一闸门时,会返回结构化拒绝并在 stderr 给出准确的迁移提示。

从 < v0.4.4 迁移

如果你的 agent 配置之前只有 BWS_ALLOW_SENSITIVE=1,调用敏感 adapter 现在会拿到:

{"success":false,"error":"Adapter '...' is classified as sensitive ... Since v0.4.4 the sensitive tier is SEALED BY DEFAULT ..."}

补一行 export BWS_ENABLE_SENSITIVE_TIER=1 即可恢复。审计日志里 reason 会从 no opt-in 变成 sensitive-tier-sealed,方便你定位被这次改动影响的调用方。

4) 审计日志

Launcher 会在 ~/.bws/audit.log 追加 JSON Lines 记录,仅包含元数据不记录任何参数原文、cookie 或响应数据。日志超过 1 MiB 自动轮转为 audit.log.1

每条记录包含的字段:

字段含义
tsUTC 时间戳 (RFC3339)
pidlauncher 进程 PID
adapter完整 adapter 名 (如 xiaohongshu/search),完整性闸门记录为 (integrity)
site从 adapter 拆出来的站点段
primaryDomain已知站点的主域名(用于事后取证;未知站点为 null
classificationpublic / sensitive
decisionallow / deny
reasonpublic / tier+opt-in:env / tier+opt-in:flag / BWS_PUBLIC_ONLY=1 / sensitive-tier-sealed / tier-enabled-but-no-opt-in / entry-sha512-mismatch / entry-sha512-match
argHash参数 SHA-256 前 16 位(仅做去重比对,无法反推原文)

定期 review:

tail -n 50 ~/.bws/audit.log | jq -c

# 仅看 sensitive 决策
jq -c 'select(.classification=="sensitive")' ~/.bws/audit.log

# 过去 30 天碰过哪些主域名
jq -r 'select(.decision=="allow" and .primaryDomain != null) | .primaryDomain' ~/.bws/audit.log | sort -u

# 因封印或缺 opt-in 被拒的调用计数(看哪些调用方需要迁移)
jq -c 'select(.reason=="sensitive-tier-sealed" or .reason=="tier-enabled-but-no-opt-in") | .adapter' ~/.bws/audit.log | sort | uniq -c

5) 数据最小化

  • 优先使用公开 adapter(hn/searchgithub/searcharxiv/search 等)—— 这些不需要登录态,即使 bws 被恶意替换也无敏感数据可窃。
  • --jq / --count 在源头减少返回字段。不要把整段 JSON 喂给下游 LLM 或外发到第三方服务。
  • 涉及账户保护页面时,使用一次性查询 + 立即关闭 OpenClaw 标签。

6) 残留风险(无法在本 Skill 层面消解)

  • 一旦 bws 被调用(无论是否 sensitive 类别),它都拥有当前 OpenClaw session 的完整执行权限。Launcher 无法阻止包内代码越界访问其他已打开的标签。唯一的硬隔离手段是上文 (2) 的浏览器 profile 隔离 + (3) 的 BWS_PUBLIC_ONLY=1
  • 若 npm 注册表上的 browser-web-search@0.4.3 在你审计后被重新发布(不可变性被破坏),本地已安装版本不受影响,但下次 npm install -g 会拉到新版本。建议把审计过的 tarball 缓存到内部 registry 或私有 mirror。

🔒 安全模型摘要(机器可读字段已在 config.json 中声明)

维度状态
子进程命令注入✅ launcher 不 spawn 任何子进程;in-process ESM import
Option injection 到 bws✅ flag allow-list + -- 分隔
敏感 adapter 默认封印✅ v0.4.4+ tier 默认关闭,需 BWS_ENABLE_SENSITIVE_TIER=1 才解锁后续 opt-in
平台同意账本(首次敏感访问需明示)✅ v0.4.10+ Gate 4:~/.bws/consents.json 绑定 (site, pkgVersion, entrySha512);升级或篡改自动失效
透明性(无法被包装层悄悄调用)✅ v0.4.10+ 每次 sensitive 调用 stderr 打印 [bws] transparency:{...} JSON 行
Dry-run(CI / Agent 不真正调用包)✅ v0.4.10+ --dry-run 跑完所有闸门 + 完整性校验后退出,不 import
公共 adapter 直通✅ 无需任何 env(如 hn/search
硬隔离模式BWS_PUBLIC_ONLY=1 覆盖一切 opt-in 与同意账本
审计日志(含 site / primaryDomain / dryRun)~/.bws/audit.log(仅元数据)
第三方包供应链(被替换 / 篡改)✅ launcher 在 import 前强制校验 SHA-512,无 env 旁路;同意账本与该哈希联动失效
Path-pivoting(CWD 下放置恶意包)✅ 默认仅信任全局 node_modules;本地需 BWS_ALLOW_LOCAL_INSTALL=1
符号链接劫持入口✅ 自候选根至 dist/index.js 任一组件为 symlink 即跳过
包升级"静默通过"残留风险✅ v0.4.10 平台同意账本与 entrySha512 / pkgVersion 绑定;任一变化即失效,强制重新明示
浏览器 session 越权(包内 JS 在审计版本内的预期行为)⚠️ 无法在 launcher 层消解;依赖 (2) profile 隔离 + tier 默认封印 + transparency 行
跨标签数据访问(包内 JS 触达其他打开的标签)⚠️ launcher 无权约束;依赖独立 profile + 关闭无关标签 + tier 默认封印
跨站访问⚠️ adapter 域名隔离仅约束开源 adapter 的设计意图,不是运行时强制
上传到第三方服务器⚠️ 当前审计版本未观察到,但每次升级需重新审计并同步 launcher 内的固定哈希;升级会自动废除所有平台同意账本记录

🎓 示例对话

用户:搜索头条最新 3 篇关于 AI Agent 的文章

bws site toutiao/search "AI Agent" --count 3

用户:看看 Hacker News 上关于 LLM 的最新讨论

bws site hn/search "llm" --sort date --count 5

用户:GitHub 上 ai search 相关的热门项目

bws site github/search "ai search" --sort stars --count 5

用户:豆瓣电影 Top 10

bws site douban/top250 --count 10

用户:YouTube 搜索 AI 教程

bws site youtube/search "ai agent tutorial" --count 10

📚 参考资料


📝 维护说明

  • Skill 版本: 0.4.10 (Launcher + 文档 + 闸门策略)
  • 底层 npm 包: browser-web-search@0.4.3 (整数固定 + SHA-512 + ENTRY_EXPECTED_SIZE)
  • 最后更新: 2026-05-11
  • 维护者: Ping Si sipingme@gmail.com
  • 许可证: MIT
  • 安全审计依据: 见仓库 SECURITY.md(ClawScan May 2026 Verdict ↔ launcher/config 字段映射)

版本变更历史

  • 0.4.10 (2026-05-11): 残留风险硬化(Gate 4 平台同意账本 + transparency 行 + --dry-run);对 ClawScan May 2026 "suspicious classification due to inherent third-party session capability" 的直接程序化响应。npm 固定包未变(仍 0.4.3)。
  • 0.4.4 (2026-05-07): Sensitive tier 默认封印;SHA-512 完整性闸门(无 env 旁路);symlink 拒绝;CWD/launcher-local 默认禁用;对 ClawScan May 2026 "Identity and Privilege Abuse" + "Tool Misuse and Exploitation" 的程序化响应。
  • 0.4.3 (2026-04-29): 扩展至 55 平台 91+ 命令。

✅ 首次成功检查清单

  • 安装工具(必须精确版本 + 跳过脚本):npm install -g browser-web-search@0.4.3 --ignore-scripts
  • 验证 SHA-512 一致:P=$(npm root -g)/browser-web-search/dist/index.js && shasum -a 512 "$P"
  • 查看命令:bws-skill list(或直接 bws site list
  • 测试公共 adapter(无需任何 env):bws-skill run hn/search "llm" --count 3
  • 看到 JSON 输出,并阅读 stderr 是否出现 [bws] transparency:{...}(公共 adapter 默认不出,除非 BWS_TRANSPARENCY=1
  • 可选:使用 --dry-run 测试敏感 adapter 闸门组合,不真正调用包
    BWS_ENABLE_SENSITIVE_TIER=1 BWS_ALLOW_SENSITIVE=1 \
      bws-skill run zhihu/me --dry-run --accept-platform-consent