Консольные поисковые клиенты
- title
- Консольные поисковые клиенты
- type
- comparison
- summary
- Сравнение ddgr, googler и двух CLI для Kagi: авторизация, формат вывода, поддержка и работа с агентами
- tags
- cli, search, ai-agents, kagi
- sources
- ddgr, googler, kagi-ken-cli, kagi-cli
- created
- 2026-07-23
- updated
- 2026-07-23
- lang
- ru
- translation_of
- terminal-search-clients
- source_updated
- 2026-07-23
- translated
- 2026-09-01
- translator
- lllm/antigravity/gemini-3.7-flash-medium
Четыре консольных клиента для поиска: два написаны для человека за терминалом, а два - для тех, кто вызывает их программно. ddgr и googler - Python-скрипты Аруна Пракаша Джаны (Arun Prakash Jana) для DuckDuckGo и Google. kagi-ken-cli (Carlo Zottmann) и kagi-cli (Microck) - неофициальные клиенты для Kagi от двух авторов, дошедших до одного и того же трюка: использовать токен сессии браузера вместо оплаты доступа к API.
Во сколько обходится запрос
Обоим скриптам Джаны не требуется ничего - ни аккаунт, ни ключ, ни подписка. README googler объясняет этот отказ прямо: Google Custom Search JSON API выполняет запросы к экземпляру пользовательского поискового движка, ограничивает бесплатный лимит 100 запросами в день и привязал бы утилиту к тарифам, которые Google решит ввести позже, поэтому googler вместо этого забирает HTML. ddgr делает то же самое через эндпоинт html.duckduckgo.com у DuckDuckGo; как побочный эффект, это работает через Tor. В README ddgr это названо единственной вещью, на которую googler не способен.
Оба клиента для Kagi исходят из того, что вы уже платите за Kagi, и обходят вторую платную стену. Ключи API у Kagi доступны только по инвайтам и оплачиваются отдельно от подписки, поэтому обе утилиты считывают токен сессии из Settings -> Account -> Session Link. Этот токен не имеет ограниченной области действия (scope) - он даёт полный доступ к аккаунту. Поэтому kagi-ken-cli по умолчанию читает его из ~/.kagi_session_token, а не из флага или переменной окружения, и в README прямо названа причина: использование с LLM и агентами - токен в файле не попадёт в список процессов или историю шелла.
kagi-cli принимает три вида учётных данных и маршрутизирует их в зависимости от команды. KAGI_SESSION_TOKEN открывает возможности для подписчиков: быстрые ответы (quick answers), Assistant, translate, ask-page, суммаризатор по подписке, а также поисковые флаги --lens, --time, --order, --verbatim и персонализацию. KAGI_API_KEY обращается к платным эндпоинтам Search и Extract в /api/v1 с аутентификацией Bearer. KAGI_API_TOKEN обращается к устаревшим эндпоинтам /api/v0 summarize, fastgpt и enrich с аутентификацией Bot. Командам news и smallweb учётные данные не нужны. Базовый поиск предпочитает путь через сессию, если заданы оба варианта, а поиск через API откатывается к сессии, если ключ отклонён, включая исчерпание квоты и превышение rate limit. Всё хранится в ~/.config/kagi-cli/config.toml с поддержкой именованных профилей (kagi --profile work ...) и переопределением через переменные окружения.
Позиция самой Kagi приведена в дисклеймере kagi-cli: компания не рекомендует автоматизировать неподдерживаемые интерфейсы через аутентификацию по сессии и оставляет за собой право отказывать в обслуживании или ограничивать его для клиентов, которые так делают. Обе утилиты для Kagi работают именно с этим интерфейсом, поэтому риск для обеих одинаков.
Интерактивный режим или JSON по умолчанию
ddgr и googler открывают omniprompt - небольшой REPL поверх текущей страницы результатов, где n и p листают страницы, номер результата открывает его в $BROWSER, o 1 3 5 открывает сразу несколько, c 2 копирует URL в буфер обмена, а любой другой ввод запускает новый поиск с теми же опциями. Вывод для скриптов предусмотрен намеренно: --json включает --noprompt, а флаг -C убирает управляющие последовательности цветов, чтобы вывод не ломался при передаче в пайплайн или файл; именно поэтому в README googler показан пример googler -C hello world | tee output.
Клиенты Kagi меняют поведение по умолчанию на противоположное. В kagi-ken-cli интерактивного режима нет вообще. Команда kagi-ken-cli search "steve jobs" выводит JSON по структуре официального Search API от Kagi: объекты с t: 0 содержат url, title и snippet, а t: 1 содержит список связанных поисковых запросов; summarize --url выводит {"data": {"output": "..."}}. kagi-cli оставляет JSON в stdout, а читаемый вывод делает опциональным: --format pretty для терминала, а также toon, compact, markdown и csv, плюс --template '{{rank}}. {{title}} - {{url}}' для форматирования вывода без обращения к jq.
Одно из следствий подхода с токеном сессии: результаты Kagi приходят уже отфильтрованными настройками вашего аккаунта. Заблокированные и повышенные в выдаче домены, длина сниппета, персонализация - README kagi-ken-cli говорит об этом прямо, поскольку утилита разбирает именно тот веб-поиск, который вы увидели бы в браузере. ddgr и googler отправляют анонимный запрос, и им неоткуда наследовать настройки.
Поддержка и устойчивость к изменениям
Все четыре используют интерфейс, который поисковик для них не публиковал, поэтому все четыре ломаются при изменении вёрстки. Разница лишь в том, насколько велика площадь возможных поломок и насколько активно проект поддерживается.
| источник | язык | установка | возможности | |
|---|---|---|---|---|
| ddgr | DuckDuckGo HTML | Python 3.8+, GPLv3 | пакеты дистрибутивов, PyPI, snap, один файл | одна поисковая команда плюс omniprompt |
| googler | Google HTML | Python 3.6+, GPLv3 | пакеты дистрибутивов, пакеты релизов, snap, один файл | веб, новости, видео, поиск по сайту |
| kagi-ken-cli | Kagi HTML через сессию | Node ESM | npm install -g github:czottmann/kagi-ken-cli |
search, summarize |
| kagi-cli | Kagi через сессию + оба API | Rust, MIT | npm, Homebrew, Scoop, AUR, установочный скрипт | ~20 команд |
Пара скриптов Джаны намеренно оформлена в виде отдельных автономных скриптов без конфигурационных файлов: в README утверждается, что алиасы решают задачу без различий между ОС и без задержек на старте, а алиас вроде alias g='googler -n 7 -c ru -l ru' можно переопределить при каждом вызове благодаря тому, как argparse обрабатывает аргументы. Оба скрипта упакованы практически везде и отслеживаются на Repology. Заметная разница между ними: строка копирайта у ddgr продлена до 2026 года, тогда как раздел Developers у googler обрывается на 2021 годе, а пример установки одного файла жёстко фиксирует v4.3.2.
kagi-cli выглядит самым поддерживаемым из четырёх (тегированные релизы, CI, сайт с документацией на kagi.micr.dev, четыре пакетных менеджера), но ему и поддерживать приходится заметно больше кода. kagi-ken-cli - это две команды, обёрнутые вокруг пакета kagi-ken с помощью Commander.js, которые устанавливаются напрямую из тарбола на GitHub без релиза в реестре npm.
Пригодность для агентов
Агенту, который сам решает, когда искать (agentic-search), нужна команда с дешёвым вызовом и выводом, который можно парсить без гаданий. По этому критерию kagi-cli - единственный, кто создавался специально под такую задачу: kagi mcp запускает stdio MCP-сервер с инструментами search, summarize, extract, quick-answer и news; kagi skills и kagi agent выводят встроенные и привязанные к версии руководства по навыкам (skills) для выбора команд и путей аутентификации; kagi batch выполняет несколько запросов параллельно и принимает их со stdin; --format toon существует специально для экономии токенов в контексте LLM. Команда kagi watch повторно выполняет поиск с заданным интервалом и сообщает о добавленных и удалённых URL, но это инструмент мониторинга, а не поиска.
kagi-ken-cli - противоположная ставка: всего две команды, схема вывода скопирована с официального API (чтобы оставаться предсказуемой при изменениях), а токен считывается из файла, чтобы не светиться в argv. Объём кода настолько мал, что его можно проверить за полдня.
ddgr и googler вполне применимы из скриптов - флаги --json, --np, -C на месте - и не стоят ничего, что делает их разумным выбором по умолчанию, когда нужен простой список URL и не хочется задействовать аккаунты. Флаг -i/--instant у ddgr возвращает только мгновенный ответ DuckDuckGo (instant answer) - ближе всего к структурированному ответу, а не просто списку ссылок, из того, что есть у обоих скриптов.
Поиск - это только первая половина работы в этом vault'е. Что-то ещё должно превратить найденные страницы в читаемый текст: claude-defuddle делает это через defuddle CLI, а pulpie-web-cleaning представляет собой вариант той же задачи на базе модели. kagi-cli включает этот шаг в себя через команду kagi extract, которая возвращает страницу в виде markdown через платный API.