Un sistema multi-agente basado en CrewAI que analiza repositorios de GitHub automáticamente y genera un informe PDF completo con hallazgos de seguridad, rendimiento y calidad de código.
El sistema orquesta cinco agentes especializados que trabajan en secuencia y en paralelo:
Explorador ──► Analista de Seguridad ─┐
Ingeniero de Rendimiento ├──► Documentador ──► PDF
Inspector de Calidad ─┘
| Agente | Rol |
|---|---|
| Explorador | Clona el repo, mapea la estructura y asigna archivos a cada especialista |
| Analista de Seguridad | Detecta vulnerabilidades OWASP, inyecciones, exposición de datos, etc. |
| Ingeniero de Rendimiento | Identifica cuellos de botella, problemas N+1, fugas de memoria, etc. |
| Inspector de Calidad | Revisa convenciones, principios SOLID, DRY, documentación, etc. |
| Documentador | Consolida todos los hallazgos y genera el informe PDF |
El informe final incluye puntuación global, resumen ejecutivo, hallazgos categorizados con fragmentos de código y correcciones sugeridas, plan de acción priorizado y puntos positivos del proyecto.
- Python 3.10+
- Git instalado en el sistema
- Token de GitHub (recomendado para evitar límites de la API)
- Acceso a un LLM compatible con LiteLLM (OpenAI, Anthropic, Azure, etc.)
git clone https://github.com/tu-usuario/code-review-crew.git
cd code-review-crewpython -m venv .venv
source .venv/bin/activate # Linux / macOS
.venv\Scripts\activate # Windowspip install -r requirements.txtCrea un archivo .env en la raíz del proyecto:
# LLM
API_BASE=https://api.openai.com/v1 # o la URL de tu proveedor
API_KEY=sk-... # tu clave de API
# GitHub (opcional pero recomendado)
GITHUB_TOKEN=ghp_...El API_BASE y API_KEY se pasan directamente a LiteLLM, por lo que son compatibles con cualquier proveedor soportado (OpenAI, Azure OpenAI, Anthropic, Ollama, etc.).
Si no configuras GITHUB_TOKEN, la herramienta de metadatos funcionará con límites de rate más bajos de la API pública de GitHub.
python main.py <url-del-repositorio>python main.py https://github.com/pallets/flask
python main.py https://github.com/psf/requests
python main.py https://github.com/tu-usuario/tu-repoEl informe PDF se guarda automáticamente en:
reports/review_<nombre-del-repo>.pdf
code-review-crew/
├── main.py # Punto de entrada
├── crew.py # Orquestación de agentes y tareas
├── agents.py # Definición de los agentes
├── tasks.py # Definición de las tareas
├── requirements.txt
├── .env # Variables de entorno (no subir a git)
│
├── config/
│ ├── agents.yaml # Roles, objetivos y backstories de los agentes
│ └── tasks.yaml # Descripciones y outputs esperados de cada tarea
│
├── tools/
│ ├── gitHub_tools.py # Herramientas de clonado y lectura de repos
│ └── pdf_tool.py # Generador del informe PDF con ReportLab
│
└── reports/ # PDFs generados (se crea automáticamente)
Importante: los archivos
agents.yamlytasks.yamldeben estar dentro de una carpetaconfig/. Asegúrate de que la estructura de directorios sea correcta antes de ejecutar.
En agents.py, modifica el bloque LLM:
self.llm = LLM(
model="openai/gpt-4o", # cualquier modelo soportado por LiteLLM
base_url=os.getenv("API_BASE"),
api_key=os.getenv("API_KEY"),
temperature=0.2,
)En config/tasks.yaml, cada tarea tiene una instrucción Máximo 15 archivos por especialista. Puedes aumentarlo o reducirlo según tu presupuesto de tokens.
En tools/gitHub_tools.py, la variable CODE_EXTENSIONS define qué tipos de archivo se incluyen en el árbol. Añade o elimina extensiones según el stack de tu proyecto.
| Paquete | Uso |
|---|---|
crewai |
Framework multi-agente |
litellm |
Capa de abstracción para LLMs |
PyGithub |
API de GitHub (metadatos) |
reportlab |
Generación del PDF |
python-dotenv |
Carga de variables de entorno |
pyyaml |
Lectura de configuración YAML |
- El análisis depende de la calidad del LLM configurado. Modelos más potentes producen hallazgos más precisos.
- Repositorios muy grandes (>500 archivos de código) pueden exceder los límites de contexto. El explorador prioriza los archivos más relevantes (máx. 15 por agente).
- El clonado es superficial (
--depth=1), por lo que el historial de commits no está disponible para análisis. - El
GITHUB_TOKENes necesario para repositorios privados.
MIT