Один 50-строчный agentic-скрипт на Python полностью вытеснил Google-поиски по bash-командам

13 марта 2026·9 мин·medium
AIAgentic AIDevOpsПрограммированиеТерминал

Восемь лет работы с Linux-системами научили меня многому, но не избавили от одной дурацкой привычки: почти каждую неделю я открывал браузер и вводил tar extract gz или find files larger than.

Это не было катастрофой — просто раздражало. Каждый такой поиск отнимал 30–40 секунд: открыть вкладку, пропустить рекламу, пролистать Stack Overflow, скопировать команду. В сумме за год набегало больше часа потерянного времени.

Я решил это исправить.

Шаг 1. Посчитал, сколько именно трачу

Выгрузил историю браузера за 10 месяцев и отфильтровал запросы, связанные с командной строкой. Получилась следующая картина:

  • tar extract — 39 раз
  • find files bigger than … — 27 раз
  • kill process on port … — 24 раза
  • crontab syntax — 19 раз

Всего ~140 запросов на вещи, которые я теоретически должен знать наизусть. Даже chmod 755 встречался регулярно.

Вывод был очевиден: если автоматизировать эти 140 поисков, можно серьёзно ускорить повседневную работу.

Шаг 2. Написал минимальный агент

Сделал простой скрипт на Python (50 строк, без внешних зависимостей), который принимает запрос на русском и возвращает одну bash-команду:

#!/usr/bin/env python3
"""ai-bash: спрашиваю по-русски — получаю bash"""

import sys
import os
import json
import urllib.request

API_KEY = os.getenv("OPENAI_API_KEY", "")
API_URL = os.getenv("AI_BASH_URL", "https://api.openai.com/v1/chat/completions")
MODEL = os.getenv("AI_BASH_MODEL", "gpt-4o-mini")

SYSTEM = (
    "Ты — эксперт по Linux-терминалу. Пользователь пишет задачу на русском. "
    "Отвечай ТОЛЬКО одной строкой bash-команды. Без объяснений, без markdown, "
    "без кавычек. Несколько команд — через && или |. Только Linux."
)

def ask(question: str) -> str:
    body = json.dumps({
        "model": MODEL,
        "temperature": 0,
        "max_tokens": 180,
        "messages": [
            {"role": "system", "content": SYSTEM},
            {"role": "user", "content": question},
        ],
    }).encode()

    req = urllib.request.Request(API_URL, data=body, headers={
        "Content-Type": "application/json",
        "Authorization": f"Bearer {API_KEY}",
    })

    with urllib.request.urlopen(req) as r:
        data = json.loads(r.read())

    return data["choices"][0]["message"]["content"].strip()

def main():
    if len(sys.argv) < 2:
        print("Использование: ai 'найди файлы больше 50мб'")
        sys.exit(1)

    cmd = ask(" ".join(sys.argv[1:]))
    print(f"\n \033[1;33m➜ {cmd}\033[0m\n")

    if input("Запустить? [y/N] ").strip().lower() in ("y", "д"):
        os.system(cmd)

if __name__ == "__main__":
    main()

Установка — три команды:

mkdir -p ~/bin
chmod +x ~/bin/ai-bash.py
echo 'alias ai="python3 ~/bin/ai-bash.py"' >> ~/.bashrc

Через пару дней перевёл всё на локальную Ollama (qwen2.5:7b):

export AI_BASH_URL="http://localhost:11434/v1/chat/completions"
export AI_BASH_MODEL="qwen2.5:7b"
export OPENAI_API_KEY="ollama"

Ответ приходит за 1.8–2.3 секунды — уже комфортно.

Шаг 3. Как это работало на практике

Примеры запросов и ответов:

  • ai "покажи свободное место на дисках"df -h
  • ai "распакуй archive.tar.gz"tar -xzf archive.tar.gz
  • ai "убей всё на порту 3000"kill $(lsof -t -i:3000)
  • ai "переименуй все .JPG в .jpg"for f in *.JPG; do mv "$f" "${f%.JPG}.jpg"; done

Самое приятное — больше не гуглить конструкции вроде ${f%.JPG}.

Шаг 4. Что изменилось через 30 дней

За месяц скрипт обработал 712 запросов (~24 в день).

Google-поиски по bash почти исчезли.
Рабочий поток стал заметно ровнее: нет 30–40-секундных пауз на поиск команды.

Но появилась обратная сторона.

На четвёртой неделе пришлось чинить деплой на удалённом сервере без моего скрипта.
Нужно было распаковать архив. Набираю tar — и на 10–12 секунд зависаю:
-xzf? -zxf? С дефисом или без?

Раньше это было рефлексом. Теперь — задержка.

Самопроверка по 12–15 командам показала:

  • Простые (df -h, du -sh, rsync -avz) — на месте
  • Средней сложности (tar -xzf, chmod 755 vs 644, awk '{print $1}') — вспоминаются медленнее
  • Сложные (find … -exec {} ;) — и раньше были слабым местом

В итоге «выветрилось» 3–4 команды, которые я раньше знал почти автоматически.

Три случая, когда подтверждение спасло

  1. Предложено rm -rf /tmp/* — вспомнил, что там сокеты живых сервисов
  2. find /var/log -mtime +10 -delete без -type f — чуть не удалил директории логов
  3. chmod -R 777 . внутри проекта — чуть не сломал .ssh и ключи

Без строки подтверждения уже были бы проблемы.

Выводы: плюсы, минусы и что дальше

Плюсы

  • Экономия времени и внимания
  • Нет рекламы и переключений контекста
  • Русский язык
  • Бесплатно на локальной модели

Минусы

  • Потеря мышечной памяти на некоторые команды
  • Зависимость от доступа к модели (на чистом сервере без Ollama — дискомфорт)

Стоит ли оно того?
Для меня — да.
Скорость и комфорт работы перевешивают потерю нескольких микро-навыков.

Я продолжаю пользоваться скриптом.
А tar -xzf… вспоминаю теперь чуть дольше, чем раньше.

UPD — в будни 30–35 запросов, в выходные 6–12. Среднее 23.7 в день. Жизнь идёт.

Похожие статьи