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

baselineproject 拒绝裸 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.jsonmcp.json 等)——bumblebee 解析这些 config 但 不外泄 env 块里的凭据值(仅解析 server inventory)。
  • Agent Skills 治理:盘点谁装了哪些 skill(依据 ~/.agents/.skill-lock.json),便于审计和回滚。
  • 新员工入职环境审计:跑一次 baseline 看装了什么编辑器扩展、哪些语言工具链、哪些浏览器扩展,作为基线。
  • 周期性 fleet rollout:用 bumblebee selftest 在 CI / MDM 推送前做烟雾测试。

坑与注意

  1. bumblebee 是「单次扫描器」,不是 daemon:每次调用跑一次就退出。周期化要靠 cron / launchd / systemd / MDM 等外部 runner。仓库 README 明确写了「cadence is the runner's responsibility」。
  2. baseline / project 不扫裸 $HOME:设计选择,避免无差别扫家目录。要扫 home 必须显式 deep profile。
  3. v0.1 不解析非 JSON MCP 配置:Codex 的 config.toml、Continue 的 YAML 当前不被枚举;应急时这些机器的 MCP 视角会有缺口。
  4. v0.1 不枚举无 lock 的 skill:裸 SKILL.md 目录没被扫;必须用 skills.sh / vercel-labs/skills 安装并产生 lock 文件才会被盘点。
  5. MCP 配置含凭据:bumblebee 解析 env 块时 用于构建 server inventory,不在 NDJSON record 里输出 env 值。但仓库没承诺帮你加密落盘——mcp.json 在文件系统上仍是原文,访问控制要靠宿主 OS / 备份策略。
  6. 「零非 stdlib 依赖」是部署优势也是限制:没有插件机制;要支持新生态必须改源码、rebuild。
  7. --exposure-catalog 合并规则:目录下所有 JSON 文件必须共享 schema_version;目录是非递归的。
  8. 版本追踪靠 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