Aigently
Alimenta de forma segura regras de segurança reais e atualizadas no Cursor, Claude Code e Windsurf — zero configuração, sem chave de API.
Documentação
🆕 O catálogo dobra para 12 stacks. Django, Rails, Go, iOS e Android passam a estar disponíveis — junto com uma nova stack AI / LLM Apps que cobre LangChain, LlamaIndex, Hugging Face transformers, vLLM e Ollama. Além disso, pontuação de probabilidade de exploração EPSS em cada CVE. Leia o post de lançamento →
O catálogo de CVEs, o pipeline e o servidor MCP de código aberto por trás do aigent.ly. Todos os dias, a CI ingere novas CVEs de seis fontes públicas de ameaças, enriquece-as com padrões de codificação gerados por IA e envia regras de segurança prontas para uso diretamente para este repositório — formatadas para Cursor, Claude Code, Windsurf, GitHub Copilot e Cline.
12 stacks · 6 fontes · CI diária · nativo MCP · Apache 2.0 · 0 chaves necessárias para consumir.
Como funciona
CVE published → pipeline detects it → Claude generates safe-code patterns
→ rule committed to this repo → your IDE enforces it while you type
Assistentes de codificação com IA escrevem código de produção rapidamente. Eles não sabem quais CVEs chegaram na semana passada, nem como escrever ao redor delas. Aigent.ly preenche essa lacuna: transforma um feed de CVEs ao vivo em regras de IDE que acompanham seu projeto, aplicadas no momento da geração — não descobertas no momento da auditoria.
Por que existe
- Assistentes de IA não sabem quais CVEs chegaram na semana passada.
- SAST detecta problemas no momento da auditoria. Aigent.ly os detecta no momento da geração.
- Dados abertos e gratuitos. Produto pago e privado. A fronteira de segurança é por design.
Início rápido
Nenhuma chave de API é necessária para consumir. A CI envia novos snapshots diariamente — aponte sua IDE para o servidor MCP e pronto.
Uso via MCP (recomendado)
Adicione à configuração MCP da sua IDE — funciona com Claude Code, Cursor, Windsurf, Copilot e Cline:
{
"mcpServers": {
"aigently": {
"command": "npx",
"args": ["-y", "@aigently/mcp-server@latest"]
}
}
}
O servidor MCP lê JSON estático de packages/catalog-data/ — sem banco de dados, sem chaves de API, sem configuração.
Ferramentas MCP disponíveis
| Ferramenta | Descrição | Retorna EPSS? |
|---|---|---|
get_security_context | Detecta sua stack e retorna regras relevantes e principais CVEs | ✅ |
compose_guardrail | Gera um arquivo de regras pronto para IDE para sua stack | – |
search_threats | Busca de texto completo e facetada de CVEs; classifica por KEV → severidade → EPSS | ✅ |
get_threat | Detalhe completo da CVE com padrões de código seguro gerados por IA | ✅ |
detect_project_stack | Identifica stack(s) a partir de uma lista de arquivos | – |
list_stacks | Enumera todas as 12 stacks suportadas | – |
get_manifest | Versão do catálogo + contagens | – |
🛡 O que está coberto
Stacks (12)
| # | Stack | Ecossistema | Família | Status |
|---|---|---|---|---|
| 1 | Next.js | npm | owasp_web | ativo |
| 2 | Express / Node.js | npm | owasp_web | ativo |
| 3 | FastAPI / Python | PyPI | owasp_web | ativo |
| 4 | NestJS | npm | owasp_web | ativo |
| 5 | Nuxt | npm | owasp_web | ativo |
| 6 | React SPA | npm | owasp_web | ativo |
| 7 | Django | PyPI | owasp_web | 🆕 AGORA ATIVO |
| 8 | Ruby on Rails | RubyGems | owasp_web | 🆕 AGORA ATIVO |
| 9 | Go | Go | owasp_web | 🆕 AGORA ATIVO |
| 10 | iOS / Swift | SwiftURL | owasp_web | 🆕 AGORA ATIVO |
| 11 | Android / Kotlin | Maven | owasp_web | 🆕 AGORA ATIVO |
| 12 | AI / LLM Apps | PyPI | owasp_llm | ✨ NOVO |
Para adicionar uma stack: abra packages/mvp-catalog/src/stack-registry.ts, adicione uma entrada StackConfig (defina family: "owasp_llm" para stacks de aplicações de IA; o padrão é owasp_web) e abra um PR.
Fontes (6)
| Fonte | Função | Autenticação | Limite de taxa (grátis) |
|---|---|---|---|
| NVD (NIST) | Registro autoritativo de CVEs. Preenche pontuações CVSS e IDs CWE. | Chave de API opcional | 5 req/30s (50 com chave) |
| CISA KEV | CVEs exploradas ativamente. Define isActivelyExploited como o sinal de priorização rígido. | Nenhuma | Feed estático |
| GHSA (GitHub) | Avisos em npm, PyPI, RubyGems, Maven, Go, Swift. | Token Bearer | 5.000 req/h |
| OSV (Google) | Vulnerabilidades por pacote, limitadas aos pacotes que suas stacks declaram. | Nenhuma | Sem limite publicado |
| npm Audit | Varredura direta de avisos de pacotes por stack. Detecta avisos ainda não presentes no OSV/GHSA. | Nenhuma | Sem limite publicado |
| EPSS (FIRST.org) | 🆕 Pontuação de probabilidade de exploração atualizada diariamente (0–1) por CVE. | Nenhuma | 1.000 req/min |
🚦 Como as ameaças são priorizadas
Cada ameaça no catálogo carrega múltiplos sinais de classificação para que a camada MCP possa destacar as CVEs que realmente importam:
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 é a diferença entre "CVSS 9.8 — corrija no próximo sprint" e "CVSS 9.8 com EPSS 0.94 — pare tudo." Expomos ambos.
🧠 Stack AI / LLM
A stack ai-llm ingere CVEs contra o conjunto de ferramentas de aplicações de IA e as classifica de acordo com o OWASP LLM Top 10 em vez do Web Top 10:
Pacotes monitorados: 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.
Mapeamento OWASP LLM (trecho — veja pipeline/scripts/lib/normalise.ts):
| OWASP LLM | CWEs comuns | Exemplo |
|---|---|---|
| LLM01 — Injeção de prompt | CWE-20 / 77 / 78 / 94 / 1321 | Contexto de recuperação não confiável concatenado ao prompt do sistema |
| LLM02 — Saída insegura / SSRF | CWE-200 / 918 | Agente de chamada de ferramenta busca URLs internas arbitrárias a partir de um prompt manipulado |
| LLM05 — Cadeia de suprimentos | CWE-116 / 502 | Desserialização não confiável de checkpoint de modelo |
| LLM06 — Informações sensíveis / Autorização | CWE-284 / 285 | Armazenamentos de embeddings vazam segredos de dados de treinamento |
As ameaças desta stack passam por um prompt dedicado e consciente de LLM em amplify-threats.ts para que as salvaguardas sejam formuladas no vocabulário de LLM (NEVER concatenate retrieved context into the system prompt without delimiters) em vez do vocabulário web.
Pipeline de inteligência de ameaças
Etapas do 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
Estrutura do repositório
| Caminho | Conteúdo |
|---|---|
packages/catalog-data/ | Instantâneos de ameaças ao vivo — JSON commitado diariamente pela CI |
packages/mcp-server/ | Servidor MCP (@aigently/mcp-server) — expõe o catálogo a agentes de IA |
packages/db/ | Esquema Drizzle compartilhado entre o pipeline e o aplicativo web |
packages/mvp-catalog/ | Registro de stacks — adicione uma entrada de stack aqui para integrá-la |
packages/api-client/ | Cliente TypeScript gerado a partir da especificação OpenAPI |
pipeline/scripts/ | sync, amplify, summarize, synthesize, export — o pipeline completo |
pipeline/scripts/lib/sources/ | Um arquivo por fonte de dados (NVD, OSV, GHSA, npm-audit, CISA KEV, EPSS) |
.github/workflows/sync-threats.yml | CI diária: ingere CVEs → guardrails de IA → commit |
Execute o 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 os scripts e variáveis de ambiente
Scripts
| Script | Finalidade |
|---|---|
npm run db:up | Inicia o Postgres via Docker Compose |
npm run db:setup | Configuração inicial: inicia o Postgres + migra + popula |
npm run db:migrate | Aplica migrações Drizzle |
npm run db:seed | População completa do catálogo |
npm run db:seed:upsert | Upsert não destrutivo |
npm run sync:threats | Ingere CVEs de todas as seis fontes |
npm run amplify:threats | Gera padrões de IA para novas ameaças |
npm run summarize:rules | Agrupa CVEs por IA em resumos de regras |
npm run synthesize:guardrails | Pré-constroi blocos de guardrails por stack |
npm run export:catalog | Exporta o banco de dados → JSON packages/catalog-data/ |
Variáveis de ambiente
| Variável | Obrigatória | Finalidade |
|---|---|---|
DATABASE_URL | Sempre | String de conexão do Postgres |
ANTHROPIC_API_KEY | Etapas de IA | Acesso à API Claude |
GITHUB_TOKEN | Sincronização | Fonte de avisos do GitHub (GHSA) |
NVD_API_KEY | Opcional | 10× limite de taxa do NVD |
STACK_FILTER | Opcional | Limita uma execução de sincronização a um slug de stack (ex.: ai-llm) |
DRY_RUN | Opcional | Enriquece e deduplica sem gravar no banco de dados |
Pré-requisitos
- Node.js 22+
- Docker (para Postgres local)
- Chave de API da Anthropic (somente etapas de IA do pipeline)
🗺 Roadmap
Já entregue: 12 stacks · 6 fontes · priorização classificada por EPSS · prompts amplificadores cientes de família (web + LLM).
Próximos passos (PRs bem-vindos):
- Detecção de PoC / disponibilidade de exploit — GitHub + Exploit-DB + templates Nuclei
- Avisos de fornecedores — MSRC + Red Hat + Ubuntu (para CVEs de imagem base / nível de SO)
- Exportação STIX 2.1 — para ingestão em SIEM
- Webhooks de lista de observação KEV / EPSS — alerta quando uma CVE na sua stack detectada entra no KEV ou ultrapassa um limite de EPSS
- Stacks Spring Boot, Laravel, .NET — abertas a contribuições
Contribuindo
PRs são bem-vindos. As contribuições de maior valor são:
- Novas stacks — adicione em
packages/mvp-catalog/src/stack-registry.ts(definafamily: "owasp_llm"para stacks de IA/LLM) - Curadoria de CVEs — melhore
mustLines,ruleContextoualwaysPinempackages/catalog-data/seed-master.json - Qualidade de padrões — abra uma issue se uma linha
ALWAYS/NEVERestiver errada ou genérica demais - Novas fontes de ameaças — adicione um módulo em
pipeline/scripts/lib/sources/
Veja CONTRIBUTING.md para as diretrizes completas.
Licença
Apache 2.0 — dados de ameaças provenientes de domínio público (NVD, CISA KEV, GHSA, OSV, EPSS).
"Disponibilizamos em código aberto tudo o que a comunidade precisa — os dados, o pipeline, o registro de stacks. O aplicativo web que executa o aigent.ly é privado. Porque um produto de segurança deve praticar o que prega."
Aigent.ly e o logotipo Aigent.ly são marcas registradas da Aigently, Inc.