swain-security-check について
swain-security-checkは、プロジェクトリポジトリ向けのセキュリティスキャン統合ツールです。利用可能なスキャナーを検出して内蔵チェックとともに実行し、結果を深刻度別に整理してJSONとMarkdownで出力します。
主な機能
- 01利用可能な外部スキャナーの検出
- 02シークレットと依存関係の脆弱性スキャン
- 03静的解析とコンテキストファイル検査
- 04リポジトリの衛生状態チェック
- 05深刻度別に検出結果を統一
- 06JSONとMarkdownのレポート生成
活用シーン
- 01状態変更操作の前にリポジトリをスキャン
- 02エージェント用コンテキストファイルの注入パターン検査
- 03シークレットや追跡対象の.envファイルの検出
- 04依存関係とリポジトリ衛生上の問題の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ cristoslc/ swain --skill swain-security-checkインストール後、Claude Code で/swain-security-checkを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/external-hook-api.mdscripts/context_file_scanner.pydoctor_security_check.pyexternal_hooks.pyscanner_availability.pysecurity_briefing.pysecurity_check.pysecurity_gate.pysecurity-scan.shthreat_surface.py詳細
セキュリティチェック
状態を変更する操作を行う前に、アクティブなセッションがあるか確認してください:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
bash "$REPO_ROOT/.agents/bin/swain-session-check.sh" 2>/dev/null
JSON 出力の "status" が "active" 以外の場合は、オペレーターに「アクティブなセッションがありません。/swain-init で開始しますか?」と伝えてください。オペレーターがその案内を閉じた場合は続行してください。
統合セキュリティスキャンオーケストレーターです。スキャナーの利用可能状況を確認し、利用可能なすべてのスキャナーをプロジェクトに対して実行し、検出結果を重大度別に分類したレポートに統一して、JSON 形式と Markdown 形式の両方で結果を提示します。
呼び出された場合
セキュリティチェックのスクリプトを実行します:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SEC_SCRIPT="$REPO_ROOT/.agents/bin/security_check.py"
[ -n "$SEC_SCRIPT" ] && python3 "$SEC_SCRIPT" . || echo "security_check.py not found"
JSON 出力の場合:
REPO_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SEC_SCRIPT="$REPO_ROOT/.agents/bin/security_check.py"
[ -n "$SEC_SCRIPT" ] && python3 "$SEC_SCRIPT" --json . || echo "security_check.py not found"
オーケストレーションの流れ
- 利用可能状況の確認 — インストール済みの外部スキャナーを検出します(SPEC-059 に準拠)
- スキャナーの実行 — 利用可能な各スキャナーをプロジェクトに対して実行します:
- gitleaks(シークレット)—
gitleaks detect --source . --report-format json - osv-scanner または trivy(依存関係の脆弱性)— ロックファイルとマニフェストをスキャンします
- semgrep(静的解析)—
semgrep --config p/ai-best-practices - コンテキストファイルスキャナー(組み込み、常に実行)— すべてのエージェントコンテキストファイルをスキャンし、インジェクションパターンを検出します(SPEC-058、カテゴリ A-J)
- リポジトリの衛生状態(組み込み、常に実行)— .gitignore の完全性と、追跡対象の .env ファイルを確認します
- gitleaks(シークレット)—
- 統一 — すべての検出結果を統一形式(スキャナー、ファイル、行、重大度、説明、修正方法)に対応付けます
- レポート — 重大度別(critical/high/medium/low)に分類した出力と概要行を生成します
エラーへの対処
外部スキャナーが見つからない場合は警告を出してスキップします。ツールが見つからないことが原因でスキャンが失敗することはありません。組み込みのスキャナー(コンテキストファイルスキャナーとリポジトリの衛生状態)は常に実行されるため、スキャンでは必ず結果が生成されます。
スキップした各スキャナーについて、レポートにインストール方法のヒントが含まれます。
終了コード
| コード | 意味 |
|---|---|
| 0 | 検出結果なし |
| 1 | 検出結果あり |
| 2 | エラー(例:無効なパス) |
レポート形式
重大度レベル
- Critical — ソース内のシークレット、追跡対象の .env ファイル、命令の上書きパターン
- High — 役割の乗っ取り、権限昇格、エンコーディングによる難読化
- Medium — .gitignore パターンの不足、依存関係の脆弱性
- Low — 情報提供のみの検出結果
検出結果ごとのフィールド
| フィールド | 説明 |
|---|---|
| scanner | 検出結果を生成したスキャナー |
| file_path | 検出されたファイル |
| line | 行番号(該当しない場合は 0) |
| severity | critical、high、medium、low のいずれか |
| description | 検出内容 |
| remediation | 修正方法 |
概要行
例:1 critical, 2 high, 0 medium, 0 low findings (3 total) across 4 scanners
統合ポイント
- swain-doctor(SPEC-061)— セッション開始時に軽量なコンテキストファイルスキャンを実行します
- swain-do(SPEC-063)— セキュリティ上重要なタスクの実行前に、セキュリティに関する説明を行います
- swain-init — プロジェクトのオンボーディング時に gitleaks の pre-commit フックを設定します
- 外部セキュリティスキル(SPEC-065)— サードパーティ製セキュリティスキル向けのフックインターフェース
外部セキュリティスキルのフックインターフェース
フックの登録契約、イベントスキーマ、統合パターンについては、references/external-hook-api.md を参照してください。
依存関係
- SPEC-058:コンテキストファイルのインジェクションスキャナー(
context_file_scanner.py) - SPEC-059:スキャナー利用可能状況の検出(
scanner_availability.py) - SPEC-065:外部セキュリティスキルのフックインターフェース(
external_hooks.py)