Local-first снова в фаворе, потому что агенты и все такое, да и девятки доступности сервисов не в моде. Что можно использовать, кроме старого доброго grep?

Инкрементальное улучшение — ripgrep, он же rg. Киллер-фича, имхо, — настройки по умолчанию: рекурсивность, учет .gitignore и полноценные регулярки. Однако я уже настолько привык печатать grep -Rnil "blabla" ., что переключение не очень себя оправдывает.

Еще один инкремент поверх rgfzf, который предоставляет интерфейс “живого” поиска и нечеткий поиск (по символам). skim и fzy из этой же категории. Автор fzf утверждает, что для некоторых этот инструмент по пользе сопоставим с интернетом. Я о нем узнал в этом месяце и попробовал раза два — не зашло :/ Тем более что для чего-то полезного (например, открыть файл с совпадением) надо много неочевидных параметров передавать. И это все еще построчный поиск (для душнил — со специальными приседаниями можно искать на уровне документа).

Почти все то же самое, что rg + fzf, предоставляет ugrep. У него тоже есть интерактивный режим, однако он еще поддерживает человеческие операторы (AND, OR) и поиск идет именно по файлам. Еще есть нечеткий поиск по расстоянию Левенштейна и куча других фич.

Следующий слой — zk. Это уже cистема для ведения заметок,и для нее нужен индекс (а индексируется все весьма медленно, увы). Но зато тут полноценный полнотекстовый поиск с ранжированием и человеческими операторами, а еще поддерживается frontmatter. И результаты весьма релевантные.

Наконец, вершина эволюции, AI-first поиск со встроенным AI для семантического поиска — QMD. Его заявленная киллер-фича, кроме ИИ — гибридный поиск по эмбеддингам и ключевым словам, а также расширение запроса. Однако он меня не впечатлил — да, вроде комбинированный поиск, но медленная первичная индексация с эмбеддингами, и некоторые результаты, которые можно найти по ключевым словам обычным grep/rg, он почему-то не вывел в гибридном режиме. Да и от семантического поиска я не понял выгоды (ну или у меня запросы слишком тупые).

В этой же категории еще есть ck. Это замена grep с тем же интерфейсом, однако с дополнительными фичами сверху: гибридным поиском с BM25 и нейронкой, а также интерактивным режимом. Однако обратная совместимость скорее мешает: писать --hybrid каждый раз без альтернативы вроде -H — ну, такое (хотя alias можно повесить, ладно). Он тоже тыщу лет все индексирует для эмбеддингов. И все это для поиска, где даже нет логического AND :/

Если говорить про нейронки, то де-факто стандарт пока ripgrep, но Клод в апреле перешел на ugrep. И в нише “консольный поиск получше” именно ugrep показался мне хоть сколько-нибудь интересным и полезным. У него нет ранжирования, но если в результатах более важна полнота, то это не очень критично.

После этого исследования подумалось, что мой велосипед еще ничего:)