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 |
| npm | Node.js 包 | 🔓 | npm/search |
| PyPI | Python 包 | 🔓 | 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 之类的范围版本。每次升级前重新审计。
2) 浏览器配置隔离
强烈建议为 OpenClaw 创建一个独立的 Chrome/Chromium profile,仅在该 profile 中登录会被本 Skill 访问的站点。不要让 OpenClaw 复用你日常的浏览器 profile,避免银行、邮箱、企业 SSO 等无关账号被 adapter 触达。
3) 默认拒绝 + 显式 opt-in(敏感 adapter)
Launcher 把 adapter 划分为 public / sensitive 两类。sensitive 即默认拒绝;触发条件之一即视为敏感:
- 站点位于
ALWAYS_SENSITIVE_SITES:weixin / xiaohongshu / weibo / xueqiu / jike / douban / qidian / ctrip / x / linkedin - 命令后缀匹配
/(me|feed|history|comments|user_posts|article)$,例如zhihu/me、bilibili/feed、youtube/history - 未在白名单中的未知站点(防御未来
bws新增 adapter)
授权方式(任选其一):
| 方式 | 适用场景 | 命令 |
|------|---------|------|
| 会话级 env | AI Agent 长期运行 | export BWS_ALLOW_SENSITIVE=1 |
| per-call flag | 一次性临时使用 | bws site weixin/search "ai" --i-understand-sensitive |
| 硬隔离模式 | 不可信环境 / 沙箱 agent | export BWS_PUBLIC_ONLY=1 (即使设置了上面两个也会被拒绝) |
未 opt-in 时,敏感 adapter 会返回结构化拒绝并在 stderr 提示如何继续。
4) 审计日志
Launcher 会在 ~/.bws/audit.log 追加 JSON Lines 记录,仅包含元数据(adapter 名、决策、原因、参数 SHA-256 截断哈希),不记录任何参数原文、cookie 或响应数据。日志超过 1 MiB 自动轮转为 audit.log.1。
定期 review:
tail -n 50 ~/.bws/audit.log | jq -c
# 仅查看 sensitive 决策
jq -c 'select(.classification=="sensitive")' ~/.bws/audit.log
5) 数据最小化
- 优先使用公开 adapter(
hn/search、github/search、arxiv/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 显式 shell:false + allow-list 校验 |
| Option injection 到 bws | ✅ flag allow-list + -- 分隔 |
| 敏感 adapter 默认拒绝 | ✅ deny-by-default,需 env / flag opt-in |
| 公共 adapter 直通 | ✅ 无需 opt-in(如 hn/search) |
| 审计日志 | ✅ ~/.bws/audit.log(仅元数据) |
| 浏览器 session 越权(包内 JS) | ⚠️ 无法在 launcher 层消解,依赖 (2) profile 隔离 |
| 第三方包供应链 | ⚠️ 依赖用户安装前审计 + 版本固定 |
| 跨站访问 | ⚠️ adapter 域名隔离仅约束开源 adapter 的设计意图,不是运行时强制 |
| 上传到第三方服务器 | ⚠️ 当前开源版本未观察到,但每次升级需重新审计 |
🎓 示例对话
用户:搜索头条最新 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
📚 参考资料
📝 维护说明
- 版本: 0.4.3
- 最后更新: 2026-04-29
- 维护者: Ping Si sipingme@gmail.com
- 许可证: MIT
✅ 首次成功检查清单
- [ ] 安装工具:
npm install -g browser-web-search@0.4.3 - [ ] 验证版本:
bws --version - [ ] 查看命令:
bws site list - [ ] 测试搜索:
bws site zhihu/search "ai" --count 3 - [ ] 看到 JSON 输出
扫码联系在线客服