命令行工具
NVIDIA/SkillSpector avatar
NVIDIA/SkillSpector

SkillSpector:在安装 AI Agent 技能前,用 71 种模式做一次安全体检

AI 代理技能的安全扫描器。检测漏洞、恶意模式和安全风险。

17,309 个 Star1,474 个 ForkPythonApache-2.0
GitHub

秒懂

它是什么?
NVIDIA 开源的 SkillSpector 针对 Claude Code、Codex CLI 等 Agent 技能进行静态扫描与可选 LLM 语义评估,输出 0 到 100 的风险分。本文基于其 README 与仓库结构,说明它的扫描机制、使用方式与适用边界。
适合谁用?
SkillSpector 适合那些需要批量审核 Agent 技能、又不想把每个 SKILL.md 都人工读一遍的团队,尤其是已经接入 NVIDIA Verified Skills 流程或者使用 CI/CD 门禁的工程组。它不适合把扫描结果当作最终安全裁决的人,因为静态分析只能覆盖已知模式,而 LLM 语义评估需要额外配置 API Key 且会引入不确定性和成本。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库在最近一天内有新的提交。
用什么语言写的?
主要是 Python(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

Agent 技能的安全盲区,SkillSpector 想填上

Claude Code、Codex CLI、Gemini CLI 这类工具会按技能文件里的指令执行操作,而这些技能往往来自公开仓库或社区分享,安装时几乎没有审查。SkillSpector 的 README 引用研究数据,称 26.1% 的技能存在漏洞,5.2% 有疑似恶意意图。无论这个数字是否准确,它指向的是一个真实问题:技能本质上是可执行代码,但用户对待它的方式更像对待一份文档。SkillSpector 的目标就是回答一个具体问题:这个技能能不能安全安装。它不是一个通用安全平台,而是专门针对 Agent 技能的输入形态、执行上下文和信任模型设计的扫描器。

两级扫描:先静态抓模式,再让 LLM 看语义

SkillSpector 的扫描分为两个阶段。第一阶段是快速静态分析,覆盖 71 种漏洞模式,分属 17 个类别,包括提示注入、数据外泄、权限提升、供应链风险、过度代理、输出处理、系统提示泄露、内存投毒、工具误用、 rogue agent、反拒绝、触发器滥用、危险代码 AST、污点跟踪、YARA 签名、MCP 最小权限和 MCP 工具投毒。这些模式大多可以通过正则、AST 解析或 YARA 规则匹配,速度较快。第二阶段是可选的 LLM 语义评估,用来捕捉静态模式抓不到的上下文敏感问题,比如一段看似无害的指令在特定 Agent 环境下会变成恶意操作。这个设计的取舍很明显:静态分析快但可能误报或漏报,LLM 能理解语义但需要外部服务、API Key 和额外延迟。README 没有说明 LLM 评估的具体模型或提示词,这部分细节需要看 DEVELOPMENT.md 或源码。

输入形态与上限:从 URL 到 zip,但别想塞炸弹

SkillSpector 接受 Git 仓库、URL、zip 文件、目录或单个 SKILL.md 文件。这覆盖了技能分发的常见途径。为了限制超大下载和 zip 炸弹的影响,它设置了两道独立的摄入上限:INGEST_MAX_BYTES 默认 100 MiB,作用于流式 URL 下载、zip 解压后的总大小以及 Git 克隆后的磁盘占用;INGEST_MAX_ZIP_MEMBERS 默认 10000,限制单个 zip 的条目数。任何一道上限被突破,都会以 IngestLimitExceededError 失败关闭,而不是继续处理。注意,还有一个下游的 MAX_FILE_BYTES 限制,默认 1 MB,它控制的是单个分析器从已摄入目录中读取的文件大小。文档特意强调这两个上限是独立的,这意味着即使你把一个大文件拆成多个小文件,摄入上限仍然会拦住总量。这个设计在防御 zip 炸弹时是合理的,但如果你需要扫描大型技能仓库,可能需要调整环境变量。

安装与运行:uv、pip、Docker 三条路

最直接的安装方式是 uv,命令是 uv tool install git+https://github.com/NVIDIA/skillspector.git。如果你要跑 skillspector mcp,需要安装 MCP extra,即 uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'。从源码安装则先克隆仓库,创建虚拟环境,然后 make install 或 make install-dev。Makefile 优先使用 uv,没有则回退到 pip。不想装 Python 的话,可以用 Docker:make docker-build 或 docker build -t skillspector .,然后挂载当前目录到 /scan 运行。基本用法很简单,skillspector scan ./my-skill/ 就能扫一个目录,也可以扫单个文件、Git 仓库 URL 或 zip。输出格式有 terminal、json、markdown 和 sarif,其中 SARIF 适合接入 CI/CD 或 IDE。JSON 输出配合 --output 参数可以写文件,方便后续处理。

风险评分与抑制机制:如何让扫描结果可操作

SkillSpector 输出 0 到 100 的风险分,并附带严重级别标签和明确建议。这个分数不是简单的计数,而是多种模式加权后的结果,但 README 没有公开权重公式。更实用的是 baseline 和 false-positive 抑制功能:你可以通过 glob 规则或指纹建立一个基线,之后扫描只报告新增问题。这对持续集成的场景很有用,因为首次扫描可能产生大量已知发现,如果没有抑制机制,每次提交都会重复报警。指纹方式比路径 glob 更精确,因为它基于内容哈希,即使文件移动了也能匹配。但这也带来一个风险:如果某个漏洞在基线建立后悄悄变化,指纹可能不匹配,从而绕过抑制。文档建议定期审查基线,但没有说明具体频率。

实时漏洞查询:OSV.dev 的利与弊

SkillSpector 的 SC4 组件会查询 OSV.dev 获取实时 CVE 数据,并带有自动离线回退。这意味着扫描时如果网络可用,它能匹配已知漏洞的 CVE 编号;如果网络不可用,它会回退到本地数据。这个机制的价值在于,技能依赖的第三方库可能包含已知漏洞,静态模式分析抓不到版本号,而 OSV 查询能补上这一环。但离线回退的数据新鲜度取决于本地缓存,如果长时间不更新,可能漏掉新披露的 CVE。另外,每次扫描都发起外部查询,这在离线或内网环境下会拖慢速度,甚至失败。README 没有说明回退的具体实现,比如是使用本地数据库还是简单地跳过查询。对于安全要求高的环境,你可能需要确认 SC4 的行为是否满足你的合规要求。

批量扫描与 MCP 扩展:从单技能到技能库

contrib/batch_scan/ 目录提供了一个批量扫描脚本,可以并行扫描整个技能目录。用法是 python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm,支持 --workers 参数控制并发数,比如 --workers 20。它还支持多语言检测(zh/ja/ko),这对非英文技能很重要。批量扫描时如果要启用 LLM 分析并提高并发,需要在 .env.example 中配置多个 API Key。另一个扩展是 Pi 扩展,文档 docs/PI_EXTENSION.md 说明如何把 SkillSpector 安装为 Pi 工具,这样在 Agent 会话内部就能直接扫描技能。这意味着扫描可以嵌入到 Agent 的运行时流程中,而不是作为一个独立的外部步骤。不过,Pi 扩展的具体安装步骤和权限模型在 README 中被截断,需要查阅完整文档。

维护成本与许可证:Apache-2.0 下的第三方依赖

SkillSpector 的许可证是 Apache-2.0,这是宽松许可证,允许商用和修改,但需要保留版权声明。README 明确警告:安装时会下载并安装额外的第三方开源软件,用户需要自行审阅这些项目的许可证条款。这意味着你不能只盯着 SkillSpector 自己的许可证,还得检查它的依赖树。从维护角度看,项目更新频繁,v2.11.0 在 2026 年 8 月 28 日发布,v2.10.0 在两天前,v2.9.6 在十天前,说明迭代速度很快。快速迭代的好处是漏洞模式能及时更新,坏处是 API 或行为可能变化,依赖它的 CI 脚本需要跟进。另外,文档提到资源上限和失败关闭机制,这暗示项目团队在认真考虑拒绝服务攻击,但这也意味着你需要理解这些上限的默认值,否则可能误伤合法的大型技能仓库。

编辑结论

SkillSpector 适合那些需要批量审核 Agent 技能、又不想把每个 SKILL.md 都人工读一遍的团队,尤其是已经接入 NVIDIA Verified Skills 流程或者使用 CI/CD 门禁的工程组。它不适合把扫描结果当作最终安全裁决的人,因为静态分析只能覆盖已知模式,而 LLM 语义评估需要额外配置 API Key 且会引入不确定性和成本。在采纳之前,先验证三件事:一是你的技能仓库是否超过 INGEST_MAX_BYTES 的 100 MiB 上限,二是确认你接受 SC4 对 OSV.dev 的实时查询及其离线回退行为,三是用你自己的恶意样本跑一遍 baseline 功能,确认指纹抑制不会把新漏洞一起吞掉。最后,记住许可证是 Apache-2.0,但安装时会下载第三方依赖,你需要自行审阅那些依赖的许可证。

官方来源

  1. Official README
  2. Project repository
  3. Release notes
社区笔记

社区笔记