Aigently
Alimenta de forma segura reglas de seguridad actualizadas en tiempo real en Cursor, Claude Code y Windsurf, sin configuración ni clave API.
Documentación
🆕 El catálogo se duplica a 12 stacks. Django, Rails, Go, iOS y Android pasan a producción, junto con un nuevo stack AI / LLM Apps que cubre LangChain, LlamaIndex, Hugging Face transformers, vLLM y Ollama. Además, puntuación de probabilidad de explotación EPSS en cada CVE. Lee el anuncio →
El catálogo de CVE de código abierto, el pipeline y el servidor MCP detrás de aigent.ly. Cada día, CI ingiere nuevos CVE de seis fuentes públicas de amenazas, los enriquece con patrones de codificación generados por IA y confirma reglas de seguridad listas para usar directamente en este repositorio, con formato para Cursor, Claude Code, Windsurf, GitHub Copilot y Cline.
12 stacks · 6 fuentes · CI diario · nativo MCP · Apache 2.0 · 0 claves necesarias para consumir.
Cómo funciona
CVE published → pipeline detects it → Claude generates safe-code patterns
→ rule committed to this repo → your IDE enforces it while you type
Los asistentes de codificación con IA escriben código de producción rápido. No saben qué CVE llegaron la semana pasada, ni cómo escribir evitándolos. Aigent.ly cierra esa brecha: convierte un feed de CVE en vivo en reglas de IDE que viajan con tu proyecto, aplicadas en el momento de la generación, no descubiertas en el momento de la auditoría.
Por qué existe
- Los asistentes de IA no saben qué CVE llegaron la semana pasada.
- SAST detecta problemas en el momento de la auditoría. Aigent.ly los detecta en el momento de la generación.
- Datos abiertos y gratuitos. Producto privado y de pago. El límite de seguridad es por diseño.
Inicio rápido
No se necesitan claves API para consumir. CI confirma instantáneas frescas a diario: apunta tu IDE al servidor MCP y listo.
Uso vía MCP (recomendado)
Añade a la configuración MCP de tu IDE: funciona con Claude Code, Cursor, Windsurf, Copilot y Cline:
{
"mcpServers": {
"aigently": {
"command": "npx",
"args": ["-y", "@aigently/mcp-server@latest"]
}
}
}
El servidor MCP lee JSON estático de packages/catalog-data/ — sin base de datos, sin claves API, sin configuración.
Herramientas MCP disponibles
| Herramienta | Descripción | ¿Devuelve EPSS? |
|---|---|---|
get_security_context | Detecta tu stack y devuelve reglas relevantes y los CVE principales | ✅ |
compose_guardrail | Genera un archivo de reglas listo para IDE para tu stack | – |
search_threats | Búsqueda de CVE de texto completo y facetada; clasifica por KEV → severidad → EPSS | ✅ |
get_threat | Detalle completo de CVE con patrones de código seguro generados por IA | ✅ |
detect_project_stack | Identifica stack(s) a partir de una lista de archivos | – |
list_stacks | Enumera los 12 stacks compatibles | – |
get_manifest | Versión del catálogo + recuentos | – |
🛡 Qué está cubierto
Stacks (12)
| # | Stack | Ecosistema | Familia | Estado |
|---|---|---|---|---|
| 1 | Next.js | npm | owasp_web | en vivo |
| 2 | Express / Node.js | npm | owasp_web | en vivo |
| 3 | FastAPI / Python | PyPI | owasp_web | en vivo |
| 4 | NestJS | npm | owasp_web | en vivo |
| 5 | Nuxt | npm | owasp_web | en vivo |
| 6 | React SPA | npm | owasp_web | en vivo |
| 7 | Django | PyPI | owasp_web | 🆕 AHORA EN VIVO |
| 8 | Ruby on Rails | RubyGems | owasp_web | 🆕 AHORA EN VIVO |
| 9 | Go | Go | owasp_web | 🆕 AHORA EN VIVO |
| 10 | iOS / Swift | SwiftURL | owasp_web | 🆕 AHORA EN VIVO |
| 11 | Android / Kotlin | Maven | owasp_web | 🆕 AHORA EN VIVO |
| 12 | AI / LLM Apps | PyPI | owasp_llm | ✨ NUEVO |
Para añadir un stack: abre packages/mvp-catalog/src/stack-registry.ts, añade una entrada StackConfig (establece family: "owasp_llm" para stacks de aplicaciones de IA; el valor predeterminado es owasp_web) y abre un PR.
Fuentes (6)
| Fuente | Rol | Autenticación | Límite de tasa (gratuito) |
|---|---|---|---|
| NVD (NIST) | Registro autoritativo de CVE. Rellena puntuaciones CVSS e IDs CWE. | Clave API opcional | 5 solicitudes/30s (50 con clave) |
| CISA KEV | CVE explotados activamente. Establece isActivelyExploited como la señal de priorización dura. | Ninguna | Feed estático |
| GHSA (GitHub) | Avisos en npm, PyPI, RubyGems, Maven, Go, Swift. | Token Bearer | 5,000 solicitudes/hora |
| OSV (Google) | Vulnerabilidades por paquete, limitadas a los paquetes que declaran tus stacks. | Ninguna | Sin límite publicado |
| npm Audit | Escaneo directo de avisos de paquetes por stack. Detecta avisos aún no en OSV/GHSA. | Ninguna | Sin límite publicado |
| EPSS (FIRST.org) | 🆕 Puntuación de probabilidad de explotación actualizada diariamente (0–1) por CVE. | Ninguna | 1,000 solicitudes/min |
🚦 Cómo se priorizan las amenazas
Cada amenaza en el catálogo lleva múltiples señales de clasificación para que la capa MCP pueda mostrar los CVE que realmente importan:
final_rank = isActivelyExploited (CISA KEV) ← ground truth: it's being exploited NOW
+ severity (CVSS bucket) ← classic theoretical severity
+ epssScore ≥ 0.5 (+1) / ≥ 0.9 (+2) ← prediction: how likely 30-day exploitation
+ family match (owasp_web | owasp_llm) ← keep LLM threats from polluting web rankings
+ intent overlap (auth/inject/csrf/rag) ← what the developer is actually doing
EPSS es la diferencia entre "CVSS 9.8 — parchea en el próximo sprint" y "CVSS 9.8 con EPSS 0.94 — deja todo". Exponemos ambos.
🧠 Stack AI / LLM
El stack ai-llm ingiere CVE contra la cadena de herramientas de aplicaciones de IA y los clasifica contra el OWASP LLM Top 10 en lugar del Web Top 10:
Paquetes vigilados: langchain, langchain-community, langchain-core, llama-index, llama-index-core, llama-cpp-python, transformers, huggingface_hub, vllm, gradio, ollama, anthropic, openai, pydantic-ai, crewai, autogen-agentchat, dspy-ai.
Mapeo OWASP LLM (extracto — ver pipeline/scripts/lib/normalise.ts):
| OWASP LLM | CWE comunes | Ejemplo |
|---|---|---|
| LLM01 — Inyección de prompts | CWE-20 / 77 / 78 / 94 / 1321 | Contexto de recuperación no confiable concatenado en el prompt del sistema |
| LLM02 — Salida insegura / SSRF | CWE-200 / 918 | Agente que llama a herramientas obtiene URLs internas arbitrarias de un prompt manipulado |
| LLM05 — Cadena de suministro | CWE-116 / 502 | Deserialización no confiable de checkpoints de modelos |
| LLM06 — Información sensible / Autorización | CWE-284 / 285 | Los almacenes de embeddings filtran secretos de datos de entrenamiento |
Las amenazas de este stack fluyen a través de un prompt dedicado consciente de LLM en amplify-threats.ts para que las salvaguardas se enmarquen en vocabulario de LLM (NEVER concatenate retrieved context into the system prompt without delimiters) en lugar de vocabulario web.
Pipeline de inteligencia de amenazas
Etapas del pipeline
Daily CI run (GitHub Actions, 06:00 UTC)
Phase 0 CISA KEV map + stack registry preflight
Phase 1–3 npm Audit + OSV + GHSA → raw advisories
Phase 5 deduplicate (source-priority based)
Phase 4a EPSS exploit-probability enrichment ← NEW (batched, 50 CVEs/req)
Phase 4 NVD: backfill CVSS & CWE for low-confidence rows
Phase 6–8 upsert threats + per-stack mapping + mitigation flags
Phase 9 close sync log
Amplify Claude: 2–4 ALWAYS/NEVER patterns per CVE (family-aware prompt)
Summarize Claude: cluster CVEs into per-stack rule docs
Synthesize Claude: merge into pre-built guardrail blocks (patterns + deps)
Export write JSON snapshots to packages/catalog-data/
Commit auto-push catalog-data/ to this repo
Estructura del repositorio
| Ruta | Contenido |
|---|---|
packages/catalog-data/ | Instantáneas de amenazas en vivo — JSON confirmado diariamente por CI |
packages/mcp-server/ | Servidor MCP (@aigently/mcp-server) — expone el catálogo a agentes de IA |
packages/db/ | Esquema Drizzle compartido entre el pipeline y la aplicación web |
packages/mvp-catalog/ | Registro de stacks — añade una entrada de stack aquí para incorporarlo |
packages/api-client/ | Cliente TypeScript generado a partir de la especificación OpenAPI |
pipeline/scripts/ | sync, amplify, summarize, synthesize, export — el pipeline completo |
pipeline/scripts/lib/sources/ | Un archivo por fuente de datos (NVD, OSV, GHSA, npm-audit, CISA KEV, EPSS) |
.github/workflows/sync-threats.yml | CI diario: ingiere CVE → salvaguardas de IA → confirmar |
Ejecutar el pipeline localmente
git clone https://github.com/aelbuni/aigently-catalog
cd aigently-catalog
npm install
cp pipeline/.env.example pipeline/.env # default DATABASE_URL matches docker-compose
npm run db:setup # start Postgres, migrate, seed
# pipeline/.env — keys you need only when running the pipeline yourself:
ANTHROPIC_API_KEY=... # required for amplify, summarize, synthesize
GITHUB_TOKEN=... # required for GHSA source
NVD_API_KEY=... # optional — increases NVD rate limit 10×
# EPSS requires no key.
npm run sync:threats # ingest CVEs from all six sources
npm run amplify:threats # Claude: ALWAYS/NEVER patterns per CVE (family-aware)
npm run summarize:rules # Claude: cluster into per-stack rule docs
npm run synthesize:guardrails # Claude: pre-build guardrail blocks
npm run export:catalog # write JSON to packages/catalog-data/
Todos los scripts y variables de entorno
Scripts
| Script | Propósito |
|---|---|
npm run db:up | Inicia Postgres vía Docker Compose |
npm run db:setup | Configuración inicial: inicia Postgres + migra + siembra |
npm run db:migrate | Aplica migraciones de Drizzle |
npm run db:seed | Siembra completa del catálogo |
npm run db:seed:upsert | Upsert no destructivo |
npm run sync:threats | Ingiera CVE de las seis fuentes |
npm run amplify:threats | Genera patrones con IA para nuevas amenazas |
npm run summarize:rules | Agrupa CVE con IA en resúmenes de reglas |
npm run synthesize:guardrails | Pre-construye bloques de salvaguardas por stack |
npm run export:catalog | Exporta DB → JSON packages/catalog-data/ |
Variables de entorno
| Variable | Requerida | Propósito |
|---|---|---|
DATABASE_URL | Siempre | Cadena de conexión de Postgres |
ANTHROPIC_API_KEY | Pasos de IA | Acceso a la API de Claude |
GITHUB_TOKEN | Sincronización | Fuente de avisos de GitHub (GHSA) |
NVD_API_KEY | Opcional | Límite de tasa NVD 10× |
STACK_FILTER | Opcional | Limita una ejecución de sincronización a un slug de stack (p. ej., ai-llm) |
DRY_RUN | Opcional | Enriquece y deduplica sin escribir en la DB |
Requisitos previos
- Node.js 22+
- Docker (para Postgres local)
- Clave API de Anthropic (solo pasos de IA del pipeline)
🗺 Hoja de ruta
Ya enviado: 12 stacks · 6 fuentes · priorización clasificada por EPSS · prompts amplificadores conscientes de familia (web + LLM).
Próximamente (PRs bienvenidos):
- Detección de disponibilidad de PoC / explotación — GitHub + Exploit-DB + plantillas Nuclei
- Avisos de proveedores — MSRC + Red Hat + Ubuntu (para CVE de imágenes base / nivel de SO)
- Exportación STIX 2.1 — para ingesta en SIEM
- Webhooks de lista de vigilancia KEV / EPSS — alerta cuando un CVE en tu stack detectado entra en KEV o supera un umbral de EPSS
- Stacks Spring Boot, Laravel, .NET — abiertos a contribución
Contribuir
Los PRs son bienvenidos. Las contribuciones de mayor valor son:
- Nuevos stacks — añade a
packages/mvp-catalog/src/stack-registry.ts(establecefamily: "owasp_llm"para stacks AI/LLM) - Curación de CVE — mejora
mustLines,ruleContextoalwaysPinenpackages/catalog-data/seed-master.json - Calidad de patrones — abre un issue si una línea
ALWAYS/NEVERes incorrecta o demasiado genérica - Nuevas fuentes de amenazas — añade un módulo bajo
pipeline/scripts/lib/sources/
Consulta CONTRIBUTING.md para las pautas completas.
Licencia
Apache 2.0 — datos de amenazas provenientes de dominio público (NVD, CISA KEV, GHSA, OSV, EPSS).
"Publicamos en código abierto todo lo que la comunidad necesita: los datos, el pipeline, el registro de stacks. La aplicación web que ejecuta aigent.ly es privada. Porque un producto de seguridad debería practicar lo que predica."
Aigent.ly y el logotipo de Aigent.ly son marcas comerciales de Aigently, Inc.