# Инструменты harness

> Что делает каждый инструмент harness, когда он запускается, что значат результаты и какие есть лимиты в чате, CLI, MCP и Research API.


Harness — это набор инструментов вокруг моделей. В чате модель сама решает, когда их вызвать, а вы видите каждый вызов с целью и длительностью. Результаты попадают к модели в маркерах со случайным id и помечены как недоверенный контент.

Серверные инструменты только читают: публичные страницы, поисковые индексы, наши зеркала и приложенные файлы. Ни один не сканирует, не зондирует и не шлёт payload на цель. Команды запускает только агент CLI, на вашей машине и с вашего подтверждения.

## Когда чат предлагает каждый инструмент

| Инструмент | Предлагается, когда |
|---|---|
| `web_search`, `read_url` | Включён **Web** |
| `darkweb_search` | Включён **Web** и сообщение явно об этом просит |
| `cve_lookup`, `cve_search`, `advisory_lookup` | Включён **CVE** |
| `kb_search`, `kb_read` | Всегда. Выключателя нет |
| `file_list`, `file_read`, `file_search`, `binary_info`, `archive_list`, `disassemble` | Приложен файл |

Выполнение останавливается на 12 шагах модели, 5 одновременных вызовах инструментов, 60 секундах на инструмент и 10 минутах всего. Результаты входят в диалог и тарифицируются как входные токены по цене модели.

## Поиск в вебе

`web_search(query, count?)` принимает запрос до 400 символов и возвращает заголовки, URL и фрагменты страниц, 5 результатов по умолчанию и максимум 10. Результаты с NVD, cve.org, CISA, GitHub, Seclists, PortSwigger и OWASP идут первыми, одинаковые запросы кэшируются на 15 минут. Результат может быть неверным или устаревшим, поэтому откройте источник, прежде чем на него опираться.

## Чтение страницы

`read_url(url)` возвращает текст одной публичной страницы. В чате открывает только URL, которые ввели вы или вернул поиск, CVE, advisory или база знаний. Ссылки внутри страницы и результаты `.onion` открыть нельзя.

Принимает http(s) на портах 80 и 443 и HTML, текст, JSON или XML, до 10 МБ и 15 секунд. Каждый адрес и редирект проверяются, соединение фиксируется на проверенном IP, `robots.txt` соблюдается. Отклоняет IP-адреса вместо имён, строки атак, пути к открытым файлам вроде `/.git` и `/.env` и больше 40 разных путей на одном хосте за 10 минут. URL с текстом из приложенного файла тоже отклоняется.

## Поиск в даркнете

`darkweb_search(query, max_results?, engines?)` принимает запрос до 200 символов и возвращает до 30 записей. Без `engines` используются все индексы.

Чат предлагает этот инструмент только по явному запросу. В сообщении должно быть латиницей dark web, deep web, darknet, `.onion`, onion site, hidden service или Tor, либо это прямое продолжение такого хода. Названия группировки вымогателей или утечки недостаточно, такие вопросы идут в `web_search`. При выключенном **Web** инструмент тоже выключен.

Каждый результат — это запись поискового индекса: заголовок, URL `.onion`, фрагмент и индекс-источник. Harness читает страницы результатов индексов через Tor и никогда не открывает, не обходит и не скачивает страницы из списка. Считайте каждую запись непроверенной зацепкой, которая может быть враждебной.

Лимит — 5 поисков в минуту на пользователя. Спонсорские результаты отбрасываются. Фильтр безопасности отклоняет запросы и отбрасывает результаты о материалах с сексуальным насилием над детьми. Без маршрута Tor инструмент сообщает об этом и может использовать один индекс в открытой сети.

В MCP сам вызов `darkweb_search` считается явным запросом. В Research API и CLI маршрута к даркнету нет.

## Данные CVE

`cve_lookup(id)` возвращает сводную запись: описание из NVD, оценку и вектор CVSS 3.1 или 4.0, CWE, затронутые CPE с версией исправления, если она есть в NVD, ссылки, оценку и перцентиль EPSS, статус в CISA KEV с датой добавления и использованием в атаках вымогателей. Для каждого источника видно, когда он получен. CVE без CVSS показывается как без оценки, ничего не домысливается. ID, которого нет в зеркале, один раз запрашивается у источников.

