
Revisione paritaria basata su IA per i risultati dei test di penetrazione o dei rapporti di Bug Bounty — convalida la gravità, le prove e la qualità della reportistica prima della consegna utilizzando più revisori IA indipendenti (Claude, GPT, Gemini) che si criticano a vicenda prima di emettere un verdetto.
Una pipeline di peer-review cieca che convalida un'evidenza di penetration test prima che arrivi al cliente. Lenti esperte indipendenti valutano l'evidenza, si sottopongono a revisione cieca l'una con l'altra, e un Presidente sintetizza un verdetto certificato — vale la pena segnalarlo e la gravità è calibrata?
Due modi per eseguirla:
| Modalità | Dove | Cosa succede |
|---|---|---|
| Chairman manuale | claude.ai / app Claude chat | Un Claude ragiona attraverso ogni lente in isolamento, poi sintetizza. Costo zero, nessuna chiave. |
| Parallelo (cross-vendor) | Claude Code sulla tua macchina | council_direct.py distribuisce le lenti su Claude + ChatGPT + Gemini come chiamate concorrenti reali. Costa token del provider. Cattura i punti ciechi condivisi da un singolo vendor. |
Questo repository è la fonte di verità. Modifica qui, committa con git. La knowledge base del Progetto Claude è un mirror di sola lettura — ricarica i file modificati quando cambiano sostanzialmente. Non fare sincronizzazione bidirezionale.
llm-council-vapt/
├── README.md # questo file
├── requirements.txt # dipendenze python
├── .env.template # nomi delle chiavi, nessun valore
├── .gitignore # ignora .env (le chiavi non vengono mai committate)
├── skills/
│ └── llm-council/
│ └── SKILL.md # la skill (8 membri, protocolli, modalità)
├── scripts/
│ └── council_direct.py # motore parallelo cross-vendor
└── docs/
└── project_system_prompt.md # incolla nelle impostazioni del Progetto Claude
# 1. clona / posiziona il repo
git clone <your-repo-url> llm-council-vapt
cd llm-council-vapt
# 2. rendi la skill rilevabile da Claude Code (symlink, così le modifiche rimangono attive)
mkdir -p ~/.claude/skills
ln -s ~/llm-council-vapt/skills/llm-council ~/.claude/skills/llm-council
# 3. chiavi
cp .env.template .env
nano .env # incolla le tre chiavi, salva
Modifica .env e aggiungi le tue chiavi API di Anthropic, OpenAI e Google.
Mantiene le dipendenze isolate dal tuo Python di sistema.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.txt
Nota (sistemi Kali / basati su Debian): PEP 668 blocca
pip installa livello di sistema per default. Se incontriexternally-managed-environment, usa l'Opzione A o forzalo:pip install -r requirements.txt --break-system-packages
python scripts/council_direct.py --help
ls -l ~/.claude/skills/llm-council/SKILL.md # dovrebbe risolversi tramite symlink
Se entrambi funzionano senza errori, sei pronto.
Vedi docs/USAGE.md per il riferimento completo dei comandi (ogni flag, ogni modalità, tutti gli esempi).
Basta digitare un comando — nessuna chiave, nessuno script:
/llm-council -q -u # veloce, carica file
/llm-council medium validation -p # media, incolla contenuto
/llm-council -f -u -v2 -s high # completa, carica, versione 2, valida claim High
Flag: modalità -q|-m|-f (o quick|medium|full validation), input -u (carica) / -p (incolla), versione -vN, gravità -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 accetta un percorso file o testo grezzo. Lo script stampa JSON (valutazioni + classifiche cieche + aggregato + eventuali errori). Poi chiedi a Claude Code di leggere council_run.json ed eseguire la Fase 3 del council (sintesi del Presidente) per produrre il verdetto finale.
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)
Veloce = controllo di sanità rapido durante l'engagement. Media = evidenze che intendi riportare. Completa = gate pre-consegna; default per qualsiasi High/Critical.
Verificato contro la documentazione ufficiale dei provider (Giugno 2026). Non permanente — aggiorna MODELS all'inizio di scripts/council_direct.py quando i provider rilasciano nuovi flagship.
.env è in gitignore. Le chiavi reali non vengono mai committate. Verifica con git status prima del tuo primo git add — .env non deve apparire.python-dotenv. Non vengono mai scritte nei log o nel JSON di output.Lo script legge evidenze basate su testo direttamente: .md, .txt, .json, .csv, .yaml o testo grezzo passato inline. I formati binari/documento (.pdf, .docx, .xlsx, ecc.) non sono supportati — lo script li rileva ed esce con un messaggio che ti dice di convertire prima in .md/.txt. Poiché le evidenze sono redatte in markdown, normalmente non è un problema.
In modalità full/medium l'Analista della catena d'attacco può considerare evidenze sorelle:
--findings-dir <path> — directory da scannerizzare (default: la directory del file di evidenza stesso).--project <prefix> — tag opzionale di prefisso del nome file per filtrare quali sorelle contano come correlate. Se omesso, vengono considerate tutte le sorelle di testo leggibile. Il tag viene fornito in fase di esecuzione; nessun nome cliente o prefisso è codificato nel codice.Mantieni i tuoi file di evidenza reali fuori da questo repo (ovunque sulla tua macchina). Punta --findings-dir a quella posizione per ogni esecuzione.
Costruito da Holiday
| Posto | Provider | ID Modello | Chiave |
|---|
| 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 |