概要
SkillSpector は、AI エージェントスキルにおける脆弱性、悪意のあるパターン、セキュリティリスクを分析し、Git リポジトリ、URL、ファイルなど複数の入力形式をサポートします。リスクスコアとさまざまな形式の詳細なレポートを提供し、オプションで LLM セマンティック分析を使用して検出を強化することもできます。
README プレビュー
# SkillSpector\n\n**Security scanner for AI agent skills.** Detect vulnerabilities, malicious patterns, and security risks before installing agent skills.\n\n[](https://www.python.org/downloads/)\n[](https://www.apache.org/licenses/LICENSE-2.0)\n\n## Overview\n\nAI agent skills (used by Claude Code, Codex CLI, Gemini CLI, etc.) execute with implicit trust and minimal vetting. Research shows that **26.1% of skills contain vulnerabilities** and **5.2% show likely malicious intent**.\n\nSkillSpector helps you answer: **"Is this skill safe to install?"**\n\n## Documentation\n\n- **[Development guide](docs/DEVELOPMENT.md)** — Architecture, package layout, and how to extend the analyzer pipeline.\n\n## Features\n\n- **Multi-format input**: Scan Git repos, URLs, zip files, directories, or single files\n- **64 vulnerability patterns** across 16 categories: prompt injection, data exfiltration, privilege escalation, supply chain, excessive agency, output handling, system prompt leakage, memory poisoning, tool misuse, rogue agent, trigger abuse, dangerous code (AST), taint tracking, YARA signatures, MCP least privilege, and MCP tool poisoning\n- **Two-stage analysis**: Fast static analysis + optional LLM semantic evaluation\n- **Live vulnerability lookups**: SC4 queries [OSV.dev](https://osv.dev) for real-time CVE data with automatic offline fallback\n- **Multiple output formats**: Terminal, JSON, Markdown, and SARIF reports\n- **Risk scoring**: 0-100 score with severity labels and clear recommendations\n\n## Quick Start\n\n### Installation\n\nCreate and activate a virtual environment first (all `make` targets assume the venv is active). Use **uv** or **pip**; the Makefile uses `uv` if available, otherwise `pip`.\n\n```bash\n# Clone the repository\ngit clone https://github.com/NVIDIA/skillspector.git\ncd skillspector\n\n# Create and activate virtual environment\nuv venv .venv && source .venv/bin/activate\n# or: python3 -m venv .venv && source .venv/bin/activate\n\n# Install fo
FAQ (5)
トラブル対応SkillSpector TP4(`mcp_tool_poisoning`)のLLMバッチが直列に実行され、スキャンがタイムアウトしてしまう問題を修正するにはどうすればよいですか?
2026-10-06にmainにマージされたPR #731を含むSkillSpectorビルドにアップグレードしてください。この修正により、src/skillspector/nodes/analyzers/mcp_tool_poisoning.pyの_check_tp4が次のコードから:
batch_outcome = analyzer.run_batches_detailed(batches)
次のように変更されます:
batch_outcome = run_async(analyzer.arun_batches_detailed(batches))
これにより、セマンティックアナライザーおよびメタレビューと同じ共有の並行ランナーが使用されます。並行実行の上限を設定します。例:
export SKILLSPECTOR_MAX_LLM_CONCURRENCY=4
1を指定した場合でも、これまでどおり直列実行が強制されます。結果はバッチ順のまま維持されるため、TP4_MAX_FINDINGSおよびレジャープロジェクションの動作は変更されません。テストでは、TP4の実行時間が約270秒から75秒に短縮され、フルスキャンが320秒から206秒に短縮されました。すぐにアップグレードできない場合は、一時的な回避策としてSKILLSPECTOR_MAX_WORKFLOW_SECONDSを増やすか、コードチャンクの数を減らしてください。
トラブル対応カスタムのYARAルールがコンパイルに失敗した場合に、SAFEを返すのではなくSkillSpectorを失敗させるにはどうすればよいですか?
この問題は、コミット 9749372 における SkillSpector 2.11.2 に影響します。これは PR #557 で修正されているため、その PR を含む main ビルドまたはリリースにアップグレードしてください。
アップグレード後は、無効な .yar ファイルがあると、そのパスと理由を示す WARNING が出力され、static_yara は degraded/partial として報告され、--fail-on-incomplete は SAFE を返す代わりにゼロ以外の終了コードで終了します。
すぐにアップグレードできない場合は、スキャン前にすべてのカスタムルールを検証してください。
for f in rules/*.yar; do
python -c "import sys,pathlib,yara; p=pathlib.Path(sys.argv[1]); p.read_text(encoding='utf-8'); yara.compile(filepath=str(p))" "$f" || exit 1
done
これにより、UTF-8 デコードと YARA コンパイルの両方がチェックされます。UTF-8 BOM を削除するには、次を実行します。
sed -i '1s/^\xEF\xBB\xBF//' rules/acme.yar
Windows-1252 のルールを UTF-8 に変換するには、次を実行します。
iconv -f WINDOWS-1252 -t UTF-8 rules/acme.yar -o rules/acme.yar.utf8 \
&& mv rules/acme.yar.utf8 rules/acme.yar
影響を受けるバージョンでは、SKILLSPECTOR_LOG_LEVEL=DEBUG を指定して実行するとスキップされたルールのメッセージを確認できますが、スキャン自体は正常に完了するため、終了コードに依存しないでください。
トラブル対応「Send BTC」を含む Bitcoin 資金調達ドキュメントにおける SkillSpector の ransomware_behavior の誤検知を修正するにはどうすればよいですか?
この誤検知は、ransomware_behavior YARAルールが、nocaseのsend\s+.*btcというランサムノートパターンで一般的な支払いに関する文章にマッチし、any of themを使用していたため、暗号化や身代金要求が不要だったことが原因で発生しました。この問題はPR #608(コミットa0d489e6、2026-10-08にマージ、Jira SKILLSPECT-232)で修正されました。このルールは現在、Bitcoin支払いに関する文言の周辺にランサムウェア特有のコンテキストを要求し、暗号化、リネーム、上書き、脅迫の指標は維持したまま、節の冒頭に現れる支払い案内を除外します。SkillSpectorをコミットa0d489e6を含むリリースに更新してから、ClawHub/SkillSpector監査を再実行してください。すぐに更新できない場合は、一時的に資金提供の指示文言を書き換え、例えば「Fund the account using Bitcoin」とすることで、一般的なsend ... BTCパターンを回避し、再スキャンしてください。
トラブル対応なぜ `skillspector --help` を実行すると、API キーが見つからないという警告が表示され、動作が遅くなるのですか?
これは、skillspector.graph がモジュールのインポート時に graph = create_graph() を実行することが原因で発生します。これにより、CLI は --help や --version の場合でもすべてのアナライザーを構築・初期化してしまいます。PR #436 を含むリリースにアップグレードしてください。この PR では、eager なグラフ構築が、lazy でスレッドセーフなグラフプロキシに置き換えられています。グラフは、実際に最初の graph.invoke() または graph.ainvoke() が呼び出されたときにのみコンパイルされ、既存の API は変更されません。アップグレード後、プロバイダーの認証情報をクリアし、time skillspector --help で確認してください。ヘルプは missing-key の警告なしで即座に表示されるはずです。missing-credential の警告は、実際のスキャンで利用できないアナライザーが初期化される場合には引き続き表示されます。
トラブル対応SkillSpectorが.ZIPや.ZiPアーカイブを展開せずに通常のファイルとして扱ってしまう問題を修正するにはどうすればよいですか?
これは、InputHandler.resolve()、_download_file()、_download_transitive_file() が大文字小文字を区別する .endswith(".zip") チェックを使用しているために発生します。ZIP 拡張子を大文字小文字を区別せずに認識する、マージ済みの PR #727 を含むビルドに SkillSpector を更新してください。更新できない場合は、アーカイブの名前を変更して小文字の拡張子にしてください:
mv skill.ZIP skill.zip
mv skill.ZiP skill.zip
application/octet-stream として配信されるダウンロードファイルの場合は、URL または保存先のファイル名が小文字の .zip で終わっていることを確認してください。ソースコードレベルの回避策としては、3 つのメソッドすべてでチェックを filename.lower().endswith(".zip") に変更する方法があります。