Автоматический режим Claude Code теперь ловит rm -rf с пустой переменной
Релизы 28-й недели Claude Code (v2.1.202-v2.1.206, с 6 по 10 июля 2026 года) учат автоматический режим останавливаться перед rm -rf, путь которого получен из переменной, развернувшейся в ничто, закрывая классическую ловушку rm -rf /.
Каждый, кто пишет shell-скрипты, видел эту катастрофу: строка очистки вроде rm -rf "$BUILD_DIR/bin", где $BUILD_DIR так и не была задана, поэтому команда тихо разворачивается в rm -rf /bin. Релизы 28-й недели Claude Code (с v2.1.202 по v2.1.206, опубликованные с 6 по 10 июля 2026 года) добавляют защиту именно для этого случая в автоматическом режиме: агент теперь останавливается и спрашивает перед выполнением rm -rf, целевой путь которого был построен из переменной, развернувшейся в ничто.
Почему агент попадается на это чаще, чем вы
Вы пишете разрушительную команду один раз и проверяете её глазами. Агент в автоматическом режиме собирает shell на ходу, часто повторно используя переменную, которую задал три хода назад. Если предыдущий шаг завершился неудачей и оставил эту переменную пустой, опасность не в том, что модель намеренно наберёт rm -rf /. Она в том, что модель наберёт нечто, что выглядит ограниченным и безопасным, а shell превратит это в удаление на корневом уровне в момент разворачивания.
# The agent set this earlier, but the step that populated it failed
BUILD_DIR=""
# Looks scoped. Expands to: rm -rf /bin
rm -rf "$BUILD_DIR/bin"
# Same trap with an unset var under `set -u` off
rm -rf $ARTIFACTS_DIR/*
Классификатор автоматического режима теперь исследует развёрнутую команду, а не только буквальный текст, который вы увидели бы в транскрипте. Когда путь, который rm -rf вот-вот удалит, восходит к пустой или неразрешённой переменной, агент останавливается и представляет его вам на утверждение вместо выполнения.
Намерение, а не полный запрет
Это та же линия проектирования, которую Claude Code провёл в v2.1.183, которая заблокировала разрушительные команды Git и IaC, которые агент решал выполнить самостоятельно. Намеренный rm -rf ./build, о котором вы попросили, по-прежнему выполняется без вопросов. Защита срабатывает в конкретном случае, когда развёрнутая цель гораздо шире намерения, потому что переменная оказалась пустой.
До 28-й недели автоматический режим оценивал rm -rf "$BUILD_DIR/bin" по поверхностной строке, которая читается как узкое, локальное удаление. После неё проверка происходит против того, что shell на самом деле удалит, поэтому пустая $BUILD_DIR превращает зелёный свет в вопрос.
Остальное из 28-й недели
Тот же набор релизов усиливает автоматический режим против подмены транскрипта (агент больше не может тихо переписывать собственную историю сессии), превращает /doctor в полную проверку настройки, которая диагностирует и может исправлять проблемы, с /checkup в качестве псевдонима, и переделывает представление claude agents так, что каждая строка показывает цветное слово состояния и заголовок, написанный классификатором, вместо сырого вывода инструментов. Настольное приложение на этой неделе также получило встроенный браузер, поэтому Claude может открывать документацию и макеты так же, как уже управляет предпросмотрами вашего локального сервера разработки.
Если вы запускаете агентов в автоматическом режиме против реальных репозиториев или CI-проверок, это та защита, которую вы замечаете только в тот день, когда она вас спасает. Полные заметки есть в changelog Claude Code.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.