ShellGPT — ИИ ассистент в вашем терминале Linux
Приветствую!

В данной инструкции я расскажу, как интегрировать ИИ ассистента на основе ChatGPT / Gemini / Ollama в вашу Linux систему и взаимодействовать с ним в терминале с помощью консольного приложения — ShellGPT.

Инструкция актуальна для дистрибутивов Linux Mint 22 / Ubuntu 24.04 / Debian 12.

Введение

Немного про ChatGPT

Определение понятия ChatGPT от него самого:

ChatGPT — это модель искусственного интеллекта, которая используется для создания чат-ботов и виртуальных помощников. Она основана на технологии глубокого обучения и нейронных сетей, которые позволяют ей понимать естественный язык и генерировать ответы на основе анализа входящей информации.

Немного про Gemini

Gemini — это также ИИ модель, только от Google с бесплатным API. Т.к. по умолчанию ShellGPT рассчитан на использование API совместимого с OpenAI, то для его использования в связке с Gemini необходимо настроить специальный прокси на базе node.js, который будет обрабатывать запросы в формате OpenAI от ShellGPT и перенаправлять их Google Gemini. Про настройку такого прокси будет ниже.

Немного про Ollama

Позвольте без лишних слов отправить вас в отдельную статью на сайте🙃: Ollama — Локальный ИИ на вашем Linux ПК 🦙.

Отмечу только, что в качестве локальной модели используется deepseek-code-v2.

Немного про ShellGPT

ShellGPT — Command Line App, программа-помощник в области программирования и системного администрирования. Работает в среде операционной системы Linux и использует командную оболочку для взаимодействия: отвечает на вопросы, даёт советы и рекомендации, выполняет различные команды и т.д.

Форматирование вывода ShellGPT ограничено возможностями терминала. Тем не менее вот, как выглядит одна из последних версий программы (да, это терминал🔥):

Работа ShellGPT с Ollama, модель deepseek-coder-v2.

Подготовка

Примеры в этом руководстве выполнены в дистрибутиве Linux Mint 22. Но уверен, что аналогичным образом данное ПО можно также установить и использовать на других Linux системах.

Программа ShellGPT написана на языке программирования Python3, соответственно для работы первой необходимо, чтобы последний был установлен в системе.

По умолчанию в Linux Mint, Python3 предустановлен. Проверить текущую версию можно командой:

BASH
python3 --version
Нажмите, чтобы развернуть и увидеть больше

Предпочтительный вариант установки ShellGPT — использование утилиты pipx.

💡 pipx — это инструмент для установки и запуска Python-приложений в изолированной среде (venv), которую он автоматически создает и настраивает под каждую программу.

Пакет pipx есть в стандартных репозиториях Linux Mint. Устанавливается обычным способом:

BASH
sudo apt update && sudo apt install -y pipx
Нажмите, чтобы развернуть и увидеть больше

💡 pipx устанавливает Python-приложения в локальную директорию пользователя ~/.local/pipx/venvs/ и делает символьные ссылки на исполняемые файлы в ~/.local/bin/. Для корректной работы эта директория должна быть в списке путей системной переменной $PATH.

Если используется Gemini

Как уже говорил ранее, для использования ShellGPT в связке с Gemini необходимо доустановить прокси, который будет обрабатывать запросы в формате OpenAI и перенаправлять их Google Gemini.

Прокси устанавливается с помощью npm и запускается от в контексте обычного пользователя на порту 8080:

BASH
# установка npm
sudo apt install -y npm git

# создание директории с файлами прокси
mkdir -p ~/.local/node_modules/openai-gemini

# клонирование репозитория прокси
git clone https://github.com/PublicAffairs/openai-gemini ~/.local/node_modules/openai-gemini

# переход в рабочую директорию
cd ~/.local/node_modules/openai-gemini

# установка зависимостей
npm install

# запуск прокси
npm run start
Нажмите, чтобы развернуть и увидеть больше

💡 Для остановки сервиса используйте клавиши Ctrl+c.

Об успешном запуске будет свидетельствовать вывод:

