Все мы часто используем терминал, но мало кто помнит наизусть все флаги команды find или как правильно распаковать хитрый архив без гугла. Обычно процесс выглядит так: идем в браузер, просим ИИ написать какую то нестандартную команду, копируем, вставляем, получаем ошибку. Почему? Потому что мы сидим на маке, а ИИ выдал команду с GNU флагами для линукса, или использовал утилиту, которой у нас вообще нет.
Поэтому я написал jumie — умного локального демона, который понимает контекст вашей ОС, проверяет наличие программ перед тем как их использовать и выдает безопасные скрипты. Перейдем к основным фишкам:
Изолированная песочница под капотом
Я не хотел, чтобы инструмент требовал долгой настройки. Вы просто скачиваете бинарник и пишете
jum do something
При первом запуске клиент сам скачивает изолированную версию Ollama и нужную модель (по умолчанию это легковесная gemma4:e2b). На маках автоматически подтягивается версия с MLX. Все это добро складывается в локальную скрытую папку пользователя и запускается на отдельном порту.
jumie вообще не трогает вашу глобальную систему. Если инструмент надоест, достаточно удалить одну директорию, и от него не останется и следа.
Архитектура: Клиент и Демон
Грузить языковую модель при каждом вызове команды это смерть для производительности. Поэтому проект разделен на две части:
-
jumied — легковесный фоновый демон. Он висит в памяти, менеджит процесс Ollama и держит контекст.
-
jum — CLI клиент, который мы вызываем ручками.
Общаются они между собой через UDS. За счет этого пинг между вводом команды и началом генерации ответа нулевой. На macOS демон заворачивается в LaunchAgent, на linux в systemd сервис.
Recon и Indexer: побеждаем галлюцинации (ну почти)
Для того, чтобы локальный ИИ понимал, где он находится и какая команда точно подойдет для выполнения, выполняется несколько шагов:
1. Разведка (Recon) Когда вы просите что то сделать, демон отправляет в модель быстрый скрытый запрос для уточнения требуемых утилит. Задача модели на этом этапе просто вернуть JSON массив бинарников, которые ей понадобятся для решения задачи. Например: ["curl", "grep", "awk"].
2. Индексация (Indexer) Демон берет этот список и физически пробивает каждый бинарник через системный PATH. Заодно он собирает инфу об ОС (linux или darwin), оболочке и наличии рут прав.
3. Планирование Собранная реальная информация вкидывается в финальный промпт. ИИ видит строгий контекст: “ОС macOS, рута нет, curl установлен, а вот wget отсутствует”. И только после этого генерируется shell скрипт. Модель понимает, что wget использовать нельзя, и строит логику через curl.
Безопасность и UI
Терминал не прощает ошибок, поэтому jumie никогда не выполняет деструктивные команды вслепую.
Сначала он выводит свои мысли и пошаговый план действий. Причем делает это ровно на том языке, на котором вы к нему обратились. Спросили на русском — он подумает и объяснит свои действия на русском.
Ложка дегтя: почему это пока не идеальный инструмент
Будем честны, у утилиты с локальным ИИ есть и обратная сторона. У jumie прямо сейчас есть две жирные проблемы:
Первая проблема: локальный ИИ это все таки медленно Терминал приучил нас к моментальному отклику. Нажал Enter и сразу получил результат. С локальной нейронкой так не выйдет.
Да, демон убирает холодный старт Ollama, а урезанный контекст спасает оперативку. Но генерация токенов все равно занимает время. На свежем железе это отрабатывает шустро, но если запустить демона на старом офисном ноуте без нормального видеоускорителя, вы будете смотреть на крутящийся спиннер около минуты. В такие моменты банально проще пойти и загуглить синтаксис команды, чем ждать пока модель родит ответ. Локальные легковесные нейронки пока физически не могут тягаться в скорости с облачными платными API.
Вторая проблема: галлюцинации никуда не делись Так как локальные LLM жрут очень много vRAM, я остановился на максимально простой, но при этом достаточно умной модели: gemma4:e2b. Модель вполне может убедиться, что утилита ps установлена на вашем маке, но потом радостно скормить ей гнушный линуксовый флаг, который не поддерживается в BSD версии. Или нейронка может выдумать кривую регулярку для awk, которая просто ничего не найдет. Собственно, именно поэтому в jumie намертво вшит нулевой уровень доверия и обязательное подтверждение y/n перед каждым запуском. Нейронка по прежнему может сгенерировать отборный бред, просто теперь этот бред хотя бы собран из реально существующих в вашей системе бинарников.
Планы развития
Для того, чтобы утилита реально приносила пользу, у меня есть такие идеи:
1. Интеграция с облачными ИИ Планируется прикрутить возможность добавить свой API ключик и использовать ИИ в облаке, тогда кол-во галлюцинаций будет явно меньше, а скорость работы явно выше.
2. Цепочка размышлений Для более качественного выполнения хорошо бы научить инструмент дольше размышлять и научиться выполнять несколько шагов, думая после каждого.
3. Индексирование в фоне Также для оптимизации было бы круто хранить набиолее полную информацию о системе в одном месте, чтобы утилите не приходилось постоянно изучать систему снова
Как потрогать
Написано все на Go (требуется версия 1.26+). Сборка максимально примитивная:
Клонируем репозиторий и устанавливаем с помощью make:
make install
Он сам соберет оптимизированные бинарники, раскидает их по местам и зарегистрирует демона в автозагрузке вашей системы.
Дальше просто пишем в терминале что то по типу:
jum покажи 5 самых больших файлов в загрузках
Буду рад звездочкам на гитхабе и пулл реквестам. Исходники открыты, ломать и изучать категорически приветствуется! https://github.com/piterovxyz/jumie
ссылка на оригинал статьи https://habr.com/ru/articles/1044672/