Пример работы jumie
Пример работы jumie

Все мы часто используем терминал, но мало кто помнит наизусть все флаги команды 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

Комментарии (17)


  1. Limows
    07.06.2026 22:16

    Разработка прикольная, но насколько оно полезно, особенно не на самом свежем железе, вопрос. Попробую потом на своём тинкпаде Т480, чтобы ощутить всю боль.


    1. piterovxyz Автор
      07.06.2026 22:16

      да, локальная ллм сейчас как бутылочное горлышко, но думаю облачная ллмка как раз решит быстро эту проблему


      1. AleGen
        07.06.2026 22:16

        КМК, имеет смысл заюзать SLM или даже TLM, специально заточенную под это. Ну да, затачивать (дообучать) наверное придётся самому. Но, если удастся, то результат будет сильно лучше по качеству и сильно быстрее.

        А так, идея - очень даже вполне себе ага, думаю, многим может прийтись по душе.

        P.S. Решил пнуть Qwen с вопросом про подобные модели - выдал много интересного:

        • оптимизированные под это дело модели: Qwen3-0.6B (дообученный, лучший баланс качества и размера, поддерживает русский язык), Gemma-3-270M (дообученный для bash, работает даже на Raspberry Pi), SmolLM2-360M-Instruct (компактная альтернатива);

        • готовые инструменты и проекты: ShellAI, tlm (Terminal Language Model), TerminalCommander, Autocomplete.sh.

        • есть также специализированные датасеты для обучения моделей переводу естественного языка в bash-команды:

          • TellinaTool/nl2bash: ~10,000 bash one-liners с английскими описаниями

            GitHub

          • aelhalili/bash-commands-dataset на Hugging Face

        Так что тему уже давно раскуривают!


  1. anitastsoy
    07.06.2026 22:16

    сколько раз не пытался запустить на своей 5070ти ллмки локальные - всегда получался какой то кал
    23б модели кое че там умеют но после того как ты попробовал тот же клод или гемини ты уже никогда не сможешь юзать локальный кал )


  1. Wesha
    07.06.2026 22:16

    мало кто помнит наизусть все флаги команды find

    В наше время этим не гордились!


  1. Mayurifag
    07.06.2026 22:16

    Напомнило маленький плагин для zsh https://github.com/matheusml/zsh-ai — ничего удобнее Comment Syntax тамошнего не встречал для быстрого запуска команды по примеру find с флагами. Но я особо не искал, мне сразу понравилось пользоваться и всем устроило.

    Ollama тоже в наличии, хотя я пользуюсь бесплатным ключом гугловской аи студио, локальную модельку жирновато подрубать в эру спонсирования моделей по моему мнению, сильно приватного тут ничего нет, а вот скорость нужна.


  1. brtpfdvlbpd2
    07.06.2026 22:16

    мало кто помнит наизусть все флаги команды find

    Если я не помню флаги, я открываю man, а не ищу того, кто сделает всё за меня


    1. AleGen
      07.06.2026 22:16

      Ну, Вы - оригинал. ))) А в общем природа человека такова, что он лучше найдёт того, кто сделает за него (и, желательно, бесплатно).


      1. brtpfdvlbpd2
        07.06.2026 22:16

        Это природа паразита, а не человека.


  1. VitalikErzov
    07.06.2026 22:16

    Да, использую, но скорее как подсказку. Часто удобно, быстрее вспоминаешь нужные флаги или синтаксис. Но всегда перепроверяю, потому что ИИ может легко накидать что-то из Linux в macOS или вообще несуществующий вариант. В итоге это как умный справочник, а не готовая истина.


    1. piterovxyz Автор
      07.06.2026 22:16

      да! как раз в этом и суть текущей утилиты, она перед генерацией команды изучает систему и возвращает команду именно под нее


  1. paramtamtam
    07.06.2026 22:16

    Простите, вы, блин, серьезно?

    	progress(fmt.Sprintf("downloading ollama archive for %s...", runtime.GOOS))
    
    	cmd := exec.Command("sh", "-c", fmt.Sprintf("curl -fL --retry 3 --retry-delay 2 %s | tar --zstd -xf - -C %s", url, targetDir))
    	cmd.Stdout = os.Stdout
    	cmd.Stderr = os.Stderr
    

    Или это вам имитация интетелекта так написала, а вы “а давай, чего там проверять, коммит, пуш, в релиз”?


    1. piterovxyz Автор
      07.06.2026 22:16

      да, вы правы, костыль костыльный, как раз планирую оптимизировать загрузку ollama в рамках работы с API, спасибо!


      1. Wesha
        07.06.2026 22:16

        да, вы правы, костыль костыльный

        Не так! «Вы абсолютно правы! Я не должен был делать...»


  1. YuryZakharov
    07.06.2026 22:16

    А почему Ollama, а не llama-cpp?

    А jum сможет воспользоваться существующим в системе сервером или всё равно запустит свой?

    И как он вообще ориентируется в пространстве, заведётся, скажем, на NixOs, внутри direnv?


    1. piterovxyz Автор
      07.06.2026 22:16

      ollama мне показалась легче в реализации

      по поводу текущего - пока нет, она устанавливает отдельный инстанс и использует другой порт, но хочу как раз реализовать распознавание существующего и выбор модели вручную!

      насчёт nixos не знаю если честно) тестировал пока только на макоси и убунте, так что рад фидбеку и issues в гитхабе)


  1. brammator
    07.06.2026 22:16

    Вы смотрели на Warp или Wave? Сценарий использования у них схож.