shell_gpt

by TheR1D (community) · Windows, macOS, Linux — bash, zsh, fish

Assistant Dev Tools Open Source v1.5.1 · 06.05.2026 активный

CLI-инструмент для повышения продуктивности в терминале с помощью AI. Умеет объяснять, генерировать и выполнять shell-команды прямо в текущей оболочке. Возможности: - --shell (-s): генерация и выполнение shell-команд - --code (-c): генерация кода - --execute (-e): выполнить предложенную команду после подтверждения - Роли: --role (создать и использовать кастомные роли) - REPL-режим: --repl - Поддержка OpenAI, Anthropic, Ollama - Интеграция с bash/zsh: Ctrl+L для быстрого вызова

v1.5.1
06.05.2026 current
Добавлен 18.06.2026 · Обновлён 18.06.2026 · Dev Tools
Установка
# pip:
pip install shell-gpt

# Настройка ключа:
sgpt --install-integration  # добавит Ctrl+L в .bashrc/.zshrc

# Использование:
sgpt "найди все файлы больше 1GB в /home"
sgpt --shell "перезапустить nginx"
sgpt --code "парсер CSV на Python"

# Ollama (без API ключа):
sgpt --model ollama/llama3 "привет"
переведено ИИ

ShellGPT

Инструмент для повышения продуктивности в командной строке, основанный на больших языковых моделях (LLM). Этот инструмент командной строки предлагает упрощённую генерацию команд shell, фрагментов кода, документации, устраняя необходимость во внешних ресурсах (таких как поиск в Google). Поддерживает Linux, macOS, Windows и совместим со всеми основными оболочками, такими как PowerShell, CMD, Bash, Zsh и др.

https://github.com/TheR1D/shell_gpt/assets/16740832/721ddb19-97e7-428f-a0ee-107d027ddd59

Установка

pip install shell-gpt

По умолчанию ShellGPT использует API OpenAI и модель GPT-4. Вам понадобится API-ключ, его можно сгенерировать здесь. Вам будет предложено ввести ключ, который затем будет сохранён в ~/.config/shell_gpt/.sgptrc. API OpenAI не является бесплатным, пожалуйста, обратитесь к тарифам OpenAI для получения дополнительной информации.

[!TIP] Альтернативно, вы можете запускать открытые модели локально бесплатно. Для этого потребуется настроить собственный бэкенд LLM, такой как Ollama. Чтобы заставить ShellGPT работать с Ollama, следуйте этому подробному руководству

❗️Обратите внимание, что ShellGPT не оптимизирован для локальных моделей и может работать не так, как ожидалось.

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

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

sgpt "What is the fibonacci sequence"
# -> The Fibonacci sequence is a series of numbers where each number ...

ShellGPT принимает запрос как из stdin, так и через аргументы командной строки. Независимо от того, предпочитаете ли вы передавать ввод через терминал или указывать его непосредственно в качестве аргументов, sgpt вас поддержит. Например, вы можете легко сгенерировать сообщение коммита git на основе диффов:

git diff | sgpt "Generate git commit message, for my changes"
# -> Added main feature details into README.md

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

docker logs -n 20 my_app | sgpt "check logs, find errors, provide possible solutions"
Error Detected: Connection timeout at line 7.
Possible Solution: Check network connectivity and firewall settings.
Error Detected: Memory allocation failed at line 12.
Possible Solution: Consider increasing memory allocation or optimizing application memory usage.

Вы также можете использовать все виды операторов перенаправления для передачи ввода:

sgpt "summarise" < document.txt
# -> The document discusses the impact...
sgpt << EOF
What is the best way to lear Golang?
Provide simple hello world example.
EOF
# -> The best way to learn Golang...
sgpt <<< "What is the best way to learn shell redirects?"
# -> The best way to learn shell redirects is through...

Команды shell

Вы когда-нибудь забывали распространённые команды shell, такие как find, и искали синтаксис в интернете? С опцией --shell или сокращением -s вы можете быстро сгенерировать и выполнить нужные вам команды прямо в терминале.

sgpt --shell "find all json files in current folder"
# -> find . -type f -name "*.json"
# -> [E]xecute, [D]escribe, [A]bort: e

Shell GPT знает об ОС и $SHELL, которые вы используете, и предоставит команду shell для конкретной вашей системы. Например, если вы попросите sgpt обновить вашу систему, он вернёт команду на основе вашей ОС. Вот пример для macOS:

sgpt -s "update my system"
# -> sudo softwareupdate -i -a
# -> [E]xecute, [D]escribe, [A]bort: e

Тот же самый запрос, использованный в Ubuntu, сгенерирует другое предложение:

