
Эта заметка вдохновлена статьей Я заменил Google на 50 строк Python. Через месяц я забыл, как пишется tar -xzf. В какой-то момент, в очередной раз после нажатия Alt+Tab для переключения в браузер, чтобы быстро найти какой-то линуксовый однострочник, я понял, что хватит это терпеть, и полез искать упомянутую статью. Перечитав её и прошерстив комментарии, я понял, что некоторые нужные мне вещи сделаны не совсем так, как хотелось бы, поэтому пошёл пилить свой велосипед. Итак, представляю вам semantic-terminal:
Ставится через pip:
pip install semantic-terminalUnix-style утилита
sem, которая прокидывает аргументы в LLM с промтом: “Сделей однострочник”Опционально предоставляет подробное описание однострочника на языке запроса
Опциональная утилита
sem-run, запускающая сгенерированную команду с сохранением в истории терминалаЗадержка генерации меньше 1с при условии … кхм хм … стабильного интернета
Мотивация
Работаю я в основном в Linux, терминал - один из основных инструментов, но всё-таки по большей части это ls, mkdir, cd, git, grep, htop, ssh, ну и, может, ещё с десяток команд. Все возможные параметры/опции я не помню и, если честно, не хочу/не могу помнить. В общем-то, для этого принято в каждой такой утилите иметь опцию --help, которая расскажет и подскажет. К сожалению, даже с --help всё ещё остаётся большой пласт того, что можно делать с системой. Уверен, что есть люди, которые знают большинство недр Unix-подобных систем, но я не из таких. Долгое время, в случаях, когда я не помню, как сделать что-то в терминале, я просто открываю Google и ищу нужный однострочник. С появлением терминалов типа Claude Code или OpenCode появилась возможность делать то же самое прямо в терминале и, надо сказать, я этим активно пользуюсь (и я точно не один такой). Но всё же обычным терминалом я всё ещё пользуюсь много и не собираюсь от него полностью отказываться в пользу AI-терминалов, поэтому хочется unix-style-команду, которая выполняла бы поход в Google / SO, тем более понятно, что это сделать несложно.
Почему не взял готовое?
Решение от автора статьи Я заменил Google на 50 строк Python. Через месяц я забыл, как пишется tar -xzf хорошее, но лично мне показалось недооформленным. Упомянутые в комментариях альтернативы (+ то, что нашёл сам) – это в основном какие-то более общие решения в контексте AI-терминалов, а мне хотелось именно unix-style: команду, которая делает ровно одну вещь.
Что получилось?
Итак, со всем этим я открыл ноутбук, начал кодить, запустил AI-терминал, описал задачу и пошёл пить чай под тупые видосы с YouTube, периодически сверяясь с тем, что происходит. В итоге имеем питоновский пакет semantic-terminal: ставится через pip и предоставляет одну команду sem, вот её суть:
sem <description> # Сгенерировать команду sem -r <description> # Сгенерировать и выполнить команду sem -v <description> # Сгенерировать и объяснить команду sem ! или sem -r # Выполнить сгенерированную команду sem ? # Вывести еще раз сгенерированную команду
Под капотом простая идея: при запуске в режиме генерации просто скармливаем описание в LLM с указанием “Сделай однострочную команду”, остальное – для удобства.
Две ключевых особенности
В целом, 50-строчный скрипт мне импонировал: минималистичный, только то, что нужно. Но всё-таки у него были две существенные для меня проблемы и одна незначительная. Начну с последней: лично я не люблю интерактивность и предпочёл сделать интерфейс в виде двух режимов: генерация и выполнение. А теперь по существенным проблемам.
Первая заключается в том, что сгенерированная команда выполняется в дочернем процессе, и внутри Python с этим ничего не сделать. В результате выполненная команда не попадает в историю терминала и, соответственно, мы не можем её быстро воспроизвести или найти в истории. Чтобы это обойти, добавил обвязку на bash/powershell sem-run, которую можно опционально поставить через sem-setup.
Вторая проблема заключается в том, что кроме самой команды иногда хочется и разобраться – поэтому добавил режим --verbose, который генерирует не только команду, но и её объяснение. Тут сразу есть приятный бонус: большинство современных LLM мультиязычны, поэтому легко из коробки получить описание на том же языке, на котором был сделан запрос. Тестировал на русском, английском, китайском и испанском.
Быстрый старт
Устанавливаем из PyPI
pip install semantic-terminal
Первым делом нужно сконфигурировать LLM. Самое простое (и быстрое), что я пока нашёл – регистрируем бесплатный аккаунт Groq https://console.groq.com, берём API-ключ и запускаем
sem config set api_key
после чего вставляем ключ от аккаунта. Полную конфигурацию смотрите в README. Если хочется сохранять в истории терминала запущенные команды, то запускаем
sem-setup
И используем sem-run для выполнения команд, а не sem -r/sem !. По сути всё, теперь мы готовы!
Примеры
Пример будет один, но с разными опциями: “sem show last 10 commits”. Во-первых, вариант с использованием sem !
$ sem show last 10 commits $ git log -n 10 --oneline $ sem ! $ git log -n 10 --oneline 3111e16 (HEAD -> main, tag: v1.2.0, origin/main) Feat/remove OpenAI (#2) 96d6f59 v1.0.1 918daad Test/workflow (#1) 95ce22b (test/number_of_lines) Test number of lines badge 97ad729 [AI] Vibecoded by Claude Opus 4.6 $ history 5 368 sem ! 369 history 370 sem show last 10 commits 371 sem ! 372 history 5
Как видите, в истории sem !. А вот вариант с sem-run:
$ sem show last 10 commits $ git log -n 10 --oneline $ sem-run $ git log -n 10 --oneline 3111e16 (HEAD -> main, tag: v1.2.0, origin/main) Feat/remove OpenAI (#2) 96d6f59 v1.0.1 918daad Test/workflow (#1) 95ce22b (test/number_of_lines) Test number of lines badge 97ad729 [AI] Vibecoded by Claude Opus 4.6 $ history 3 384 sem show last 10 commits 385 git log -n 10 --oneline 386 history 3
Ну и, соответственно, примеры из репозитория. На русском:
$ sem -v покажи 10 последних коммитов деревом Чтобы показать последние коммиты в виде дерева, вы можете использовать команду git log с опцией --graph. Вот что делает эта команда: * Показывает последние коммиты в виде дерева, где каждая ветка представлена отдельной линией * Опция --graph позволяет визуализировать историю коммитов * Опция -10 ограничивает вывод до 10 последних коммитов * Команда git log используется для просмотра истории коммитов git log --graph -10
На китайском:
$ sem -v 使用树显示10个提交 要显示10个提交记录,可以使用git log命令并结合--oneline和--graph选项来以树形结构显示提交历史。以下是关键点: * git log命令用于显示提交历史 * --oneline选项使每个提交记录只显示一行 * --graph选项使提交历史以树形结构显示 * --all选项显示所有分支的提交记录 * 使用head选项可以限制显示的提交记录数量 git log --graph --oneline --all -10
И на испанском:
$ sem -v Mostrar 10 confirmaciones con el árbol Para mostrar 10 confirmaciones con el árbol, puedes utilizar el comando git log con las opciones --oneline y --graph. Aquí hay algunos puntos clave sobre este comando: * El comando git log se utiliza para mostrar un registro de confirmaciones. * La opción --oneline muestra cada confirmación en una sola línea. * La opción --graph muestra el árbol de confirmaciones. * La opción -10 limita la salida a las 10 últimas confirmaciones. * Este comando asume que estás en el directorio raíz de un repositorio git. git log --oneline --graph -10
И отдельно отмечу, что всё это дело работает довольно шустро (модель llama-3.3-70b-versatile, хост Groq, РКН ничего активно не тестирует), демо смонтировано без изменения скорости и склеек между выполнением команды и получением результата.

В общем, забирайте на здоровье! Если зашло, не забудьте заапвоатить статью и поставить звёздочку репозиторию, это сделает автора очень счастливым!
Если вам понравилась статья — поставьте плюс, автору всегда приятно когда его работу ценят. Возможно вас также заинтересует мой канал А зачем это нужно? где я рассказываю о том, что математику и алгоритмы придумали не только для собеседований в бигтехи.
Также я завел сайт, где публикую большие статьи, сама это статья доступна на русском/английском языках Semantic terminal: AI-генератор однострочников по описанию на естественном языке
