Зачем вообще запускать LLM из bash?

Представьте: вы пишете автоматизированный пайплайн на сервере — никакого GUI, никакого Python-окружения, только чистый шелл. Или у вас Android-телефон с Termux и желание поспрашивать GPT-подобную модель прямо из командной строки. Или вы просто не хотите тащить в проект тяжёлый SDK ради одного-единственного API-вызова.

Именно в таких сценариях появляются инструменты вроде Bash4LLM+ — минималистичного bash-обёртки для LLM API, которая опубликована на Hacker News под рубрикой «Show HN» и вызвала живой интерес в сообществе.

«Только Bash, curl и jq. Никаких зависимостей, никаких eval, никакого /tmp.» — концепция проекта одной строкой.

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


Что такое Bash4LLM+ и в чём его идея

Bash4LLM+ использует только Bash, curl и jq. С его помощью можно отправлять промпты, запускать мини-чат, обрабатывать файлы построчно, стримить вывод и сохранять метаданные сессий в формате JSON. При этом в коде намеренно не используется системный /tmp и не применяется eval.

По сути, Bash4LLM+ — это безопасный, полностью аудируемый CLI-обёртка для Chat Completions API, совместимого с OpenAI-форматом (в первую очередь Groq), который при этом расширяем на другие провайдеры.

Инструмент совместим со всеми Unix-подобными окружениями: Linux, macOS, WSL, Cygwin, Termux (Android), BSD. Изначально он ориентирован на Groq’s OpenAI-совместимый API и позиционируется как безопасный и портативный.

ℹ Почему Groq?
Groq предоставляет бесплатный тир API с молниеносным инференсом (модели Llama, Mixtral, Gemma). Это идеальная точка входа для тех, кто хочет попробовать LLM-автоматизацию без расходов.

Архитектура: как устроен один скрипт внутри

Bash4LLM+ представляет собой единственный Bash-скрипт, самодостаточный, читаемый и верифицируемый. Достаточно скачать его, сделать исполняемым, экспортировать API-ключ — и можно сразу работать.

Модульная структура скрипта разбита на логические секции:

Архитектура включает модульные секции: PRECORE_BOOT, PRECORE_RUN, PROVIDER, CORE_SETUP, CORE_PROVIDER — каждая отвечает за свою зону ответственности.


graph TD
    A[Пользователь вводит промпт] --> B[PRECORE_BOOT: инициализация]
    B --> C[PRECORE_RUN: парсинг аргументов]
    C --> D[PROVIDER: выбор провайдера]
    D --> E[CORE_SETUP: конфигурация модели]
    E --> F[CORE_PROVIDER: HTTP-запрос через curl]
    F --> G{Формат вывода}
    G -->|text| H[Текст в терминал]
    G -->|json| I[Raw JSON]
    G -->|stream| J[Стриминг токенов]
    H --> K[Сохранение сессии NDJSON]
    I --> K
    J --> K

Безопасность заложена в дизайн: нет использования /tmp, нет eval, применяются рестриктивные права доступа, реализована продвинутая валидация провайдеров.

Список моделей получается динамически через GET-запрос к API — ни одна модель не захардкожена в скрипте.


Установка и первый запуск

Процесс установки намеренно сделан максимально простым:

# 1. Скачиваем скрипт
curl -O https://raw.githubusercontent.com/kamaludu/bash4llm/main/bash4llm.sh

# 2. Делаем исполняемым
chmod +x bash4llm.sh

# 3. Экспортируем ключ Groq (бесплатно на console.groq.com)
export GROQ_API_KEY="gsk_ваш_ключ_здесь"

# 4. Первый запрос!
./bash4llm.sh "Объясни разницу между grep и awk"
💡 Совет по установке
Положите скрипт в ~/.local/bin/llm и добавьте директорию в $PATH — тогда можно вызывать просто llm "ваш вопрос" из любого места в системе.

Основные режимы работы

Скрипт умеет отправлять одиночные промпты, запускать мини-чат, обрабатывать файлы построчно, стримить вывод и сохранять метаданные сессий в формате JSON.

# Одиночный промпт
./bash4llm.sh "Напиши регулярку для валидации email"

# Интерактивный чат (REPL-режим)
./bash4llm.sh --chat

# Стриминг ответа (токены появляются по мере генерации)
./bash4llm.sh --stream "Расскажи историю про пингвина"

# Обработка файла построчно (каждая строка = отдельный промпт)
./bash4llm.sh --batch prompts.txt

# Сохранить результат в файл
./bash4llm.sh --save --output ./results/ "Проанализируй этот код"

# Системный промпт
./bash4llm.sh --system "Ты эксперт по Linux" "Как оптимизировать swap?"

Управление параметрами модели

Доступны параметры температуры (от 0.0 до 2.0) и максимального количества токенов — всё управляется флагами командной строки.

# Температура = 0 (детерминированный вывод)
./bash4llm.sh --temperature 0.0 "Сколько будет 2+2?"

# Ограничение токенов
./bash4llm.sh --max-tokens 100 "Коротко о квантовых компьютерах"

# Сырой JSON-ответ
./bash4llm.sh --json "Список столиц СНГ"

Сессии и работа с историей диалога

Одна из ключевых фич Bash4LLM+ — встроенная система сессий. Это позволяет вести полноценный многоходовой диалог и возвращаться к нему позже.

Сессия безопасно инициализируется пустой (создаются NDJSON-файл и метаданные) и регистрируется в глобальном индексе сессий без выполнения API-вызовов. При этом требуется совместное использование с флагом --session <id>.