sgpt -s "update my system"
# -> sudo apt update && sudo apt upgrade -y
# -> [E]xecute, [D]escribe, [A]bort: e

Попробуем это с Docker:

sgpt -s "start nginx container, mount ./index.html"
# -> docker run -d -p 80:80 -v $(pwd)/index.html:/usr/share/nginx/html/index.html nginx
# -> [E]xecute, [D]escribe, [A]bort: e

Мы всё ещё можем использовать конвейеры для передачи ввода в sgpt и генерации команд shell:

sgpt -s "POST localhost with" < data.json
# -> curl -X POST -H "Content-Type: application/json" -d '{"a": 1, "b": 2}' http://localhost
# -> [E]xecute, [D]escribe, [A]bort: e

Применение дополнительного "магического" shell в нашем запросе, в этом примере передача имён файлов в ffmpeg:

ls
# -> 1.mp4 2.mp4 3.mp4
sgpt -s "ffmpeg combine $(ls -m) into one video file without audio."
# -> ffmpeg -i 1.mp4 -i 2.mp4 -i 3.mp4 -filter_complex "[0:v] [1:v] [2:v] concat=n=3:v=1 [v]" -map "[v]" out.mp4
# -> [E]xecute, [D]escribe, [A]bort: e

Если вы хотите передать сгенерированную команду shell через конвейер, вы можете использовать опцию --no-interaction. Это отключит интерактивный режим и выведет сгенерированную команду в stdout. В этом примере мы используем pbcopy, чтобы скопировать сгенерированную команду в буфер обмена:

sgpt -s "find all json files in current folder" --no-interaction | pbcopy

Интеграция с оболочкой

Это очень удобная функция, которая позволяет использовать дополнения sgpt для оболочки прямо в вашем терминале, без необходимости вводить sgpt с запросом и аргументами. Интеграция с оболочкой позволяет использовать ShellGPT с горячими клавишами в вашем терминале, поддерживается как оболочками Bash, так и ZSH. Эта функция вставляет дополнения sgpt непосредственно в буфер терминала (строку ввода), что позволяет немедленно редактировать предложенные команды.

https://github.com/TheR1D/shell_gpt/assets/16740832/bead0dab-0dd9-436d-88b7-6abfb2c556c1

Чтобы установить интеграцию с оболочкой, выполните sgpt --install-integration и перезапустите терминал для применения изменений. Это добавит несколько строк в ваш файл .bashrc или .zshrc. После этого вы можете использовать Ctrl+l (по умолчанию) для вызова ShellGPT. Когда вы нажимаете Ctrl+l, он заменит вашу текущую строку ввода (буфер) предложенной командой. Вы можете затем отредактировать её и просто нажать Enter для выполнения.

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

Используя параметр --code или -c, вы можете запросить только чистый код, например:

sgpt --code "solve fizz buzz problem using python"
for i in range(1, 101):
    if i % 3 == 0 and i % 5 == 0:
        print("FizzBuzz")
    elif i % 3 == 0:
        print("Fizz")
    elif i % 5 == 0:
        print("Buzz")
    else:
        print(i)

Поскольку это валидный код на Python, мы можем перенаправить вывод в файл:

sgpt --code "solve classic fizz buzz problem using Python" > fizz_buzz.py
python fizz_buzz.py
# 1
# 2
# Fizz
# 4
# Buzz
# ...

Мы также можем использовать конвейеры для передачи ввода:

cat fizz_buzz.py | sgpt --code "Generate comments for each line of my code"
# Loop through numbers 1 to 100
for i in range(1, 101):
    # Check if number is divisible by both 3 and 5
    if i % 3 == 0 and i % 5 == 0:
        # Print "FizzBuzz" if number is divisible by both 3 and 5
        print("FizzBuzz")
    # Check if number is divisible by 3
    elif i % 3 == 0:
        # Print "Fizz" if number is divisible by 3
        print("Fizz")
    # Check if number is divisible by 5
    elif i % 5 == 0:
        # Print "Buzz" if number is divisible by 5
        print("Buzz")
    # If number is not divisible by 3 or 5, print the number itself
    else:
        print(i)

Режим чата

Часто важно сохранять и вспоминать разговор. sgpt создает диалог при каждом запрошенном дополнении LLM. Диалог может развиваться поочередно (режим чата) или интерактивно, в цикле REPL (режим REPL). Оба способа основаны на одном и том же базовом объекте, называемом сессией чата. Сессия находится по настраиваемому CHAT_CACHE_PATH.

Чтобы начать разговор, используйте опцию --chat с уникальным именем сессии и запросом.

