ghost-scan-code について
リポジトリの脆弱性検査を計画し、選定したファイルを分析して検出内容を検証するスキルです。スキャン深度は quick、balanced、full から指定できます。
主な機能
- 01プロジェクト種別に応じた計画
- 023段階のスキャン深度
- 03分析対象ファイルの選定
- 04検出内容の検証
- 05計画と結果の保存
活用シーン
- 01リポジトリの脆弱性確認
- 02確認後の詳細スキャン
- 03候補となる問題の検証
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ ghostsecurity/ skills --skill ghost-scan-codeインストール後、Claude Code で/ghost-scan-codeを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
criteria/backend.yamlfrontend.yamlindex.yamllibrary.yamlmobile.yamlprompts/analyzer.mdnominator.mdplanner.mdtemplate-finding.mdverifier.mdscripts/loop.sh詳細
問題の検出
リポジトリ内のセキュリティ上の問題を検出します。このスキルでは、スキャンする脆弱性のベクトルを計画し、各プロジェクトに対してスキャンを実行します。
入力
- depth:
quick(デフォルト)、balanced、またはfull—$ARGUMENTSで上書きできます
$ARGUMENTS
注: 引数が渡された場合、スキャンのワークフローをカスタマイズするために使用できます。たとえば、ユーザーが特定のベクトル、ベクトル数、特定の候補ファイル、重点領域、候補ファイル数などを指定した場合は、関連する詳細をスキル内の適切なステップに渡してください。
補助ファイル
- ループスクリプト:scripts/loop.sh
- スキャン基準:criteria/index.yaml
ステップ 1:セットアップ
リポジトリ固有の出力ディレクトリを算出します:
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}" && scan_dir="${ghost_repo_dir}/scans/${short_sha}/code" && cache_dir="${ghost_repo_dir}/cache" && mkdir -p "$scan_dir" && echo "scan_dir=$scan_dir cache_dir=$cache_dir"
$cache_dir/repo.mdを読み込みます。存在しない場合は、先にrepo-contextスキルを実行してから続行します。- criteria/index.yamlを読み込み、プロジェクトの種類ごとに有効なエージェント→ベクトルの対応関係を取得します。
- 指定されていない場合は、
depthをquickに設定します。 depthがfullの場合は、フルスキャンでは大幅に多くのトークンを使用することをユーザーに警告し、続行する前に確認を求めます。ユーザーが同意しない場合は、balancedに切り替えます。
ステップ 2:スキャンの計画
$scan_dir/plan.mdがすでに存在する場合は、次のステップに進みます。
それ以外の場合は、scripts/loop.shを使ってプランナーを実行します:
bash <path-to-loop.sh> $scan_dir planner.md "- depth: <depth>
- arguments: <relevant argument overrides if any, otherwise omit>" 1 $cache_dir
タイムアウトは10分に設定します。コマンドがタイムアウトした場合は、再実行してください。スクリプトは中断した箇所から再開します。同じエラーで3回連続して失敗した場合は、停止して失敗を報告します。
確認: $scan_dir/plan.mdが存在し、続行する前に少なくとも1つの## Project:セクションが含まれていることを確認します。
ステップ 3:ファイルの候補選定
$scan_dir/nominations.mdが存在しない場合は、$scan_dir/plan.mdを読み込み、各プロジェクトセクション(## Project: <base_path> (<type>))について、Recommended Scansテーブルを解析して生成します。各行からAgent列とVector列を抽出します。$scan_dir/nominations.mdに(プロジェクト、エージェント、ベクトル)の組み合わせごとに1行ずつ書き込みます。スキャンテーブルが空のプロジェクトはスキップします。
# Nominations
- [ ] <base_path> (<type>) | <agent> | <vector>
- [ ] <base_path> (<type>) | <agent> | <vector>
...
$scan_dir/nominations.mdがすでに存在する場合は、最上位のタスクにある- [x]をすべて- [ ]に変更します。各項目の下にあるインデントされた行やサブタスクは変更しないでください。
候補選定スクリプトの実行
scripts/loop.shを使います:
bash <path-to-loop.sh> $scan_dir nominator.md "- depth: <depth>
- arguments: <relevant argument overrides if any, otherwise omit>" 5 $cache_dir
タイムアウトは10分に設定します。コマンドがタイムアウトした場合は、再実行してください。スクリプトは中断した箇所から再開します。同じエラーで3回連続して失敗した場合は、停止して失敗を報告します。
確認: $scan_dir/nominations.mdに少なくとも1つの- [x]行が含まれていることを確認してから続行します。
ステップ 4:候補ファイルの分析
$scan_dir/nominations.mdを読み込みます。チェック済みの- [x]行にある各候補ファイルについて、$scan_dir/analyses.mdに追記します(すでにanalyses.mdに記載されている候補はスキップします)。
- [ ] <base_path> (<type>) | <agent> | <vector> | <candidate_file>
検出結果のディレクトリを作成します:
mkdir -p $scan_dir/findings
分析スクリプトの実行
scripts/loop.shを使います:
bash <path-to-loop.sh> $scan_dir analyzer.md "" 5 $cache_dir
タイムアウトは10分に設定します。コマンドがタイムアウトした場合は、再実行してください。スクリプトは中断した箇所から再開します。同じエラーで3回連続して失敗した場合は、停止して失敗を報告します。
確認: $scan_dir/analyses.mdに少なくとも1つの- [x]行が含まれていることを確認してから続行します。
ステップ 5:検出結果の確認
$scan_dir/findings/内のすべての.mdファイルを一覧表示します。ファイルがない場合は、no-findings.mdの概要を作成して終了します。
scripts/loop.shを使います:
bash <path-to-loop.sh> $scan_dir verifier.md "" 5 $cache_dir
タイムアウトは10分に設定します。コマンドがタイムアウトした場合は、再実行してください。スクリプトは中断した箇所から再開します。同じエラーで3回連続して失敗した場合は、停止して失敗を報告します。
完了
すべてのステップが完了したら、スキャン結果を報告します:
$scan_dir/findings/内のすべての検出結果ファイルを一覧表示します。- 検証済みと却下された検出結果の数を数えます。
- ユーザーに概要を提示します。