Mole: независимый ИИ-агент для глубоких исследований с жёстким бюджетом на LLM

Mole: независимый ИИ-агент для глубоких исследований с жёстким бюджетом на LLM

На Hacker News (раздел Show HN) появился Mole, консольный агент для глубоких исследований, который отвечает на вопрос, читая и проверяя источники, а не просто пересказывая их. Получив вопрос, Mole разбивает его на подзадачи, ищет и читает страницы, извлекает из них утверждения, сверяет каждое утверждение с исходным текстом, ищет противоречия между утверждениями и только после этого пишет ответ со ссылками на источники.

Главное отличие от обычного чат-интерфейса с веб-поиском разработчик формулирует в трёх пунктах. Во-первых, бюджет на модели соблюдается принудительно, а не оценивается на глаз: каждый вызов модели резервируется в системе учёта до выполнения и списывается после, а сама схема базы данных запрещает уйти в минус. Флаг «--usd 0.50» означает, что запуск остановится ровно на пятидесяти центах; по измерениям на тестовом наборе проекта перерасход бюджета составил 0%. Во-вторых, каждое утверждение в ответе снабжено цитатой, которую отдельно сверяют с текстом источника: если цитата не находится в странице дословно, утверждение отбрасывается ещё на этапе извлечения, а утверждение, не подтвердившееся при повторной проверке, помечается в отчёте как неподтверждённое, а не тихо убирается. В-третьих, локальные данные не покидают машину пользователя: если направить Mole на CSV-файл или папку, модель выбирает только шаблон гипотезы и имена столбцов, сам SQL-запрос строит и выполняет Mole, а обратно модели возвращаются только агрегаты, количества, средние, результаты тестов и группы, покрывающие не менее пяти записей; отдельная команда «mole crossings» показывает, что именно ушло с машины.

Mole ставится единым статическим бинарником без внешних зависимостей для Linux и macOS (amd64 и arm64), через install-скрипт с проверкой SHA-256, Homebrew, пакет AUR.deb или .rpm, либо сборкой из исходников (нужен Go версии 1.25 и выше). Ключи поставщиков поиска и модели хранятся в файле ~/.config/mole/config.json с правами доступа 0600, не в переменных окружения, которые могут утечь через список процессов, и не в файле .mcp.json. В качестве модели поддерживается Anthropic и любой OpenAI-совместимый эндпоинт, DeepSeek, Ollama, llama.cpp, vLLM, прокси; модель, запущенная локально, ничего не стоит в деньгах, но всё равно учитывается в токенах, поэтому для неё бюджет можно задавать флагом «--tokens».

Инструмент работает в двух режимах. В обычном режиме Mole сам владеет моделью: планирует, добывает и пишет ответ по собственному API-ключу, а кодовый агент лишь запускает его и забирает результат, либо через MCP-сервер «mole-mcp», который слушает unix-сокет с правами 0600 в приватной директории и не принимает подключения от других пользователей, либо напрямую через CLI (команды вроде «mole research», «mole ask» для уточняющих вопросов без новых трат, или режим «--mode dataset» со схемой полей для выгрузки структурированных данных в CSV или JSON). В режиме toolkit («mole serve --toolkit») роли меняются местами: рассуждает модель самого кодового агента (например, в Claude Code или Qwen Code, где токены модели уже оплачены подпиской), а Mole поставляет недостающую детерминированную часть, проверку цитат, сведение похожих утверждений и построение SQL; этот режим добавляет четырнадцать инструментов вида «mole.» в дополнение к обычным «research.*». Внутри оба режима устроены одинаково: запрос проходит через планировщик, исполнителя, «актёра», который ищет, читает и извлекает утверждения, и верификатор, который сверяет пары связанных утверждений и перечитывает часть из них против источников. За извлечение данных отвечают три типа «актёров»: обычный веб-поиск и чтение страниц, академический поиск по Crossref, OpenAlex, arXiv и PubMed с дедупликацией по DOI, и работа с локальными данными через SQL без доступа модели к самим строкам.

Отдельная команда «mole eval» выставляет запуску собственную оценку, причём если какую-то метрику посчитать не удаётся, инструмент честно сообщает об этом вместо того, чтобы молча показать ноль. Разработчик описывает и практику тестирования проекта: после любого исправления автор откатывает сам механизм и проверяет, что тест начинает падать, тест, который проходит и без исправления, ничего не доказывает, и несколько тестов проекта уже ловили именно на этом. Отдельно в тексте разобраны конфликты имён: в основном репозитории Homebrew имя «mole» уже занято не связанным с проектом инструментом очистки macOS, поэтому нужно ставить пакет по полному пути «lajosdeme/mole/mole», а в AUR имена «mole» и «mole-bin» с 2020 года принадлежат SSH-туннелирующей утилите, так что пакет проекта ставится как «mole-research(-bin)» и сам предупреждает pacman о конфликте бинарника, а не молча его перезаписывает.