sgpt --chat conversation_1 "please remember my favorite number: 4"
# -> I will remember that your favorite number is 4.
sgpt --chat conversation_1 "what would be my favorite number + 4?"
# -> Your favorite number is 4, so if we add 4 to it, the result would be 8.

Вы можете использовать сессии чата для итеративного улучшения предложений GPT, предоставляя дополнительные детали. Можно использовать опции --code или --shell для инициализации --chat:

sgpt --chat conversation_2 --code "make a request to localhost using python"
import requests

response = requests.get('http://localhost')
print(response.text)

Давайте попросим LLM добавить кэширование в наш запрос:

sgpt --chat conversation_2 --code "add caching"
import requests
from cachecontrol import CacheControl

sess = requests.session()
cached_sess = CacheControl(sess)

response = cached_sess.get('http://localhost')
print(response.text)

То же самое относится и к командам shell:

sgpt --chat conversation_3 --shell "what is in current folder"
# -> ls
sgpt --chat conversation_3 "Sort by name"
# -> ls | sort
sgpt --chat conversation_3 "Concatenate them using FFMPEG"
# -> ffmpeg -i "concat:$(ls | sort | tr '\n' '|')" -codec copy output.mp4
sgpt --chat conversation_3 "Convert the resulting file into an MP3"
# -> ffmpeg -i output.mp4 -vn -acodec libmp3lame -ac 2 -ab 160k -ar 48000 final_output.mp3

Чтобы вывести список всех сессий из любого из режимов диалога, используйте опцию --list-chats или -lc:

sgpt --list-chats
# .../shell_gpt/chat_cache/conversation_1  
# .../shell_gpt/chat_cache/conversation_2

Чтобы показать все сообщения, относящиеся к конкретному разговору, используйте опцию --show-chat с именем сессии:

sgpt --show-chat conversation_1
# user: please remember my favorite number: 4
# assistant: I will remember that your favorite number is 4.
# user: what would be my favorite number + 4?
# assistant: Your favorite number is 4, so if we add 4 to it, the result would be 8.

Режим REPL

Существует очень удобный режим REPL (read–eval–print loop, цикл "чтение-вычисление-печать"), который позволяет интерактивно общаться с моделями GPT. Чтобы начать сессию чата в режиме REPL, используйте опцию --repl с уникальным именем сессии. Вы также можете использовать "temp" в качестве имени сессии для запуска временной сессии REPL. Обратите внимание, что --chat и --repl используют один и тот же базовый объект, поэтому вы можете начать сессию чата с помощью --chat, а затем продолжить разговор в режиме REPL с помощью --repl.

gif

sgpt --repl temp
Entering REPL mode, press Ctrl+C to exit.
>>> What is REPL?
REPL stands for Read-Eval-Print Loop. It is a programming environment ...
>>> How can I use Python with REPL?
To use Python with REPL, you can simply open a terminal or command prompt ...

Режим REPL может работать с опциями --shell и --code, что делает его очень удобным для интерактивных команд shell и генерации кода:

sgpt --repl temp --shell
Entering shell REPL mode, type [e] to execute commands or press Ctrl+C to exit.
>>> What is in current folder?
ls
>>> Show file sizes
ls -lh
>>> Sort them by file sizes
ls -lhS
>>> e (enter just e to execute commands, or d to describe them)

