
SkillSpector v2.11.1
AIエージェントスキル向けセキュリティスキャナ。インストールする前に、Claude Code、Codex、MCPスキルに含まれる脆弱性、悪意のあるパターン、セキュリティリスク、プロンプトインジェクション、データ窃取、サプライチェーンリスクを検出します。
SkillSpector
AIエージェントスキル向けのセキュリティスキャナー。 エージェントスキルをインストールする前に、脆弱性、悪意のあるパターン、セキュリティリスクを検出します。
概要
AIエージェントスキル(Claude Code、Codex CLI、Gemini CLI などで使用される)は、暗黙の信頼と最小限の審査のもとで実行されます。研究データセットから分析した31,132件のスキルのサブセットでは、スキルの26.1%に脆弱性が含まれ、5.2%が悪意のある意図を示す可能性があります。
SkillSpector は、「このスキルはインストールしても安全か?」 という問いに答える手助けをします。
SkillSpector は NVIDIA Verified Skills パイプラインの一部であり、公開前にエージェントスキルをスキャン、評価、署名します。合格したスキルは NVIDIA skills カタログに公開されます。
ドキュメント
- インストール前にエージェントスキルをスキャンする — ホストされたガイド:いつスキャンするか、レポートの読み方、インストールをゲートする方法。
- 開発ガイド — アーキテクチャ、パッケージレイアウト、アナライザーパイプラインの拡張方法。
- 分析リソースの上限 — フェイルクローズドなバンドル、パーサー、ネストされたアーティファクト、台帳、検出結果の上限。
- Pi 拡張機能 — エージェントセッション内からスキルをスキャンするための Pi ツールとして SkillSpector をインストールします。
- OpenCode 拡張機能 — エージェントセッション内からスキルをスキャンするための OpenCode ツールおよび
/skillspectorコマンドとして SkillSpector をインストールします。
機能
- マルチフォーマット入力:Git リポジトリ、URL、zip ファイル、ディレクトリ、単一ファイルをスキャン
- 17カテゴリにわたる71の脆弱性パターン:プロンプトインジェクション、データ流出、権限昇格、サプライチェーン、過剰なエージェンシー、出力処理、システムプロンプトの漏洩、メモリポイズニング、ツールの悪用、ローグエージェント、拒否回避、トリガー悪用、危険なコード(AST)、テイント追跡、YARA シグネチャ、MCP 最小権限、MCP ツールポイズニング
- 2段階分析:高速な静的解析 + オプションの LLM セマンティック評価
- ライブ脆弱性検索:SC4 は OSV.dev にクエリしてリアルタイムの CVE データを取得し、自動オフラインフォールバックを備える
- 複数の出力形式:ターミナル、JSON、Markdown、SARIF レポート
- リスクスコアリング:0〜100のスコア、重大度ラベル、明確な推奨事項
- ベースライン / 誤検知の抑制:glob ルールまたはフィンガープリントベースラインで既知の検出結果を承認し、再スキャン時に新規の問題のみを表示(ドキュメント)
クイックスタート
インストール
オープンソースソフトウェアに関する通知: このプロジェクトは、追加のサードパーティ製オープンソースソフトウェアプロジェクトをダウンロードおよびインストールします。使用前に、これらのオープンソースプロジェクトのライセンス条項を確認してください。
まず仮想環境を作成してアクティブ化してください(すべての make ターゲットは venv がアクティブであることを前提としています)。uv または pip を使用してください。Makefile は、利用可能な場合は uv を、そうでなければ pip を使用します。
uv によるクイックインストール(CLI のみ):
uv tool install git+https://github.com/NVIDIA/skillspector.git
# Update later: uv tool update skillspector
skillspector mcp を実行する予定がある場合は、インストール時に MCP の extra をインストールしてください:
uv tool install 'skillspector[mcp] @ git+https://github.com/NVIDIA/skillspector.git'
出典:
# Clone the repository
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
# Create and activate virtual environment
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate
# Install for production use
make install
# Or install with development dependencies
make install-dev
Docker(Python 不要)
付属の Dockerfile からローカルでビルドすることで、Python をインストールせずに SkillSpector を実行できます。イメージは Docker 公式の Python 3.12-slim-bookworm イメージをベースにしています。
イメージをビルドする:
make docker-build
# or: docker build -t skillspector .
ローカルディレクトリをスキャンするには、カレントディレクトリをコンテナの作業ディレクトリである /scan にマウントします:
docker run --rm -v "$PWD:/scan" skillspector scan ./my-skill/ --no-llm
LLM分析によるスキャン ローカルの .env ファイルで認証情報を渡します:
cat > .env <<'EOF'
SKILLSPECTOR_PROVIDER=anthropic
ANTHROPIC_API_KEY=sk-ant-...
EOF
docker run --rm \
-v "$PWD:/scan" \
--env-file .env \
skillspector scan ./my-skill/
認証情報をシェル環境から直接渡すこともできます:
docker run --rm \
-v "$PWD:/scan" \
-e SKILLSPECTOR_PROVIDER=anthropic \
-e ANTHROPIC_API_KEY="$ANTHROPIC_API_KEY" \
skillspector scan ./my-skill/
マウントされたディレクトリに書き込むことで、ホストファイルシステムにレポートを書き込む:
docker run --rm --user "$(id -u):$(id -g)" \
-v "$PWD:/scan" \
skillspector scan ./my-skill/ --no-llm --format json --output report.json
繰り返しの静的スキャン用のオプションのエイリアス:
alias skillspector-docker='docker run --rm -v "$PWD:/scan" skillspector'
skillspector-docker scan ./my-skill/ --no-llm
基本的な使い方
# Scan a local skill directory
skillspector scan ./my-skill/
# Scan a single SKILL.md file
skillspector scan ./SKILL.md
# Scan a Git repository
skillspector scan https://github.com/user/my-skill
# Scan a zip file
skillspector scan ./my-skill.zip
サイズ制限
SkillSpectorは、過大なダウンロードやzip爆弾の影響を抑えるため、リモート入力とアーカイブ入力に対して2つの独立した上限を適用します:
- 取り込み単位の上限:
INGEST_MAX_BYTES(100 MiB)— ストリーミングされたURLダウンロード、zipアーカイブの非圧縮合計サイズ、およびクローン後のGitリポジトリのディスク使用量に適用されます。 - zipメンバー上限:
INGEST_MAX_ZIP_MEMBERS(10,000)— 単一のzip内のエントリ数を制限します。
ファイル単位の1 MB解析上限(MAX_FILE_BYTES)は、別個の下流側の制限であることに注意してください。これは、すでに取り込まれたディレクトリから個々のアナライザーが読み取る量を制限するものです。上記の取り込み上限は、そもそもどれだけのコンテンツがディスク上に到達できるかを制限します。いずれかの取り込み上限に違反した場合、IngestLimitExceededError を伴ってフェイルクローズします。
出力形式
# Terminal output (default) - pretty formatted
skillspector scan ./my-skill/
# JSON output - machine readable
skillspector scan ./my-skill/ --format json --output report.json
# Markdown output - for documentation
skillspector scan ./my-skill/ --format markdown --output report.md
# SARIF output - for CI/CD integration and IDE tooling
skillspector scan ./my-skill/ --format sarif --output report.sarif
バッチスキャン
contrib/batch_scan/ からスキルのディレクトリ全体を並列でスキャンします:
python -m contrib.batch_scan.batch_scan ./my-skills/ --no-llm
python -m contrib.batch_scan.batch_scan ./my-skills/ --workers 20 -f json -o report.json
python -m contrib.batch_scan.batch_scan ./tests/fixtures/ -f terminal --workers 20
多言語検出(zh/ja/ko)に対応し、ターミナル/JSON/Markdown出力をサポートします。
より高い並列度でLLMスキャンを行うには、
.env.exampleに従って複数のAPIキーを設定してください。キーがアカウントレベルのレート制限を共有していない限り、プールによってスループットと耐障害性が向上します。
詳細はcontribガイドを参照してください。
LLMサポートに関する注意: デフォルト設定は、最も安価な公開オプションであるDeepSeekを対象としています。DeepSeek-Chatは 提供終了が予定されており、コントリビューターは ローカルモデルをテストするためのハードウェアを保有していません。バッチスキャナーは 当初OpenAI互換エンドポイントでテストされました — DeepSeekの構造化出力サポートの欠如により、 手動でのJSONパースパッチが必要でした。より汎用的なバックエンド(Ollama、vLLM、または別のプロバイダー)に 貢献いただける場合、PRを非常に歓迎します。
MCPレジストリのスナップショットの比較
まず生のレジストリペイロードのキャプチャ(registry-before.jsonと
registry-after.json)から始めます。スキャンレポートをprevious.jsonとして保存し、その後に生成されたローカルレポートに対して後のスキャンを比較します:
skillspector scan registry-before.json --mcp-registry --format json --output previous.json
skillspector scan registry-after.json --mcp-registry --format json \
--mcp-registry-compare previous.json --output compared.json
オプションの comparison オブジェクトは、追加および削除されたサーバー ID、変更された正規化フィールドとその以前および現在の値、そして unchanged_count を列挙します。ID はサーバー名とバージョンであるため、新しいバージョンは追加として現れ、古いバージョンは新しいスキャンに存在しない場合に削除として現れます。取得元とスキャンタイムスタンプは比較から除外されます。unmodeled_changes は、正規化フィールドが一致する一方で生レコードのハッシュが変更された同一 ID のレコードを列挙します。これらは未変更としてカウントされません。これはスナップショットモデル外のフィールドへの変更、または生レコード内の配列の並べ替えを示している可能性があります。パッケージやリモートの順序のみの変更は、正規化フィールドの変更ではありません。changed 内のエントリにも、スナップショットモデル外の変更が含まれている場合があります。それらの変更を確認するには生レコードを検査してください。
同じ選択スコープでレポートを比較してください。現在の入力に存在しないサーバーは削除済みとして報告されますが、これはレジストリから削除されたことを証明するものではありません。
比較ファイルは、このレジストリモードで生成された、有効な正規化スナップショットを持つローカルレポートでなければなりません。不正な形式、サイズ超過、または重複したサーバー ID は拒否されます。このオプションには --mcp-registry が必要であり、検出結果の抑制を行う --baseline とは別のものです。検出結果を抑制したりリスクスコアを変更したりすることはなく、列挙されたサーバーエンドポイントの取得や実行も行いません。
誤検知の抑制(ベースライン)
既知/許容済みの検出結果を抑制し、リスクスコアが未トリアージの問題のみを反映するようにし、再スキャンでは新規の検出結果のみが表面化するようにします。完全なリファレンスについては抑制ガイドを参照してください。