
AIを活用したペネトレーションテスト結果やバグバウンティレポートのピアレビュー — 複数の独立したAIレビュアー(Claude、GPT、Gemini)が互いに批評し合い、評決に達する前に、深刻度、証拠、報告品質を検証します。
クライアントに報告される前に、ペネトレーションテストの検出結果を検証するブラインドピアレビューパイプライン。独立したエキスパートレンズが検出結果を評価し、互いにブラインドレビューを行い、議長が一つにまとめた検証済みの判定を合成します — 報告に値するか、深刻度は適切に調整されているか?
実行方法は2つあります:
| モード | 場所 | 動作 |
|---|---|---|
| 手動議長 | claude.ai / Claudeアプリのチャット | 1つのClaudeが各レンズを分離して推論し、その後合成します。コストゼロ、キー不要。 |
| 並列(クロスベンダー) | ローカルマシンのClaude Code | council_direct.py がレンズをClaude + ChatGPT + Geminiに実際の同時呼び出しとして分散します。プロバイダートークンが消費されます。単一ベンダーが共有するブラインドスポットをキャッチします。 |
このリポジトリが唯一の情報源です。ここで編集し、gitでコミットしてください。Claude Projectの知識ベースは読み取り専用のミラーです — ファイルに実質的な変更があった場合、変更後のファイルを再アップロードしてください。双方向同期はしないでください。
llm-council-vapt/
├── README.md # this file
├── requirements.txt # python deps
├── .env.template # key names, no values
├── .gitignore # ignores .env (keys never committed)
├── skills/
│ └── llm-council/
│ └── SKILL.md # the skill (8 members, protocols, modes)
├── scripts/
│ └── council_direct.py # parallel cross-vendor engine
└── docs/
└── project_system_prompt.md # paste into Claude Project settings
# 1. リポジトリをクローン/配置
git clone <your-repo-url> llm-council-vapt
cd llm-council-vapt
# 2. Claude Codeがスキルを認識できるようにする(シンボリックリンク。編集はそのまま反映)
mkdir -p ~/.claude/skills
ln -s ~/llm-council-vapt/skills/llm-council ~/.claude/skills/llm-council
# 3. キー
cp .env.template .env
nano .env # 3つのキーを貼り付け、保存
.env を編集し、Anthropic、OpenAI、GoogleのAPIキーを追加します。
依存関係をシステムのPythonから分離して維持します。
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.txt
注意(Kali / Debianベースのシステム): PEP 668により、デフォルトでシステム全体への
pip installがブロックされます。externally-managed-environmentエラーが発生した場合は、オプションAを使用するか、強制的に実行してください:pip install -r requirements.txt --break-system-packages
python scripts/council_direct.py --help
ls -l ~/.claude/skills/llm-council/SKILL.md # シンボリックリンク経由で解決されるはず
両方が問題なく実行されれば、準備完了です。
完全なコマンドリファレンス(すべてのフラグ、全モード、全例)については docs/USAGE.md を参照してください。
コマンドを入力するだけ — キーもスクリプトも不要です:
/llm-council -q -u # クイック、ファイルアップロード
/llm-council medium validation -p # ミディアム、内容をペースト
/llm-council -f -u -v2 -s high # フル、アップロード、バージョン2、Highの主張を検証
フラグ:モード -q|-m|-f(または quick|medium|full validation)、入力 -u(アップロード)/
-p(ペースト)、バージョン -vN、深刻度 -s low|medium|high|critical。
python3 scripts/council_direct.py \
--mode full \
--finding ./finding.md \
--severity high \
--version 2 \
--finding-id <YOUR-FINDING-ID> \
--project <PREFIX> > council_run.json
--finding はファイルパスまたは生のテキストを受け入れます。スクリプトはJSONを出力します
(評価 + ブラインドランキング + 集計 + 失敗があれば)。その後、Claude Codeに
council_run.json を読み取らせ、カウンシルのステージ3(議長合成)を実行して
最終的な判定を生成します。
quick (-q) → Red-teamer · CVSS Auditor · Evidence Auditor (3)
medium (-m) → + Attack Chain Analyst · Remediation Critic (5)
full (-f) → + Threat Intel Analyst · False Negative Hunter ·
Business Impact Translator (8)
Quick = エンゲージメント中の高速な健全性チェック。Medium = 報告予定の検出結果。Full = 納品前のゲート;High/Criticalの場合のデフォルト。
公式プロバイダー文書で確認済み(2026年6月時点)。永続的なものではありません — プロバイダーが新しい最上位モデルをリリースしたら、scripts/council_direct.py の先頭にある MODELS を更新してください。
.env はgitignoreされています。 実際のキーがコミットされることはありません。最初の git add の前に必ず git status で確認してください — .env が表示されてはいけません。python-dotenv により実行時に環境変数から読み取られます。ログや出力JSONに書き込まれることはありません。スクリプトはテキストベースの検出事項を直接読み取ります:.md、.txt、.json、.csv、.yaml、またはインラインで渡された生のテキスト。バイナリ/ドキュメント形式(.pdf、.docx、.xlsx など)はサポートされていません — スクリプトはそれらを検出し、最初に .md/.txt に変換するよう指示するメッセージを表示して終了します。検出事項はマークダウンで作成されるため、通常は問題になりません。
フル/ミディアムモードでは、攻撃チェーンアナリストが兄弟検出事項を考慮できます:
--findings-dir <path> — スキャンするディレクトリ(デフォルトは検出事項ファイル自身のディレクトリ)。--project <prefix> — オプションのファイル名プレフィックスタグ。どの兄弟を関連とみなすかをフィルタリングします。省略すると、読み取り可能なテキストの兄弟すべてが考慮されます。タグは実行時に指定されます。クライアント名やプレフィックスがコードにハードコードされることはありません。実際の検出事項ファイルはこのリポジトリの外部(マシン上の任意の場所)に保存してください。実行時に --findings-dir でその場所を指定します。
Holiday によって作成されました
| 席 | プロバイダー | モデルID | キー |
|---|
| Claude | Anthropic | claude-opus-4-8 | ANTHROPIC_API_KEY |
| ChatGPT | OpenAI | gpt-5.5 | OPENAI_API_KEY |
| Gemini | gemini-3.1-pro-preview | GEMINI_API_KEY |