`cve_search(query?, vendor?, kev?, min_cvss?, min_epss?)` возвращает до 20 результатов, ранжированных по совпадению текста и EPSS. В NVD по ключевому слову идёт только когда зеркало ничего не нашло.

## Advisories пакетов

`advisory_lookup(name, ecosystem, version?)` возвращает известные уязвимости из OSV, до 50. Сообщает то, что OSV указывает для этого имени и версии. Доказать, что уязвимый код достижим в вашей сборке, остаётся за вами. В MCP инструмент называется `advisory_query`.

## База знаний

`kb_search(query, domain?, source?, tool?)` ищет в отобранной [базе знаний](/ru/chat/knowledge-base), а `kb_read(id, from?, limit?)` открывает документ раздел за разделом. Домены: `web`, `api`, `mobile`, `offensive`, `tools`, `cloud`, `ir` и `attack`. Каждый результат несёт источник, лицензию и атрибуцию. Нишевой техники может не быть, тогда следующий шаг — поиск в вебе.

## Файлы

Файловые инструменты читают то, что статический парсер извлёк из вложения. Ничего из загруженного не запускается, динамического анализа нет. Каждый файл разбирается в одноразовом контейнере gVisor без сети, с корнем только для чтения и без секретов. Файл сверх лимитов или сбой парсера завершаются статусом `rejected` с указанием причины.

| Инструмент | Возвращает |
|---|---|
| `file_list` | Приложенные файлы со статусом, типом, размером и предупреждениями |
| `file_read(file_id, from?, limit?)` | Извлечённый текст по фрагментам с указанием файла и строки |
| `file_search(query)` | Фрагменты с вашими словами по всем вложениям |
| `binary_info(file_id)` | SHA-256, размер, энтропию, а для ELF и PE ещё формат, точку входа, секции и импорты |
| `archive_list(file_id)` | Оглавление архива |
| `disassemble(file_id)` | Превью: первые 4 КБ файла как x86-64, максимум 200 инструкций |

Декомпилятора и графа потока нет. Архивы останавливаются на глубине 3, 10 000 записей, 2 ГБ в распакованном виде и степени сжатия 100:1. Текст ограничен 5 млн символов на файл. По изображениям только размеры. Предупреждение `credentials_detected` значит, что парсер нашёл шаблон ключа или токена. Типы файлов описаны в разделе [Файлы в чате](/ru/chat/files).

## Где доступен каждый инструмент

| Возможность | Чат | CLI | MCP | Research API |
|---|---|---|---|---|
| Поиск в вебе | `web_search` | agent `web_search` | `web_search` | `POST /v1/web/search` |
| Чтение страницы | `read_url` | | `read_url` | `POST /v1/web/read` |
| Поиск в даркнете | `darkweb_search` | | `darkweb_search` | |
| Запись CVE | `cve_lookup` | `notholy cve`, agent `cve_lookup` | `cve_lookup` | `GET /v1/cve/{id}` |
| Поиск CVE | `cve_search` | `notholy cve search` | `cve_search` | `GET /v1/cve/search` |
| Advisories пакетов | `advisory_lookup` | | `advisory_query` | `POST /v1/advisories/query` |
| База знаний | `kb_search`, `kb_read` | `notholy kb`, agent `kb_search` | `kb_search`, `kb_read` | `GET /v1/kb/search`, `GET /v1/kb/{id}` |
| Анализ файлов | Файловые инструменты выше | `notholy analyze` | `analyze_file` | `POST /v1/files` |
| Локальные файлы и команды | | agent `read`, `grep`, `glob`, `edit`, `write`, `bash` | | |
| Скоуп и лог engagement | | [`notholy engage`](/ru/cli/agent#engagements) | | |

`POST /v1/chat/completions`, `/v1/responses` и `/v1/messages` — это голые эндпоинты моделей, инструментов harness в них нет. Модель получает только function tools, которые отправили вы, и запускает их ваш код. Чтобы использовать эти данные из своего кода, вызывайте [Research API](/ru/api/research) или [MCP](/ru/mcp/local).

## Что дальше

- [Агент в терминале](/ru/cli/agent)
- [Research API](/ru/api/research)