BASH
> start
> node node.mjs

Listening on: { address: '::', family: 'IPv6', port: 8080 }
Нажмите, чтобы развернуть и увидеть больше

В соседнем терминале проверяем работу сервиса:

BASH
curl -I http://localhost:8080

ss -tlnap | grep 8080
Нажмите, чтобы развернуть и увидеть больше

В ответ должны получить:

BASH
HTTP/1.1 404 Not Found
access-control-allow-origin: *
content-type: text/plain;charset=UTF-8
Date: Mon, 04 Aug 2025 09:47:09 GMT
Connection: keep-alive
Keep-Alive: timeout=5

---

LISTEN   0   511    *:8080   *:*   users:(("node",pid=15990,fd=21))
Нажмите, чтобы развернуть и увидеть больше

Сервис работает 👍. Настраиваем автозапуск прокси с помощью Systemd:

BASH
systemctl --user edit --full --force openai-gemini.service
Нажмите, чтобы развернуть и увидеть больше

Наполняем пользовательский юнит:

BASH
[Unit]
Description=Openai-gemini proxy service
After=network.target

[Service]
Type=simple
WorkingDirectory=/home/%u/.local/node_modules/openai-gemini
ExecStart=/usr/bin/npm run start
Restart=on-failure
RestartSec=5

[Install]
WantedBy=default.target
Нажмите, чтобы развернуть и увидеть больше

Активируем автозапуск при входе на рабочий стол и проверяем статус:

BASH
systemctl --user enable --now openai-gemini

systemctl --user status openai-gemini

journalctl --user -fu openai-gemini
Нажмите, чтобы развернуть и увидеть больше

Установка и настройка ShellGPT для использования с ChatGPT/Gemini

Получение API токена для ChatGPT

Разумеется, для использования ChatGPT необходим аккаунт на портале OpenAI, чтобы получить API ключ для бота ChatGPT.

⚠️Хочу вас сразу предупредить, что использование API ключей ограничено разработчиками OpenAI. Бесплатный период доступа — 3 месяца после регистрации аккаунта (узнать время окончания можно тут). По истечению срока необходимо приобретать подписку. На данный момент это стоит ~20$ в месяц, что не мало. В качестве бесплатной и конфиденциальной альтернативы рекомендуется использовать ShellGPT совместнос Ollama (читайте ниже).

Сгененрировать такой ключ можно в настройках на странице своего аккаунта по адресу: https://platform.openai.com/account/api-keys

Получение API токена для Gemini

В отличие от ChatGPT у сервиса Gemini бесплатный API хоть и с ограничениями по количеству запросов, но для личного использования или небольшого пет-проекта — этого более, чем достаточно.

Получить API токен Gemibi можно в соответствующем разделе Google AI Studio: https://aistudio.google.com/apikey:

Установка ShellGPT

После генерации ключа выполняем установку shell-gpt с помощью pipx:

BASH
pipx install shell-gpt
Нажмите, чтобы развернуть и увидеть больше

Тут всё довольно прозаично😏.

После установки в системе появится исполняемый файл sgpt. Проверяем, что он установился в нашу систему:

BASH
whereis sgpt
Нажмите, чтобы развернуть и увидеть больше

Пробуем запустить ассистента командой sgpt "Привет!":

BASH
sgpt 'Привет!'
Нажмите, чтобы развернуть и увидеть больше

💡Обращаю ваше внимание на то, что текст обращения к боту из командной строки необходимо обрамлять кавычками..

При первом использовании ShellGPT попросит вас ввести API ключ. Вводим ключ от нужного сервиса: ChatGPT или Gemini.

☝️В случае Gemini команда звершится ошибкой. Это ожидаемое поведение, ведь нужно перенаправить данные в прокси. Это далее.

Файл конфигурации ShellGPT, после введения API ключа, генерируется автоматически по пути: ~/.config/shell_gpt/.sgptrc

Посмотреть его содержимое с помощью известной нам команды cat или консольного редактора nvim:

BASH
nvim ~/.config/shell_gpt/.sgptrc
Нажмите, чтобы развернуть и увидеть больше

