Saltar al contenido
NotHolyDocs

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.

Ver en Markdown

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

HerramientaSe ofrece cuando
web_search, read_urlWeb está activa
darkweb_searchWeb está activa y tu mensaje lo pide explícitamente
cve_lookup, cve_search, advisory_lookupCVE está activo
kb_search, kb_readSiempre. No hay interruptor
file_list, file_read, file_search, binary_info, archive_list, disassembleHay 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.

HerramientaDevuelve
file_listArchivos 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

CapacidadChatCLIMCPResearch API
Búsqueda webweb_searchagente web_searchweb_searchPOST /v1/web/search
Lector de páginasread_urlread_urlPOST /v1/web/read
Búsqueda en la dark webdarkweb_searchdarkweb_search
Registro de CVEcve_lookupnotholy cve, agente cve_lookupcve_lookupGET /v1/cve/{id}
Búsqueda de CVEcve_searchnotholy cve searchcve_searchGET /v1/cve/search
Advisories de paquetesadvisory_lookupadvisory_queryPOST /v1/advisories/query
Base de conocimientokb_search, kb_readnotholy kb, agente kb_searchkb_search, kb_readGET /v1/kb/search, GET /v1/kb/{id}
Análisis de archivosHerramientas de archivos de arribanotholy analyzeanalyze_filePOST /v1/files
Archivos locales y comandosAgente read, grep, glob, edit, write, bash
Alcance y log de engagementnotholy 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.

Próximos pasos