Чтобы ввести многострочный запрос, используйте тройные кавычки """:

sgpt --repl temp
Entering REPL mode, press Ctrl+C to exit.
>>> """
... Explain following code:
... import random
... print(random.randint(1, 10))
... """
It is a Python script that uses the random module to generate and print a random integer.

Вы также можете войти в режим REPL с начальным запросом, передав его как аргумент или через stdin, или даже и то, и другое:

sgpt --repl temp < my_app.py
Entering REPL mode, press Ctrl+C to exit.
──────────────────────────────────── Input ────────────────────────────────────
name = input("What is your name?")
print(f"Hello {name}")
───────────────────────────────────────────────────────────────────────────────
>>> What is this code about?
The snippet of code you've provided is written in Python. It prompts the user...
>>> Follow up questions...

Вызов функций

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

sgpt --install-functions

ShellGPT предлагает удобный способ определения и использования функций. Чтобы создать свою пользовательскую функцию, перейдите в ~/.config/shell_gpt/functions и создайте новый .py файл с именем функции. Внутри этого файла вы можете определить свою функцию, используя этот пример.

Документирующий комментарий внутри класса будет передан в API OpenAI как описание функции, вместе с атрибутом title и описаниями параметров. Функция execute будет вызвана, если LLM решит использовать вашу функцию. В этом случае мы разрешаем LLM выполнять любые команды Shell в нашей системе. Поскольку мы возвращаем вывод команды, LLM сможет проанализировать его и решить, хорошо ли он подходит для запроса. Вот пример того, как функция может быть выполнена LLM:

sgpt "What are the files in /tmp folder?"
# -> @FunctionCall execute_shell_command(shell_command="ls /tmp")
# -> The /tmp folder contains the following files and directories:
# -> test.txt
# -> test.json

Обратите внимание, что если по какой-либо причине функция (execute_shell_command) вернёт ошибку, LLM может попытаться выполнить задачу на основе вывода. Допустим, у нас не установлен jq в системе, и мы просим LLM распарсить JSON-файл:

sgpt "parse /tmp/test.json file using jq and return only email value"
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> It appears that jq is not installed on the system. Let me try to install it using brew.
# -> @FunctionCall execute_shell_command(shell_command="brew install jq")
# -> jq has been successfully installed. Let me try to parse the file again.
# -> @FunctionCall execute_shell_command(shell_command="jq -r '.email' /tmp/test.json")
# -> The email value in /tmp/test.json is johndoe@example.

Также возможно объединить несколько вызовов функций в одном запросе:

sgpt "Play music and open hacker news"
# -> @FunctionCall play_music()
# -> @FunctionCall open_url(url="https://news.ycombinator.com")
# -> Music is now playing, and Hacker News has been opened in your browser. Enjoy!

Это лишь простой пример того, как вы можете использовать вызовы функций. Это действительно мощная функция, которая может использоваться для выполнения различных сложных задач. У нас есть специальная категория в GitHub Discussions для обсуждения и обмена функциями. LLM может выполнять деструктивные команды, поэтому пожалуйста, используйте её на свой страх и риск❗️

Роли

ShellGPT позволяет создавать пользовательские роли, которые могут использоваться для генерации кода, команд shell или для выполнения ваших конкретных задач. Чтобы создать новую роль, используйте опцию --create-role с именем роли. Вам будет предложено ввести описание для роли и другие детали. Это создаст JSON-файл в ~/.config/shell_gpt/roles с именем роли. В этом каталоге вы также можете редактировать роли sgpt по умолчанию, такие как shell, code и default. Используйте опцию --list-roles для вывода списка всех доступных ролей и опцию --show-role для отображения деталей конкретной роли. Вот пример пользовательской роли:

sgpt --create-role json_generator
# Enter role description: Provide only valid json as response.
sgpt --role json_generator "random: user, password, email, address"
{
  "user": "JohnDoe",
  "password": "p@ssw0rd",
  "email": "johndoe@example.com",
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "CA",
    "zip": "12345"
  }
}

Если описание роли содержит слова "APPLY MARKDOWN" (с учётом регистра), то чаты будут отображаться с использованием форматирования markdown, если это не отключено явно с помощью --no-md.

Кэш запросов

Управляйте кэшем с помощью опций --cache (по умолчанию) и --no-cache. Это кэширование применяется ко всем запросам sgpt к API OpenAI:

sgpt "what are the colors of a rainbow"
# -> The colors of a rainbow are red, orange, yellow, green, blue, indigo, and violet.

В следующий раз тот же самый запрос получит результаты из локального кэша мгновенно. Обратите внимание, что sgpt "what are the colors of a rainbow" --temperature 0.5 выполнит новый запрос, поскольку мы не указали --temperature (то же самое касается --top-probability) в предыдущем запросе.

Это лишь некоторые примеры того, что мы можем делать, используя модели OpenAI GPT, и я уверен, что вы найдёте это полезным для ваших конкретных случаев использования.

Файл конфигурации во время выполнения

Вы можете настроить некоторые параметры в файле конфигурации во время выполнения ~/.config/shell_gpt/.sgptrc:

# API ключ, также можно задать переменную окружения OPENAI_API_KEY.
OPENAI_API_KEY=your_api_key
# Базовый URL бэкенд-сервера. Если "default", URL будет определён на основе --model.
API_BASE_URL=default
# Максимальное количество кэшированных сообщений на сессию чата.
CHAT_CACHE_LENGTH=100
# Папка кэша чата.
CHAT_CACHE_PATH=/tmp/shell_gpt/chat_cache
# Длина (количество) кэша запросов.
CACHE_LENGTH=100
# Папка кэша запросов.
CACHE_PATH=/tmp/shell_gpt/cache
# Тайм-аут запроса в секундах.
REQUEST_TIMEOUT=60
# Модель OpenAI по умолчанию.
DEFAULT_MODEL=gpt-5.4-mini
# Цвет по умолчанию для дополнений shell и кода.
DEFAULT_COLOR=magenta
# В режиме --shell по умолчанию "Y" для отсутствия ввода.
DEFAULT_EXECUTE_SHELL_CMD=false
# Отключить потоковую передачу ответов
DISABLE_STREAMING=false
# Тема pygment для просмотра markdown (роль по умолчанию/описание).
CODE_THEME=default
# Путь к каталогу с функциями.
OPENAI_FUNCTIONS_PATH=/Users/user/.config/shell_gpt/functions
# Выводить результаты функций, когда LLM их использует.
SHOW_FUNCTIONS_OUTPUT=false
# Разрешить LLM использовать функции.
OPENAI_USE_FUNCTIONS=true
# Принудительное использование LiteLLM (для локальных LLM).
USE_LITELLM=false

Возможные варианты для DEFAULT_COLOR: black, red, green, yellow, blue, magenta, cyan, white, bright_black, bright_red, bright_green, bright_yellow, bright_blue, bright_magenta, bright_cyan, bright_white. Возможные варианты для CODE_THEME: https://pygments.org/styles/

Полный список аргументов

╭─ Arguments ──────────────────────────────────────────────────────────────────────────────────────────────╮
│   prompt      [PROMPT]  The prompt to generate completions for.                                          │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Options ────────────────────────────────────────────────────────────────────────────────────────────────╮
│ --model            TEXT                       Large language model to use. [default: gpt-5.4-mini]       │
│ --temperature      FLOAT RANGE [0.0<=x<=2.0]  Randomness of generated output. [default: 0.0]             │
│ --top-p            FLOAT RANGE [0.0<=x<=1.0]  Limits highest probable tokens (words). [default: 1.0]     │
│ --md             --no-md                      Prettify markdown output. [default: md]                    │
│ --editor                                      Open $EDITOR to provide a prompt. [default: no-editor]     │
│ --cache                                       Cache completion results. [default: cache]                 │
│ --version                                     Show version.                                              │
│ --help                                        Show this message and exit.                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Assistance Options ─────────────────────────────────────────────────────────────────────────────────────╮
│ --shell           -s                      Generate and execute shell commands.                           │
│ --interaction         --no-interaction    Interactive mode for --shell option. [default: interaction]    │
│ --describe-shell  -d                      Describe a shell command.                                      │
│ --code            -c                      Generate only code.                                            │
│ --functions           --no-functions      Allow function calls. [default: functions]                     │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Chat Options ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --chat                 TEXT  Follow conversation with id, use "temp" for quick session. [default: None]  │
│ --repl                 TEXT  Start a REPL (Read–eval–print loop) session. [default: None]                │
│ --show-chat            TEXT  Show all messages from provided chat id. [default: None]                    │
│ --list-chats  -lc            List all existing chat ids.                                                 │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯
╭─ Role Options ───────────────────────────────────────────────────────────────────────────────────────────╮
│ --role                  TEXT  System role for GPT model. [default: None]                                 │
│ --create-role           TEXT  Create role. [default: None]                                               │
│ --show-role             TEXT  Show role. [default: None]                                                 │
│ --list-roles   -lr            List roles.                                                                │
╰──────────────────────────────────────────────────────────────────────────────────────────────────────────╯

Docker

Запустите контейнер, используя переменную окружения OPENAI_API_KEY и том Docker для хранения кэша. Рассмотрите возможность установки переменных окружения OS_NAME и SHELL_NAME в соответствии с вашими предпочтениями.

docker run --rm \
           --env OPENAI_API_KEY=api_key \
           --env OS_NAME=$(uname -s) \
           --env SHELL_NAME=$(echo $SHELL) \
           --volume gpt-cache:/tmp/shell_gpt \
       ghcr.io/ther1d/shell_gpt -s "update my system"

Пример диалога с использованием псевдонима и переменной окружения OPENAI_API_KEY:

alias sgpt="docker run --rm --volume gpt-cache:/tmp/shell_gpt --env OPENAI_API_KEY --env OS_NAME=$(uname -s) --env SHELL_NAME=$(echo $SHELL) ghcr.io/ther1d/shell_gpt"
export OPENAI_API_KEY="your OPENAI API key"
sgpt --chat rainbow "what are the colors of a rainbow"
sgpt --chat rainbow "inverse the list of your last answer"
sgpt --chat rainbow "translate your last answer in french"

Вы также можете использовать предоставленный Dockerfile для сборки собственного образа:

docker build -t sgpt .

Дополнительная документация

Комментарии
Войдите, чтобы оставить комментарий