<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>supply-chain on tomrochette.com</title>
    <link>https://tomrochette.com/tags/supply-chain/</link>
    <description>Recent content in supply-chain on tomrochette.com</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>tom@tomrochette.com (Tom Rochette)</managingEditor>
    <webMaster>tom@tomrochette.com (Tom Rochette)</webMaster>
    <copyright>© 2026 Tom Rochette</copyright>
    <lastBuildDate>Sun, 11 Oct 2026 23:45:59 -0400</lastBuildDate><atom:link href="https://tomrochette.com/tags/supply-chain/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>SkillSpector</title>
      <link>https://tomrochette.com/agents/skills/skillspector/</link>
      <pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate>
      <author>tom@tomrochette.com (Tom Rochette)</author>
      <guid>https://tomrochette.com/agents/skills/skillspector/</guid>
      <category>research-note</category><category>agent-curated</category><category>fully-ai-generated</category><category>llm=glm-5.3-flash</category><category>skills</category><category>security</category><category>supply-chain</category>
      <description>&lt;p&gt;SkillSpector is NVIDIA&amp;rsquo;s Apache-2.0 security scanner for AI agent skills: point it at a git repo, URL, zip, directory, or a single SKILL.md, and it returns a 0-100 risk score with a SAFE, CAUTION, or DO NOT INSTALL recommendation before you install the thing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Its bet is that skills execute with implicit trust and minimal vetting, and it opens with its own research numbers: in a 31,132-skill analyzed subset, 26.1% of skills contained vulnerabilities and 5.2% showed likely malicious intent.&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;What it is&#xA;    &lt;div id=&#34;what-it-is&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#what-it-is&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A Python 3.12+ CLI (installed with uv or pip from git, or run as a Docker image) from NVIDIA, built as two analysis stages.&#xA;Stage one is static: eleven analyzers covering 71 vulnerability patterns across 17 categories, prompt injection, data exfiltration, privilege escalation, supply chain, excessive agency, MCP tool poisoning and least privilege, plus AST behavioral checks, taint tracking, YARA signatures, and live CVE lookups against OSV.dev with an offline fallback.&#xA;Stage two is an optional LLM semantic pass (OpenAI, Anthropic, Bedrock, Gemini, Ollama, local runtimes, or NVIDIA&amp;rsquo;s own build.nvidia.com endpoint) that can confirm findings and add explanations but never removes one, and disputed findings stay tagged &lt;code&gt;llm-unconfirmed&lt;/code&gt; in the JSON and SARIF output.&#xA;Reports land as terminal text, JSON, Markdown, or SARIF for CI, the exit codes are a documented install-gate contract, and an MCP server mode exposes a single &lt;code&gt;scan_skill&lt;/code&gt; tool so an MCP host can gate installs at runtime.&#xA;It is the security tier inside NVIDIA&amp;rsquo;s SkillEvaluator and part of the Verified Skills pipeline that scans, evaluates, and signs skills before publishing them to NVIDIA&amp;rsquo;s catalog, with in-session extensions for Pi and OpenCode.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Status&#xA;    &lt;div id=&#34;status&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#status&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Active and large: 19,966 stars, 1,753 forks, and 148 open issues as of 2026-10-12, created 2026-03-21, pushed 2026-10-10 (GitHub API).&lt;/p&gt;&#xA;&lt;picture&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: dark)&#34; srcset=&#34;https://api.star-history.com/chart?repos=NVIDIA/SkillSpector&amp;type=date&amp;theme=dark&amp;legend=top-left&#34; /&gt;&#xA;  &lt;source media=&#34;(prefers-color-scheme: light)&#34; srcset=&#34;https://api.star-history.com/chart?repos=NVIDIA/SkillSpector&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;  &lt;img alt=&#34;Star History Chart&#34; src=&#34;https://api.star-history.com/chart?repos=NVIDIA/SkillSpector&amp;type=date&amp;legend=top-left&#34; /&gt;&#xA;&lt;/picture&gt;&#xA;&lt;p&gt;The release train is active: v2.12.0 is the latest release, published 2026-09-23 with sha256-digested wheel and sdist assets, and its notes close with &amp;ldquo;Prepared by Codex on behalf of Mohit Gupta&amp;rdquo;.&#xA;The Hacker News footprint is one 49-point thread with 4 comments from 2026-06-12, thin against the star count and the same stars-ahead-of-discussion pattern this section has flagged on agentmemory and Cabinet.&#xA;The project&amp;rsquo;s documentation already disagrees with itself: the README counts 71 vulnerability patterns, the hosted docs guide counts 68.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Strengths&#xA;    &lt;div id=&#34;strengths&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#strengths&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fail-closed engineering is rare in this ecosystem&lt;/strong&gt;: ingest caps (100 MiB per source, 10,000 zip members), coverage accounting where any excluded file blocks a SAFE verdict, and an exit-code contract built for CI gates.&lt;/li&gt;&#xA;&lt;li&gt;Deterministic findings are immovable: the LLM stage can confirm or dispute, but every static finding stays in the report.&lt;/li&gt;&#xA;&lt;li&gt;Baseline suppression lets a team accept known findings once and resurface only new ones, with evidence-bound fingerprints that reactivate when the source changes.&lt;/li&gt;&#xA;&lt;li&gt;The README states its own limits, including moderate static precision, no guaranteed LLM precision, and a disabled codex_cli provider whose sandbox permits host-file reads.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Cautions&#xA;    &lt;div id=&#34;cautions&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#cautions&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;The pattern set is one vendor&amp;rsquo;s opinion, and the 68-versus-71 count drift between the README and the docs guide shows the taxonomy is still moving.&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;The OpenCode in-session provider pins one exact OpenCode version (1.18.33 in the README, 1.18.31 in the v2.12.0 notes), so in-session semantic scans break on any other OpenCode release.&lt;/li&gt;&#xA;&lt;li&gt;LLM-stage scans bill your own provider, and the batch scanner&amp;rsquo;s default model targeted DeepSeek, which the README expects to sunset.&lt;/li&gt;&#xA;&lt;li&gt;The MCP HTTP transport ships without authentication by design (loopback-only binding, credential-free https targets only), a documented but easy-to-misuse trust model.&lt;/li&gt;&#xA;&lt;li&gt;A clean scan inspects the artifact pre-install; it says nothing about whether the skill improves your output, which is SkillEvaluator&amp;rsquo;s separate question.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Pricing&#xA;    &lt;div id=&#34;pricing&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#pricing&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Free and Apache-2.0, with no hosted tier of its own.&#xA;Static scans cost nothing; LLM-stage scans run on your own provider credentials and bill your tokens.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compared to&#xA;    &lt;div id=&#34;compared-to&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compared-to&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/skillmd/&#34; &gt;SkillMD&lt;/a&gt;: the registry that publishes lint and scanner verdicts per indexed skill; SkillSpector is the scanner you run yourself on a skill SkillMD has not reviewed.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/skills-sh/&#34; &gt;skills.sh&lt;/a&gt;: the registry whose audit columns aggregate third-party scanner output after the fact; SkillSpector is the gate run before install rather than a column read after.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/opencode-skills-and-plugins/&#34; &gt;OpenCode skills and plugins&lt;/a&gt;: the harness-side allow/deny/ask gate at load time; SkillSpector inspects content before it ever reaches a harness, so the two compose rather than compete.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Bottom line&#xA;    &lt;div id=&#34;bottom-line&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#bottom-line&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;Recommended for teams that install third-party skills into CI or shared images, where the exit codes and SARIF output make a pre-install scan a cheap gate, and for anyone about to run an unvetted skill against a repo with production secrets.&lt;/strong&gt;&#xA;Not for runtime policy enforcement (that is the harness or a control plane), for output-quality questions (that is SkillEvaluator&amp;rsquo;s separate tier), or as a clean bill of health, since its static stage advertises moderate precision and the LLM stage guarantees nothing removed.&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Changes&#xA;    &lt;div id=&#34;changes&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#changes&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2026-10-12 - Created from the daily-refresh scan resolution, with five fetched sources, the one-vendor-pattern-set caution, and the docs-versus-README pattern-count drift recorded as the critical angle.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;See also&#xA;    &lt;div id=&#34;see-also&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#see-also&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/skillmd/&#34; &gt;SkillMD&lt;/a&gt; - the verification-first registry, the at-scale version of the per-scan verdict SkillSpector computes&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/skills-sh/&#34; &gt;skills.sh&lt;/a&gt; - the registry whose audit columns aggregate scanner output, the market SkillSpector&amp;rsquo;s verdicts feed&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/skillopt/&#34; &gt;SkillOpt&lt;/a&gt; - the other tool that operates on skill artifacts as inputs, training rather than grading&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/anthropic-agent-skills/&#34; &gt;Anthropic Agent Skills&lt;/a&gt; - the vendor framing of skills as untrusted inputs that motivates pre-install scanning&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://tomrochette.com/agents/skills/agent-skills-open-standard/&#34; &gt;Agent Skills open standard&lt;/a&gt; - the format whose six fields carry none of the security posture this scanner checks&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;References&#xA;    &lt;div id=&#34;references&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#references&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/NVIDIA/SkillSpector&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/NVIDIA/SkillSpector&lt;/a&gt; - 19,966 stars, 1,753 forks, 148 open issues, Apache-2.0, created 2026-03-21, pushed 2026-10-10, docs homepage (fetched 2026-10-12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://raw.githubusercontent.com/NVIDIA/SkillSpector/main/README.md&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=raw.githubusercontent.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://raw.githubusercontent.com/NVIDIA/SkillSpector/main/README.md&lt;/a&gt; - the 71-pattern taxonomy, two-stage pipeline, MCP mode, install paths, risk scoring, and the 31,132-skill research numbers (fetched 2026-10-12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://docs.nvidia.com/skills/scanning-agent-skills&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=docs.nvidia.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://docs.nvidia.com/skills/scanning-agent-skills&lt;/a&gt; - the hosted guide with its 68-pattern count, the triage policy, and the SkillEvaluator security-tier framing (fetched 2026-10-12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://api.github.com/repos/NVIDIA/SkillSpector/releases/latest&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=api.github.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://api.github.com/repos/NVIDIA/SkillSpector/releases/latest&lt;/a&gt; - v2.12.0 published 2026-09-23 with sha256-digested wheel and sdist assets, and the Codex-prepared release notes (fetched 2026-10-12)&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://hn.algolia.com/api/v1/search?query=SkillSpector&amp;amp;tags=story&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;&lt;img class=&#34;external-link-favicon&#34; src=&#34;https://www.google.com/s2/favicons?domain=hn.algolia.com&amp;sz=128&#34; alt=&#34;&#34; width=&#34;16&#34; height=&#34;16&#34; loading=&#34;lazy&#34;&gt;https://hn.algolia.com/api/v1/search?query=SkillSpector&amp;tags=story&lt;/a&gt; - the single 49-point, 4-comment thread (2026-06-12) behind the thin-footprint statement (fetched 2026-10-12)&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
      
    </item>
    
  </channel>
</rss>
