Как запускать AI-агентов в терминале: реальный опыт с Codewhale и Comanda
Я — Denis Shokhirev, архитектор агентных AI-систем во Фрайбурге, Германия. Мой стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. Недавно я поймал баг: агент, который должен был автоматически обновлять конфиги в терминале клиента, зависал из-за неправильной обработки stderr. Почему терминальный запуск — не просто игрушка В DACH клиенты часто требуют прозрачности и контроль: не просто “AI где-то в облаке”, а агент, который реально работает в командной строке, с логами, аудитом и возмо
Я — Denis Shokhirev, архитектор агентных AI-систем во Фрайбурге, Германия. Мой стек: Claude, Supabase, n8n, Doppler, self-hosted Postgres. Недавно я поймал баг: агент, который должен был автоматически обновлять конфиги в терминале клиента, зависал из-за неправильной обработки stderr.
Почему терминальный запуск — не просто игрушка
В DACH клиенты часто требуют прозрачности и контроль: не просто “AI где-то в облаке”, а агент, который реально работает в командной строке, с логами, аудитом и возможностью мгновенного отката. Для этого я внедрил Codewhale и Comanda — реальные CLI-инструменты для запуска LLM-агентов прямо в терминале.
Структура агентной CLI: что реально работает
Codewhale, Comanda и мой стек
Codewhale — CLI-обёртка для LLM-агентов, которая позволяет запускать инструкции, писать код, тянуть документацию прямо из терминала. Comanda — фреймворк для гибкого управления пайплайнами в shell. Для production я всегда оборачиваю эти агенты в sandbox через Docker или chroot, чтобы минимизировать риски.
Сравнение CLI-стека
| Инструмент | Главная задача | Где подходит | Минусы |
|---|---|---|---|
| Codewhale | Генерация/исправление кода, документация | DevOps, быстрая автоматизация | Бывает нестабильным с большими файлами |
| Comanda | Оркестрация shell-команд, пайплайны | CI/CD, автоматизация тестов | Требует настройки безопасности |
| n8n | Воркфлоу-автоматизация | Интеграция API, ETL | Не CLI, мало контроля на низком уровне |
Безопасность: почему AI-агенты в терминале — это риск
Я трижды встречал одну и ту же уязвимость: LLM-агент генерирует shell-команду, которая не фильтрует пользовательский input. Например, генерация следующего скрипта:
#!/bin/bash
read -p "Введите имя файла: " filename
cat $filename
Если пользователь введёт ; rm -rf /, агент выполнит это. Решение — обязательный static code analysis на каждую сгенерированную команду через semgrep:
semgrep --config=auto --lang=bash ./generated_script.sh
По данным OWASP (2023), 52% инцидентов в CLI-автоматизации связаны с неправильно обработанным input (OWASP Top Ten).
Sandbox, rate limit и audit
- Каждый агент работает в Docker-контейнере с read-only root.
- Входные данные валидируются через custom Python-фильтры.
- Все команды логируются в Postgres через Supabase для аудита.
- n8n запускает пайплайны только с whitelist-команд.
Реальные примеры: что летит, а что падает
Успешный кейс: автоматизация миграций
Я настроил агента на Codewhale, который по задаче клиента генерирует миграцию для базы — и сразу валидирует её через psql --check, а затем запускает ручной diff:
codewhale "Создать миграцию для добавления поля email"
psql --dbname=clientdb --file=generated_migration.sql --check
diff schema_before.sql schema_after.sql
Результат — за 30 минут сгенерирована и проверена миграция, без вылета в проде.
Провал: неправильная обработка stderr
Агент генерировал shell-команду для копирования логов, но не обрабатывал stderr. В результате при ошибке пайплайн зависал на 18 минут — пока не вмешался вручную. Решение: всегда явно перенаправлять stderr в отдельный лог-файл и анализировать его отдельным агентом.
cp logs/*.log /backup/ 2> error.log
if [ -s error.log ]; then
cat error.log | codewhale "Объясни ошибку"
fi
Интеграция с Supabase и n8n: хранение и аудит
Все логи агентов пишу в Supabase через REST API, чтобы клиент мог посмотреть историю команд. n8n оркестрирует пайплайны и следит за таймаутами: если агент не отвечает 120 секунд — автокилл и алерт в Slack.
FAQ
Почему не запускать агента только в облаке?
В некоторых проектах требуется прозрачность и контроль: заказчик хочет видеть, что делает агент в их инфраструктуре, а не “где-то в API”. Терминальный запуск — проще для аудита и отката.
Какой минимальный стек для запуска агента?
Codewhale или Comanda, Docker для sandbox, Supabase для логов, n8n для оркестрации. Всё остальное — опционально.
Можно ли запускать несколько агентов в одном терминале?
Да, через tmux или отдельные Docker-контейнеры. Но аудит тогда усложняется — нужен уникальный trace id для каждой сессии.
Как валидировать сгенерированный код?
Минимум — semgrep или bandit по каждому скрипту. Для Python — ещё и gitleaks для поиска ключей.
Что делать при сбое агента?
n8n ловит таймаут, отправляет алерт, логи доступны через Supabase. В критических случаях — ручной откат через сохранённые снапшоты.
В какой части вашего пайплайна чаще всего “сыпется” агент в проде: input sanitation, обработка ошибок, или аудит логов? Напишите — разберём с кейсами. Я бесплатно провожу 30-мин аудит стека для DACH-команд, которые строят AI в сложных рынках. Пишите в LinkedIn или на @ger_dennis_ai.
Превратить процесс в систему, которая работает
Продакшн-качество, а не демо.