SkillSpector(GitHub リポジトリ)
TLDR AI は開発者が公開した「SkillSpector」という GitHub リポジトリを紹介したが、具体的な機能や技術的詳細は本文抜粋からは確認できない。
キーポイント
新リポジトリの紹介
TLDR AI が開発者によって公開された「SkillSpector」という GitHub リポジトリをニュースとして取り上げている。
詳細情報の欠如
提供された抜粋テキストには、ツールの具体的な機能、技術スタック、または解決する課題に関する記述が含まれていない。
影響分析・編集コメントを表示
影響分析
このニュースは特定のオープンソースプロジェクトの存在を伝えるにとどまり、現時点では業界全体への直接的な影響や技術的インパクトを評価するには情報が不十分です。
編集コメント
具体的な機能説明がないため、現時点では単なるプロジェクト名の告知に留まります。詳細な技術分析にはリポジトリ本体への直接アクセスが必要です。
AI エージェントのスキルに対するセキュリティスキャナ。 エージェントスキルのインストール前に、脆弱性、悪意のあるパターン、およびセキュリティリスクを検出します。
概要
AI エージェントスキル(Claude Code、Codex CLI、Gemini CLI などによって使用される)は、暗黙的な信頼と最小限の審査のもとで実行されます。研究によると、スキルの 26.1% に脆弱性が含まれており、5.2% が悪意のある意図を示している可能性があります。
SkillSpector は、「このスキルをインストールしても安全か?」という問いに答えるのを支援します。
ドキュメント
- 開発ガイド — アーキテクチャ、パッケージ構成、および分析パイプラインの拡張方法について。
機能
- マルチフォーマット入力:Git リポジトリ、URL、zip ファイル、ディレクトリ、または単一ファイルのスキャンが可能
- 16 のカテゴリにわたる 64 の脆弱性パターン:プロンプトインジェクション(prompt injection)、データ漏洩(data exfiltration)、特権昇格(privilege escalation)、サプライチェーン攻撃(supply chain)、過度なエージェンシー(excessive agency)、出力処理(output handling)、システムプロンプトの漏洩(system prompt leakage)、メモリ汚染(memory poisoning)、ツールの誤用(tool misuse)、ルークエージェント(rogue agent)、トリガー乱用(trigger abuse)、危険なコード(AST 解析)(dangerous code (AST))、汚染追跡(taint tracking)、YARA シグネチャ(YARA signatures)、MCP の最小権限(MCP least privilege)、および MCP ツール汚染(MCP tool poisoning)
- 2 段階分析:高速な静的解析と、オプションの LLM による意味論的評価
- リアルタイム脆弱性情報検索:SC4 が OSV.dev にクエリを実行してリアルタイムの CVE データを取得し、自動的にオフラインフォールバックを使用します。
- 複数の出力フォーマット:ターミナル、JSON、Markdown、および SARIF レポートに対応
- リスクスコアリング:0〜100 のスコアに重大度ラベルと明確な推奨事項を追加
クイックスタート
インストール
まず仮想環境を作成してアクティブ化してください(すべての make ターゲットは、この仮想環境がアクティブであることを前提としています)。uv または pip を使用します。Makefile は利用可能な場合は uv を使い、そうでない場合は pip を使用します。
リポジトリをクローンする
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
仮想環境を作成してアクティブ化する
uv venv .venv && source .venv/bin/activate
または:python3 -m venv .venv && source .venv/bin/activate
本番環境での使用のためにインストールする
make install
または、開発用依存関係とともにインストールする
make install-dev
基本的な使用方法
ローカルのスキルディレクトリをスキャンする
skillspector scan ./my-skill/
単一の SKILL.md ファイルをスキャンする
skillspector scan ./SKILL.md
Git リポジトリをスキャンする
skillspector scan https://github.com/user/my-skill
zip ファイルをスキャンする
skillspector scan ./my-skill.zip
出力形式
ターミナル出力(デフォルト)- 見やすくフォーマットされたもの
skillspector scan ./my-skill/
JSON 出力 - マシン可読形式
skillspector scan ./my-skill/ --format json --output report.json
Markdown 出力 - ドキュメント用
skillspector scan ./my-skill/ --format markdown --output report.md
SARIF 出力 - CI/CD 統合および IDE ツールリング用
skillspector scan ./my-skill/ --format sarif --output report.sarif
LLM アナリシス
必ず JSON 形式で返してください。translation フィールドのみ。他のフィールド (technical_terms など) は一切追加しないこと — 余計なフィールドを書こうとして本文翻訳がトークン上限で打ち切られる事故を防ぐため:
{"translation": "まず仮想環境を作成してアクティブ化してください(すべての make ターゲットは、この仮想環境がアクティブであることを前提としています)。uv または pip を使用します。Makefile は利用可能な場合は uv を使い、そうでない場合は pip を使用します。
リポジトリをクローンする
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
仮想環境を作成してアクティブ化する
uv venv .venv && source .venv/bin/activate
または:python3 -m venv .venv && source .venv/bin/activate
本番環境での使用のためにインストールする
make install
または、開発用依存関係とともにインストールする
make install-dev
基本的な使用方法
ローカルのスキルディレクトリをスキャンする
skillspector scan ./my-skill/
単一の SKILL.md ファイルをスキャンする
skillspector scan ./SKILL.md
Git リポジトリをスキャンする
skillspector scan https://github.com/user/my-skill
zip ファイルをスキャンする
skillspector scan ./my-skill.zip
出力形式
ターミナル出力(デフォルト)- 見やすくフォーマットされたもの
skillspector scan ./my-skill/
JSON 出力 - マシン可読形式
skillspector scan ./my-skill/ --format json --output report.json
Markdown 出力 - ドキュメント用
skillspector scan ./my-skill/ --format markdown --output report.md
SARIF 出力 - CI/CD 統合および IDE ツールリング用
skillspector scan ./my-skill/ --format sarif --output report.sarif
LLM アナリシス"}
最良の結果を得るには、意味解析用に OpenAI 互換の LLM エンドポイントを設定してください。SKILLSPECTOR_PROVIDER を選択すると、各プロバイダが独自のバンドル済みデフォルトモデルを提供します。SkillSpector はまた、ローカルの OpenAI 互換サーバー(Ollama, vLLM, llama.cpp)や管理された推論ゲートウェイに対しても動作します。
プロバイダー (SKILLSPECTOR_PROVIDER)
認証情報環境変数
エンドポイント
デフォルトモデル
openai
OPENAI_API_KEY (+ 任意の OPENAI_BASE_URL)
api.openai.com (または任意の OpenAI 互換 URL)
gpt-5.4
anthropic
ANTHROPIC_API_KEY
api.anthropic.com
claude-opus-4-6
nv_build
NVIDIA_INFERENCE_KEY
build.nvidia.com
deepseek-ai/deepseek-v4-flash
標準 OpenAI の使用例
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/
Anthropic の使用例
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/
NVIDIA build.nvidia.com の使用例
export SKILLSPECTOR_PROVIDER=nv_build
export NVIDIA_INFERENCE_KEY=nvapi-...
skillspector scan ./my-skill/
ローカルの Ollama または任意の OpenAI 互換エンドポイントの使用例
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export SKILLSPECTOR_MODEL=llama3.1:8b
skillspector scan ./my-skill/
プロバイダーのデフォルトモデルを上書きする例
export SKILLSPECTOR_MODEL=gpt-5.2
skillspector scan ./my-skill/
LLM 解析をスキップする(高速化、静的解析のみ)
skillspector scan ./my-skill/ --no-llm
脆弱性パターン
SkillSpector は、16 のカテゴリにわたる 64 の脆弱性パターンを検出します:
プロンプトインジェクション (5 パターン)
ID
パターン
深刻度
説明
P1
指示のオーバーライド
HIGH
安全制約を無視するコマンド
P2
隠された指示
HIGH
コメントや不可視テキスト内の悪意のある指示
P3
情報漏洩コマンド
HIGH
コンテキストを外部へ送信するための指示
P4
行動操作
MEDIUM
エージェントの判断を微妙に変える指示
P5
有害コンテンツ
CRITICAL
身体的な危害を引き起こす可能性のある指示
データ漏洩 (4 パターン)
ID
パターン
深刻度
説明
E1
外部送信
MEDIUM
データを外部 URL へ送信する行為
E2
環境変数の収集
HIGH
API キーやシークレットの収集
E3
ファイルシステム列挙
MEDIUM
機密ファイルをスキャンするためにディレクトリを走査
E4
コンテキスト漏洩
HIGH
会話のコンテキストを外部へ送信する行為
権限昇格 (3 パターン)
ID
パターン
深刻度
説明
PE1
過剰な権限
LOW
明示された機能を超えたアクセス要求
PE2
Sudo/Root 実行
MEDIUM
昇格されたシステム権限の呼び出し
PE3
認証情報の取得
HIGH
SSH キー、トークン、パスワードの読み取り
サプライチェーン (6 パターン)
ID
パターン
深刻度
説明
SC1
バージョン未固定の依存関係
LOW
パッケージに対するバージョン制約がない状態
SC2
外部スクリプトの取得
HIGH
curl | bash およびリモートコード実行
SC3
難読化されたコード
HIGH
Base64/16 進符号化による実行
SC4
既知の脆弱性を持つ依存関係
HIGH
既知の CVE を持つ依存関係 (ライブ OSV.dev ルックアップ)
SC5
放棄された依存関係
中程度
セキュリティ更新が行われていないメンテナンスされていないパッケージ
SC6
タイポスクワッティング
高
人気のあるパッケージに似たパッケージ名
過度な権限(4 つのパターン)
ID
パターン
深刻度
説明
EA1
制限のないツールアクセス
高
制約なしの無制限なツールのアクセス権
EA2
自律的な意思決定
高
人間の介入を伴わない重大な影響を持つ意思決定
EA3
スコープクリープ
中程度
明示された目的を超えて拡張される機能
EA4
無制限のリソースアクセス
中程度
リソース消費に対するレート制限やクォータの欠如
出力処理(3 つのパターン)
ID
パターン
深刻度
説明
OH1
検証されない出力インジェクション
高
サニタイズなしでモデルの出力が使用される
OH2
クロスコンテキスト出力
中程度
検証なしに信頼境界を越えて出力が流れる
OH3
無制限な出力
中程度
出力サイズや生成レートに対する制限がない
システムプロンプト漏洩(3 つのパターン)
ID
パターン
深刻度
説明
P6
直接漏洩
高
システムプロンプトまたは内部ルールを露呈させる指示
P7
間接的抽出
中程度
言い換え、翻訳、またはサイドチャネルを通じた抽出
P8
ツールベースの流出
高
ファイル書き込みやネットワークリクエストを介したシステムプロンプトの流出
メモリ汚染(3 つのパターン)
ID
パターン
深刻度
説明
MP1
永続的コンテキストインジェクション
高
対話間を超えて持続するように設計されたコンテンツ
MP2
コンテキストウィンドウの埋め込み
中程度
安全性制約を押しやるためのフィラーコンテンツ
MP3
メモリ操作
高
エージェントのメモリまたは保存状態への改ざん
ツール誤用 (3 つのパターン)
ID
パターン
深刻度
説明
TM1
ツールパラメータの悪用
HIGH
意図しない動作を引き起こすための操作されたパラメータ (shell=True, --force)
TM2
チェーンの悪用
HIGH
個々の安全チェックを迂回するツールチェーン
TM3
不十分なデフォルト設定
MEDIUM
過度に寛容なデフォルト設定 (TLS 無効化、認証なし)
ログエージェント (2 つのパターン)
ID
パターン
深刻度
説明
RA1
自己改変
CRITICAL
実行時に自身のコードや設定を変更する行為
RA2
セッションの永続化
HIGH
cron ジョブや起動スクリプトを介した不正な永続化
トリガー悪用 (3 つのパターン)
ID
パターン
深刻度
説明
TR1
過度に広範なトリガー
MEDIUM
一般的な単語に一致するトリガーパターン
TR2
シャドウコマンドトリガー
HIGH
組み込みコマンドや他のスキルを覆い隠すトリガー
TR3
キーワードベイトトリガー
MEDIUM
活性化を最大化するために設計された汎用的なトリガー
行動 AST (8 つのパターン)
ID
パターン
深刻度
説明
AST1
exec() 呼び出し
CRITICAL
任意のコード実行を可能にする直接的な exec() の使用
AST2
eval() 呼び出し
HIGH
任意の式を評価する直接的な eval() の使用
AST3
動的インポート
HIGH
__import__() を用いた実行時における任意モジュールの読み込み
AST4
subprocess 呼び出し
HIGH
subprocess を介した外部コマンドの実行
AST5
os.system / exec ファミリー
HIGH
os モジュールを介したシェルコマンドの実行
AST6
compile() 呼び出し
MEDIUM
文字列からのコードオブジェクトの作成
AST7
動的 getattr() 呼び出し
MEDIUM
非リテラル名による任意の属性アクセス
AST8
危険な実行チェーン
CRITICAL
dynamic source(ネットワーク、エンコードデータ)との exec/eval の組み合わせ
汚染追跡 (5 パターン)
ID
パターン
深刻度
説明
TT1
直接汚染フロー
HIGH
データがサニタイズされずにソースからシンクへ直接流れる
TT2
変数媒介型汚染フロー
MEDIUM
データが中間変数を介してソースからシンクへ流れる
TT3
認証情報漏洩チェーン
CRITICAL
認証情報(環境変数、シークレット)がネットワーク出力シンクへ流れる
TT4
ファイル読み取りからネットワークへの漏洩
HIGH
ファイル内容がネットワーク出力シンクへ流れる
TT5
外部入力からのコード実行
CRITICAL
ネットワークまたはユーザー入力が exec/eval/subprocess シンクへ流れる
YARA シグネチャ (4 パターン)
ID
パターン
深刻度
説明
YR1
マルウェア一致
CRITICAL
既知のマルウェアシグネチャに対する YARA ルールの一致
YR2
Webshell 一致
CRITICAL
Webshell パターンに対する YARA ルールの一致
YR3
クリプトマイナー一致
HIGH
暗号通貨採掘インジケーターに対する YARA ルールの一致
YR4
ハックツール/エクスプロイト一致
HIGH
ハックツールまたはエクスプロイトコードに対する YARA ルールの一致
MCP 最小権限 (4 パターン)
ID
パターン
深刻度
説明
LP1
過小宣言された機能
HIGH
コードが宣言された権限リストに記載されていない機能を使用している
LP2
ワイルドカード権限
MEDIUM
権限リストにワイルドカード(*, all, full, any)が含まれている
LP3
権限宣言の欠落
MEDIUM
権限フィールドが存在しないが、コードには検出可能な機能がある
LP4
過大宣言された権限
LOW
権限が宣言されているが、対応するコード機能が見つからない
MCP ツール汚染(4 つのパターン)
ID
パターン
深刻度
説明
TP1
隠された指示
HIGH
メタデータ内の隠されたディレクティブ(HTML コメント、ゼロ幅文字、base64、データ URI)
TP2
Unicode による欺瞞
HIGH
ホモグリフ、RTL オーバーライド、ツールメタデータ内の混合スクリプト識別子
TP3
パラメータ説明への注入
MEDIUM
パラメータ定義内での注入パターン(オーバーライド、システムトークン、悪意のあるデフォルト値)
TP4
記述と挙動の不整合
MEDIUM
宣言されたツールの説明が実際のコードの挙動と一致しない(LLM 駆動型)
検出されたすべてのパターンは上記の表に記載されています。
リスクスコアリング
スコア計算
- CRITICAL(重大)な問題:+50 ポイント
- HIGH(高)な問題:+25 ポイント
- MEDIUM(中)な問題:+10 ポイント
- LOW(低)な問題:+5 ポイント
- 実行可能スクリプト:1.3 倍の乗数
深刻度レベル
スコア
深刻度
推奨事項
0-20
LOW(低)
SAFE(安全)
21-50
MEDIUM(中)
CAUTION(注意)
51-80
HIGH(高)
DO NOT INSTALL(インストールしないこと)
81-100
CRITICAL(重大)
DO NOT INSTALL(インストールしないこと)
出力例
ターミナル出力
SkillSpector セキュリティレポート v2.0.0
スキル:suspicious-skill
ソース:./suspicious-skill/
スキャン日時:2026-01-29 10:30:00 UTC
リスク評価
メトリック 値
スコア 78/100
深刻度 HIGH(高)
推奨事項 DO NOT INSTALL(インストールしないこと)
コンポーネント(3 つ)
ファイル タイプ 行数 実行可能
SKILL.md markdown 142 いいえ
scripts/sync.py python 87 はい
requirements.txt text 3 いいえ
問題点(2 つ)
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing
API keys and secrets, then sends them to an external server.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined
with env harvesting above, this indicates credential exfiltration.
Configuration
Environment Variables
Variable
Description
Required
SKILLSPECTOR_PROVIDER
Active LLM provider: openai, anthropic, or nv_build. Each provider has its own bundled model_registry.yaml and default model (see the LLM Analysis table above). Defaults to nv_build.
Optional
NVIDIA_INFERENCE_KEY
Credential for the nv_build provider (build.nvidia.com).
Required for LLM analysis when SKILLSPECTOR_PROVIDER=nv_build
OPENAI_API_KEY
Credential for the OpenAI provider (SKILLSPECTOR_PROVIDER=openai). Also serves as the tier-2 fallback in the credential waterfall when the active provider returns no credentials.
Required for LLM analysis when SKILLSPECTOR_PROVIDER=openai
OPENAI_BASE_URL
Override the OpenAI endpoint (e.g. point at Ollama).
Optional
ANTHROPIC_API_KEY
Credential for the Anthropic provider (SKILLSPECTOR_PROVIDER=anthropic).
Required for LLM analysis when SKILLSPECTOR_PROVIDER=anthropic
SKILLSPECTOR_MODEL
アクティブなプロバイダーのデフォルトモデルを上書きします。各プロバイダーのデフォルトについては、LLM 分析テーブルを参照してください。
オプション
SKILLSPECTOR_MODEL_REGISTRY
バンドルされたプロバイダーごとの YAML レジストリ(src/skillspector/providers/<provider>.yaml)をカスタムパスで上書きします。
オプション
SKILLSPECTOR_LOG_LEVEL
ログレベル:DEBUG、INFO、WARNING、ERROR(デフォルト:WARNING)。
オプション
CLI オプション
skillspector scan --help
オプション:
-f, --format [terminal|json|markdown|sarif] 出力形式 [デフォルト: terminal]
-o, --output PATH 出力ファイルパス
--no-llm LLM 分析をスキップ(静的解析のみ)
-V, --verbose 詳細な進行状況を表示
--help このメッセージを表示して終了
開発環境構築
セットアップ
すべての make ターゲットは、仮想環境がすでに作成され、アクティブ化されていることを前提としています。Makefile は利用可能な場合 uv を使用し、そうでない場合は pip を使用します。
クローン、仮想環境の作成、アクティベーション、開発依存関係のインストール
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
または:python3 -m venv .venv && source .venv/bin/activate
make install-dev
テストの実行
make test
カバレッジ付きでテストを実行
make test-cov
リンティングの実行
make lint
コードのフォーマット
make format
仕組み
SkillSpector は、2 つの段階からなる検出パイプラインを使用します。
ステージ 1: 静的解析
- 11 の静的解析器にわたる高速な正規表現ベースのパターンマッチング
- AST ベースの振る舞い解析により、危険な呼び出し(exec, eval, subprocess など)を検出
- 依存関係内の既知の CVE に対して OSV.dev を経由したライブ脆弱性照会
- スキル内のすべてのファイルをスキャン
- 高い再現率(多くの問題を検出)
- 中程度の精度(一部の偽陽性あり)
ステージ 2: LLM セマンティック解析(オプション)
- コンテキストと意図を評価
- 偽陽性をフィルタリング
- 人間が読みやすい説明を提供
- 精度を約 87% に向上
LLM プロンプトには、悪意のあるスキルによる分析操作を防ぐためのアンチ・ジャイルブレイク保護が含まれています。
ライブ脆弱性照会 (SC4)
SC4 は OSV.dev API を使用して、依存関係をオープンソース脆弱性情報データベース全体と比較します。これは PyPI と npm にわたる数万件のアドバイザリをカバーしています。
- API キー不要 — OSV.dev は無料で認証不要です。
- バッチクエリ — すべての依存関係が単一の HTTP 呼び出しでチェックされます。
- 自動フォールバック — OSV.dev に到達できない場合(エアギャップ化またはオフライン)、組み込みの小型フォールバックリストが使用されます。
- キャッシング — 結果はセッション中に重複する API 呼び出しを避けるため、1 時間インメモリでキャッシュされます。
このツールはライブ脆弱性情報のために api.osv.dev へのアウトバウンド HTTPS アクセスを必要とします。これが利用できない場合、検出結果は静的なフォールバックリストに限定されます。
制限事項
- 非英語コンテンツ: 他の言語のパターンを見逃す可能性があります
- イメージベースの攻撃: イメージ内のテキストを分析できません
- 暗号化/バイナリコード: コンパイル済みまたは暗号化された内容を分析できません
- ランタイム動作:静的解析のみ、動的実行なし
- オフライン SC4:api.osv.dev へのネットワークアクセスがない場合、SC4 は小さな静的フォールバックリストを使用します
リサーチ背景
「Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale」(Liu et al., 2026)の研究に基づいています:
- データセット:主要マーケットプレイスからの 42,447 のスキル
- 脆弱性あり:26.1% が少なくとも 1 つの脆弱性を含まれる
- 高深刻度:5.2% が悪意のある意図を示す可能性が高い
- 主な発見:実行可能スクリプトを含むスキルは、脆弱である確率が 2.12 倍高い
Python API 統合
from skillspector import graph
LangGraph ワークフローの呼び出し
result = graph.invoke({
"input_path": "/path/to/skill",
"output_format": "json", # terminal, json, markdown, または sarif
"use_llm": True, # 静的解析のみを行う場合は False
})
結果へのアクセス
print(f"Risk Score: {result['risk_score']}/100")
print(f"Severity: {result['risk_severity']}")
print(f"Recommendation: {result['risk_recommendation']}")
for finding in result["filtered_findings"]:
print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")
ライセンス
Apache License 2.0 - 詳細は LICENSE を参照してください。
コントリビューション
コントリビューションを歓迎します!コントリビューションガイドラインをお読みいただき、プルリクエストを送信してください。
サポート
- イシュー:GitHub Issues
原文を表示
Security scanner for AI agent skills. Detect vulnerabilities, malicious patterns, and security risks before installing agent skills.
Overview
AI 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.
SkillSpector helps you answer: "Is this skill safe to install?"
Documentation
- Development guide — Architecture, package layout, and how to extend the analyzer pipeline.
Features
- Multi-format input: Scan Git repos, URLs, zip files, directories, or single files
- 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
- Two-stage analysis: Fast static analysis + optional LLM semantic evaluation
- Live vulnerability lookups: SC4 queries OSV.dev for real-time CVE data with automatic offline fallback
- Multiple output formats: Terminal, JSON, Markdown, and SARIF reports
- Risk scoring: 0-100 score with severity labels and clear recommendations
Quick Start
Installation
Create 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.
# 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-devBasic Usage
# 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.zipOutput Formats
# 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.sarifLLM Analysis
For the best results, configure an OpenAI-compatible LLM endpoint for
semantic analysis. Pick a provider with SKILLSPECTOR_PROVIDER; each
ships its own bundled default model. SkillSpector also works against
local OpenAI-compatible servers (Ollama, vLLM, llama.cpp) and managed
inference gateways.
Provider (SKILLSPECTOR_PROVIDER)
Credential env var
Endpoint
Default model
openai
OPENAI_API_KEY (+ optional OPENAI_BASE_URL)
api.openai.com (or any OpenAI-compatible URL)
gpt-5.4
anthropic
ANTHROPIC_API_KEY
api.anthropic.com
claude-opus-4-6
nv_build
NVIDIA_INFERENCE_KEY
build.nvidia.com
deepseek-ai/deepseek-v4-flash
# Stock OpenAI
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=sk-...
skillspector scan ./my-skill/
# Anthropic
export SKILLSPECTOR_PROVIDER=anthropic
export ANTHROPIC_API_KEY=sk-ant-...
skillspector scan ./my-skill/
# NVIDIA build.nvidia.com
export SKILLSPECTOR_PROVIDER=nv_build
export NVIDIA_INFERENCE_KEY=nvapi-...
skillspector scan ./my-skill/
# Local Ollama or any OpenAI-compatible endpoint
export SKILLSPECTOR_PROVIDER=openai
export OPENAI_API_KEY=ollama
export OPENAI_BASE_URL=http://localhost:11434/v1
export SKILLSPECTOR_MODEL=llama3.1:8b
skillspector scan ./my-skill/
# Override the provider's default model
export SKILLSPECTOR_MODEL=gpt-5.2
skillspector scan ./my-skill/
# Skip LLM analysis (faster, static analysis only)
skillspector scan ./my-skill/ --no-llmVulnerability Patterns
SkillSpector detects 64 vulnerability patterns across 16 categories:
Prompt Injection (5 patterns)
ID
Pattern
Severity
Description
P1
Instruction Override
HIGH
Commands to ignore safety constraints
P2
Hidden Instructions
HIGH
Malicious directives in comments/invisible text
P3
Exfiltration Commands
HIGH
Instructions to transmit context externally
P4
Behavior Manipulation
MEDIUM
Subtle instructions altering agent decisions
P5
Harmful Content
CRITICAL
Instructions that could cause physical harm
Data Exfiltration (4 patterns)
ID
Pattern
Severity
Description
E1
External Transmission
MEDIUM
Sending data to external URLs
E2
Env Variable Harvesting
HIGH
Collecting API keys and secrets
E3
File System Enumeration
MEDIUM
Scanning directories for sensitive files
E4
Context Leakage
HIGH
Transmitting conversation context externally
Privilege Escalation (3 patterns)
ID
Pattern
Severity
Description
PE1
Excessive Permissions
LOW
Requesting access beyond stated functionality
PE2
Sudo/Root Execution
MEDIUM
Invoking elevated system privileges
PE3
Credential Access
HIGH
Reading SSH keys, tokens, passwords
Supply Chain (6 patterns)
ID
Pattern
Severity
Description
SC1
Unpinned Dependencies
LOW
No version constraints on packages
SC2
External Script Fetching
HIGH
curl | bash and remote code execution
SC3
Obfuscated Code
HIGH
Base64/hex encoded execution
SC4
Known Vulnerable Dependencies
HIGH
Dependencies with known CVEs (live OSV.dev lookup)
SC5
Abandoned Dependencies
MEDIUM
Unmaintained packages without security updates
SC6
Typosquatting
HIGH
Package names similar to popular packages
Excessive Agency (4 patterns)
ID
Pattern
Severity
Description
EA1
Unrestricted Tool Access
HIGH
Unfettered tool access without constraints
EA2
Autonomous Decision Making
HIGH
High-impact decisions without human-in-the-loop
EA3
Scope Creep
MEDIUM
Capabilities extending beyond stated purpose
EA4
Unbounded Resource Access
MEDIUM
No rate limits or quotas on resource consumption
Output Handling (3 patterns)
ID
Pattern
Severity
Description
OH1
Unvalidated Output Injection
HIGH
Model output used without sanitization
OH2
Cross-Context Output
MEDIUM
Output flows across trust boundaries without validation
OH3
Unbounded Output
MEDIUM
No limits on output size or generation rate
System Prompt Leakage (3 patterns)
ID
Pattern
Severity
Description
P6
Direct Leakage
HIGH
Instructions that expose system prompts or internal rules
P7
Indirect Extraction
MEDIUM
Extraction via rephrasing, translation, or side-channels
P8
Tool-Based Exfiltration
HIGH
System prompts exfiltrated via file writes or network requests
Memory Poisoning (3 patterns)
ID
Pattern
Severity
Description
MP1
Persistent Context Injection
HIGH
Content designed to persist across interactions
MP2
Context Window Stuffing
MEDIUM
Filler content displacing safety constraints
MP3
Memory Manipulation
HIGH
Tampering with agent memory or stored state
Tool Misuse (3 patterns)
ID
Pattern
Severity
Description
TM1
Tool Parameter Abuse
HIGH
Crafted parameters for unintended behavior (shell=True, --force)
TM2
Chaining Abuse
HIGH
Tool chains that bypass individual safety checks
TM3
Unsafe Defaults
MEDIUM
Overly permissive defaults (disabled TLS, no auth)
Rogue Agent (2 patterns)
ID
Pattern
Severity
Description
RA1
Self-Modification
CRITICAL
Modifying own code or configuration at runtime
RA2
Session Persistence
HIGH
Unauthorized persistence via cron jobs or startup scripts
Trigger Abuse (3 patterns)
ID
Pattern
Severity
Description
TR1
Overly Broad Trigger
MEDIUM
Trigger patterns matching common words
TR2
Shadow Command Trigger
HIGH
Triggers that shadow built-in commands or other skills
TR3
Keyword Baiting Trigger
MEDIUM
Generic triggers designed to maximize activation
Behavioral AST (8 patterns)
ID
Pattern
Severity
Description
AST1
exec() Call
CRITICAL
Direct exec() enabling arbitrary code execution
AST2
eval() Call
HIGH
Direct eval() evaluating arbitrary expressions
AST3
Dynamic Import
HIGH
__import__() loading arbitrary modules at runtime
AST4
subprocess Call
HIGH
External command execution via subprocess
AST5
os.system / exec-family
HIGH
Shell commands via os module
AST6
compile() Call
MEDIUM
Code object creation from strings
AST7
Dynamic getattr()
MEDIUM
Arbitrary attribute access with non-literal names
AST8
Dangerous Execution Chain
CRITICAL
exec/eval combined with dynamic source (network, encoded data)
Taint Tracking (5 patterns)
ID
Pattern
Severity
Description
TT1
Direct Taint Flow
HIGH
Data flows directly from a source to a sink without sanitization
TT2
Variable-Mediated Taint Flow
MEDIUM
Data flows from source to sink through intermediate variables
TT3
Credential Exfiltration Chain
CRITICAL
Credentials (env vars, secrets) flow to network output sinks
TT4
File Read to Network Exfiltration
HIGH
File contents flow to network output sinks
TT5
External Input to Code Execution
CRITICAL
Network or user input flows to exec/eval/subprocess sinks
YARA Signatures (4 patterns)
ID
Pattern
Severity
Description
YR1
Malware Match
CRITICAL
YARA rule match for known malware signatures
YR2
Webshell Match
CRITICAL
YARA rule match for webshell patterns
YR3
Cryptominer Match
HIGH
YARA rule match for crypto mining indicators
YR4
Hack Tool / Exploit Match
HIGH
YARA rule match for hack tools or exploit code
MCP Least Privilege (4 patterns)
ID
Pattern
Severity
Description
LP1
Underdeclared Capability
HIGH
Code uses capabilities not listed in declared permissions
LP2
Wildcard Permission
MEDIUM
Permission list contains wildcards (*, all, full, any)
LP3
Missing Permission Declaration
MEDIUM
No permissions field but code has detectable capabilities
LP4
Overdeclared Permission
LOW
Permission declared but no corresponding code capability found
MCP Tool Poisoning (4 patterns)
ID
Pattern
Severity
Description
TP1
Hidden Instructions
HIGH
Hidden directives in metadata (HTML comments, zero-width chars, base64, data URIs)
TP2
Unicode Deception
HIGH
Homoglyphs, RTL overrides, mixed-script identifiers in tool metadata
TP3
Parameter Description Injection
MEDIUM
Injection patterns in parameter definitions (overrides, system tokens, malicious defaults)
TP4
Description-Behavior Mismatch
MEDIUM
Declared tool description does not match actual code behavior (LLM-powered)
All detected patterns are listed in the tables above.
Risk Scoring
Score Calculation
- CRITICAL issues: +50 points
- HIGH issues: +25 points
- MEDIUM issues: +10 points
- LOW issues: +5 points
- Executable scripts: 1.3x multiplier
Severity Levels
Score
Severity
Recommendation
0-20
LOW
SAFE
21-50
MEDIUM
CAUTION
51-80
HIGH
DO NOT INSTALL
81-100
CRITICAL
DO NOT INSTALL
Example Output
Terminal Output
SkillSpector Security Report v2.0.0
Skill: suspicious-skill
Source: ./suspicious-skill/
Scanned: 2026-01-29 10:30:00 UTC
Risk Assessment
Metric Value
Score 78/100
Severity HIGH
Recommendation DO NOT INSTALL
Components (3)
File Type Lines Executable
SKILL.md markdown 142 No
scripts/sync.py python 87 Yes
requirements.txt text 3 No
Issues (2)
HIGH: Env Variable Harvesting (E2)
Location: scripts/sync.py:23
Finding: for key, val in os.environ.items():...
Confidence: 94%
Explanation: This code collects environment variables containing
API keys and secrets, then sends them to an external server.
HIGH: External Transmission (E1)
Location: scripts/sync.py:45
Finding: requests.post("https://api.skill.io/env"...
Confidence: 89%
Explanation: Data is being sent to an external server. Combined
with env harvesting above, this indicates credential exfiltration.
Configuration
Environment Variables
Variable
Description
Required
SKILLSPECTOR_PROVIDER
Active LLM provider: openai, anthropic, or nv_build. Each provider has its own bundled model_registry.yaml and default model (see the LLM Analysis table above). Defaults to nv_build.
Optional
NVIDIA_INFERENCE_KEY
Credential for the nv_build provider (build.nvidia.com).
Required for LLM analysis when SKILLSPECTOR_PROVIDER=nv_build
OPENAI_API_KEY
Credential for the OpenAI provider (SKILLSPECTOR_PROVIDER=openai). Also serves as the tier-2 fallback in the credential waterfall when the active provider returns no credentials.
Required for LLM analysis when SKILLSPECTOR_PROVIDER=openai
OPENAI_BASE_URL
Override the OpenAI endpoint (e.g. point at Ollama).
Optional
ANTHROPIC_API_KEY
Credential for the Anthropic provider (SKILLSPECTOR_PROVIDER=anthropic).
Required for LLM analysis when SKILLSPECTOR_PROVIDER=anthropic
SKILLSPECTOR_MODEL
Override the active provider's default model. See the LLM Analysis table for each provider's default.
Optional
SKILLSPECTOR_MODEL_REGISTRY
Override the bundled per-provider YAML registry (src/skillspector/providers/<provider>.yaml) with a custom path.
Optional
SKILLSPECTOR_LOG_LEVEL
Log level: DEBUG, INFO, WARNING, ERROR (default: WARNING).
Optional
CLI Options
skillspector scan --help
Options:
-f, --format [terminal|json|markdown|sarif] Output format [default: terminal]
-o, --output PATH Output file path
--no-llm Skip LLM analysis (static only)
-V, --verbose Show detailed progress
--help Show this message and exitDevelopment
Setup
All make targets assume a virtual environment is already created and activated. The Makefile uses uv if available, else pip.
# Clone, create venv, activate, install dev dependencies
git clone https://github.com/NVIDIA/skillspector.git
cd skillspector
uv venv .venv && source .venv/bin/activate
# or: python3 -m venv .venv && source .venv/bin/activate
make install-dev
# Run tests
make test
# Run tests with coverage
make test-cov
# Run linting
make lint
# Format code
make formatHow It Works
SkillSpector uses a two-stage detection pipeline:
Stage 1: Static Analysis
- Fast regex-based pattern matching across 11 static analyzers
- AST-based behavioral analysis detecting dangerous calls (exec, eval, subprocess, etc.)
- Live vulnerability lookups via OSV.dev for known CVEs in dependencies
- Scans all files in the skill
- High recall (catches most issues)
- Moderate precision (some false positives)
Stage 2: LLM Semantic Analysis (Optional)
- Evaluates context and intent
- Filters false positives
- Provides human-readable explanations
- Improves precision to ~87%
The LLM prompt includes anti-jailbreak protections to prevent malicious skills from manipulating the analysis.
Live Vulnerability Lookups (SC4)
SC4 uses the OSV.dev API to check dependencies against the full Open Source Vulnerabilities database — covering tens of thousands of advisories across PyPI and npm.
- No API key required — OSV.dev is free and unauthenticated.
- Batch queries — all dependencies are checked in a single HTTP call.
- Automatic fallback — if OSV.dev is unreachable (air-gapped/offline), a small built-in fallback list is used.
- Caching — results are cached in-memory for 1 hour to avoid redundant API calls during a session.
The tool requires outbound HTTPS access to api.osv.dev for live vulnerability data. When that is not available, findings are limited to the static fallback list.
Limitations
- Non-English content: May miss patterns in other languages
- Image-based attacks: Cannot analyze text in images
- Encrypted/binary code: Cannot analyze compiled or encrypted content
- Runtime behavior: Static analysis only, no dynamic execution
- Offline SC4: Without network access to api.osv.dev, SC4 uses a small static fallback list
Research Background
Based on research from "Agent Skills in the Wild: An Empirical Study of Security Vulnerabilities at Scale" (Liu et al., 2026):
- Dataset: 42,447 skills from major marketplaces
- Vulnerable: 26.1% contain at least one vulnerability
- High-severity: 5.2% show likely malicious intent
- Key finding: Skills with executable scripts are 2.12x more likely to be vulnerable
Python API Integration
from skillspector import graph
# Invoke the LangGraph workflow
result = graph.invoke({
"input_path": "/path/to/skill",
"output_format": "json", # terminal, json, markdown, or sarif
"use_llm": True, # False for static-only analysis
})
# Access results
print(f"Risk Score: {result['risk_score']}/100")
print(f"Severity: {result['risk_severity']}")
print(f"Recommendation: {result['risk_recommendation']}")
for finding in result["filtered_findings"]:
print(f"[{finding['severity']}] {finding['rule_id']}: {finding['message']}")License
Apache License 2.0 - see LICENSE for details.
Contributing
Contributions are welcome! Please read our contributing guidelines and submit pull requests.
Support
- Issues: GitHub Issues
関連記事
社内データ分析エージェントの構築方法について
GitHub は、大規模なデータ組織が直面する自己完結型のデータアクセスと洞察提供の課題に対し、AI を活用した信頼性の高い解決策として、社内でデータ分析エージェントを構築したことを発表した。
Mistral AI が Vibe にコード作成とアプリ機能を提供へ
AI 企業「Mistral AI」は、開発者向けプラットフォーム「Vibe」にコード生成およびアプリケーション構築機能を追加すると発表した。これにより、ユーザーは Vibe 上で直接コード作成やアプリ開発が可能になる。
Claude Code がアーティファクト機能をサポート
Anthropic は開発者向けツール「Claude Code」に、コード生成結果を直接表示・編集できる「アーティファクト」機能を追加した。これにより、開発ワークフローの効率化が図られる。
今日のまとめ
AI日報で今日の重要ニュースをまとめ読み