
Static security scanner for AI agent skill packages. Detects malicious SKILL.md files and bundled scripts before they run.
SkillsGuardがパイプラインを保護しているなら、継続的な研究と新しい検出ルールを支援することを検討してください。
ETH寄付ウォレット
0x11282eE5726B3370c8B480e321b3B2aA13686582
QRコードをスキャンするか、上記のウォレットアドレスをコピーしてください。
AIエージェントスキルパッケージ向け静的セキュリティスキャナー。 悪意のあるSKILL.mdファイルやバンドルされたスクリプトを実行前に検出します。
curl -s --data-binary @SKILL.md
https://skillsguard.apiskillsguard.workers.dev/scan | jq .
### Option B — ソースからビルドしてグローバルにリンク
> **注:** SkillsGuardは現在npmレジストリに公開されていません。ソースをクローンしてビルドしてインストールしてください。```bash
# 1. Clone, install, build, and link
git clone https://github.com/Teycir/SkillsGuard.git
cd SkillsGuard
npm install
npm run build
npm link
# 2. Scan any skill directory or file
skillsguard /path/to/skill
以上です。SkillsGuardは、ターミナルに色分けされた結果を出力します(CIの場合は--jsonも使用可能)。
終了コード 0 = 正常 · 1 = 問題あり · 2 = 使用エラー。
エージェントワークフロー内でClaudeに自動的にスキャナーを呼び出させたいですか?完全なスキル+MCP設定については、Local Workflow → Path B を参照してください。
flowchart TD A([Folder, file, or Git diff target]) --> B[Load config\nskillsguard.config.json] B --> C[File discovery\nFilter JS, PY, PS1, Docker, Ruby...] C --> D{For each file} D --> E[Raw text scan\nApply 100+ rules] D --> F[decode.ts\nExtract encoded blobs] F --> G[Recursive decode\nbase64, hex, URL] G --> H[Scan decoded content] E & H --> I{Findings?} I -->|no| J([✅ Clean — exit 0]) I -->|yes| K[Deduplicate findings] K --> L[Compute Risk Score\n0 - 100] L --> M{Output mode} M -->|CLI| N[ANSI colored report] M -->|--json| O[JSON output] M -->|--sarif| P[SARIF output] M -->|MCP| Q[MCP response] N & O & P & Q --> R{Risk > max-risk?} R -->|yes| S([❌ Exit 1]) R -->|no| J
style A fill:#0d1117,stroke:#00ff88,color:#c3f5dc
style J fill:#0d1117,stroke:#00ff88,color:#00ff88
style S fill:#0d1117,stroke:#ff4444,color:#ff8888
style G fill:#0d1117,stroke:#f0a500,color:#f0c060
style K fill:#0d1117,stroke:#00ff88,color:#c3f5dc
> **重要な洞察:** SkillsGuardはスキャン*前*に難読化されたペイロードをデコードするため、base64でラップされたリバースシェルはすり抜けられません。すべての検出結果は重複排除されます — 各ルールはファイルごと、行ごとに最大1回のみ発動します。
---
## 目次
- [他ツールとの比較](#how-skillsguard-compares)
- [なぜSkillsGuardか](#why-skillsguard)
- [機能](#features)
- [脅威カバレッジ](#threat-coverage)
- [クイックスタート](#quick-start)
- [ローカルワークフロー](#local-workflow)
- [Kiro CLI — 完全な例](#kiro-cli--complete-example)
- [実例 — インストール済みスキルの自己監査](#real-world-example--self-auditing-installed-skills)
- [CLIの使い方](#cli-usage)
- [Git差分モード](#git-diff-mode)
- [設定ファイル](#configuration-file)
- [リスクスコアリングとゲーティング](#risk-scoring--gating)
- [SARIF出力](#sarif-output)
- [モデル固有ルール](#model-specific-rules)
- [ルールエクスプローラとチューニング](#rule-explorer--tuning)
- [ウォッチモード](#watch-mode)
- [ベースラインワークフロー](#baseline-workflow)
- [Pre-commitフック](#pre-commit-hook)
- [MCPサーバー](#mcp-server)
- [HTTPサーバー](#http-server)
- [クラウドAPI(無料)](#cloud-api-free)
- [ライブデモ](#live-demo)
- [ライブラリAPI](#library-api)
- [ルールリファレンス](#rules-reference)
- [難読化検出](#obfuscation-detection)
- [テストフィクスチャ](#test-fixtures)
- [プロジェクト構造](#project-structure)
- [制限事項](#limitations)
- [コントリビューション](#contributing)
- [ライセンス](#license)
- [クレジット](#attribution)
- [関連プロジェクト](#related-projects)
- [開発支援](#support-development)
---
## 他ツールとの比較
エージェントスキルセキュリティ分野は2026年に急速に拡大しました — NVIDIA、Cisco、Snyk、Mondooはいずれもこの問題専用のスキャナーをリリースしています。ツールを選ぶ前に(本ツールも含めて)この分野を把握しておく価値があります。
### 一覧
| ツール | バックグラウンド | アカウント/トークンが必要 | コアスキャンにLLM呼び出しが必要 | 検出手法 | 特記事項 |
|---|---|---|---|---|---|
| **SkillsGuard** | 独立、MIT | いいえ | いいえ | 静的regex、デコード優先(再帰的base64/hex/URL/Unicode展開) | pre-commitフック + git-diffモード、無料curl API |
| **[NVIDIA SkillSpector](https://github.com/NVIDIA/SkillSpector)** | NVIDIA、Apache 2.0 | いいえ | いいえ(セマンティックステージでは任意) | 静的 + オプションのLLMセマンティックパス | ライブOSV.dev依存CVE検索 |
| **[Cisco AI Defense Skill Scanner](https://github.com/cisco-ai-defense/skill-scanner)** | Cisco | いいえ | いいえ(セマンティックステージでは任意) | マルチエンジン:静的 + 振る舞いデータフロー + LLMセマンティック + クラウド | GitHub Actionsワークフロー内蔵 |
| **[Snyk Agent Scan](https://github.com/snyk/agent-scan)** (旧mcp-scan) | Snyk、商用 | **はい** — `SNYK_TOKEN`必須 | はい — 決定的ルール + LLM判定機を併用 | Claude/Cursor/Windsurf/Gemini CLI + MCPサーバー間の自動検出 | Vercelのインストール時スキルスキャンを支える |
| **[SkillScan](https://github.com/NMitchem/SkillScan)** | 独立 | いいえ | `predict`モードのみ(任意) | YAMLルールエンジン + オプションのLLM振る舞いドライラン + オプションのDockerサンドボックス | LLMロールプレイによる時間的/遅延アクティベーション検出 |
| **Mondoo Skill Check** | Mondoo、商用 | いいえ(非商用の無料ティアあり) | 公開資料からは不明 | 静的、OWASP LLM Top 10に対応 | ホスト型ダッシュボード + REST API |
**最も重要な共通点:** SkillsGuardは、この表の中で**Node ≥18.3以外に何も必要とせず**フルスキャンを実行できる唯一のツールです — アカウント不要、APIトークン不要、LLMエンドポイント不要、ネットワーク呼び出し不要。他の活発にメンテナンスされている競合ツールは、サービスへのサインアップが必要か(Snyk)、フルカバレッジを得るためにLLMプロバイダーの設定を推奨しています(NVIDIA、Cisco、SkillScan)。そのためSkillsGuardは、毎回オフラインでも同じように動作しなければならないCIゲートやpre-commitフックに最もシンプルな選択肢となります。一方、LLM拡張ツールは、セマンティック/意図レベルのレビューが必要で追加の依存関係を気にしない場合に適しています。
これらは相互排他的ではありません。一般的な構成としては、SkillsGuard(または依存関係ゼロの静的ツール)を高速で決定的なCI/pre-commitゲートとして使い、真に新しい特権スキルを信頼する前により深い一回限りのレビューとしてLLM拡張スキャナーのいずれかと組み合わせるのが現実的です。
### 最も近い比較:NVIDIA SkillSpector
SkillSpectorはアーキテクチャ的に最も似ているプロジェクトです — 同じ「インストール前にスキャン」という枠組み、同じSARIF/JSON出力、公開された実証研究(42,447件のスキルをスキャン、26.1%が脆弱)に裏付けられています。
| | **SkillsGuard** | **NVIDIA SkillSpector** |
|---|---|---|
| 実行時依存関係 | なし — Node ≥18.3、npm依存関係ゼロ | Python ≥3.12 |
| 検出手法 | 静的regex、デコード優先 | 静的 + オプションのLLMセマンティックパス |
| ルール数 | 151ルール / 15カテゴリ | 64パターン / 16カテゴリ |
| 依存CVE検索 | いいえ | はい — ライブOSV.dev検索 |
| インストール | `npm link` または無料ホスト型curl APIでゼロインストール | `pip install` / git clone |
| Pre-commitフック | はい — `install-hook`、ベースラインワークフロー付き | ドキュメント化されたワークフローには含まれず |
| Git差分 / ステージファイルモード | はい — `--diff`、`--staged` | ドキュメント化されたワークフローには含まれず |
| SARIF出力 | はい | はい |
| MCPサーバー | はい — `scan_skill`、`scan_skills_dir`、教示可能な`SKILL.md` | 該当なし(LangGraphベースのパイプライン) |
| 成熟度(執筆時点) | v1.1.1 | v2.0.0、5.5k+ GitHubスター、公開論文あり |
**正直な評価:** SkillSpectorにはより多くの研究の重みがあり、regexでは捕捉できない意図レベルの問題(例えば、コードをフォーマットすると主張しながら静かに`~/.ssh`を読み取るスキル)を捉えるLLMセマンティックステージがあります。その追加の推論層が依存関係ゼロであることよりも重要なら、強力な選択肢です。両方で同じスキルをスキャンし、結果を比較してから選ぶとよいでしょう。
---
## なぜSkillsGuardか
AIエージェントスキルパッケージ(`SKILL.md` + バンドルスクリプト)は、新しく、ほとんど監査されていない攻撃対象領域です。悪意のあるスキルは以下のことが可能です:
- **プロンプト注入** — Claudeのガイドラインを上書きしたり、そのペルソナを乗っ取る
- **機密情報の流出** — curlやWebSocketを介してAPIキー、SSHキー、クラウド認証情報を外部に送信
- **任意のコマンド実行** — eval、subprocess、child_processを使用
- **永続化** — cronジョブ、systemdユニットの書き込み、シェル起動ファイルの改変
- **権限昇格** — sudo stdin、chown root、setuid呼び出し
- **難読化** — 上記すべてをbase64やhexエンコーディングで隠蔽し、単純なスキャナーを回避