skillguard について
SkillGuardは、第三者のAIエージェントスキルに含まれるマニフェスト、フック、スクリプトをスキャンし、既知の攻撃パターンを検出します。セキュリティ担当者やエージェント開発者向けに、CLI、ライブラリ、GitHub Action、MCPツールを提供し、複数スキル間の権限連鎖も調べます。
主な機能
- 01攻撃パターンを扱う10種類のルール
- 02単一スキルまたはスキル群のスキャン
- 03スキル間の権限連鎖を検出
- 04CLIとTypeScript/Pythonライブラリ
- 05GitHub Actionとstdio MCPツール
- 06スキャン時にネットワークから取得しない
活用シーン
- 01インストールや実行の前にスキルを検査
- 02スキル群にまたがる複合リスクを確認
- 03GitHubワークフローにスキル検査を追加
- 04MCP経由でエージェントにスキャンさせる
MCP 対応
SkillGuardはstdio MCPサーバーとして動作し、`scan_skill`ツールを公開します。MCPクライアントはスキルのパスを渡してスキャン結果を取得できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
SkillGuard
インストール • 今すぐ試す • 機能 • MCP サーバー • 比較 • FAQ
サードパーティ製 AI エージェントスキルのファイル(SKILL.md マニフェスト、フック、同梱スクリプト)を実行前にスキャンし、既知の攻撃パターンを検出します。また、このカテゴリで唯一、ほかのエージェント内から MCP ツールとして呼び出せるスキャナーです。

インストール
# npm -- JavaScript/TypeScript CLI + library
npm install --save-dev skillguard-cli
# PyPI -- Python CLI + library, a genuine port, not a wrapper around the Node binary
pip install skillguard-cli
どちらの方法でも、スキャン時に何かを取得することはありません。10個すべてのルールパックとパターンマッチングエンジンは、npm tarballとPython wheelの両方に同梱されています。
今すぐ試す
npx skillguard-cli scan ./examples/known-bad-skill
これはリポジトリに同梱されたフィクスチャを対象に実行されます。安全で、機能を持たず、意図的にパターンマッチング可能なこのフィクスチャから、実際の検出結果を11件返します。所要時間は約0.15秒で、ファイル名と行番号の引用も表示されます。
メモ
各スキャンでは、最初に
Loading SkillGuard rule packs...が標準エラー出力に表示されます。これは想定された起動時の出力であり、処理が停止しているわけではありません。
クリーンなフィクスチャと比較してみましょう。
npx skillguard-cli scan ./examples/clean-skill
検出結果は0件で、終了コードは0になります。
これが必要な理由
サードパーティ製のエージェントスキルは、インストールされた瞬間から実際のツール、ファイル、ネットワークの権限を使って実行されますが、事前にチェックする仕組みはほとんどありません。SnykのToxicSkills調査では、2026年2月に公開されているスキル3,984件をスキャンし、その36%にセキュリティ上の欠陥があることを発見しました。この中には、認証情報の窃取、リバースシェル、データの外部流出といった、悪意のあるペイロードが確認されたスキルも76件含まれています。ほとんどのマーケットプレイスやエージェントフレームワークには、「誰かがスキルを公開した」時点から「ユーザーのエージェントがそれを実行する」時点までに、スキャンする手順がありません。SkillGuardは、そのための仕組みです。CLI、ライブラリ、MCP サーバー、GitHub Actionが、同じ10個のルールパックを使用します。
機能
- 用途に特化した10種類のルールカテゴリ(SG01〜SG10)。ネットワークの不一致、リモートコード実行、ファイルスコープの権限昇格、フックのサプライチェーンリスク、難読化されたペイロード、認証情報の窃取、フロントマターのスコープ偽装、スキル自身の説明文に埋め込まれたプロンプトインジェクション、スキル間の権限連鎖、マーケットプレイスでのタイポスクワッティングを対象とします。各カテゴリのルールの詳細はCHANGELOG.mdに記載されています。
- **スキル間の権限連鎖(
scan-set)**は、単一スキルのスキャナーでは構造上見逃される脅威を検出します。スキルAが機密ファイルを読み取り、スキルBがネットワークへの送信を行える場合、両者の間にサンドボックスによる隔離が宣言されていなければ、組み合わせることでスキルA単体では読み取ることしかできないデータを外部に持ち出せる可能性があります。npx skillguard-cli scan-set ./my-skills-dirを実行すると、ディレクトリ内のすべてのスキルをスキャンし、この組み合わせを検出します。Snyk Agent Scanのメンテナー自身がissue #301で確認しているとおり、同ツールの--skillsフラグは一度に1つのSKILL.mdしか認識せず、ディレクトリ内のスキルを再帰的に検出することもありません。つまり、これはSkillGuardが他より優れていると主張する機能ではなく、私たちが確認した範囲では、ほかのスキルスキャナーにはまだない機能です。 - 認証も設定も不要です。
npx skillguard-cli scan <path>の実行に、アカウント、APIトークン、サインアップは必要ありません。Snyk Agent Scan(SNYK_TOKENとSnykアカウントが必要)やSocket CLI(すべての機能を利用するにはSOCKET_CLI_API_TOKENが必要)と比べてください。 - CLIとしてだけでなく、MCPツールとして呼び出せます。
npx skillguard-cli mcpを実行すると、scan_skillツールを公開するstdio MCP サーバーが起動します。これにより、Claude Code、Cursor、または任意のオーケストレーションを行うエージェントが、ダウンロードしたスキルをインストールまたは実行する前に、ツール呼び出しとしてスキャンできます。サブプロセスも標準出力の解析も不要です。ビルド済みサーバーに対する実際のJSON-RPCinitialize/tools/list/tools/callのハンドシェイクで動作を確認しています。 - 独立した、同等にメンテナンスされている2つの配布形式。 npmパッケージとPyPIパッケージは同じルールパックの仕様を読み込み、同じ対象に対して一致する検出結果を出します。どちらも、もう一方をラップしたものではありません。
- スキャン時にネットワークから取得するものはありません。 すべてのルールパックがパッケージ内に同梱されているため、信頼できないコンテンツをスキャンしても、そのコンテンツが制御するものにアクセスすることはありません。
クイックスタート
npx skillguard-cli scan ./my-skill --format json --severity-threshold MEDIUM

