
GitHub: https://github.com/nvidia/skillspector
NVIDIA 在 AI Agent 安全赛道押注的「装前体检「工具——用 16 类 64 条规则 + 两阶段静态/LLM 流水线,把 Claude Code / Codex CLI / Gemini CLI 等的 SKILL.md 插件当作「待扫描的二进制「,在装机前发现提示词注入、工具投毒、MCP 最小特权越权等风险。
nvidia/skills(1.26k stars)、NemoClaw(21k stars)形成「平台 / skill 市场 / 安全审计「三角,下一家要做 MCP 市场的玩家很难绕过它的规则集。risk_score > 50 → exit code 1 直接断在 PR pipeline;多 LLM provider(OpenAI / Anthropic / NVIDIA build.nvidia.com / Ollama)一行 env 切换。维度 | 数据 |
|---|---|
GitHub | https://github.com/nvidia/skillspector |
Star / Fork | 5,345 / 408 |
Watcher | 28 |
Open Issues / PRs | 26 / 24 |
代码行数 | 14,979(Python 98.5%, 141 文件, 注释比 28.9%) |
依赖 | 89(runtime, 来自 pyproject.toml) |
项目年龄 | 2.8 个月(首次提交 2026-03-21) |
开发阶段 | 稳定维护(OSS 发布冲刺后期,近 30 天 19 commits,占总量 83%) |
贡献模式 | 小团队核心主导 + 社区点缀(Top1 占 29.0%,前 4 人占 78%;8 位贡献者) |
热度定位 | 大众热门 + 爆发期(近 24h 内 +145 stars) |
License | Apache License 2.0 |
Release | 0 tag / 0 release(首次 release 预计在 oss-release 冲刺后落地) |
质量评级 | 代码 优秀 | 文档 优秀 | 测试 充分 |
NVIDIA Corporation(Organization 账号),Santa Clara, CA,14.1 年账号,26,725 粉丝,749 公开仓库。核心贡献者是 NVIDIA 内部 3-4 人小团队:nraghavan(9 commits)、Nir Paz(6)、keshavp(6)、keshprad(4),外加一个 nv-automation 机器人。少量外部 PR 来自 jcchavezs / Lucas Recknagel / Werner Kasselman。NVIDIA 正在推自家 Agent 生态(nvidia/skills 1.26k stars、NemoClaw 21k stars),SkillSpector 与它们同源——本质是 NVIDIA 推 Agent 平台时配套的「上岗前体检「工具。
AI Agent 生态里「装上 SKILL.md 就能跑 shell「这种隐式信任是个未爆弹。2026 年 Liu 等人基于 42,447 个 skill 的实证研究发现 26.1% 含漏洞、5.2% 含明显恶意意图——这是一个问题已被量化、但工业级扫描器缺位的窗口。传统 Semgrep/Snyk 不识 prompt injection / system-prompt 泄漏 / 工具投毒 / memory poisoning 这一整套 Agent-原生威胁模型;通用 LLM 红队工具只给「红队评估「,不输出可在 CI 拦截的 SARIF 报告;OSV/NVD 没有直接对接「skill 声明的依赖文件「的现成路径;更没有项目把「MCP 最小特权「做成可机检规则。SkillSpector 同时填补了所有这四个空白。
「pre-install gate, 不是 post-hoc audit「——README 反复强调「DO NOT INSTALL「作为输出动作。技术栈选择贯彻这一思路: - 静态扫描优先:11 个 analyzer 在零 LLM 零网络下就能跑出 64 模式,保证「零依赖就能拦下大头「; - LLM 只做语义层补刀:3 个 semantic_* + meta_analyzer filter 把精度从 ~70% 提到 ~87%,但不是必备路径; - 可机读输出优先于人话:SARIF → CI 拦截、JSON → 自动审计、Markdown/terminal → 人读,把「返回结构化报告「当作一等公民。
NVIDIA Agent 战略的基础设施件,不是给 NVIDIA 创收的产品,而是给自家 Agent 生态做的「安全护城河「,让其他 Agent 平台在合规压力下也难以绕过。Apache 2.0 真正开源(不是 open-core),无 SaaS 版、无 enterprise 版、无 SaaS 控制点。与 nvidia/skills、NemoClaw 形成「平台 / skill 市场 / 安全审计「三角。如果它能跟着 NVIDIA 自家 agent 平台成为默认 install gate,就从「工具「升级为「标准「。
官方文档:仓库无独立官方文档站(homepage_url null),NVIDIA 开发者博客也未提及该项目。但 README 写得很充分(约 20k tokens),docs/ 下还有 5 篇深度设计文档(B.3.1 mcp-least-privilege / B.3.2 mcp-tool-poisoning / SC4-osv-live-vulnerability-lookups / LLM_ANALYZER_BASE_GUIDE / EVAL_DATASETS)+ DEVELOPMENT.md;外部深度分析文章未找到(DeepWiki 未实质收录,Zread.ai 403)。
按新颖度 × 实用性 × 可迁移性 排序:
build_type_map 先把 p = Path(x) 这种局部 var 映射到 pathlib.Path,再让 p.read_text() 解析成 pathlib.Path.read_text,解决「为什么 from pathlib import Path 后所有 p.read_text() 不被误识为 file_read sink「的痛点。零外部依赖、可解释、可控。
permissions[] 视作「声明「、代码视作「实际「,用「差集的方向 + 大小「分四类问题。和 K8s RBAC drift / IaC compliance 完全同构,通用适用。
operator.add reducer 做「多 analyzer 聚合「——新颖度 3/5 | 实用性 5/5 | 可迁移性 5/5 把「扫描工具的多 analyzer 多源输出「建模成图节点 + reducer,LLM 输出直接吃 Pydantic schema 校验;适合 SIEM、multi-linter、eval harness 等多源情报聚合场景。
--yara-rules-dir 让企业把自家 IOC 灌进扫描流水线;编译失败时不挂掉而是 logger.warning + 累加 skipped。代价是用户的恶意 yara 也会被加载并执行(YARA 本身有安全 CVE 史)——这是个值得注意的攻击面。
model_registry.yaml 描述 token 预算;SKILLSPECTOR_MODEL_REGISTRY 可整体覆盖。「能力即数据「模型胜过用 ABC 强绑定。LLMAnalyzerBase.get_batches() 自动 chunk:按 token 预算切文件 + 50 行 overlap;arun_batches() 用 asyncio.gather + Semaphore 并发。任何「LLM 处理长文件「场景通用。has_executable_scripts 1.3× 乘数。简单可解释,适合任何「严重度 → 分 → 门槛「的扫描工具。populate_by_name + alias 做 camelCase 兼容:标准协议契约的标准做法;下次 SARIF spec 改只需跟改一处。meta_analyzer.apply_filter 用 exact (file, rule_id, start_line, end_line) → start_line-only → coarse (file, rule_id) 的降级链,行级回填精度可控。is_available() 探活 + 失败 fallback:OSV.dev 客户端对每个新依赖库都该有;不假设网络随时可达。findings: Annotated[list[Finding], operator.add] 让 LangGraph 的 reducer 自动合并多源输出。 - Trade-off:换来声明式编排 + Studio 可调试 + REST 复用(graph.py 顶部 TODO 明确写了 Implement skillspector serve (FastAPI): POST /scan),代价是 LangGraph 学习曲线和一层抽象。 - 可迁移性:高。
file_cache 全文聚合 actual_caps;把 permissions 列表按 word-boundary 映射到 cap 名聚合 declared_caps;四个差集(实际未声明、声明但 wildcard、声明但无代码、未声明但有代码)→ LP1-4。 - Trade-off:纯静态、毫秒级、可解释;代价是 subprocess 这种 regex 会同时命中 shell+env,且测试文件不豁免(_is_test_file 写了但没在 node() 里调用,正是 #14 「False Report「 的根因)。 - 可迁移性:高。任何「声明/实际「对账场景(IaC drift、IAM policy audit、package manifest vs import)都能套用。
sarif_models.py 完整建模 SarifLog / Run / Tool / Driver / Result / Location / Region / ArtifactLocation(带 populate_by_name 做 camelCase 兼容);MetaAnalyzerResult 用 Pydantic Field + field_validator 兜「LLM 把 nested 对象 stringify「边界 case。 - Trade-off:换来 LLM 输出自动 schema 校验(with_structured_output 直接吃 model),代价是 SARIF 全套模型手工维护。 - 可迁移性:高。
维度 | SkillSpector | AI-Infra-Guard | Semia | skill-sentinel | SkillScan |
|---|---|---|---|---|---|
Stars | 5.3k | 3.9k | 512 | 13 | 3 |
规则集 | 16 类 64 模式 | ~12 类 ~30 模式 | 较少 | <10 条 | 较少 |
MCP 协议层 | LP1-4 + TP1-4 (独家) | 无 | 无 | 无 | 无 |
LLM 阶段 | Stage 2 可关 (~87% 精度) | 有 | 无 | 无 | 有 |
多 LLM provider | OpenAI / Anthropic / NVIDIA / Ollama | 单一 | 单一 | 无 | 单一 |
输出格式 | JSON / MD / SARIF / Terminal | HTML dashboard | JSON | JSON | JSON |
编排 | LangGraph + Studio | Flask web | 裸 Python | 裸 Python | 裸 Python |
动态执行 | ❌(明确无) | ❌ | ❌ | ❌ | ✅ Docker 沙箱 |
定位 | CI 友好 pre-install gate | 红队评估控制台 | pre-install 轻量替代 | 极简对照 | 动态行为预测 |
nvidia/skills / NemoClaw 的协同(其他竞品无类似「自家平台背书「)。semgrep agent-skills 规则集(Semgrep 是行业默认 SAST,背书效应强)。skill-scanner 下),仅 1 个腾讯先发者,其余都是个位-百位 star 尾随者——长尾可能内卷。「CI 友好的 skill pre-install gate「——与「红队评估平台「(AI-Infra-Guard)、「动态沙箱「(SkillScan)形成三层互补。在 AI Agent 安全这个 2026 年才成型的细分赛道里,SkillSpector 以 NVIDIA 出品 + 5.3K stars + 64 模式规则 + MCP 协议层专属规则占据事实头部;接下来 6-12 个月的看点是它能不能跟着 NVIDIA 自家 agent 平台成为默认 install gate——若成功,会从「工具「升级为「标准「。
nvidia/skills 哪个 agent 框架上。meta_analyzer 异常吞掉 + exit 0 是真问题,对跑大批量 skill 的 CI 场景是个埋雷。Issue #10 揭示 LLM 调用无 retry/backoff 且默认并发 10 硬编码。graph.invoke({...}) 把扫描器当库嵌进自家 skill,但 --no-llm 与 LLM 模式输出差异、静态 FP 都没文档化。--yara-rules-dir 让企业内化自家 IOC,但用户的恶意 yara 也会被加载并执行(YARA 本身有 CVE 史),需要文档警示。--no-llm 跑 Stage 1 静态、--format sarif 输出 + --risk-threshold 50 拦 CRITICAL,零 API key 成本;Stage 2 LLM 留给「评审「环节人读。from skillspector import graph 嵌入上架审核流水线,PR 时跑一遍、CI 不通过不让合并。src/skillspector/graph.py(44 行)、llm_analyzer_base.py、sarif_models.py 是教科书级别的范例。nodes/analyzers/mcp_tool_poisoning.py + nodes/analyzers/mcp_least_privilege.py 是行业首套实现。nodes/analyzers/osv_client.py 的 batch + cache + static fallback 是所有「实时情报对接「场景的样板。providers/{base.py,registry.py,openai/,anthropic/,nv_build/} 的 Protocol + 子包 + 每包 YAML 模式胜过 ABC 强绑定。
examples/scan_one_skill.py 就能把门槛从「读完 README「降到「复制粘贴「。资源 | 链接 |
|---|---|
DeepWiki | 未实质收录(页面处于加载态) |
Zread.ai | 未收录(HTTP 403) |
关联论文 | 「Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale「(Liu et al., 2026)——README 引用为 26.1% 含漏洞 / 5.2% 可能恶意 / 42,447 skills 数据集,arXiv 链接未直接核验 |
在线 Demo | 无(仓库未提供 hosted playground;Docker 镜像可本地一键起) |
关键 Issue | #9 两阶段流水线静默退化 / #14 False Report / #61 SSRF 检测 |
设计文档 | B.3.1 mcp-least-privilege / B.3.2 mcp-tool-poisoning / SC4 OSV live lookup |