EnglishРусский Map

Консольные поисковые клиенты

title
Консольные поисковые клиенты
type
comparison
summary
Сравнение ddgr, googler и двух CLI для Kagi: авторизация, формат вывода, поддержка и работа с агентами
tags
cli, search, ai-agents, kagi
created
2026-07-23
updated
2026-07-23
lang
ru
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.