Рассмотрим содержимое конфига немного подробнее:

BASH
# ключ API, также можно задать через переменную окружения OPENAI_API_KEY
OPENAI_API_KEY=your_api_key
# базовый URL backend-сервера, если указано "default", он будет определён на основе --model
API_BASE_URL=default
# API_BASE_URL=http://localhost:8080/v1
# максимальное количество кэшируемых сообщений на сессию чата
CHAT_CACHE_LENGTH=100
# папка для кэша чата
CHAT_CACHE_PATH=/tmp/chat_cache
# длина кэша запросов (количество)
CACHE_LENGTH=100
# папка для кэша запросов
CACHE_PATH=/tmp/cache
# тайм-аут запроса в секундах
REQUEST_TIMEOUT=60
# модель OpenAI по умолчанию
DEFAULT_MODEL=gpt-4o
# DEFAULT_MODEL=gemini-2.5-flash
# цвет по умолчанию для shell-ответов и автодополнений кода
DEFAULT_COLOR=magenta
# при использовании режима --shell по умолчанию выполнять команду без запроса
DEFAULT_EXECUTE_SHELL_CMD=false
# отключить потоковую передачу ответов
DISABLE_STREAMING=false
# тема pygment для отображения markdown (по умолчанию или для описания ролей)
CODE_THEME=default
# путь к директории с функциями
OPENAI_FUNCTIONS_PATH=/home/user/.config/shell_gpt/functions
# выводить результат функций, если LLM их использует
SHOW_FUNCTIONS_OUTPUT=false
# разрешить LLM использовать функции
OPENAI_USE_FUNCTIONS=true
# принудительно использовать LiteLLM (для локальных моделей)
USE_LITELLM=false
Нажмите, чтобы развернуть и увидеть больше

В случае использования Gemini в параметре API_BASE_URL укажите адрес к прокси openai-gemini, который мы настроили на этапе подготовки. По умолчанию он такой: http://localhost:8080/v1. А в качестве модели — Gemini, например: DEFAULT_MODEL=gemini-2.5-flash.

Остальные параметры вы можете скорректировать под ваши предпочтения.

💡API ключ можно задать и с помощью переменной окружения $OPENAI_API_KEY. Если она задана, то ключ будет браться из неё. Если нет, то из файла ~/.config/shell_gpt/.sgptrc. На практике, проще всего использовать автоматически сгенерированный файл конфигурации.

Установка и настройка ShellGPT для использования с Ollama

Для реализации данной связки требуется установленная платформа Ollama. Описание процесса установки смотрите в отдельной статье.

⚠️Если вы ранее установили стандартный ShellGPT, то его желательно сперва удалить:

BASH
pipx uninstall shell-gpt
Нажмите, чтобы развернуть и увидеть больше

Обратите внимание, что по заявлению разработчика ShellGPT работа с локальными моделями не оптимизировано, так, как с онлайн сервисом ChatGPT:

❗️Note that ShellGPT is not optimized for local models and may not work as expected.

В случае взаимодействия с Ollama команда установки ShellGPT немного другая:

BASH
pipx install "shell-gpt[litellm]"
Нажмите, чтобы развернуть и увидеть больше

Здороваемся:

BASH
sgpt 'Привет!' 2> /dev/null
Нажмите, чтобы развернуть и увидеть больше

На запрос API ключа вводим любую строку, главное чтобы значение не было пустым и нажимаем Enter:

Первая команда завершиться ошибкой — это ожидаемое поведение при использовании Ollama.

Теперь открываем конфиг:

BASH
nvim ~/.config/shell_gpt/.sgptrc
Нажмите, чтобы развернуть и увидеть больше

И редактируем/добавляем следующие параметры:

BASH
# определение модели по умолчанию
DEFAULT_MODEL=ollama/deepseek-coder-v2
# выбор темы оформления (опционально)
CODE_THEME=nord-darker
# отключение специфики для openai
OPENAI_USE_FUNCTIONS=false
# использование LLM прокси - litellm
USE_LITELLM=true
# любая строка, значение не должно быть пустым
OPENAI_API_KEY=some_random_string
Нажмите, чтобы развернуть и увидеть больше

