Вы знаете, что хотите сделать, но не помните точную команду. Лезете в Google, копируете что-то с Stack Overflow, правите под себя.
cf делает это так: описываете задачу словами прямо в терминале и получаете список подходящих команд с интерактивным выбором.Что делает
cf принимает запрос на естественном языке и возвращает shell-команды, которые этому запросу соответствуют. Выбранная команда вставляется прямо в строку ввода терминала — её можно сразу отредактировать или выполнить.Пример:
$ cf find large files older than 30 days
> find . -size +100M -mtime +30 -type f
find / -size +100M -type f
find . -mtime +30 -type f -delete
[arrows: navigate] [enter: select] [q: cancel]
Поиск работает через векторные эмбеддинги: запрос превращается в вектор через модель
all-MiniLM-L6-v2, потом ищет ближайшие совпадения в базе через sqlite-vec. В базе 389 команд и 1909 паттернов — у каждой команды несколько описаний разными словами, чтобы поиск находил нужное при разных формулировках.Как установить
git clone https://github.com/stvkoch/Command-Finder ~/codes/cf
cd ~/codes/cf
./install.sh
Скрипт создаст виртуальное окружение, установит зависимости, скачает модель ~80 МБ, заполнит базу и добавит симлинк
cf в ~/.local/bin/. В конце предложит добавить интеграцию с zsh.Как пользоваться
Базовый поиск:
cf "compress a directory"
Несколько режимов вывода:
cf "query" # вставить в буфер zsh
cf --print "query" # вывести в stdout
cf --copy "query" # скопировать в буфер обмена
cf --tmux "query" # отправить в текущую панель tmux
После установки shell-интеграции можно нажать
Ctrl+F прямо в терминале — откроется виджет поиска. Если строка пустая, появится приглашение ввода. Если на строке уже есть текст, он используется как запрос.Деструктивные команды
Команды, которые удаляют файлы, убивают процессы или перезаписывают историю, помечены символом
⚠️. Перед вставкой такой команды cf попросит явно ввести yes.Добавить свои команды
База данных расширяется через JSON-файлы в
src/cf/data/commands/.Структура:
{
"category": "my_tools",
"commands": [
{
"name": "mytool",
"synopsis": "mytool [options] <arg>",
"description": "What mytool does",
"patterns": [
{
"type": "example",
"text": "natural language description",
"command": "mytool --flag value",
"explanation": "brief explanation",
"destructive": false
}
]
}
]
}После добавления пересобираем базу:
cf --seed --force
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека devops'a
#арсенал_инженера
