
Pipeline local de inteligencia de amenazas asistido por IA que ingiere fuentes web, RSS y de documentos, extrae afirmaciones verificadas mediante citas y asigna perfiles de adversarios a MITRE ATT&CK con exportaciones STIX y Sigma.
Inteligencia de adversarios impulsada por IA para equipos púrpura.
Argus investiga una amenaza en la web, tus fuentes RSS y los documentos que proporciones, extrae afirmaciones respaldadas por citas con un LLM, las consolida en evaluaciones con puntuación de confianza mapeadas a MITRE ATT&CK, y permite que una persona revise cada paso. Se ejecuta íntegramente en tu propia máquina.
El pipeline se ejecuta una vez por documento, escribiendo afirmaciones atómicas más la cita textual que respalda cada una y una fila de auditoría por etapa. El Validador verifica cada cita contra el texto, resuelve entidades contra el almacén local y el catálogo ATT&CK, y consolida las afirmaciones entre fuentes en las evaluaciones que renderiza la interfaz. Solo Triage, Analyst y el redactor de resúmenes tocan un modelo; el Validador es código plano.
Argus distribuye su interfaz web ya compilada, por lo que la instalación solo requiere Python 3.12+ (sin Node, sin paso de compilación). Funciona en Windows y Linux y aún no está en PyPI, así que instálalo desde el repositorio o desde una wheel de release.
# from a clone of the repository
git clone https://github.com/Cyllex-Framework/Cyllex-Argus.git
cd Cyllex-Argus
python3 -m venv .venv
. .venv/bin/activate # Windows PowerShell: .venv\Scripts\Activate.ps1
pip install .
# ...or straight from GitHub, without cloning
pip install "git+https://github.com/Cyllex-Framework/Cyllex-Argus.git"
De cualquier forma, el comando argus queda en tu PATH. Los desarrolladores que trabajan en el propio Argus pueden usar
uv en su lugar (uv sync); consulta la página
Development.
argus init # creates ~/.cyllex-argus/
argus attack update # downloads the MITRE ATT&CK Enterprise bundle
export ANTHROPIC_API_KEY='sk-ant-...' # or the Claude Code CLI / Ollama; see Choosing a model below
argus investigate "Scattered Spider" --max-docs 10
argus serve # web UI at the printed URL
En el primer arranque, argus serve descarga el catálogo de ATT&CK por sí mismo (alrededor de un minuto) si omitiste
argus attack update; la primera investigación espera a que termine, así que nunca ejecutas una antes de que
ATT&CK esté cargado.
La interfaz se abre en http://127.0.0.1:8765 e inicia sesión con admin / Argus123 de fábrica.
Cámbialo antes de exponer Argus en una red (argus set-admin-password '...', o la
variable de entorno ARGUS_ADMIN_PASSWORD, que nunca toca el disco). Pasa argus serve --host 0.0.0.0 para aceptar clientes desde tu LAN.
El pipeline de contenido de Argus (Triage, Analyst, Validator, resúmenes) se ejecuta sobre uno de cuatro proveedores.
Elige en Settings → LLM provider o edita [llm] en ~/.cyllex-argus/argus.toml:
| Proveedor | Requiere | Modelo (predeterminado) | Búsqueda web |
|---|---|---|---|
claude-code-cli | Claude Pro/Max + la CLI claude con sesión iniciada | controlado por la suscripción | Sí (integrada) |
anthropic-api | ANTHROPIC_API_KEY (trae tu propia clave) | claude-sonnet-5-5 | No, combínalo con claude-code-cli como proveedor de búsqueda |
openai-api | OPENAI_API_KEY | gpt-4o | No |
ollama | Ollama en ejecución + un modelo descargado | qwen2.5:32b-instruct | No |
Qué se ha probado. El desarrollo y las pruebas del día a día se ejecutaron principalmente sobre Claude (
claude-code-cliyanthropic-api) y Ollama local. Los prompts están ajustados para Claude; la ruta de OpenAI funciona y su salida está validada por esquema, pero tiene menos recorrido y puede extraer menos afirmaciones hasta que se reajusten los prompts.
# Preferred: env wins over anything stored in argus.toml, and never touches disk
export ANTHROPIC_API_KEY='sk-ant-...'
# or:
export OPENAI_API_KEY='sk-...'
argus serve
Alternativamente, pega la clave en Settings → LLM provider → API key. La interfaz la almacena bajo
[llm.anthropic] api_key / [llm.openai] api_key y la muestra enmascarada (••••••••) al recargar, por lo que
nunca se vuelve a mostrar en texto plano. La variable de entorno siempre tiene prioridad, así que la rotación mediante export funciona sin
editar el archivo.
La página del proveedor te permite sobrescribir el model predeterminado (p. ej. gpt-4o-mini para un Triage más económico,
claude-opus-5-5 para ejecuciones profundas del Analyst) y la base_url (útil para proxies compatibles con OpenAI
como OpenRouter, LocalAI, LiteLLM; el adaptador de OpenAI habla el contrato de Chat Completions / Structured
Outputs y funciona contra cualquier servidor que lo implemente). Un model establecido aquí sobrescribe el valor
predeterminado de cada proveedor para todos los agentes, por lo que la página muestra un banner con un botón Clear de un clic cuando
hay uno activo.
Cada proveedor con clave de API tiene un botón Test connection que llama a GET /v1/models con las
credenciales configuradas e informa lo que el servidor lista: valida la clave, la URL base y (si
se introduce un id de modelo) si ese modelo aparece en la cuenta.
Anthropic: una clave con ámbito de organización o de usuario (
sk-ant-usr-...) devuelve HTTP 400 en/v1/modelsa menos que tenga ámbito de workspace. Si Test connection devuelve 400 con una clave que sabes que es válida, vuelve a emitirla como clave de workspace; esa (y no una clave incorrecta) es la causa habitual.