Что это вообще такое и зачем оно мне?
Представь: ты сидишь в терминале, пытаешься вспомнить, как правильно сгенерировать SSH-ключ с определенными параметрами. Или нужно быстро преобразовать JSON в YAML. Или найти все файлы, измененные за последние три дня, и упаковать их в архив. Вместо гугления или копания в истории команд — просто пишешь на человеческом языке, что тебе нужно. Терминал отвечает готовой командой. И выполняет ее, если попросишь.
Это и есть gsh (GPT Shell). Не очередной веб-интерфейс к ChatGPT. Это оболочка, которая живет прямо в твоем терминале и использует локальную языковую модель. Никаких API-ключей, никаких отправок данных в облако. Все работает офлайн, на твоем железе.
gsh — это open-source проект на Rust. Исходники лежат на GitHub, что значит: можно посмотреть, как оно устроено внутри, и при желании — допилить под себя.
Чем gsh не является (чтобы не было разочарований)
Это не полноценная замена bash или zsh. Ты не будешь в ней жить постоянно. Это скорее интеллектуальный помощник, который включается по требованию. REPL-режим, где ты общаешься с моделью, чтобы получить команды или скрипты.
И еще: gsh сам не запускает модели. Ему нужен бэкенд. Обычно это Ollama или совместимый с OpenAI API сервер (типа llama.cpp). То есть сначала нужно настроить один из инструментов для локального запуска LLM.
Ставим и настраиваем за пять минут
1 Установка через Cargo
Проще всего, если у тебя уже стоит Rust и Cargo:
cargo install gsh
Ждешь, пока скомпилируется. Все.
2 Настройка подключения к модели
Допустим, у тебя уже крутится Ollama с моделью llama3.2. Запускаешь gsh и говоришь ему, куда стучаться:
gsh --model ollama:llama3.2
Или если используешь локальный сервер с OpenAI-совместимым API:
gsh --model openai:http://localhost:8080/v1 --model-name llama3.2
Можно прописать это в конфиг, чтобы не указывать каждый раз. Конфиг ищется в ~/.config/gsh/config.toml. Выглядит примерно так:
[model]
provider = "ollama"
name = "llama3.2"
[model.openai]
base_url = "http://localhost:8080/v1"
api_key = "not-needed" # для локального сервера часто не требуется
Важный момент: от модели зависит, насколько адекватные команды ты получишь. Мелкие модели (7B) могут генерировать чушь или опасные команды вроде rm -rf /. Бери модели покрупнее и с хорошим инструктажем. Есть подборка LLM с поддержкой Tool Calling — они отлично подходят для таких задач.
Как этим пользоваться? Показываю на живых примерах
Запускаешь gsh. Видишь приглашение >. И начинается магия.
Пример 1: Системное администрирование на лету
> покажи все процессы, которые используют больше 500 МБ памяти
(модель думает...)
Команда: ps aux --sort=-%mem | awk '$6/1024 > 500 {print $0}'
Выполнить? (y/n/e) [y]:
Жмешь y — команда выполняется прямо в твоей оболочке. n — отмена. e — редактируешь команду перед выполнением (спасибо разработчикам за эту опцию).
Пример 2: Работа с данными и файлами
> найди все .log файлы в /var/log, созданные сегодня, и покажи последние 10 строк каждого
Команда: find /var/log -name "*.log" -mtime 0 -exec tail -n 10 {} \;
Выполнить? (y/n/e) [y]:
Пример 3: Написание небольших скриптов
> напиши bash-скрипт, который принимает путь к директории и делает бэкап всех .py файлов в архив с датой в имени
(модель генерирует целый скрипт)
#!/bin/bash
...
Сохранить в файл? (y/n) [n]: y
Имя файла: backup_py.sh
Вот и весь workflow. Спросил — получил — проверил — выполнил.
А что там с безопасностью? Я же не хочу случайно снести систему
Разработчики подумали об этом. Во-первых, перед выполнением любой команды gsh всегда спрашивает подтверждение. Никаких автоматических исполнений.
Во-вторых, есть встроенная защита от очевидно опасных команд. Попробуй попросить: "удали все файлы в домашней директории". Скорее всего, gsh ответит отказом или предложит менее разрушительную альтернативу.
Но слепо доверять нельзя. Всегда смотри, что тебе предлагают выполнить. Особенно если используешь маленькую или не очень умную модель. Помни: LLM — это не база знаний, а продвинутый автодополнитель. Она может уверенно генерировать неправильные команды.
С чем сравнить? Есть же другие инструменты
| Инструмент | Отличие от gsh | Когда выбрать его |
|---|---|---|
| Claude Code | Облачный, платный, интегрируется в IDE | Когда нужна глубокая работа с кодом в редакторе и не важен офлайн-режим |
| Интеграция LLM в Obsidian | Работа с текстом и заметками, а не с shell | Для обработки документов, как в этой статье |
| Прямой запрос к Ollama API | Нет интерактивного режима, нужно писать скрипты-обертки | Когда встраиваешь LLM в свои скрипты или приложения |
| Shell GPT (sgpt) | Похожий концепт, но часто использует облачные API (OpenAI) | Если не принципиален локальный запуск и есть API-ключ |
Главное преимущество gsh — локальность и open source. Никаких лимитов на запросы, никакой отправки данных. Полная приватность.
Продвинутые фичи: не только простые команды
- Режим скрипта: Можно передать файл с многострочным запросом, и gsh обработает его. Полезно для сложных задач.
- Кастомные промпты: Настраиваешь системный промпт, чтобы модель лучше понимала контекст твоей работы. Например, можешь указать, что ты DevOps-инженер и работаешь с Kubernetes.
- История сессий: Все диалоги сохраняются. Можно вернуться к вчерашнему решению сложной проблемы с Docker.
- Интеграция с shell history: gsh может анализировать твои предыдущие команды и предлагать более релевантные варианты.
Кому это реально пригодится?
Не всем. Если ты раз в месяц заходишь в терминал, чтобы сделать git pull, то gsh — overkill. Но есть категории пользователей, для которых это может стать killer feature:
- Системные администраторы: Постоянно нужно делать одноразовые операции, синтаксис которых забывается между вызовами (awk, sed, сложный find).
- DevOps-инженеры: Написание скриптов для деплоя, мониторинга, работа с облачными CLI (aws, gcloud).
- Разработчики, работающие с данными: Преобразование форматов, фильтрация логов, анализ CSV/JSON прямо в консоли.
- Любой, кто ненавидит запоминать флаги утилит: Тарбол с исключением определенных файлов? Проверка прав в сложной директории? Спроси у gsh.
Подводные камни и что бесит
Идеальных инструментов не бывает. Вот с чем можешь столкнуться:
- Задержки: Локальная модель думает не мгновенно. Особенно если у тебя слабое железо или большая модель. Ждать 10-20 секунд на ответ — норма.
- Качество ответов: Зависит от модели. Llama 3.2 3B может нагенерировать ерунды. Нужно экспериментировать. Иногда лучше использовать специализированные агентные навыки.
- Нет графического интерфейса: Это все-таки терминальный инструмент. Если ты фанат GUI, посмотри на продвинутые приложения для локальных LLM.
- Требует настройки: Нужно сначала запустить модель в Ollama или другом сервере. Это не one-click install.
Что дальше? Куда движется gsh
Проект активно развивается. В планах (или уже в тестировании):
- Поддержка мультимодальных моделей (спросить "что на этом скриншоте терминала?").
- Более глубокая интеграция с рабочим окружением — чтение переменных, понимание текущего состояния системы.
- Плагины для выполнения специфичных задач (работа с Docker, Kubernetes, базами данных).
По сути, gsh — это шаг к тому самому идеальному стеку, где локальная LLM становится полноценным участником рабочего процесса, а не игрушкой для экспериментов.
Попробуй. Установи, подключи какую-нибудь адекватную модель (хотя бы llama3.2 8B), и задай ей пару своих реальных рабочих вопросов. Первые несколько раз будет непривычно — формулировать задачу для ИИ, а не искать в Google. Потом втянешься. И когда в следующий раз коллега спросит "как это сделать в одну команду?", ты просто откроешь gsh.