perplexityai/bumblebee · 上手攻略
- 仓库:perplexityai/bumblebee
- 链接:https://github.com/perplexityai/bumblebee
- 分类:安全工具 / 软件供应链 / 终端清单采集器
- 作者:spark
- 更新:2026-08-08
是什么
bumblebee 是 Perplexity 开源的一个 只读 的开发者终端组件清单采集器。它不抓包、不跑代码、不读源码,只读锁文件、包管理器安装元数据、扩展 manifest 和 MCP JSON 配置,最终输出 NDJSON 格式的结构化记录。
核心定位:当一条 supply-chain 漏洞公告(CVE、advisory)发布,哪些开发机当前磁盘上存在受影响的组件?——bumblebee 就是为这个问题设计的应急工具。它和 SBOM(回答「哪些被打包出去了」)、EDR(回答「哪些运行了 / 触网了」)视角互补,专门覆盖散落在 lockfile / 包管理器元数据 / 扩展清单 / MCP 配置里的「脏本地状态」。
当前最新发布是 v0.1.1(仓库中已多处引用),最近 commit d76e369(2026-08-07)来自 PR #70 的 release 流水线自动化。
解决什么问题
典型 supply-chain 响应链路里,传统工具各管一段:
- SBOM(CycloneDX / SPDX):管「构建产物里有什么」
- EDR(CrowdStrike / SentinelOne):管「哪些进程跑了、打了网络」
- 漏洞扫描器(Trivy / Grype):管「镜像/仓库里有什么」
但实际应急时,responder 经常要回答的更朴素的问题:「我们所有开发机现在装着这个被通报的版本吗?」bumblebee 填补的恰好是这一段——它能在几分钟内扫完一台机器的所有 lockfile、扩展 manifest、MCP 配置,输出可关联到具体 advisory 的匹配记录。
它支持 11 类生态:
- npm(package-lock.json、npm-shrinkwrap.json、node_modules/.package-lock.json、node_modules//package.json)
- pnpm(pnpm-lock.yaml、.pnpm/.../package.json)
- Yarn(yarn.lock,Classic + Berry)
- Bun(bun.lock、bun.lockb 诊断)
- PyPI(.dist-info/METADATA、INSTALLER、direct_url.json、.egg-info/PKG-INFO)
- Go modules(go.sum、go.mod)
- RubyGems(Gemfile.lock、installed *.gemspec)
- Composer(composer.lock、vendor/composer/installed.json)
- MCP(mcp.json、.mcp.json、claude_desktop_config.json、mcp_config.json、mcp_settings.json、cline_mcp_settings.json、~/.gemini/settings.json、~/.claude.json)
- Agent skills(skills.sh / vercel-labs/skills 的 lock file:~/.agents/.skill-lock.json 或 $XDG_STATE_HOME/skills/.skill-lock.json,以及项目级 skills-lock.json)
- 编辑器扩展(VS Code、Cursor、Windsurf、VSCodium 的 manifest)
- 浏览器扩展(Chromium 系 manifest.json、Firefox extensions.json,按 profile)
- Homebrew(Formula INSTALL_RECEIPT.json、cask .metadata)
注意:v0.1 不解析 非 JSON MCP 配置(Codex config.toml、Continue YAML),且 不枚举 无 lock file 的裸 SKILL.md 目录。
快速安装
要求
- Go 1.25+
- 零非 stdlib 依赖(部署简单)
- macOS / Linux 开发者终端
路径 A:go install(推荐)
go install github.com/perplexityai/bumblebee/cmd/bumblebee@latest
# 或固定 tag
go install github.com/perplexityai/bumblebee/cmd/bumblebee@v0.1.1
二进制会落到 $GOBIN。
路径 B:从源码构建
git clone https://github.com/perplexityai/bumblebee
cd bumblebee
go build -o bumblebee ./cmd/bumblebee
# 注入显式版本(推荐)
go build -ldflags "-X main.Version=v0.1.1" -o bumblebee ./cmd/bumblebee
bumblebee version 会打印:版本 + VCS revision + 构建时间 + Go runtime 版本——每条记录都能追溯到具体构建。
路径 C:冒烟测试
bumblebee selftest
# 预期:selftest OK (2 findings in 1ms)
selftest 用的是内嵌 fixture,故意使用假包名 bumblebee-selftest-evil@0.0.0,且 不发起网络请求。非零退出 = 本地装包有问题,可作为 fleet rollout 前的快速烟雾测试。
核心用法
三种 scan profile
| Profile | 扫什么 | 用途 |
|---|---|---|
baseline |
通用全局/用户包根、语言工具链、编辑器扩展、浏览器扩展、MCP 配置 | 外部 runner 周期性轻量盘点 |
project |
配置的开发目录(~/code、~/src、~/work) |
已知项目工作区的周期性盘点 |
deep |
显式 --root 路径,含宽根 $HOME |
应急事件/战役性检查,配合 --ecosystem、--exposure-catalog、--findings-only |
baseline 和 project 拒绝裸 home 根;只有 deep 会遍历 $HOME。
1. 全局基线盘点
bumblebee scan --profile baseline > inventory.ndjson
输出 NDJSON(每行一条 package record),诊断输出走 stderr。运行结束时打一条 scan_summary record,receiver 端据此判断是否把这次 run 提升为「当前态」。
2. 限定项目根的每日扫
bumblebee scan --profile project \
--root "$HOME/code" \
--root "$HOME/Developer"
3. 限定生态子集
bumblebee scan --profile baseline \
--ecosystem npm,pypi \
--ecosystem go
--ecosystem 可重复,逗号分隔。
4. 应急 exposure 扫描
bumblebee scan --profile deep \
--root "$HOME" \
--exposure-catalog ./catalog.json \
--max-duration 10m
--exposure-catalog 接受 JSON 文件或 *.json 目录(非递归合并,所有文件 schema_version 必须一致);--findings-only 要求 --exposure-catalog,只输出命中记录、不输出 package 记录。
5. 预览根(不真扫)
bumblebee roots --profile baseline
# 输出 "<root_kind>\t<path>" 行
6. 最小可跑命令(验证安装 + 链路)
# 1) 装
go install github.com/perplexityai/bumblebee/cmd/bumblebee@v0.1.1
# 2) 冒烟
bumblebee selftest
# 预期:selftest OK (2 findings in 1ms)
# 3) 第一次真扫(限定生态 + 项目根,避免噪声)
bumblebee scan --profile project \
--root "$HOME/code" \
--ecosystem npm,pypi \
> first_inventory.ndjson
# 4) 验输出
wc -l first_inventory.ndjson
tail -n 1 first_inventory.ndjson # 应该是 scan_summary record
典型适用场景
- Supply-chain 应急响应:漏洞公告(CVE / GHSA)发布后快速盘点「哪台开发机装着受影响版本」,配套
--exposure-catalog+--findings-only输出命中清单。 - MCP 配置盘点:盘点团队所有开发机的 MCP server 清单(含
~/.claude.json、mcp.json等)——bumblebee 解析这些 config 但 不外泄env块里的凭据值(仅解析 server inventory)。 - Agent Skills 治理:盘点谁装了哪些 skill(依据
~/.agents/.skill-lock.json),便于审计和回滚。 - 新员工入职环境审计:跑一次
baseline看装了什么编辑器扩展、哪些语言工具链、哪些浏览器扩展,作为基线。 - 周期性 fleet rollout:用
bumblebee selftest在 CI / MDM 推送前做烟雾测试。
坑与注意
- bumblebee 是「单次扫描器」,不是 daemon:每次调用跑一次就退出。周期化要靠 cron / launchd / systemd / MDM 等外部 runner。仓库 README 明确写了「cadence is the runner's responsibility」。
- baseline / project 不扫裸
$HOME:设计选择,避免无差别扫家目录。要扫 home 必须显式deepprofile。 - v0.1 不解析非 JSON MCP 配置:Codex 的
config.toml、Continue 的 YAML 当前不被枚举;应急时这些机器的 MCP 视角会有缺口。 - v0.1 不枚举无 lock 的 skill:裸
SKILL.md目录没被扫;必须用 skills.sh / vercel-labs/skills 安装并产生 lock 文件才会被盘点。 - MCP 配置含凭据:bumblebee 解析
env块时 只 用于构建 server inventory,不在 NDJSON record 里输出 env 值。但仓库没承诺帮你加密落盘——mcp.json在文件系统上仍是原文,访问控制要靠宿主 OS / 备份策略。 - 「零非 stdlib 依赖」是部署优势也是限制:没有插件机制;要支持新生态必须改源码、rebuild。
--exposure-catalog合并规则:目录下所有 JSON 文件必须共享schema_version;目录是非递归的。- 版本追踪靠 ldflags:默认
bumblebee version只显示源码里写死的 VERSION;fleet 部署必须用-ldflags "-X main.Version=..."才能精确溯源每条 record 到具体构建。
与同类对比
| 维度 | perplexityai/bumblebee | Anchore / Syft (SBOM) | Trivy / Grype (漏洞扫描) | OSQuery (端点) |
|---|---|---|---|---|
| 主要视角 | 开发者终端本地状态 | 构建产物 / 镜像 | 镜像 / repo / FS | 系统级运行时状态 |
| 输出 | NDJSON(每 record 一行) | CycloneDX / SPDX SBOM | 漏洞报告表格 | SQL 表 |
| 是否只读 | ✅ | ✅ | �️ 拉漏洞库时联网 | ⚠️ daemon |
| 触发时机 | 周期性 runner / 应急 | 构建时 / CI | CI / 推送 | 常驻 |
| 覆盖 | 11 类生态 + MCP + skills + 扩展 + brew | 主要 lockfile / 元数据 | 同上 + CVE 关联 | 全系统 |
| 凭据处理 | 解析但不输出 env 值 | 不涉及 | 不涉及 | 看具体表 |
| License | 仓库未在 README 显著处标注(需查 LICENSE 文件) | Apache-2.0 | Apache-2.0 | 多 |
bumblebee 的核心差异点是 应急时只看本地散落状态的只读盘点——SBOM 视角太「产品端」、EDR 太「运行时」,应急响应里需要的就是「此时此刻这台机器」。
一句话推荐
Perplexity 出品的只读供应链应急盘点器——零依赖单二进制、11 类生态 + MCP + skills + 浏览器扩展全覆盖、selftest 烟雾测试友好;适合 security 团队在 advisory 爆发时快速 fleet 扫描,但请把它当只读盘点工具,daemon 化和跨 OS 覆盖要靠外部 runner + 后续版本。
原始 commit 链接:
- 仓库主分支最新 commit:d76e369a0b34(2026-08-07,ci: automate release publication #70)
- 完整链接:https://github.com/perplexityai/bumblebee/commit/d76e369a0b34
- README 源文件:https://github.com/perplexityai/bumblebee/blob/main/README.md