wigolo — локальный веб-интеллект для AI-агентов без API-ключей и облака

· 2 мин чтения
mcp mcp-server web-search local-first tools
📂 Исходный код на GitHub

wigolo — локальный веб-инструментарий для AI-агентов: поиск, fetch, crawl, extract, cache, find-similar, research и автономные циклы сбора данных. Без API-ключей, всё остаётся локально.

wigolo — локальный веб-интеллект для AI-агентов без API-ключей и облака

wigolo — это локальный веб-слой для вашего AI-агента: один MCP-сервер, который закрывает всё, что связано с интернетом — поиск, загрузку страниц, обход сайтов, извлечение структурированных данных, кэширование и исследовательские циклы. Главная фишка — никаких API-ключей и облачных счетов: ранжирование, эмбеддинги и весь кэш живут на вашей машине, а каждый запрос стоит $0.

Установка

Требуется Node ≥ 20 и около 1.5 ГБ свободного места (это движок браузера и локальные модели). Установка в одну команду:

npx wigolo init                              # настроить локальный движок
npx wigolo init --agents=claude-code,cursor  # и сразу подключить свои агенты

Флаг --agents принимает любой из списка: claude-code · cursor · codex · gemini-cli · opencode · vscode · windsurf · zed · antigravity, разделяя их запятыми. wigolo сам пишет MCP-конфиг и, где поддерживается, инструкции для агента. Любой другой MCP-клиент или само-хостивший агент просто регистрирует npx -y wigolo в своём конфиге. Проверить здоровье можно командой npx wigolo doctor, удалить всё — npx wigolo config --uninstall --yes.

Что умеет

Инструмент Что делает
search Мультидвижковый поиск (18 прямых адаптеров) с rank fusion, ML-переранжировкой и объяснимым скорингом. Поддержка массивов запросов, фильтров по домену и времени.
fetch Загрузка URL через каскадный роутер: от обычного HTTP до headless-браузера при антиботах или SPA. Отдаёт чистый Markdown, метаданные и ссылки.
crawl Мультистраничный обход (BFS, DFS, sitemap), учёт robots.txt и rate-limits по доменам.
extract Структурированные данные со страницы: таблицы, JSON-LD, именованные схемы, собственные JSON Schema.
cache Поиск по всему, что уже видели, — ключевой или гибридный семантический.
find_similar Похожие страницы по URL или концепции.
research Разбор вопроса → веер подзапросов → синтез отчёта с источниками.
agent Автономный цикл: план → поиск → fetch → extract → синтез.
diff + watch Что изменилось на странице с прошлого визита; перепроверка и отправка изменений в webhook.

Почему это отличается

  • Создано для агентов. Одним MCP-вызовом можно отправить много запросов сразу на множество движков параллельно — это не повторить серийным циклом хост-инструментов.
  • Честный вывод. Запрос делает объективный результат прозрачным: каждый результат несёт дроби по каждому движку, объяснимую оценку и метки о деградации. Недоступная для ботов страница помечается blocked_by_challenge, а не отдаётся как содержимое.
  • $0 за запрос. Поиск по умолчанию ходит в публичные движки напрямую, ранжировщико и эмбеддинги работают на устройстве.
  • Приватно по умолчанию. Кэш, эмбеддинги и модели лежат в ~/.wigolo/. Ничего не уходит третьим сторонам, пока вы сами не включите LLM для синтеза.
{
  "results": [{
    "title": "Logical replication - PostgreSQL docs",
    "url": "https://www.postgresql.org/docs/current/logical-replication.html",
    "excerpt": "Logical replication is a method of replicating data objects…",
    "citation_id": "src-1",
    "source_span": { "start": 1042, "end": 1305 },
    "evidence_score": { "final": 0.86, "semantic": 0.91, "lexical": 0.78, "engine_consensus": 3 }
  }]
}

Синтез с LLM (опционально)

Поиск, fetch, crawl, extract, cache и find-similar работают полностью без ключей. А вот research, agent и search format=answer используют LLM для синтеза ответа с цитатами — без него они вернут только сырой бриф. Бесплатный ключ Gemini превращает это в готовый ответ:

export WIGOLO_LLM_PROVIDER=gemini
export GEMINI_API_KEY=<free-key>

Поддерживается любой провайдер (anthropic · openai · groq), а полностью локально и без ключей — через WIGOLO_LLM_PROVIDER=ollama.

Как сравняется с облачными сервисами

wigolo Firecrawl Exa Tavily
Мультидвижковый поиск
Fetch и структурированное извлечение
Обход сайтов
Верблюдные фрагменты с байтовыми смещениями
Объясняемая оценка результата
Локальная память
Данные остаются на машине
API-ключ / аккаунт нет требуется требуется требуется
Стоимость за запрос $0 по метру по метру по метру

В репо есть живой бенчмарк, где один и тот же холодный запрос запускали внутри Claude Code через четыре инструмента (WebSearch, wigolo, Tavily, Exa) — все сошлись на одном ответе, но только wig связал фрагменты с byte-смещениями и свои две слабодные результаты пометил как мусор.

За пределами редактора

  • REST APIwigolo serve поднимает JSON API на порту 3333, везде POST /v1/{tool}, контракт по GET /openapi.json. За пределами loopback нужен bearer-токен.
  • SDKwigolo-sdk (TypeScript, zero-dep) и wigolo (Python, только стандартная библиотека) с локальным режимом, который сам находит или запускает демон.
  • Интеграции — wigolo-langchain, wigolo-crewai, wigolo-llamaindex, wigolo-vercel-ai-sdk.
  • Docker — образ ghcr.io/knockoutez/wigolo для stdio- и HTTP-режимов.
  • Набор агент-скиллов из 11 штук учит агента работать с каждым инструментом (ставится через wigolo skills add|list|remove).

Архитектура

Один Node-процесс говорит по MCP (JSON-RPC over stdio). Всё тяжёлое локально лежит и загружается лениво — поэтому установка без ключей не платит за неиспользуемые части. Принципы:

  • Код важнее модели. Детерминированная работа (канонизация, rank fusion, дедупликация, сопоставление схем) остаётся в коде; модель подключена опционально и за запрос.
  • Роутинг по сигналам. Каскад fetch эскалирует до настоящего браузера на видимых сигналах, а не по догадкам: SPA, челленджи, тонкий контент. Учится по доменам.
  • Читает как браузер. Выживает челленджи, переиспользует разрешения, уважает robots.txt и лимиты скорости.

Лицензия и статус

Проект в открытой бете, покрыт 7600 тестами. Лицензия GNU AGPL-3.0 — можно свободно использовать, модифицировать и само-хостить, включая внутри компании. Одно обязательство: если запускаете изменённую версию как сетевой сервис, нужно публиковать свой исходник под той же лицензией.

Репо: https://github.com/KnockOutEZ/wigolo

Источник: https://github.com/KnockOutEZ/wigolo