mcpField
G
ghost-report

ghost-report

github.com/ghostsecurityセキュリティ4273.9k 回インストール4 週間前に更新
リポジトリ

ghost-report について

ghost-reportは、依存関係、シークレット、コードのスキャン結果を優先度順にまとめるセキュリティスキルです。リポジトリのセキュリティレビュー向けに、高・中重大度の関連情報を含むMarkdownレポートを作成します。

主な機能

  1. 01依存関係・シークレット・コードの検出結果を集約
  2. 02スキャン種別ごとのステータスで検出結果を絞り込み
  3. 03重大度とスキャン種別で並べ替え
  4. 04高・中重大度の詳細を掲載
  5. 05スキャンレポートからカバレッジ統計を取得

活用シーン

  1. 01複数のスキャン結果をレビュー用に集約
  2. 02確認済みのセキュリティ問題を優先順位付け
  3. 03自己完結したリポジトリセキュリティレポートを作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/ghostsecurity/skills --skill ghost-report

インストール後、Claude Code で/ghost-reportを入力して読み込まれたか確認します。

同梱ファイルreport-template.md

詳細

統合セキュリティレポート

すべてのスキャンスキル(scan-deps、scan-secrets、scan-code)の検出結果を集約し、優先順位を付けた単一のレポートを作成します。すべての作業を自分で行い、サブエージェントの起動や委任はしないでください。

$ARGUMENTS


Step 0: セットアップ

パスを計算するため、次の Bash コマンドを実行します。

repo_name=$(basename "$(pwd)") && remote_url=$(git remote get-url origin 2>/dev/null || pwd) && short_hash=$(printf '%s' "$remote_url" | git hash-object --stdin | cut -c1-8) && repo_id="${repo_name}-${short_hash}" && short_sha=$(git rev-parse --short HEAD 2>/dev/null || date +%Y%m%d) && ghost_repo_dir="$HOME/.ghost/repos/${repo_id}" && scans_dir="${ghost_repo_dir}/scans/${short_sha}" && cache_dir="${ghost_repo_dir}/cache" && skill_dir=$(find . -path '*/skills/report/SKILL.md' 2>/dev/null | head -1 | xargs dirname) && echo "scans_dir=$scans_dir cache_dir=$cache_dir skill_dir=$skill_dir"

scans_dir(コミット単位のスキャンディレクトリ)、cache_dir、skill_dirを保存します。


キャッシュの確認

<scans_dir>/report.mdがすでに存在する場合は、次を表示します。

Combined security report is at: <scans_dir>/report.md

その後、停止します。再生成しないでください。


Step 1: リポジトリのコンテキストを読む

<cache_dir>/repo.mdが存在する場合は読み込み、次の情報を抽出します。

  • ビジネス上の重要度
  • 機密データの種類
  • コンポーネントマップ

存在しない場合は、エラーとはみなさず、そのまま続行します。


Step 2: スキャン結果を確認する

<scans_dir>の内容を一覧表示し、どの種類のスキャンディレクトリが存在するかを確認します。認識される種類は次のとおりです。

  • deps/ — SCA/依存関係の脆弱性スキャン
  • secrets/ — シークレットと認証情報のスキャン
  • code/ — コードセキュリティスキャン(SAST)

これらのディレクトリが1つも存在しない場合は、エラーを報告します。

No scan results found in <scans_dir>. Run one or more scan skills first:
  /ghost-scan-deps
  /ghost-scan-secrets
  /ghost-scan-code

その後、停止します。


Step 3: 検出結果を収集する

存在する各スキャン種類について、<scans_dir>/<type>/findings/*.mdをglobし、検出結果ファイルをそれぞれ全文読み込みます。すべての検出結果のMarkdown本文を完全な形で保持してください。読者が個別の検出結果ファイルを開かなくても済むよう、レポートには本文をそのままインラインで記載します。

各検出結果から、フィルタリングと並べ替えに使う次のメタデータフィールドも抽出します。

  • ID — ## Metadata → IDから取得
  • Type — スキャンの種類(deps、secrets、またはcode)
  • Severity — ## Metadata → Severityから取得(high、medium、low)
  • Status — ## Metadata → Statusから取得(例:confirmed-exploitable、unverified、verified、rejected、clean)

Step 4: フィルタリングと並べ替え

フィルタリング: 信頼度の高い検出結果のみを残します。

  • depsの検出結果:ステータスがconfirmed-exploitable
  • secretsの検出結果:ステータスがcleanでもrejectedでもない
  • codeの検出結果:ステータスがverifiedまたはunverified(rejectedではない)

ステータスがclean、rejected、またはfalse-positiveの検出結果は除外します。

残った検出結果を次の順序で並べ替えます。

  1. 深刻度順:high、medium、lowの順
  2. 深刻度が同じ場合:deps、secrets、codeの順

Step 5: スキャンごとのレポートを読む

depsとsecretsのスキャン種類について、<scans_dir>/<type>/report.mdが存在する場合は読み込み、次の情報を抽出します。

  • 統計情報(スキャンした候補数、確認された検出数、フィルタリングされた誤検出数)
  • エグゼクティブサマリーの要点

注:codeではreport.mdは生成されません。コードスキャンの対象範囲については、<scans_dir>/code/findings/内の検出結果ファイルを直接数えます。「Candidates Scanned」の数は、ステータスを問わず検出結果ファイルの合計数です。「Confirmed Findings」の数は、ステータスがverified、confirmed、またはunverifiedのものの数です。「False Positives Filtered」の数は、ステータスがrejectedのものの数です。候補の選定/分析フローでクリーンと判定されたファイル分析は、検出結果にならなかったため、数に含めないでください。

depsまたはsecretsのスキャンごとのレポートが存在しない場合は、利用できない旨を記載します。


ステップ 6:レポートを生成する

  1. <skill_dir>/report-template.md を読み込みます
  2. 収集したデータを使ってテンプレートに情報を入力します:
    • スキャン情報に、リポジトリ名、コミット SHA、日付、実施したスキャンを記入します
    • リポジトリの状況と集約した検出結果に基づいて、エグゼクティブサマリーを作成します
    • このセキュリティに重点を置いた、客観的かつ事実に基づくレポートのすべての記述には、専門性と読みやすさのバランスが取れた、中立的で人間味のある文体を使用します。絵文字やエムダッシュなどは使用しないでください
    • 重大度が高のクリティカルおよび高リスクの検出結果については、各検出結果ファイルの実質的な内容をレポートに直接記載します。レポートだけで内容が完結するよう、コードスニペット、評価表、修正コマンド、関連する詳細をすべて含めてください
    • 中リスクの検出結果については、要約表にまとめず、各検出結果の説明、場所、コードの文脈、修正方法を含む詳細なサブセクションを記述します
    • 低リスクの検出結果は省略します(スキャンごとの検出結果ファイルのみに残します)
    • スキャン範囲の表には、スキャンごとのレポート統計を記入します(コードについては、ステップ 5 の検出結果ファイル数を使用します)
    • 実施したスキャンの種類ごとに、方法論についての簡潔な注記を追加します(スキャンごとのレポートから1~2文を引用します)
    • スキャンごとのレポートや個別の検出結果ファイルへのリンクは含めないでください。内容はすべてレポートに記載します
  3. レポートを <scans_dir>/report.md に書き込みます

ステップ 7:出力を表示する

Combined security report is at: <scans_dir>/report.md

コメント