SkillSpector 技能安全扫描器
在安装前扫描智能体技能的安全风险。
按维度查看评分与理由
证据显示:CI工作流使用最小权限(contents: read),发布工作流仅在合并时提升权限;HTTP传输默认无认证但文档明确警告并建议反向代理;扫描器本身不执行被扫描代码,仅静态分析;有输入大小限制防止zip炸弹;依赖有版本约束;有安全策略和漏洞报告渠道。扣分:用户确认机制仅在MCP工具中隐含(safe_to_install),CLI扫描无交互确认;回滚机制未明确,仅提及基线抑制;数据流透明度部分,LLM分析会发送数据到外部API,但文档未详细说明数据保留和隐私。
证据显示:README、pyproject.toml、CI配置和测试文件之间一致;依赖有版本范围,但未锁定精确版本(除uv.lock);有失败消息设计(如IngestLimitExceededError)。扣分:依赖可用性未完全保证,因为未提供锁文件内容;失败消息在文档中仅部分示例。
证据显示:明确面向Claude Code、Codex、Gemini CLI等用户;支持多种输入格式和输出格式;有MCP服务器集成;有批量扫描工具;支持多种LLM提供商。扣分:触发精度方面,MCP工具仅一个scan_skill,但文档未详细说明参数校验;环境适配方面,Docker和本地安装均有说明,但未提及Windows等平台。
证据显示:README结构清晰,有文档链接;安装说明详细(uv、pip、Docker);命名稳定(skillspector);有示例输出;有已知限制(如HTTP无认证、DeepSeek日落);Apache-2.0许可证;有版本号(pyproject.toml 2.8.2)和CI。扣分:无CHANGELOG文件,版本历史不明确;维护责任由NVIDIA承担,但未明确具体维护者。
证据显示:输出格式多样(terminal、JSON、Markdown、SARIF),便于集成;提供风险评分和严重性标签;有基线抑制功能减少误报;价值明确(检测恶意技能)。扣分:成本效益未量化,LLM分析可能产生API费用,但文档未讨论成本优化。
证据显示:README中的功能列表与pyproject.toml描述一致;有测试文件(如test_monkeypatch_fragility.py)验证特定行为;有CI配置。扣分:跨来源验证有限,仅依赖仓库内部证据;事实与推断分离方面,README声称检测68种模式,但未提供验证数据。
- HTTP传输默认无认证,若绑定到可路由接口需自行配置反向代理和认证。
- LLM分析会将技能内容发送到外部API,使用前需评估数据隐私和合规性。
- 依赖未锁定精确版本,建议使用uv.lock或类似机制确保可复现性。
- 无CHANGELOG文件,版本升级历史不透明。
这个 Agent 能做什么,适合哪些场景?
SkillSpector 是用于审查 AI 智能体技能的安全扫描器,可扫描 Git 仓库、URL、ZIP 文件、本地目录和单个文件。它以静态分析为第一阶段,并可选用 LLM 进行语义评估;扫描对象不会被执行。工具覆盖 17 类、68 种漏洞或恶意行为模式,包括提示注入、凭据或上下文外传、危险代码、依赖风险、MCP 最小权限和 MCP 工具投毒。它可输出终端报告、JSON、Markdown 或 SARIF,并给出 0–100 风险分数、严重度、安装建议和具体发现。它既可作为 Python LangGraph 工作流调用,也可通过 `skillspector mcp` 作为 MCP 服务器,为 Claude Code、Codex CLI、Gemini CLI 等支持 MCP 的运行时提供安装前门禁。
运行 skillspector scan <target> 后,工具先摄取目标并对符合条件的文件执行正则静态检测、Python AST 行为分析、YARA 签名检查,以及 SC4 通过 OSV.dev 进行的依赖 CVE 查询。随后,如未使用 --no-llm,它会把符合分析条件的文件内容发送给所配置的 SKILLSPECTOR_PROVIDER,进行可选的 LLM 语义评估和误报过滤。最终报告包含 risk_assessment、组件清单、issues 和扫描元数据;JSON 结果可作为 CI 或 IDE 的稳定集成接口。skillspector baseline 可生成基线,后续扫描可通过 --baseline 仅报告新的发现。安装 MCP extra 后,scan_skill(target, use_llm=true, output_format="json") 会返回结构化的 risk_score、severity、recommendation、safe_to_install 和 findings。
- 维护 Claude Code 技能库的团队,在将第三方 Git 仓库纳入内部目录前执行静态扫描,并以 JSON 报告决定是否允许安装。
- 为 Codex CLI 配置 MCP 工具的开发者,在添加新技能或 MCP 相关内容前调用
scan_skill,按风险建议实施安装门禁。 - 在 CI 中维护技能包的安全工程师,使用 SARIF 输出将危险调用、未固定依赖和供应链发现导入现有代码扫描流程。
- 需要审计 ZIP 形式技能交付物的安全负责人,在不执行其中代码的前提下检查提示注入、数据外传和可疑 YARA 特征。
- 需要降低重复告警的技能维护者,提交
.skillspector-baseline.yaml,让后续复扫聚焦尚未处置的新发现。
这个 Agent 有哪些优点和局限?
- 将正则检测、Python AST、YARA、OSV.dev 依赖漏洞查询和可选 LLM 语义评估组合为两阶段流程,而非只做关键词匹配。
- 可扫描本地文件、目录、ZIP、URL 与 Git 仓库,并提供终端、JSON、Markdown、SARIF 四种报告输出。
- 明确不执行被扫描技能;
--no-llm可避免将文件内容发送给 LLM 提供商。 - 支持基线抑制与指纹或 glob 规则,便于在持续扫描中只处理新增风险。
- 提供 MCP 服务和 Python
graph.invoke接口,可用于安装门禁、CI 和编辑器集成。
- 静态分析可能产生误报,LLM 语义评估虽可提高精度,但需要配置提供商、凭据或本地 CLI 运行时。
- 启用 LLM 分析会将符合条件的文件内容发送给所配置的提供商;即使使用
--no-llm,SC4 仍会向 OSV.dev 发送依赖名称和版本。 - 工具是安装前检测而不是沙箱;若仍安装高风险技能,它不会隔离或限制该技能对主机的影响。
- 文档列出的限制包括可能遗漏非英语模式、无法分析图片中的文字或加密/编译代码,也不进行动态行为执行。
- HTTP MCP 传输默认没有认证;若绑定到可路由接口,必须自行放置带认证的反向代理。
如何安装或部署这个 Agent?
CLI 仅安装:
uv tool install git+https://github.com/NVIDIA/skillspector.git若要运行 MCP 服务器:
uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'从源码安装时,先创建并激活 Python 虚拟环境,然后运行 make install;开发依赖使用 make install-dev。无凭据的首次静态扫描可直接使用 --no-llm。启用 LLM 分析时,需要按所选提供商配置凭据;例如 OpenAI 路径需要 SKILLSPECTOR_PROVIDER=openai 和 OPENAI_API_KEY。
如何使用这个 Agent?
先进行本地静态扫描:
skillspector scan ./my-skill/ --no-llm生成机器可读报告:
skillspector scan ./my-skill/ --no-llm --format json --output report.json扫描 Git 仓库:
skillspector scan https://github.com/user/my-skill使用 OpenAI 进行可选语义分析:
export SKILLSPECTOR_PROVIDER=openaiexport OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/启动本地 MCP 服务:
skillspector mcp向 Claude Code 注册该服务:
claude mcp add skillspector -- skillspector mcp常见问题
静态扫描需要 API 密钥吗?
skillspector scan ./my-skill/ --no-llm 可跳过 LLM 分析。SC4 会尝试访问 OSV.dev 查询依赖漏洞;OSV.dev 不需要 API 密钥,无法访问时会使用内置回退列表。LLM 分析会发送什么数据?
SKILLSPECTOR_PROVIDER 对应的端点。被识别为有效根级 OpenSSF Model Signing 签名的 skill.oms.sig 会保留在组件清单中,但不参与静态或 LLM 内容分析。扫描是否会执行不受信任的技能代码?
如何在自动化流程中阻止高风险安装?
recommendation:SAFE 可允许,CAUTION 可提示或警告,DO_NOT_INSTALL 可阻止。命令退出码仅将风险分数大于 50 的结果标为 1。MCP HTTP 服务能直接暴露到公网吗?
file:// URL。