
Révision par les pairs basée sur l'IA pour les résultats Pentest ou les rapports Bug Bounty — valide la sévérité, les preuves et la qualité du rapport avant la livraison en utilisant plusieurs évaluateurs IA indépendants (Claude, GPT, Gemini) qui se critiquent mutuellement avant d'atteindre un verdict.
Un pipeline d'évaluation par les pairs en aveugle qui valide un constat de test d'intrusion avant qu'il n'atteigne le client. Des experts indépendants évaluent le constat, s'évaluent mutuellement en aveugle, et un Président synthétise un verdict vérifié unique : vaut-il la peine d'être signalé, et la sévérité est-elle calibrée ?
Deux façons de l'exécuter :
| Mode | Où | Ce qui se passe |
|---|---|---|
| Président manuel | claude.ai / application Claude | Un seul Claude raisonne à travers chaque point de vue isolément, puis synthétise. Zéro coût, pas de clés. |
| Parallèle (multi-fournisseur) | Claude Code sur votre machine | council_direct.py diffuse les points de vue sur Claude + ChatGPT + Gemini en appels concurrents réels. Coûte des tokens au fournisseur. Détecte les angles morts partagés par un seul fournisseur. |
Ce dépôt est la source de vérité. Modifiez ici, commitez avec git. La base de connaissances du projet Claude est un miroir en lecture seule — re-téléchargez les fichiers modifiés lorsqu'ils changent substantiellement. Ne faites pas de synchronisation bidirectionnelle.
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. clone / place the repo
git clone <your-repo-url> llm-council-vapt
cd llm-council-vapt
# 2. make the skill discoverable by Claude Code (symlink, so edits stay live)
mkdir -p ~/.claude/skills
ln -s ~/llm-council-vapt/skills/llm-council ~/.claude/skills/llm-council
# 3. keys
cp .env.template .env
nano .env # paste the three keys, save
Modifiez .env et ajoutez vos clés API Anthropic, OpenAI et Google.
Maintient les dépendances isolées de votre Python système.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.txt
Remarque (systèmes Kali / basés sur Debian) : PEP 668 bloque l'installation système de
pip installpar défaut. Si vous rencontrezexternally-managed-environment, utilisez l'option A ou forcez :pip install -r requirements.txt --break-system-packages
python scripts/council_direct.py --help
ls -l ~/.claude/skills/llm-council/SKILL.md # should resolve via the symlink
Si les deux s'exécutent correctement, vous êtes prêt.
Consultez docs/USAGE.md pour la référence complète des commandes (tous les flags, tous les modes, tous les exemples).
Tapez simplement une commande — pas de clés, pas de scripts :
/llm-council -q -u # quick, upload file
/llm-council medium validation -p # medium, paste content
/llm-council -f -u -v2 -s high # full, upload, version 2, validate High claim
Flags : mode -q|-m|-f (ou quick|medium|full validation), entrée -u (upload) / -p (coller), version -vN, sévérité -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 accepte un chemin de fichier ou du texte brut. Le script affiche du JSON (évaluations + classements en aveugle + agrégat + éventuelles erreurs). Demandez ensuite à Claude Code de lire council_run.json et d'exécuter l'étape 3 du conseil (synthèse du Président) pour produire le verdict final.
quick (-q) → Red-teamer · Auditeur CVSS · Auditeur de preuves (3)
medium (-m) → + Analyste de chaîne d'attaque · Critique de remédiation (5)
full (-f) → + Analyste de renseignement sur les menaces · Chasseur de faux négatifs ·
Traducteur d'impact métier (8)
Quick = vérification rapide de santé en cours d'engagement. Medium = constats que vous avez l'intention de signaler. Full = passerelle pré-livraison ; par défaut pour tout Haut/Critique.
Vérifiés par rapport à la documentation officielle des fournisseurs (juin 2026). Pas à jour en permanence — mettez à jour MODELS en haut de scripts/council_direct.py lorsque les fournisseurs publient de nouveaux vaisseaux amiraux.
.env est dans gitignore. Les vraies clés ne sont jamais commitées. Vérifiez avec git status avant votre premier git add — .env ne doit pas apparaître.python-dotenv. Elles ne sont jamais écrites dans les logs ou le JSON de sortie.Le script lit directement les constats en texte : .md, .txt, .json, .csv, .yaml, ou du texte brut passé en ligne. Les formats binaires/documents (.pdf, .docx, .xlsx, etc.) ne sont pas supportés — le script les détecte et se termine avec un message vous demandant de les convertir d'abord en .md/.txt. Comme les constats sont rédigés en markdown, cela n'est normalement pas un problème.
En mode complet/moyen, l'Analyste de chaîne d'attaque peut considérer les constats frères :
--findings-dir <chemin> — répertoire à scanner (par défaut, le propre répertoire du fichier de constat).--project <préfixe> — tag optionnel de préfixe de nom de fichier pour filtrer les frères considérés comme liés. Si omis, tous les frères en texte lisible sont considérés. Le tag est fourni à l'exécution ; aucun nom de client ou préfixe n'est intégré dans le code.Gardez vos vrais fichiers de constat en dehors de ce dépôt (n'importe où sur votre machine). Pointez --findings-dir vers cet emplacement à chaque exécution.
Construit par Holiday
| Siège | Fournisseur | ID du modèle | Clé |
|---|
| 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 |