它扫什么
SkillSpector 面向 Claude Code、Codex CLI、Gemini CLI 等使用的 agent skill,检查内容包括危险命令、数据外传、提示注入、混淆载荷、依赖与供应链风险等。它支持多种输入:一个 skill 目录、单个 SKILL.md、一个 Git 仓库地址或 zip 包;远程与压缩包有体积和成员数量上限,超限会直接失败而不是继续解析。
安装
官方推荐用 uv 做隔离安装。Windows 上先确认 uv 可用,再执行下面两条命令;如果还要在 agent 会话里通过 MCP 调用,安装时加 mcp extra。
uv tool install git+https://github.com/NVIDIA/skillspector.git
# 需要 MCP 时:
uv tool install "skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git"先跑不依赖模型的静态扫描
第一次不要接 LLM,先把确定性的问题扫出来。--no-llm 速度快、结果可复现,适合放进 CI;需要更细的语义判断时再开 LLM,并把密钥放在本地 .env 或 CI secret 里,不要写进仓库。
skillspector scan ./skills/my-skill/ --no-llm
skillspector scan ./skills/my-skill/ --no-llm --format json --output report.json
skillspector scan https://github.com/user/my-skill --no-llm怎么读报告
不要只看「通过 / 不通过」。先按能力分组看命中:会不会发起网络请求、会不会读环境变量或密钥、会不会执行 shell、会不会写文件、有没有从外部地址下载内容。一个只读文档的 skill 如果出现「下载并执行」,无论严重级别标成什么,都应该人工复核。再看它引用的脚本和依赖是否与 SKILL.md 描述一致,描述说只读、代码却在写,是最常见的偏差。
接进 CI 的最小门槛
在仓库加一个 job:只要 PR 改动了 skills/ 目录,就对变更的 skill 跑一次 --no-llm --format json,然后用一个小脚本检查报告里是否出现高危类别。第一版不要追求「零告警」,先做到「高危必须人工 approve」。把扫描报告作为 PR 附件保留,方便事后追溯。
# GitHub Actions 片段(示意)
- name: Scan changed skills
run: |
uv tool install git+https://github.com/NVIDIA/skillspector.git
skillspector scan ./skills/${{ matrix.skill }} --no-llm --format json --output report.json
python scripts/check_skill_report.py report.json边界
静态扫描能发现明显的危险模式和结构问题,但挡不住「看起来正常、实际在特定输入下才作恶」的逻辑;LLM 复核也会漏报和误报。真正的防线是三层:安装前扫描、运行时最小权限(不给不必要的网络与写权限)、出事后能回滚。扫描器只是第一层,不要把它当成安全认证。
skill 不是一段说明文字,它会被执行;装它之前,至少要知道它会碰什么。