# Начать новую сессию с именем "work"
./bash4llm.sh --session work --init

# Продолжить существующую сессию
./bash4llm.sh --session work "Помнишь, мы обсуждали архитектуру?"

# Показать текущую конфигурацию
./bash4llm.sh --config

# Диагностика системы
./bash4llm.sh --diag

Система UI-состояния (ui_state) позволяет CORE-модулю постоянно экспортировать метаданные в атомарном JSON-формате — это открывает интеграцию с GUI или внешними инструментами.

📝 Пример: конвейер с bash-пайпами
# Анализируем лог-файл через LLM
cat /var/log/nginx/error.log | tail -50 | ./bash4llm.sh --stream "Найди паттерны ошибок и предложи решения"

# Генерируем документацию для кода
cat myscript.py | ./bash4llm.sh "Напиши docstring для каждой функции"

# Пакетная обработка: перевод файла
cat english_texts.txt | ./bash4llm.sh --batch - "Переведи на русский:"

Сравнение с альтернативами

Bash4LLM+ — не первый инструмент в своей нише. Посмотрим, как он соотносится с конкурентами:

ИнструментЯзыкЗависимостиСессииСтримингTermuxЛицензия
Bash4LLM+Bashcurl + jq✅ NDJSONOpen Source
llm.shBashcurl + jq⚠️Open Source
Simon Willison’s llmPythonpip (много)✅ SQLiteOpen Source
LiteLLM ProxyPythonpip (много)Open Source
LLM-ShellPythonpipOpen Source

Ближайший аналог — llm.sh, простой bash-скрипт для работы с LLM из командной строки, вдохновлённый инструментом Саймона Уиллисона, но с единственными зависимостями в виде curl и jq. Bash4LLM+ идёт дальше: добавляет сессии, батч-режим, стриминг и систему шаблонов.

⚠ Важно про безопасность
Не передавайте API-ключ напрямую в аргументах командной строки — он будет виден в ps aux и истории. Всегда используйте переменные окружения: export GROQ_API_KEY=... в ~/.bashrc или через менеджер секретов.

Практические сценарии использования

1. DevOps и мониторинг

#!/bin/bash
# Автоматический анализ алертов
ALERT_MSG=$(cat /tmp/alert.txt)
export GROQ_API_KEY="$SECRET_API_KEY"

./bash4llm.sh \
  --system "Ты DevOps-инженер. Давай краткие actionable советы." \
  --max-tokens 300 \
  "Проанализируй этот алерт и предложи 3 шага: $ALERT_MSG"

2. Обработка данных в CI/CD

# Автоматическая генерация changelog из git diff
git diff HEAD~1 HEAD | ./bash4llm.sh \
  "Напиши human-readable changelog для этого diff в формате Keep a Changelog"

3. Терминальный ассистент на Android (Termux)

Совместимость с Termux на Android делает инструмент уникальным — вы буквально держите LLM-клиент в кармане без каких-либо дополнительных установок кроме базовых пакетов.

# В Termux
pkg install curl jq
export GROQ_API_KEY="gsk_..."
./bash4llm.sh "Как настроить SSH на Android?"

4. Шаблоны промптов

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

# Структура шаблонов
~/.config/bash4llm/templates/
├── code-review.txt
├── sql-expert.txt
└── bash-helper.txt

# Использование
./bash4llm.sh --template code-review "$(cat myfile.py)"

Конфигурация и тонкая настройка

Конфигурация Bash4LLM+ хранится в $BASH4LLM_CONFIG_DIR/config и включает параметры: MODEL, TURE (температура), MAX_TOKENS, FORMAT, THRESHOLD. Кроме того, поддерживается файл model.$PROVIDER для задания модели по умолчанию для конкретного провайдера.

# ~/.config/bash4llm/config
MODEL=llama-3.3-70b-versatile
TURE=0.7
MAX_TOKENS=2048
FORMAT=text
THRESHOLD=1000

Флаги вывода дают полный контроль над форматом ответа:

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


Заключение: когда стоит выбрать Bash4LLM+

Bash4LLM+ — это не замена полноценным SDK или таким инструментам, как LiteLLM. Это специализированный инструмент для конкретной ниши: автоматизация на чистом bash без лишних зависимостей.

Выбирайте Bash4LLM+, если:

  • Вы работаете в среде с ограниченным набором пакетов (контейнеры, встраиваемые системы, Termux)
  • Нужно быстро встроить LLM-запрос в существующий bash-скрипт
  • Важна прозрачность и аудируемость кода (один читаемый файл)
  • Вы цените философию UNIX: делай одно дело хорошо

Не выбирайте Bash4LLM+, если:

  • Нужна мультимодальность (изображения, аудио)
  • Требуется сложная оркестрация агентов
  • Критична поддержка десятков провайдеров из коробки

Лучший инструмент — тот, который исчезает в процессе работы. Bash4LLM+ именно такой: скачал, запустил, получил ответ. Никакого шума.

💡 С чего начать прямо сейчас
  1. Зайдите на console.groq.com и создайте бесплатный API-ключ
  2. Скачайте скрипт: curl -O https://raw.githubusercontent.com/kamaludu/bash4llm/main/bash4llm.sh && chmod +x bash4llm.sh
  3. Попробуйте: export GROQ_API_KEY=ваш_ключ && ./bash4llm.sh "Hello, Llama!"
  4. Почитайте полную документацию на GitHub