Chat
Herramientas del harness
Qué hace cada herramienta del harness, cuándo corre, qué significan sus resultados y sus límites en chat, CLI, MCP y Research API.
El harness es el conjunto de herramientas alrededor de los modelos. En el chat, el modelo decide cuándo llamarlas, y ves cada llamada con su objetivo y su duración. Los resultados llegan al modelo entre marcadores con un id aleatorio, marcados como contenido no confiable.
Las herramientas del servidor solo leen: páginas públicas, índices de búsqueda, nuestros espejos y los archivos que adjuntas. Ninguna escanea, sondea ni envía un payload a un objetivo. El agente de la CLI es la única parte que corre comandos, en tu máquina y con tu aprobación.
Cuándo ofrece el chat cada herramienta
| Herramienta | Se ofrece cuando |
|---|---|
web_search, read_url | Web está activa |
darkweb_search | Web está activa y tu mensaje lo pide explícitamente |
cve_lookup, cve_search, advisory_lookup | CVE está activo |
kb_search, kb_read | Siempre. No hay interruptor |
file_list, file_read, file_search, binary_info, archive_list, disassemble | Hay un archivo adjunto |
Una ejecución se detiene a los 12 pasos del modelo, 5 llamadas a herramientas a la vez, 60 segundos por herramienta y 10 minutos en total. Los resultados entran en la conversación y se cobran como tokens de entrada, al precio del modelo.
Búsqueda web
web_search(query, count?) recibe una búsqueda de hasta 400 caracteres y devuelve títulos, URL y extractos de página, 5 resultados por defecto y 10 como máximo. Los resultados de NVD, cve.org, CISA, GitHub, Seclists, PortSwigger y OWASP van primero, y las búsquedas idénticas quedan en caché 15 minutos. Un resultado puede estar mal o desactualizado, así que abre la fuente antes de confiar en él.
Lectura de páginas
read_url(url) devuelve el texto de una página pública. En el chat solo abre URL que escribiste o que devolvió un resultado de búsqueda, CVE, advisory o base de conocimiento. Los enlaces dentro de una página y los resultados .onion no se pueden abrir.
Acepta http(s) en los puertos 80 y 443 y HTML, texto, JSON o XML, hasta 10 MB y 15 segundos. Cada dirección y redirección se revisa, la conexión queda fija en la IP revisada y se respeta robots.txt. Rechaza IP literales, cadenas de ataque, rutas de archivos expuestos como /.git y /.env, y más de 40 rutas distintas en un host en 10 minutos. También rechaza una URL que lleve texto de un archivo adjunto.
Búsqueda en la dark web
darkweb_search(query, max_results?, engines?) recibe una búsqueda de hasta 200 caracteres y devuelve hasta 30 entradas. Omite engines para usar todos los índices.
El chat solo ofrece esta herramienta cuando lo pides explícitamente. Tu mensaje tiene que contener dark web, deep web, darknet, .onion, onion site, sitios ocultos, red oscura o Tor, o ser la continuación directa de un turno que lo tenía. Nombrar un grupo de ransomware o una filtración no alcanza, y esas preguntas van a web_search. Con Web apagada, la herramienta queda apagada.
Cada resultado es un registro de índice de búsqueda: título, URL .onion, extracto y el índice de origen. El harness lee las páginas de resultados de los índices por Tor y nunca abre, rastrea ni descarga una página listada. Trata cada entrada como una pista no verificada y posiblemente hostil.
El límite es de 5 búsquedas por minuto por usuario. Los resultados patrocinados se descartan. Un filtro de seguridad rechaza búsquedas y descarta resultados sobre material de abuso sexual infantil. Sin ruta Tor, la herramienta lo avisa y puede usar un índice de la web abierta.
En MCP, llamar a darkweb_search ya es el pedido explícito. La Research API y la CLI no tienen ruta de dark web.
Datos de CVE
cve_lookup(id) devuelve un registro consolidado: descripción de NVD, puntuación y vector CVSS 3.1 o 4.0, CWE, CPE afectados con versión corregida cuando NVD la tiene, referencias, puntuación y percentil EPSS, y estado en CISA KEV con fecha de entrada y uso conocido en ransomware. Cada fuente muestra cuándo se obtuvo. Un CVE sin CVSS aparece como sin puntuar y no se estima nada. Un ID que el espejo no tiene se trae de las fuentes una vez.
cve_search(query?, vendor?, kev?, min_cvss?, min_epss?) devuelve hasta 20 resultados ordenados por coincidencia de texto y EPSS. Solo pregunta a NVD por palabra clave cuando el espejo no encuentra nada.
Advisories de paquetes
advisory_lookup(name, ecosystem, version?) devuelve vulnerabilidades conocidas de OSV, hasta 50. Informa lo que OSV lista para ese nombre y versión. Demostrar que el código vulnerable se alcanza en tu build sigue siendo cosa tuya. En MCP la herramienta se llama advisory_query.
Base de conocimiento
kb_search(query, domain?, source?, tool?) busca en la base de conocimiento curada y kb_read(id, from?, limit?) abre un documento sección por sección. Los dominios son web, api, mobile, offensive, tools, cloud, ir y attack. Cada resultado trae fuente, licencia y atribución. Una técnica de nicho puede no estar, y la búsqueda web es el paso siguiente.
Archivos
Las herramientas de archivos leen lo que el parser estático extrajo de un adjunto. Nada de lo que subes se ejecuta, y no hay análisis dinámico. Cada archivo se analiza en un contenedor gVisor desechable, sin red, con raíz de solo lectura y sin secretos. Un archivo que supera los límites o un fallo del parser termina como rejected, con el motivo.
| Herramienta | Devuelve |
|---|---|
file_list | Archivos adjuntos con estado, tipo, tamaño y avisos |
file_read(file_id, from?, limit?) | Texto extraído por fragmento, con localizador de archivo y línea |
file_search(query) | Fragmentos que contienen tus palabras, en todos los adjuntos |
binary_info(file_id) | SHA-256, tamaño, entropía, y formato, punto de entrada, secciones e imports para ELF y PE |
archive_list(file_id) | El índice del comprimido |
disassemble(file_id) | Una vista previa: los primeros 4 KB del archivo decodificados como x86-64, 200 instrucciones como máximo |
No hay decompilador ni grafo de flujo. Los comprimidos se detienen en profundidad 3, 10.000 entradas, 2 GB expandidos y relación de 100:1. El texto se detiene en 5 millones de caracteres por archivo. Las imágenes dan solo dimensiones. El aviso credentials_detected significa que el parser encontró un patrón de clave o token. Consulta los tipos en Archivos en el chat.
Dónde está cada herramienta
| Capacidad | Chat | CLI | MCP | Research API |
|---|---|---|---|---|
| Búsqueda web | web_search | agente web_search | web_search | POST /v1/web/search |
| Lector de páginas | read_url | read_url | POST /v1/web/read | |
| Búsqueda en la dark web | darkweb_search | darkweb_search | ||
| Registro de CVE | cve_lookup | notholy cve, agente cve_lookup | cve_lookup | GET /v1/cve/{id} |
| Búsqueda de CVE | cve_search | notholy cve search | cve_search | GET /v1/cve/search |
| Advisories de paquetes | advisory_lookup | advisory_query | POST /v1/advisories/query | |
| Base de conocimiento | kb_search, kb_read | notholy kb, agente kb_search | kb_search, kb_read | GET /v1/kb/search, GET /v1/kb/{id} |
| Análisis de archivos | Herramientas de archivos de arriba | notholy analyze | analyze_file | POST /v1/files |
| Archivos locales y comandos | Agente read, grep, glob, edit, write, bash | |||
| Alcance y log de engagement | notholy engage |
POST /v1/chat/completions, /v1/responses y /v1/messages son los endpoints crudos de los modelos y no tienen herramientas del harness. El modelo recibe solo las function tools que envías, y las ejecuta tu código. Para usar estos datos desde tu código, llama a la Research API o a MCP.