
Revisión entre pares impulsada por IA para hallazgos de pentest o informes de Bug Bounty — valida la severidad, la evidencia y la calidad del informe antes de la entrega utilizando múltiples revisores de IA independientes (Claude, GPT, Gemini) que se critican mutuamente antes de llegar a un veredicto.
Un pipeline de revisión ciega por pares que valida un hallazgo de pruebas de penetración antes de que llegue al cliente. Lentes de expertos independientes evalúan el hallazgo, se revisan ciegamente entre sí, y un Presidente sintetiza un veredicto depurado — ¿vale la pena reportarlo, y está calibrada la gravedad?
Dos formas de ejecutarlo:
| Modo | Dónde | Qué sucede |
|---|
| Presidente Manual | claude.ai / chat de la app Claude | Un Claude razona a través de cada lente de forma aislada, luego sintetiza. Coste cero, sin claves. |
| Paralelo (multiproveedor) | Claude Code en tu máquina | council_direct.py distribuye las lentes entre Claude + ChatGPT + Gemini como llamadas concurrentes reales. Consume tokens del proveedor. Detecta puntos ciegos que un solo proveedor comparte. |
Este repositorio es la fuente de verdad. Edita aquí, haz commit con git. La base de conocimiento del Proyecto Claude es un espejo de solo lectura — vuelve a subir los archivos modificados cuando cambien materialmente. No sincronices en dos direcciones.
llm-council-vapt/
├── README.md # este archivo
├── requirements.txt # dependencias de python
├── .env.template # nombres de clave, sin valores
├── .gitignore # ignora .env (las claves nunca se confirman)
├── skills/
│ └── llm-council/
│ └── SKILL.md # la skill (8 miembros, protocolos, modos)
├── scripts/
│ └── council_direct.py # motor paralelo multiproveedor
└── docs/
└── project_system_prompt.md # pegar en la configuración del Proyecto Claude
# 1. clonar / colocar el repositorio
git clone <tu-url-del-repo> llm-council-vapt
cd llm-council-vapt
# 2. hacer que la skill sea detectable por Claude Code (enlace simbólico, así las ediciones se mantienen activas)
mkdir -p ~/.claude/skills
ln -s ~/llm-council-vapt/skills/llm-council ~/.claude/skills/llm-council
# 3. claves
cp .env.template .env
nano .env # pega las tres claves, guarda
Edita .env y añade tus claves de API de Anthropic, OpenAI y Google.
Mantiene las dependencias aisladas del Python de tu sistema.
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
pip install -r requirements.txt
Nota (sistemas Kali / basados en Debian): PEP 668 bloquea
pip installen todo el sistema por defecto. Si apareceexternally-managed-environment, usa la Opción A o fórzalo:pip install -r requirements.txt --break-system-packages
python scripts/council_direct.py --help
ls -l ~/.claude/skills/llm-council/SKILL.md # debe resolverse mediante el enlace simbólico
Si ambos se ejecutan sin errores, estás listo.
Ver docs/USAGE.md para la referencia completa de comandos (cada bandera, cada modo, todos los ejemplos).
Simplemente escribe un comando — sin claves, sin scripts:
/llm-council -q -u # rápido, subir archivo
/llm-council medium validation -p # medio, pegar contenido
/llm-council -f -u -v2 -s high # completo, subir, versión 2, validar afirmación Alta
Banderas: modo -q|-m|-f (o quick|medium|full validation), entrada -u (subir) / -p (pegar), versión -vN, gravedad -s low|medium|high|critical.
python3 scripts/council_direct.py \
--mode full \
--finding ./finding.md \
--severity high \
--version 2 \
--finding-id <TU-ID-DEL-HALLAZGO> \
--project <PREFIJO> > council_run.json
--finding acepta una ruta de archivo o texto sin formato. El script imprime JSON (evaluaciones + clasificaciones ciegas + agregado + cualquier fallo). Luego pide a Claude Code que lea council_run.json y ejecute la Etapa 3 del consejo (síntesis del Presidente) para producir el veredicto final.
quick (-q) → Red-teamer · Auditor CVSS · Auditor de Evidencia (3)
medium (-m) → + Analista de Cadena de Ataque · Crítico de Corrección (5)
full (-f) → + Analista de Inteligencia de Amenazas · Cazador de Falsos Negativos ·
Traductor de Impacto Comercial (8)
quick = verificación rápida dentro de la sesión. medium = hallazgos que planeas reportar. full = puerta de pre-entrega; predeterminado para cualquier Alto/Crítico.
Verificados contra la documentación oficial del proveedor (junio de 2026). No perpetuos — actualiza MODELS al inicio de scripts/council_direct.py cuando los proveedores lancen nuevos modelos insignia.
| Puesto | Proveedor | ID del modelo | Clave |
|---|---|---|---|
| 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 |
.env está en .gitignore. Las claves reales nunca se confirman. Verifica con git status antes de tu primer git add — .env no debe aparecer.python-dotenv. Nunca se escriben en registros ni en el JSON de salida.El script lee hallazgos basados en texto directamente: .md, .txt, .json, .csv, .yaml, o texto sin formato pasado en línea. Los formatos binarios/de documentos (.pdf, .docx, .xlsx, etc.) no son compatibles — el script los detecta y sale con un mensaje indicándote que los conviertas a .md/.txt primero. Dado que los hallazgos se redactan en markdown, normalmente esto no es un problema.
En el modo completo/medio, el Analista de Cadena de Ataque puede considerar hallazgos hermanos:
--findings-dir <ruta> — directorio a escanear (por defecto es el propio directorio del archivo de hallazgo).--project <prefijo> — etiqueta opcional de prefijo de nombre de archivo para filtrar qué hermanos se consideran relacionados. Si se omite, se consideran todos los hermanos de texto legible. La etiqueta se proporciona en tiempo de ejecución; no se codifican nombres de cliente ni prefijos en el código.Mantén tus archivos reales de hallazgos fuera de este repositorio (en cualquier lugar de tu máquina). Apunta --findings-dir a esa ubicación en cada ejecución.
Construido por Holiday