💡Замените deepseek-coder-v2 на выбранную вами модель.
💡Список всех доступных тем оформления ShellGPT найдёте тут.

Описание всех параметров смотрите в предыдущем пункте статьи☝️.

И все таки давайте заставим ИИ поздороваться:

BASH
sgpt 'Привет?'
Нажмите, чтобы развернуть и увидеть больше

Отвечает вопросом на вопрос🤔

Использование

И так, что же умеет установленный ShellGPT ассистент в нашем терминале:

Простые запросы

Например:

BASH
sgpt "Расскажи, что такое терминал в Linux?"
Нажмите, чтобы развернуть и увидеть больше

Или:

BASH
sgpt "Покажи содержимое конфига сервера ssh"
Нажмите, чтобы развернуть и увидеть больше

Хитрец, заставил нас вручную смотреть конфиг. Тем не менее, он указал, где он находится и как его посмотреть. С этим мы еще разберемся🤨. Машина будет выполнять что от нее требуют💪.

Проведения анализа

Для примера, давайте попросим бота проанализировать лог ошибок нашего графического сеанса Xorg. Данный файл является скрытым (начинается с точки) и лежит в домашней директории. С помощью механизма перенаправления (пайплайн) мы передадим вывод содержимого файла боту GPT:

BASH
ls -la .xsession-errors

cat .xsession-errors | sgpt "проанализируй вывод лога .xsession-errors"
Нажмите, чтобы развернуть и увидеть больше

На что он нам дал подробный анализ. Так можно продолжить, все больше углубляясь в изучение информации по теме. Согласитесь удобно. Не нужно лишних действий по «гуглению». Для этого еще браузер открывать нужно😉.

Но это и не самое интересное. Идём дальше🚶.

Выполнение команд оболочки

Для выполнения команд по запросу, команде sgpt необходимо передав ключ --shell. Давайте попробуем попросить бота отобразить только симлинки в директории /etc:

BASH
sgpt --shell "выведи только симлинки в директории /etc"
Нажмите, чтобы развернуть и увидеть больше

💡Про симлинки мы говорили туть.

Как видим, мы дали боту описание того, что хотим, чтобы он сделал, а он предложил нам выполнить сгенерированную команду. После ручного подтверждения буквой e и нажатием Enter команда выполнилась в терминале. Не дурно🙄.

💡Команда ls -l / | grep ^l выводит содержимое каталога /etc и фильтрует вывод с помощью команды grep, используя регулярное выражения ^ — что означает начало строки, и шаблон фильтра из буквы l — которая в выводе команды ls -l обозначает файлы-символические ссылки (симлинки).

Давайте всё таки заставим бота вывести серверный конфиг программы (не забываем про ключ --shell):

BASH
sgpt --shell "Покажи содержимое конфига сервера ssh"
Нажмите, чтобы развернуть и увидеть больше

Ну вот. Совсем другое дело. Сам придумал, сам выполнил. Главное не увлекаться отдавая под контроль бота свой компьютер. А то еще установит на неё Windows🤷♂️.

Давайте рискнем и попросим бота обновить кэш пакетов и установить нам программу, например консольный редактор кода Neovim:

BASH
sgpt --shell "Обнови кэш и установи Neovim"
Нажмите, чтобы развернуть и увидеть больше

И запустить его:

BASH
sgpt --shell "Запусти Neovim"
Нажмите, чтобы развернуть и увидеть больше

Он таки это делает😮.

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

Аналогичным образом бот может формировать и выполнять команды по запуску docker контейнеров, составлять curl команды с переданными боту данными в формате json, редактировать видео/аудио файлы с помощью консольной утилиты ffmpeg, работать с файлами в нашей системе и многое другое.

Генерация кода

Для генерации кода с помощью ShellGPT используется ключ --code. Давайте попросим его сформировать последовательность Фибоначчи от 1 до 50 с помощью двух способов: Bash и Python. Просим:

BASH
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50"