import { scanSkill } from 'skillguard-cli';
const result = await scanSkill('./my-skill', { severityThreshold: 'HIGH' });
if (result.exitCode === 1) {
console.log(`${result.findings.length} finding(s) at or above HIGH`);
}
from skillguard import scan_skill, ScanOptions
result = scan_skill("./my-skill", ScanOptions(severity_threshold="HIGH"))
if result.exit_code == 1:
print(f"{len(result.findings)} finding(s) at or above HIGH")
コマンド
npx skillguard-cli <command> [options]
# Python: skillguard <command> [options]
| コマンド | 機能 |
|---|---|
scan <path> | 1 つのスキルディレクトリ(SKILL.md とそのフック/スクリプト)をスキャンし、既知の攻撃パターンを検出します。 |
scan-set <dir> | 直下の各項目がスキルディレクトリであるディレクトリをスキャンします。すべての項目に対して scan を実行し、さらにセット全体にわたるスキル間の権限連鎖(SG09)もチェックします。 |
mcp | SkillGuard を stdio MCP サーバーとして起動し、別のエージェントが呼び出せるツールとして scan_skill を公開します。MCP サーバーを参照してください。 |

scan と scan-set で共通のフラグ(src/cli.ts と skillguard/cli.py で確認済み):
| フラグ | デフォルト | 説明 |
|---|---|---|
--format <human|json|sarif> | human | 出力形式です。 |
--severity-threshold <HIGH|MEDIUM|LOW> | HIGH | スキャンを失敗(終了コード 1)とする最小重大度です。 |
--timeout <ms> | 10000 | ファイルごとのスキャンタイムアウト(ミリ秒)です。 |
--skillguardignore <path> | なし。明示的に指定する必要があります | 抑制ファイルのパスです。スキャン対象内から自動的に読み込まれることはありません。検出結果の抑制を参照してください。 |
--allow-inline-suppression | false | スキャン対象ファイル内にあるインラインの # skillguard-ignore: SGxx コメントを有効にします。デフォルトでは無効です。 |
終了コード:0 は問題のないスキャンです。1 は重大度がしきい値以上の検出結果があることを示します。2 は対象パスが存在しない場合、または(scan の場合)スキルファイルが見つからなかった場合です。
API リファレンス
TypeScript(src/index.ts)。npm パッケージのルートインポートから再エクスポートされます:
import { scanSkill, scanSkillSet, discoverSkillDirs, computeCrossSkillFindings } from 'skillguard-cli';
scanSkill(path: string, options?: ScanOptions): Promise<ScanResult>
scanSkillSet(dir: string, options?: ScanOptions): Promise<SkillSetScanResult>
scanSkill() は scan と同じスキャンロジックを実行し、scanSkillSet() は scan-set と同じロジックを実行します。どちらも例外をスローするのではなく、構造化された結果(findings、timeouts、warnings、exitCode)を返すため、SkillGuard を組み込む呼び出し元は、判定結果を取得するだけのために try/catch で囲む必要がありません。Finding、ScanOptions、ScanResult、ScanWarning、Severity、OutputFormat、RuleCategory、SkillEntry、SkillSetScanResult の各型も同梱されています。
Python(python/src/skillguard/__init__.py):
from skillguard import scan_skill, scan_skill_set, discover_skill_dirs, compute_cross_skill_findings, ScanOptions
scan_skill(path: str, options: ScanOptions | None = None) -> ScanResult
scan_skill_set(dir: str, options: ScanOptions | None = None) -> SkillSetScanResult
同じ構成で、名前には snake_case を使用します。明記しておくべき相違点が 1 つあります。Python パッケージの scan_skill_set() は、npm パッケージの scanSkillSet() と同じスキル間連鎖のオーケストレーションを実行しますが、npm パッケージは通常の単一スキル scan 内でも、より限定的な SG09 チェック(兄弟パス参照のヒューリスティック、src/ast/cross-skill-chaining.ts)を追加で実行します。現時点で、Python にはこれに相当する機能がありません。scan-set ではなく単一の scan 呼び出しによるスキル間検出に依存する場合、その機能は現在 TypeScript でのみ利用できます。
MCP サーバー(エージェントネイティブ、ツール呼び出し)
npx skillguard-cli mcp
SkillGuard を stdio MCP サーバーとして起動し、scan_skill({ path, severityThreshold?, timeoutMs? })という 1 つのツールを公開します。別のエージェント、Claude Code、Cursor、オーケストレーターが、インストールまたは実行する前に、サードパーティ製スキルをツール呼び出しとして直接スキャンできます。このアップデートでは実際のハンドシェイクで検証済みです。initialize は実際のサーバー情報を返し、tools/list は実際の scan_skill スキーマを返し、./examples/known-bad-skill に対する tools/call は CLI と同じ 11 件の検出結果を返します。クライアント設定の例:
{ "mcpServers": { "skillguard": { "command": "npx", "args": ["skillguard-cli", "mcp"] } } }
詳しいセットアップ、ツールの入力/出力スキーマ、この経路で維持されるセキュリティ保証(CLI と同じ .skillguardignore/インライン抑制のデフォルトを使用し、ツール経由で無視パスを渡す方法はありません)については、docs/integrations/mcp.md をご覧ください。Python パッケージにも、同一のツールが skillguard mcp として含まれています(オプションの mcp エクストラが必要です。pip install "skillguard-cli[mcp]"、Python >=3.10)。ネイティブかつプロセス内で動作し、scan_skill() を直接呼び出すため、サブプロセスも stdout/JSON の解析面もありません。手動でインストールせずに uvx で実行でき、Claude Desktop との連携にはこちらを推奨します。
{
"mcpServers": {
"skillguard": {
"command": "uvx",
"args": ["--from", "skillguard-cli", "skillguard", "mcp"]
}
}
}
GitHub Action
- name: SkillGuard
uses: RudrenduPaul/skillguard@main
with:
path: ./my-skill
severity-threshold: HIGH
Action のデフォルトは --format sarif で、結果を GitHub コードスキャンに直接アップロードします。通常の CLI は人が読みやすい形式をデフォルトとします。ターミナルと CI ログでは、求められる形式が異なるためです。
ルールパック
すべてのルールパックは rulepacks/(npm)と python/src/skillguard/rulepacks/data/(Python)に格納されており、手作業で同期し、CONTRIBUTING.md のパリティルールで管理しています。スキャン時にネットワークから取得するものはありません。
| カテゴリ | 名前 | 重大度 | 検出内容 |
|---|---|---|---|
| SG01 | ネットワークの不一致 | MEDIUM | 一般的な HTTP のみの範囲を迂回する Raw ソケット、netcat、/dev/tcp、ネットワークプリミティブ。 |
| SG02 | リモートコード実行 | HIGH | curl | bash、取得したレスポンスに対する eval()/exec()、リモートの影響を受けた内容を使ったシェル呼び出し。 |
| SG03 | ファイル範囲の逸脱 | MEDIUM | スキル自身のディレクトリの外に及ぶ書き込み/削除/chmod と、その範囲から抜け出すためのパストラバーサル(../../..)。 |
| SG04 | フックのサプライチェーン | HIGH | インストール時のフックや依存関係がリモートコードを取得して実行すること、または変更可能なブランチに固定されていること。 |
| SG05 | 難読化されたペイロード | LOW | ペイロードを隠すために使われる base64/文字列連結/動的な Function のイディオム。下記の既知の制限事項をご覧ください。 |
| SG06 | 認証情報の収集 | HIGH | 認証情報に見える環境変数や認証情報ファイルの読み取り。特にネットワーク呼び出しの近くで行われるもの。 |
| SG07 | フロントマターの偽装 | MEDIUM | SKILL.md で宣言されたネットワーク/ファイルシステムの範囲と、フック/スクリプトが実際に行う処理との不一致。 |
| SG08 | スキルコンテンツ経由のプロンプトインジェクション | HIGH | ホストエージェントのシステムプロンプトを上書きしたり、ツールのルーティングを乗っ取ったりしようとする SKILL.md 自身の指示文(7 つのルール ID:sg08-ignore-prior-instructions、sg08-disregard-system-prompt、sg08-fake-mode-switch、sg08-reveal-system-prompt、sg08-hide-action-from-user、sg08-hidden-unicode-characters、sg08-encoded-block-in-instructions)。 |
| SG09 | スキル間の権限連鎖 | HIGH | scan-set の実行で 2 つのスキルが組み合わさったときの機能。1 つは sensitive-filesystem-read、もう 1 つは network-egress を持ち、互いにサンドボックスで隔離されていない場合。TypeScript では、これより範囲を絞った単一スキルの兄弟パスを対象とするチェックも実行します。Python では現在、scan-set 版のみが含まれています。 |
| SG10 | マーケットプレイスでのタイポスクワッティング | HIGH | よく知られたツールになりすまそうとするもので、SKILL.md で宣言された名前と、同梱された人気の npm/PyPI パッケージ名 51 件のリストとのレーベンシュタイン編集距離が 1~2 である場合に検出します。 |
SG05 の既知の制限事項:純粋な静的解析による難読化検出は、他のカテゴリよりも偽陰性率が大幅に高くなります。SG05 は既知の一般的なエンコード/eval のイディオムを検出しますが、難読化を完全に網羅するものではなく、ベストエフォートの検出として扱ってください。
SkillGuard の比較
SkillGuard は、エージェントスキル固有の脅威モデル、フロントマターで宣言された範囲と実際の動作の差異、フックレベルのサプライチェーンリスク、複数スキルの権限を組み合わせた場合のリスク、そしてスキルのパッケージ化やインストール方法に特有の認証情報窃取パターンに特化して設計されています。汎用スキャナーより対象範囲を絞ったツールであり、この表では、異なる目的のために作られたツールより優れているとほのめかすことなく、その点を明確に示しています。
| SkillGuard | Snyk Agent Scan | Semgrep (CE) | Socket CLI | |
|---|---|---|---|---|
| スキャン対象 | エージェントスキルのファイル:SKILL.md、フック、スクリプト | エージェントスキルと MCP サーバーの設定 | 一般的なソースコード、30 以上の言語 | npm/PyPI などのパッケージインストール |
| エージェントスキル専用のルールセット | はい。この脅威モデル向けに設計された 10 カテゴリーすべて | はい。全体的にここに特化(プロンプトインジェクション、ツール汚染、有害なフロー、スキルのマルウェア) | いいえ。一般的な SAST ルールのみ | いいえ。サプライチェーンに特化しており、スキルファイルには特化していません |
| 複数のスキルをまとめてスキャンし、複合リスクを検出 | はい。scan-set(SG09 複数スキル間の権限連鎖) | いいえ。issue #301 によると、単一ファイルのみ/再帰スキャンなしと確認されています | この脅威モデルには該当しません | この脅威モデルには該当しません |
| 別のエージェントから MCP ツールとして呼び出し可能 | はい。skillguard-cli mcp | 公開情報では確認できません | いいえ | いいえ |
| 基本的なスキャンに認証が必要か | 不要(npx skillguard-cli scan <path>) | はい。Snyk アカウントと SNYK_TOKEN が必要です | Community Edition のローカルスキャンでは不要 | はい。すべての機能を使うには SOCKET_CLI_API_TOKEN が必要です |
| ランタイム | Node.js、外部バイナリー不要(Python 版も利用可能) | uvx 経由の Python | 独自のバイナリー(Python ベースの CLI) | Node.js |
| ライセンス | Apache 2.0 | Apache 2.0 | LGPL-2.1 | MIT(socket npm package listing による。リポジトリ自体には LICENSE ファイルがありません) |
| GitHub のスター数(2026-08-10 時点) | 1 スター、公開から約 1 か月、公開日 2026-07-11 | 2,897 スター、258 フォーク | 16,173 スター、1,021 フォーク | 311 スター、58 フォーク |
セキュリティツールの信頼性は、不都合な点も率直に伝えることにかかっているため、いくつか正直に説明します。
- 実際に最も近い競合製品は Snyk Agent Scan です。より成熟しており(SkillGuard の 1 スターに対して 2,897 スター)、全体としてより広い範囲をカバーしています(15 以上の検出カテゴリーに加え、SkillGuard にはない MCP サーバー設定のスキャンにも対応)。本当の違いは、認証の要否(SkillGuard は登録もトークンも不要)と、複数スキルを横断した分析(Snyk のメンテナー自身が、現在のツールは単一ファイルを対象にしていると確認済み)です。すでに Snyk アカウントを持っていて、MCP サーバーも対象にしたい場合は、Agent Scan のほうが広範囲をカバーします。認証不要のチェックで、スキルのディレクトリー全体を一度に分析したい場合は、それが SkillGuard の用途です。
- SkillGuard は Semgrep をラップしていません。 Semgrep に着想を得た独自の小規模なインプロセス型パターンエンジン(Semgrep ではありません)を搭載しているため、
npxでのインストールに Python/PyPI のツールチェーンが必要になることはありません。30 以上の言語にわたる真の多言語対応の汎用静的解析が必要な場合は、その用途には Semgrep のほうが成熟したツールです。 - Socket CLI は隣接するカテゴリーのツールであり、直接の競合製品ではありません。 npm/PyPI パッケージにおけるタイポスクワッティングや悪意のあるインストールスクリプトを対象としており、スキル自身の SKILL.md フロントマターや、宣言された動作と実際の動作の差異を対象としていません。
- SkillGuard 自体は、本当に公開初期の段階です。 GitHub のスターは 1 つで、最初のコミットから約 1 か月です。これは誇張して見せる必要のない、正真正銘の「公開初期ながら実際に使える」状況です。この README に記載されているコマンドや検出結果はすべて、古い草案から流用したものではなく、執筆時に実際の現行コードに対して実行したものです。
SkillGuard とは何か、なぜ存在するのか
SkillGuard は、信頼できないスキルのインストールや実行の前に動作するよう設計された、サードパーティ製 AI エージェントスキルファイル(SKILL.md マニフェストと、それに含まれるフックやスクリプト)の静的解析スキャナーです。エージェントスキルのマーケットプレイスやフレームワークには、通常、独自のスキャン手順がありません。たとえば、スキルがフロントマターで network: false と宣言していても、インストール時にリモートスクリプトをシェルへパイプする postinstall フックを含めることができ、多くのエージェントランタイムでは、宣言されたスコープと実際の動作が一致しているかを確認する仕組みがありません。SkillGuard は同じ 10 個のルールパックを CLI、ライブラリ、MCP サーバー、GitHub Action から実行できるため、同じチェックで CI パイプラインをゲートしたり、エージェント自身のツール使用ループ内で実行したり、コードから直接呼び出したりできます。
検出結果の抑制
警告
SkillGuard の役割は、自分が作成していないディレクトリを検査することです。以下の 2 つの抑制方法はいずれも検出結果を無効にできるため、スキャン対象内にあるものを自動的に信頼することはありません。どちらの方法も、スキャンを実行する人による明示的で意図的なオプトインが必要です。
.skillguardignore ファイルは、.gitignore と同じ考え方で、グロブによってファイル全体を抑制します。
# .skillguardignore
vendor/**
*.generated.js
これは --skillguardignore <path> を渡した場合にのみ有効になります(またはライブラリの ignoreFilePath オプションを指定します)。SkillGuard は、スキャン対象内にある .skillguardignore を自動的に読み込むことはありません。悪意のあるスキルの投稿物に独自の .skillguardignore が含まれていても、そのファイルを明示的に指定しない限り、自身に関する検出結果を抑制することはできません。自分でスキルを管理していて、独自に抑制したい場合は、.skillguardignore を用意し、そのパスを明示的に渡してください。
npx skillguard-cli scan ./my-skill --skillguardignore ./my-skill/.skillguardignore
インラインの # skillguard-ignore: SG02 コメント(該当箇所と同じ行、または直前の行に記述)を使うと、その場で単一の検出結果を抑制できます。これはデフォルトでは無効で、同じ理由から --allow-inline-suppression が必要です。コメントは検査対象である信頼できないコンテンツそのものに含まれるため、デフォルトでは、スキャン対象内の記述によってその対象自身に関する検出結果を抑制できないようになっています。公開前に自分のスキルをセルフスキャンするなど、すでに信頼できる対象に対してのみ有効にしてください。
既知の制限事項
SkillGuard は、意図的に制限事項を公開しています。上記の SG05 の偽陰性に関する注意点以外で、ここで触れておくべき点は 2 つあります。シンボリックリンクされたスキャン対象は追跡されず、スキャンもされません。また、Python パッケージのスキル横断検出は現在 scan-set にのみ実装されており、TypeScript のように単一スキルの隣接パスをチェックする機能はありません。単一パターンによる残存 ReDoS リスクを含む全項目は、CHANGELOG.md に記載されています。信頼する予定の CI ゲートに SkillGuard を組み込む前に、必ず確認してください。
開発
# TypeScript
npm install
npm run build
npm test
# Python
cd python
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev,mcp]"
pytest
CONTRIBUTING.md を参照してください。ルールパックを変更する場合は、rulepacks/ と python/src/skillguard/rulepacks/data/ の両方に変更を反映し、両方のテストスイートで同等のテストカバレッジを確保する必要があります。片方の言語にしか存在しないルールは、2 つの CLI 間に気付かれにくい動作上の差を生むためです。
FAQ
SkillGuard とは何ですか。また、汎用のセキュリティスキャナーとの違いは何ですか?
SkillGuard は、サードパーティ製 AI エージェントスキルファイル(SKILL.md マニフェストと、それに含まれるフックやスクリプト)という 1 つの脅威モデルに特化して構築された静的解析スキャナーです。汎用スキャナーではデフォルトでチェックされない、フロントマターで宣言されたスコープと実際の動作の不一致、インストール時のフックに伴うサプライチェーンリスク、スキル自身の説明文に埋め込まれたプロンプトインジェクション、同じディレクトリにある複数のスキルの組み合わせによるリスクを対象とする、10 種類のルールカテゴリ(SG01~SG10)を備えています。Semgrep のような汎用 SAST ツールでも同じコードレベルのパターンを一部検出できますが、SKILL.md マニフェストや、スキル間の権限関係を把握する仕組みはありません。
SkillGuard でスキャンを実行するには、アカウントや API トークンが必要ですか?
いいえ。npx skillguard-cli scan <path> と pip install skillguard-cli && skillguard scan <path> はどちらも、登録もトークンも不要で、スキャン時のネットワーク通信なしで動作します。
SkillGuard はどのプラットフォームと言語ランタイムに対応していますか?
npm パッケージには Node.js >=20 が必要で(package.json の engines フィールドに記載)、ネイティブ/コンパイル済みの依存関係はありません。PyPI パッケージは基本インストールで Python >=3.9 が必要です。MCP サーバーモード用のオプションの mcp エクストラをインストールする場合は、Python >=3.10 が必要です(pyproject.toml の requires-python と mcp のオプション依存関係に関するコメントに記載)。どちらも特定の言語のみで実装されたパッケージで、OS 固有のビルド手順はありません。また、Python パッケージの分類には Operating System :: OS Independent と記載されています。
SG08、SG09、SG10 では何をチェックしますか?また、MCP サーバー経由でも実行できますか?
SG08(HIGH)は、スキル内の説明文に含まれるプロンプトインジェクションを検出します。ホストエージェントのシステムプロンプトの上書きや、ツールのルーティングの乗っ取りを試みるものを、7 つの異なるルール ID でチェックします。SG09(HIGH)は、スキル間の権限連鎖を検出します。scan-set は、あるディレクトリ内の 1 つのスキルに機密ファイルシステム読み取り機能があり、別のスキルにネットワーク送信機能があり、その間にサンドボックス化が宣言されていない場合に、HIGH の検出結果を報告します。TypeScript の通常の scan でも、同じチェックの範囲を絞った兄弟パス版が実行されます。SG10(HIGH)は、マーケットプレイスでのタイポスクワッティングを検出します。スキルに宣言された名前が、同梱された人気の npm/PyPI パッケージ名 51 件のリストとレーベンシュタイン編集距離 1~2 以内の場合に検出します。MCP サーバーは CLI と同じ基盤のスキャンロジックを呼び出すため、3 つすべてを npx skillguard-cli mcp の scan_skill ツール経由でも CLI と同様に実行できます。
CLI を呼び出して出力を解析する代わりに、AI エージェントから SkillGuard を直接呼び出せますか?
はい。npx skillguard-cli mcp(Python 側では skillguard mcp)を実行すると、scan_skill ツールを公開する stdio MCP サーバーが起動します。そのため、オーケストレーターやコーディングエージェントは、ダウンロードしたスキルをインストールまたは実行する前に、通常のツール呼び出しとしてスキャンできます。
別の、より高い権限を持つスキルを参照しているスキルを、SkillGuard は検出できますか?
scan-set で検出できます。スキルのサブディレクトリを含むディレクトリを指定すると、1 つのスキルに機密ファイルシステム読み取り機能があり、別のスキルにネットワーク送信機能があり、その間にサンドボックス化が宣言されていない場合に、HIGH の検出結果を報告します。これは、Snyk Agent Scan の課題トラッカーでも、同ツールではまだ対応していないと確認されている特定のギャップです(単一ファイル、非再帰)。
npm パッケージと PyPI パッケージにはどのような違いがありますか?
どちらも独立して保守されている同等の移植版であり、同じルールパックの仕様を読み込み、同じ対象に対して一致する検出結果を生成します。PyPI パッケージは、Node バイナリのラッパーではなく、Python による本格的な実装です。現在の違いが 1 つあります。TypeScript の scan コマンドは、Python にはまだない、スキル間の追加の兄弟パスヒューリスティックを実行します(Python のスキル間検出はすべて scan-set にあります)。scan-set ではなく単一の scan 呼び出しでスキル間検出を行いたい場合、現時点ではその機能は TypeScript でのみ利用できます。Python 側で同等の範囲を検出するには、代わりに scan-set を実行してください。
SkillGuard は Semgrep や Snyk の代わりになりますか? いいえ。Semgrep は 30 以上の言語に対応する成熟した汎用静的解析エンジンです。Snyk は依存関係やコードの脆弱性を幅広く対象とし、Snyk Agent Scan は現在の SkillGuard よりも広範なエージェントスキルや MCP 設定の脅威に対応しています。SkillGuard の役割は、より限定的です。具体的には、認証不要で、これらのツールのどちらにも現在搭載されていないスキル間チェックを備えた、SKILL.md/hooks/frontmatter に特化した脅威モデルを対象とします。 SkillGuardは本番環境で利用できますか? まだ初期段階です。公開から約1か月で、バージョン1.0以前の状態であり、本稿執筆時点でGitHubのスターは1つです。クリーンインストール環境でテストスイート(TypeScriptは157件中157件、Pythonは110件中110件)が合格し、このREADME内のすべてのコマンドを現行コードに対して個別に再実行しています。しかし、大規模な実世界のコーパスではまだ実行されていないため、誤検知率と見逃し率は大規模環境で実証済みではなく、未確定のものとして扱ってください。
SkillGuardを商用利用できますか?ライセンスに費用はかかりますか? はい、商用利用できます。費用はかかりません。SkillGuardはApache License 2.0(LICENSEを参照)のもとで提供されており、著作権表示とライセンス表示を保持すれば、プロプライエタリソフトウェアへの組み込みを含め、商用利用、改変、再配布が認められています。Apache 2.0では、MITライセンスにはない、コントリビューターからの明示的な特許ライセンスも付与されます。
ライセンス
Apache 2.0です。LICENSEを参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。