- Главная
- Искусственный интелект
- Запуск Bash-команд: как это делает агент
Запуск Bash-команд: как это делает агент
Мы научились откатывать изменения, которые агент вносил через git, — но сам процесс оставался за кадром. Любое действие агента в проекте в итоге сводится к командам оболочки: он запускает тесты, смотрит файлы, коммитит и устанавливает пакеты. В этом уроке разберём, как агент выполняет Bash-команды: что происходит в момент запуска, какие команды безопасны, а какие требуют вашего контроля, и как не потерять управление процессом.
Почему Bash — главный инструмент агента
Именно поэтому агент и оболочка неразделимы: без Bash агент умел бы только редактировать текст, но не мог бы проверить, работает ли код. Вся обратная связь — ошибки, результаты тестов, версии пакетов — приходит через вывод команд. Умение контролировать этот канал означает контроль над всем, что агент делает в вашей системе.
- Чтение системы. ls, cat, git status — агент изучает проект и среду.
- Проверка работы. Запуск тестов, линтеров и сборки после изменений.
- Изменение состояния. Установка пакетов, миграции, git-операции.
- Восстановление. Откаты, очистка, перезапуск сервисов.
Как выглядит запуск команды
bash или shell), который harness предоставляет агенту.Процесс всегда одинаков и состоит из трёх шагов: агент формирует команду, harness выполняет её в оболочке, агент получает вывод и решает, что делать дальше.
Агент формирует команду → harness запускает её в Bash
→ агент получает stdout, stderr и код возврата
→ агент анализирует результат и продолжает работу
Ключевая деталь — код возврата (exit code). Программа завершается с числом: 0 означает успех, любое другое значение — ошибку. Агент видит не только текст вывода, но и этот код, поэтому он «знает», завершилась ли команда удачно, даже если текст вывода этого прямо не говорит.
Stdout, stderr и код возврата
Вывод команды делится на два потока: stdout — обычный результат (список файлов, вывод тестов) и stderr — сообщения об ошибках. Оба потока агент получает целиком и рассматривает вместе с кодом возврата. Понимание этой триады помогает читать логи агента: если код возврата 0, но в stderr есть предупреждения — команда прошла, но на что-то обратила внимание.
Какие команды агент запускает обычно
В типовой сессии агент выполняет однотипный набор команд. Полезно знать его заранее, чтобы не удивляться каждому запуску и быстро замечать что-то необычное.
- Просмотр.
ls,cat,head,grep— чтение файлов и структуры проекта. - Статус.
git status,git diff,git log— понимание текущего состояния. - Проверка. Запуск тестов, линтеров, компиляторов и сборки.
- Зависимости. Установка и обновление пакетов менеджером зависимостей.
- Служебные.
pwd,echo,touch,mkdir— мелкие операции с файлами. - Git-операции.
add,commit,checkout— фиксация и откат изменений.
Большинство этих команд безопасны: они читают данные или меняют только файлы проекта. Проблемы начинаются там, где команда затрагивает систему за пределами проекта — и вот эти команды нужно уметь распознавать.
Опасные команды и как их распознавать
Опасность команды определяется не длиной, а тем, что она может изменить. Одна и та же команда может быть безобидной в одной ситуации и разрушительной в другой. Поэтому важнее не заучивать «чёрный список», а научиться насторожиться, когда агент предлагает команду определённого типа.
| Признак опасности | Пример |
|---|---|
| Удаление без возможности отката | rm -rf (удаление папки целиком) |
| Переписывание истории | git reset --hard, git push --force |
| Изменение прав и системы | sudo, chmod, установка глобальных пакетов |
| Затрагивание чужих данных | Команды, работающие вне рабочей директории |
| Массовые операции без предпросмотра | find -delete, скрипты с подстановками |
Правило простое: команда опасна, если её последствия нельзя легко отменить. Удаление, перезапись, изменение прав и работа вне проекта — всегда повод остановиться и проверить. Безопасность здесь строится не на доверии к агенту, а на контроле конкретной команды перед её запуском.
Контроль запуска команд
Хороший harness не даёт агенту молча выполнять всё подряд: перед запуском команда показывается вам, и вы решаете, разрешить её или нет. Это и есть разрешения (permissions). Уже сейчас важно понять механику: агент предлагает команду, вы видите её до выполнения.
- Предпросмотр. Команда отображается до запуска — вы успеваете её прочитать и оценить.
- Разрешить или отклонить. Вы выбираете, запускать команду или нет, и можете попросить изменить её.
- Автозапуск безопасных. Частые безобидные команды (
git status, запуск тестов) можно разрешить без вопросов. - Запрет опасных. Команды из «опасной» категории можно запретить совсем или требовать подтверждение каждый раз.
Главный навык — читать команду до запуска, а не после. Взгляните на команду, которую предлагает агент, и задайте один вопрос: «что будет, если эта команда выполнится не так, как задумано?» Если ответ вас не устраивает — не запускайте, а попросите безопасный вариант.
Просите агента показывать команду до запуска, если harness сам этого не делает: «покажи команду, которую собираешься выполнить, перед запуском». Это превращает Bash-инструмент из «чёрного ящика» в понятный процесс: вы видите каждую команду заранее, как будто агент спрашивает разрешения вручную. Особенно полезно для git-операций и установки пакетов.
Вывод команд и контекст
У каждой команды есть скрытая цена, о которой легко забыть: её вывод попадает в контекст сессии и занимает токены. Чем длиннее вывод — тем больше контекста он съедает, а переполненный контекст — прямая дорога в Dumb Zone из урока 13.
| Команда | Сколько контекста занимает вывод |
|---|---|
| git status | Почти ничего — несколько строк |
| Запуск небольшого теста | Мало — пара десятков строк |
| Полный лог сборки | Много — сотни строк, большая часть — шум |
| cat огромного файла | Очень много — файл целиком попадает в контекст |
Из этого следует практический вывод: не позволяйте агенту вываливать в контекст всё подряд. Длинный вывод стоит токенов, даже если вы его не читаете, — он просто занимает место в сессии и приближает границу Smart Zone. Чем аккуратнее команды, тем дольше живёт сессия.
Учите агента смотреть на код выборочно: вместо cat всего файла — «покажи только функцию registerUser», вместо полного лога — «покажи последние 20 строк и ошибки». Ограничение вывода команд — один из самых простых способов экономить контекст: вы получаете ту же информацию, а сессия остаётся в Smart Zone заметно дольше.
Что делать, когда команда не работает
Команды иногда падают — и это нормальная часть работы. Агент видит код возврата и stderr, поэтому он сам замечает ошибку и обычно пытается исправить её. Ваша задача — не паниковать, а понять, почему команда не сработала, и решить, пускать ли агента на вторую попытку.
- Ошибка окружения. Не установлен пакет, нет прав, занят порт — часто лечится одной командой.
- Ошибка в команде. Опечатка, неверный путь — агент сам увидит это в
stderrи поправит. - Повторные попытки. Агент может запускать одну команду несколько раз — убедитесь, что он меняет подход, а не долбит в ту же стену.
- Таймаут. Долгие команды (сборка, установка) могут превышать лимит — разрешите повторный запуск или разбейте команду на части.
Полезный приём — просить агента объяснять, что пошло не так. Одна фраза «что говорит вывод ошибки?» перед повторным запуском экономит ходы: агент анализирует stderr и приходит к решению, а не гадает. Помните и об обратной стороне: команды, которые «висят» или повторяются бесконечно, — сигнал остановиться и переформулировать задачу, а не давать агенту бесконечные попытки.
Итоги
Контроль строится на трёх вещах: предпросмотр команды перед запуском, понимание, какие команды опасны, и учёт того, что вывод команды занимает контекст. Освоив эти три уровня, вы получаете агента, который работает быстро, но никогда не действует «втихую».
В следующем уроке разберём разрешения (permissions): как настроить права агента так, чтобы безопасные команды выполнялись без вопросов, а опасные — только с вашего явного согласия.
Глоссарий
- Bash — командная оболочка, программа, выполняющая текстовые команды в системе.
- Оболочка (shell) — среда для запуска команд и программ, синоним Bash в контексте курса.
- Команда — текстовая инструкция, которую выполняет оболочка.
- Инструмент bash — механизм harness, через который агент запускает команды оболочки.
- Stdout — стандартный поток вывода: обычный результат команды.
- Stderr — стандартный поток ошибок: сообщения об ошибках и предупреждения.
- Код возврата (exit code) — число, с которым завершается команда: 0 — успех, иное — ошибка.
- Предпросмотр команды — отображение команды пользователю до её запуска.
- Разрешение (permission) — право, которое пользователь даёт агенту на выполнение команды.
- Таймаут — ограничение времени выполнения команды.
- Harness — программа-оболочка, через которую агент выполняет команды и управляется пользователем.
- Контекст — информация, доступная агенту в текущей сессии, ограниченная объёмом токенов.
- Dumb Zone — состояние сессии, в котором переполненный контекст снижает качество рассуждений агента.
- Smart Zone — продуктивная зона сессии, в которой агент рассуждает качественно.