sgpt --code "Python скрипт последовательности Фибоначчи от 1 до 50"
Нажмите, чтобы развернуть и увидеть больше

Данные можно выводит в файл с помощью механизма перенаправления:

BASH
sgpt --code "Bash скрипт последовательности Фибоначчи от 1 до 50" > fib.sh

sgpt --shell "Сделай файл fib.sh исполняемым и запусти его"
Нажмите, чтобы развернуть и увидеть больше

Точно не помню, как правильно считать последовательность Фибоначчи, с 0 или с 1, но как по мне, это наглядный пример функциональности бота.

Давайте попросим его добавить комментарии для каждой строчки нашего fib.sh:

BASH
cat fib.sh | sgpt --code "Добавь комментарии для каждой строки скрипта"
Нажмите, чтобы развернуть и увидеть больше

Чтож… Круто! Идём дальше.

Чат

Чат — это функция бота GPT, которой я пользуюсь чаще всего.

Для использования чата с ботом в командной строке необходимо добавить ключ --chat, а также указать уникальное название сессии чата. В файлах кэша с этим названием будет храниться наша переписка с ботом. Пример:

BASH
sgpt --chat session_1 'Коротко: как выйти из vim?'

sgpt --chat session_1 'Про что этот диалог?'
Нажмите, чтобы развернуть и увидеть больше

Мы использовали название сессии session_1, для формирования кэша чата, чтобы использовать предыдущий запросы в своей беседе.

Обратите внимание, что по умолчанию кэш запросов и кэш чатов ограничен (100 единиц) в файле ~/.config/shell_gpt/.sgptrc параметры: CHAT_CACHE_LENGTH=100 и CACHE_LENGTH=100.

При достижении лимита программа может выдавать 400-ю ошибку клиента. При необходимости увеличьте данные параметры или используйте другое уникальное название сессии для создания нового чата.

Также можно использовать специальный идентификатор сессии: temp для создания временной сессии. При указания этого идентификатора, каждая сессия будет новой.

Посмотреть список сессий чата можно командой sgpt --list-chats, а посмотреть содержимое сессии sgpt --show-chat имя_сессии:

BASH
sgpt --list-chats

sgpt --show-chat session1
Нажмите, чтобы развернуть и увидеть больше

Вообще у команды sgpt очень удобная и красивая справка. Получить ее можно передать ключ --help:

BASH
sgpt --help
Нажмите, чтобы развернуть и увидеть больше

Стоит упомянуть возможность комбинирования ролей бота. Например, чтобы улучшить генерацию кода, можно использовать историю чата с помощью --chat имя_сессии и затем --code для генерации кода и т.д. Такой подход справедлив и для роли --shell. Пост получается большим, не будем сильно углубляться. В конце поста вы всегда найдете ссылки на источники.

Режим диалога (read–eval–print loop)

У ShellGPT есть режим чата в реальном времени, только в консоли. Называется этот режим repl (read–eval–print loop).

BASH
sgpt --repl session_2
Нажмите, чтобы развернуть и увидеть больше

Как видите, после выполнения команды мы перешли в интерактивный режим общения с ботом. Тут можно писать текст не используя кавычки. Довольно удобно. Чтобы выйти из этого режима используйте сочетания клавиш Ctrl+c или Ctrl+d.

По умолчанию режим --repl использует роль chat, и задействует одни и те же названия сессий. Чтобы перейти к диалогу относительно ролей --shell или --code, необходимо их просто указать:

BASH
sgpt --repl session_3 --shell
Нажмите, чтобы развернуть и увидеть больше

BASH
sgpt --repl session_4 --code
Нажмите, чтобы развернуть и увидеть больше

Как видите, контекст беседы успешно работает.

Короткие alias для удобства

Давайте сделаем короткие alias (псевдонимы команд) для бОльшего удобства использования бота.

Открываем на редактирование файл конфигурации оболочки, в моём случае Zsh:

BASH
nvim ~/.zshrc
Нажмите, чтобы развернуть и увидеть больше

И добавляем:

BASH
# ShellGPT aliases
alias G="sgpt --chat temp"
alias Gs="sgpt --shell"
alias Gc="sgpt --code"
alias GG="sgpt --repl temp"
Нажмите, чтобы развернуть и увидеть больше

Затем сохраняем файл и закрываем редактор.

Теперь реинициализируем нашу оболочку и затем командой alias выведем наши добавления:

BASH
exec zsh

alias | grep '^G'
Нажмите, чтобы развернуть и увидеть больше

Проверяем:

BASH
G 'Как дела?'

Gs 'Найди исполняемый файл программы firefox'

Gc 'Напиши цикл bash для переименования файлов в текущей директории'
Нажмите, чтобы развернуть и увидеть больше

Прекрасно, работает. Попробуем режим repl:

BASH
GG
Нажмите, чтобы развернуть и увидеть больше

Отлично, теперь удобно обращаться к боту с помощью коротких команд:

Терминал с чат-ботом ChatGPT в виде отдельного приложения

Теперь давайте сделаем отдельное приложение для общения с ботом в режим repl. То есть при открытии этого приложения мы будем попадать сразу в режим диалога без ввода каких-либо команд.

Создаём файл .desktop в директории приложений:

BASH
nvim ~/.local/share/applications/shell-gpt.desktop
Нажмите, чтобы развернуть и увидеть больше

И наполняем файл таким содержимым:

BASH
[Desktop Entry]
Name=ShellGPT
Comment=AI in commandline
Keywords=shellgpt;chatgpt;ollama;
TryExec=gnome-terminal
Exec=gnome-terminal -- sgpt --repl temp
Icon=gnome-robots
Type=Application
Categories=GNOME;GTK;System;TerminalEmulator;
StartupWMClass=ShellGPT
Нажмите, чтобы развернуть и увидеть больше

Сохраняем и закрываем.

Теперь идём в главное меню и набираем в поиске gpt:

Вот он, наш бот🤖. Запускаем его и закрепляем на панели быстрого доступа:

Теперь наш ИИ всегда под рукой. Также к ИИ удобно обращаться с помощью DropDown терминала, например — Guake.

Надеюсь у вас всё получилось, как у меня. Если есть вопросы, обязательно задавайте их в комментах статьи или в нашем чате телеграм 😎.

Возможные проблемы

№ 1

Одной из ошибок, с которой я столкнулся это лимит кэша запросов к чату:

Избежать проблемы можно несколькими способами:

Если вы увидите 429 ошибку:

это означает что срок действия вашего доступа к API закончился и его необходимо приобретать 😔. Ох уж эти проприетарные сервисы..

№2

Назойливое уведомление после каждого запуска ShellGPT:

Оно появляется при использовании локальных моделей.

Убрать его можно изменив уровень логирования прокси litellm с помощью системной переменной. Например так:

BASH
echo 'export LITELLM_LOG="ERROR"' >> ~/.zshrc

source ~/.zshrc
Нажмите, чтобы развернуть и увидеть больше

Послесловие

Сегодня мы с вами узнали, как интегрировать прогрессивного ИИ ассистента ChatGPT / Ollama с помощью программы ShellGPT и её утилиты командной строки sgpt.

Выполнили установку утилиты, изучили её файл конфигурации и режимы работы. Составили отдельные псевдонимы (alias) команд для быстрого доступа к боту из терминала, а также сделали отдельное приложение для общения с ботом в отдельном окне в режиме реального времени (repl).

Еще раз прошу обратить внимание, что программа ShellGPT — по сути является консольным клиентом для подключения по API онлайн платформе OpenAI или локальной Ollama.

Успехов вам в изучении новых технологий!

Полезные источники

Авторские права

Автор: Иван Чёрный

Ссылка: https://r4ven.me/software/shellgpt-ii-assistent-v-vashem-terminale-linux/

Лицензия: CC BY-NC-SA 4.0

Использование материалов блога разрешается при условии: указания авторства/источника, некоммерческого использования и сохранения лицензии.

Начать поиск

Введите ключевые слова для поиска статей

↑↓
ESC
⌘K Горячая клавиша