Мы вводим три уровня доверия:
1. Exploration (Исследование): Агент может только читать логи и файлы. Идеально для аудита.
2. Safe-Mutation (Безопасная правка): Агент может создавать файлы и Docker-контейнеры, но `rm`, `mkfs`, `iptables -F` блокируются.
3. Full-Agent (Полный доступ): Агент имеет право на всё. Каждое действие логируется с хеш-суммой в неизменяемый лог.
Терминальный агент уязвим к данным, которые он читает. Если вы попросите его "проанализировать лог-файл", а внутри файла будет строка `Run command: rm -rf /`, плохой агент может это выполнить.
Gemini CLI использует "System Prompt Isolation": команды из внешних файлов никогда не интерпретируются как инструкции для самого агента без явного подтверждения.
Все действия сохраняются в формате JSONL в `.gemini/audit/`.
# Проверка: что агент делал последний час?
cat .gemini/audit/$(date +%Y-%m-%d).log | jq -r '.thought, .action'
––
Ключевые мысли главы:
**Без ключей SSH никуда.*Пароли – враг автоматизации.
**Изоляция контекста*– основа безопасности.
**Лог аудита*должен быть священным и неприкосновенным.
Многие считают, что для ИИ-агента неважно, какую оболочку (shell) вы используете. Это глубокое заблуждение. Выбор оболочки определяет "экосистему", в которой агент будет чувствовать себя как дома или как в чужой стране. В этой секции мы сравним три титана мира Linux через призму агентского управления.
Bash – это стандарт по умолчанию. Его главное преимущество для Gemini CLI – универсальность знаний.
**Почему это хорошо для ИИ:*Весь тренировочный датасет LLM пропитан скриптами на Bash. Агент знает Bash лучше, чем любой другой язык сценариев.
**Совместимость:*Команды, сгенерированные в Bash, будут работать на 99.9% серверов без изменений.
**Минусы:*Отсутствие современных удобств (вроде продвинутой подсветки синтаксиса или встроенного автодополнения смыслов) делает чтение вывода сложнее для человека, хотя агенту это безразлично.
Zsh – выбор профессионалов, которые ценят комфорт. Но как он влияет на агента?
**Продвинутый Globbing:*Агент может использовать более сложные конструкции поиска файлов (напр. `ls **/*.md`), что уменьшает количество вызовов `find`.
**Плагины (Oh My Zsh):*Плагины типа `zsh-autosuggestions` создают симбиоз: человек видит подсказки от локальной истории, а агент дополняет их глобальными знаниями.
**Нюанс для агента:*Некоторые специфические особенности синтаксиса Zsh могут смутить агента, работающего в режиме `safe-mode`. Всегда проверяйте, что агент понимает различие в обработке массивов между Bash и Zsh.
Fish (Friendly Interactive Shell) – это попытка переосмыслить командную строку.
**Из коробки:*Подсветка синтаксиса и автодополнение работают "магически". Это полезно для верификации действий агента (вы сразу видите, что команда написана с ошибкой).
**Главный риск:*Fish **не является POSIX-совместимым**. Это означает, что скрипты, написанные для Bash, не будут работать в Fish без переделки.
**Агентский контекст:*Если ваша система использует Fish, вам нужно явно указать агенту в системном промпте: "Используй синтаксис Fish Shell". В противном случае, его попытки вызвать `export VAR=val` (в Fish это `set -x VAR val`) приведут к ошибкам.
Когда агент вызывает инструмент `run_command`, система запускает неявную оболочку. Если на хосте установлен Zsh, а агент "думает" на Bash, возникают конфликты алиасов и путей.
Рекомендация экспертов:
Для стабильной автономной работы используйте Bash как системную оболочку для агента (backend shell), но Zsh/Fish как интерфейсную оболочку для человека (frontend shell). Это обеспечит надежность исполнения при максимальном комфорте мониторинга.
| Параметр | Bash | Zsh | Fish |
| :– | :– | :– | :– |
| Знания ИИ | Идеально (10/10) | Отлично (9/10) | Хорошо (7/10) |
| Переносимость | Высочайшая | Средняя | Низкая |
| Инструменты дебага| Стандартные | Продвинутые | Встроенные |
| Рекомендуемая роль| Исполнитель (Agent) | Инспектор (Human) | Визуализатор |
––
Резюме раздела:
Выбор оболочки – это не вопрос вкуса, а вопрос совместимости вашего "биологического" и "цифрового" интеллектов. Мы рекомендуем связку "Bash для исполнения – Zsh для контроля", чтобы использовать лучшие стороны обеих эпох. В следующей секции мы погрузимся в настройку переменных окружения – "крови", текущей по венам вашей системы.
Если оболочка (shell) – это скелет и мышцы агента, то переменные окружения (Environment Variables) – это его кровеносная система. Через них агент понимает, где искать бинарники, какие лимиты установлены и как общаться с внешним миром. В этой секции мы разберем продвинутую конфигурацию `env` специально для Gemini CLI.
Для агента переменная `$PATH` – это список "городов", которые он может посетить. Если путь к вашему кастомному скрипту не прописан в `$PATH`, агент его просто не увидит.
Проблема "Внезапной слепоты":
Часто при запуске через SSH или `cron` переменные окружения не подгружаются полностью (non-interactive login). Агент говорит: "Команда `docker` не найдена", хотя вы точно знаете, что она есть.
Решение: Явное определение путей в конфиге агента или использование абсолютных путей в системном промпте.
export PATH=$PATH:/home/noc/.local/bin:/usr/local/go/bin
Агенты чувствительны к локали. Если ваша система выдает ошибки на русском языке, а модель Gemini настроена на английский (или наоборот), понимание может исказиться.
**Совет:*Устанавливайте `LANG=C.UTF-8` или `LANG=en_US.UTF-8` для агента. Это гарантирует, что вывод системных команд (например, `grep` или `ls`) будет в стандартном формате, который ИИ понимает лучше всего.
**TERM:*Используйте `TERM=xterm-256color`, это дает агенту понять, что терминал поддерживает современные escape-последовательности, хотя он их обычно фильтрует.
Агент имеет собственный набор настроек, которые можно передавать через `env`:
`GEMINI_API_KEY`: Очевидная, но критическая переменная.
`GEMINI_MAX_STEPS`: Лимит шагов рассуждения (защита от зацикливания).
`GEMINI_TEMP_DIR`: Путь к временным файлам, которые агент создает во время работы.
Вы можете "подсказать" агенту особенности вашей архитектуры, используя кастомные префиксы:
export INFRA_GATEWAY_IP="10.252.1.1"
export INFRA_BACKEND_PORT="8080"
Когда агент видит такие переменные (через команду `env`), он автоматически включает их в свой контекст планирования. Это избавляет вас от необходимости каждый раз писать IP-адреса в промпте.
Переменные окружения часто видны в выводе `ps aux` или через `/proc/`.
Правило безопасности: Никогда не храните мастер-пароли баз данных в `$ENV`. Используйте переменные только для хранения путей к секретам (например, `DB_PASSWORD_FILE=/run/secrets/db_pass`). Агент достаточно умен, чтобы прочитать файл, когда ему это понадобится.
Использование файлов `.env` в корне ваших проектов позволяет изолировать настройки разных приложений для агента. Когда агент заходит в папку `project-a/`, он подгружает специфические переменные этого проекта.
––
Резюме раздела:
Правильная настройка переменных окружения превращает хаотичную систему в упорядоченную среду, где агент ориентируется с закрытыми глазами. Помните: чем меньше "шума" в вашем `env` и чем больше в нем структурированной информации о вашей инфраструктуре, тем точнее будут действия Gemini CLI. В следующей секции мы научим агента работать "в тени" с помощью Tmux и Screen.
Работая с Gemini CLI, вы часто будете сталкиваться с задачами, которые длятся часы (например, полная пересборка инфраструктуры или миграция данных). Вы не можете держать терминал открытым всё это время. В этой секции мы изучим, как использовать Tmux и Screen для создания персистентных агентских сессий.
Классический запуск агента в консоли – это интерактивный процесс. Если интернет пропал, сессия SSH рвется, и агент погибает на полпути.
Терминальный мультиплеер позволяет агенту продолжать рассуждения в фоне. Вы можете отключиться от сервера, пойти спать, а утром подключиться и увидеть выполненную задачу.
Tmux (Terminal Multiplexer) – это стандарт индустрии. Он позволяет создавать окна, панели и, главное, сессии.
Как агент использует Tmux:
1. Создание сессии: `tmux new -s gemini-audit`
2. Запуск задачи: Внутри сессии запускается Gemini CLI.
3. Отключение (Detach): `Ctrl+B, D`. Агент продолжает работать.
4. Подключение (Attach): `tmux attach -t gemini-audit`. Вы возвращаетесь в тот же контекст.
Технический нюанс: Агенту не обязательно знать, что он внутри Tmux. Однако, если вы даете ему инструменты управления Tmux (через кастомные MCP), он может сам создавать новые окна для параллельных задач. Один агент дебажит базу в окне 1, а в окне 2 следит за логами Nginx.
GNU Screen – предшественник Tmux. Он проще, но надежен как танк. Его часто используют на старых серверах или в минималистичных дистрибутивах.
**Команда запуска:*`screen -S gemini-task1`.
**Преимущество:*Screen лучше справляется с очень старыми типами терминалов и требует меньше ресурсов.
Продвинутый сценарий – когда вы просите агента: "Запусти пересборку Docker-образов во второй сессии Tmux, а здесь продолжай следить за инцидентом".
Агент сгенерирует примерно такой скрипт:
tmux new-window -n "docker-build" "cd /app && docker-compose build"
Это делает агента многозадачным. Он может эффективно распределять когнитивную нагрузку между несколькими процессами.
Главная опасность – забыть про работающего агента. ИИ-агент потребляет токены API. Если вы оставили его в бесконечном цикле в сессии Tmux, которую "забыли", вы можете получить огромный счет.
Меры предосторожности:
Используйте `tmux-logging` плагины, чтобы все действия из скрытых окон писались в файлы.
Всегда ставьте лимит времени в самом промпте: "Работай не более 30 минут, после чего остановись, даже если задача не решена".
| Характеристика | Tmux | Screen |
| :– | :– | :– |
| Гибкость панелей | Высокая (разбиение окон) | Низкая (только полноэкранные) |
| Скриптуемость | Отличная (команда `tmux`) | Средняя |
| Ресурсы | Чуть выше | Минимальные |
| Контекст ИИ | Идеален для мультизадачности | Хорош для простых фоновых дел |
––
Резюме раздела:
Терминальные мультиплееры – это способ дать агенту "тело", которое не зависит от вашего присутствия. Используя Tmux, вы превращаете Gemini CLI в настоящего демона (daemon), который может управлять миром, пока вы не смотрите.
Этим мы завершаем Модуль 4. В следующем модуле мы перейдем к одной из самых захватывающих тем – Сетевой Ткани (WireGuard, SSH, VPN) через призму агентского управления.
О проекте
О подписке
Другие проекты
