wigolo — локальный веб-интеллект для AI-агентов без API-ключей и облака
📂 Исходный код на GitHubwigolo — локальный веб-инструментарий для AI-агентов: поиск, fetch, crawl, extract, cache, find-similar, research и автономные циклы сбора данных. Без 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 API —
wigolo serveподнимает JSON API на порту 3333, вездеPOST /v1/{tool}, контракт поGET /openapi.json. За пределами loopback нужен bearer-токен. - SDK —
wigolo-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