Ключевые факты

  • Бюджет на модели навязывается принудительно: каждый вызов резервируется до выполнения и списывается после, схема базы данных запрещает уйти в минус, а перерасход на тестовом наборе проекта, 0%.
  • Каждое утверждение в ответе снабжено цитатой, дословно сверенной с текстом источника; утверждение без точной цитаты отбрасывается ещё на этапе извлечения, а не позже.
  • Локальные данные (CSV, папки) не покидают машину: модель задаёт только шаблон гипотезы и имена столбцов, SQL строит и выполняет сам Mole, наружу уходят лишь агрегаты по выборкам от пяти записей.
  • Mole работает и как самостоятельный CLI/MCP-сервер со своим API-ключом, и в режиме toolkit, тогда рассуждает модель кодового агента, а Mole добавляет четырнадцать инструментов для проверки цитат, сведения утверждений и построения SQL.
  • Ставится единым бинарником без зависимостей (Linux/macOS, amd64/arm64) через install-скрипт, Homebrew, AUR или .deb/.rpm; ключи хранятся в файле с правами 0600, а не в переменных окружения.

Почему это важно

Разработчик прямо противопоставляет Mole обычному чат-интерфейсу с веб-поиском: тот не гарантирует денежный потолок расходов, не сверяет ответы с источниками построчно и не разделяет данные, которые можно отправлять модели, от тех, что должны остаться на диске. Mole закрывает все три пробела сразу и оформляет каждый как проверяемое инженерное решение, учёт в базе данных с запретом уйти в минус, отбраковку недословных цитат на этапе извлечения и SQL-агрегацию вместо передачи строк модели, а не как маркетинговое обещание.

Кому это важно

В первую очередь, разработчикам и аналитикам, которым нужен предсказуемый по стоимости автоматический анализ: агентным пайплайнам, где важно не выйти за бюджет на модели, и командам, которые хотят получать ответы с проверяемыми цитатами, а не с уверенно звучащими, но непроверенными утверждениями. Отдельно инструмент рассчитан на пользователей кодовых агентов вроде Claude Code или Qwen Code с подпиской, для них режим toolkit добавляет проверку фактов и работу с локальными данными без дополнительных затрат на модель. Также полезен тем, кто анализирует чувствительные CSV-данные и не хочет, чтобы отдельные строки покидали машину.

Как это применить

Установка, один из способов: install-скрипт с проверкой контрольной суммы, Homebrew (полным путём «lajosdeme/mole/mole», иначе Homebrew поставит одноимённый инструмент очистки диска), пакет AUR.deb/.rpm или сборка из исходников на Go 1.25+. Дальше настраиваются поставщик поиска (Tavily или Brave) и поставщик модели (Anthropic либо любой OpenAI-совместимый эндпоинт, включая локальные модели), после чего команда «mole doctor» проверяет конфигурацию. Запрос отправляется командой «mole research» с обязательным бюджетом, в долларах («--usd») или в токенах («--tokens»); для локальных данных сначала регистрируется источник командой «mole connect add», а посмотреть, какие именно агрегаты покинули машину, можно командой «mole crossings». Для встраивания в кодового агента достаточно указать «mole-mcp» как MCP-сервер в конфиге агента; чтобы модель самого агента вела рассуждение, а Mole поставлял детерминированную часть, инструмент запускается флагом «--toolkit».

Можно ли доверять

Материал, это описание проекта на GitHub, опубликованное автором как Show HN, а не независимый обзор или тест: все цифры и утверждения о поведении инструмента (0% перерасхода бюджета, отбраковка недословных цитат, изоляция локальных данных) исходят от самого разработчика и не подкреплены сторонней проверкой. У «нуля процентов перерасхода» в тексте нет ни размера тестовой выборки, ни периода замера, ни описания, что именно входит в этот тестовый набор. Текст не называет автора или организацию за проектом и не указывает лицензию, упомянут только CLA для внешних контрибьюторов. В плюс проекту работают открытость install-скрипта с проверкой контрольной суммы и описанная практика тестирования: после любого исправления автор откатывает сам механизм и убеждается, что тест начинает падать, иначе, по признанию автора, тест ничего не доказывает, и несколько тестов проекта уже были на этом пойманы.

Риски и подводные камни

Название «mole» уже занято в двух местах: в основном репозитории Homebrew так называется не связанный с проектом инструмент очистки macOS (обычный «brew install mole» поставит именно его), а в AUR имена «mole» и «mole-bin» с 2020 года принадлежат утилите SSH-туннелирования, пакет проекта ставится под другим именем и лишь предупреждает pacman о конфликте бинарника. Бюджет ограничивает траты на вызовы моделей и поиска, но не гарантирует правильность самого ответа. Инструмент зависит от сторонних поставщиков поиска и моделей (Tavily, Brave, Anthropic и OpenAI-совместимые эндпоинты), их собственные цены и условия в тексте не указаны и должны настраиваться отдельно. Ключи хранятся на диске локально с правами доступа 0600, что снижает, но не убирает риск компрометации машины. Для локальных данных поддерживаются только CSV, TSV, JSON и JSONL, формат Parquet не поддерживается. Наконец, проект выглядит молодым и созданным одним независимым разработчиком, поэтому его долгосрочная поддержка ничем в тексте не гарантирована.

«После правки откати сам механизм и убедись, что тест начинает падать. Тест, который проходит и без исправления, ничего не доказывает.»

— документация проекта Mole