Перейти к содержанию

claude-code

Claude Code 2.1.288 вернёт промпт, стёртый по Ctrl+C

Claude News

Самое человечное исправление в Claude Code 2.1.288 спрятано в одной клавише. Если вы стёрли длинный запрос по Ctrl+C, нажмите стрелку вверх в пустой строке, и черновик вернётся вместе со вставленным текстом и картинками. Так сказано в списке изменений релиза на Github, и там же, через несколько строк, закрыта куда более серьёзная дыра в проверке опасного rm.

Коротко

  • В режиме bypassPermissions или под разрешающим правилом для shell опасный rm на / или домашнюю папку внутри bash -c или sh -c запускался без вопроса, а в 2.1.288 перед ним появится запрос.
  • /code-review принимает флаг --max-findings с числом или all и запоминает выбор до --max-findings default, а MCP-сервер, которому посреди вызова не хватило прав OAuth, вызовет запрос на повторную авторизацию.
  • Цена мелкая: первый запрос в новом окружении или после смены модели может подождать до 1,5 секунды, пока Claude Code получает серверные значения лимита вывода и окна автокомпакции.

Если вы не следили: по данным Truefoundry, в декабре 2025 года пользователь попросил Claude Code почистить пакеты в старом репозитории и получил команду rm -rf tests/ patches/ plan/ ~/. Хвостовой ~/ оболочка развернула в домашнюю папку целиком, с файлами рабочего стола, паролями Keychain и данными приложений. Там же пишут, что историю подхватил Simon Willison, а пост на Hacker News набрал 197 баллов и больше 156 комментариев.

Опасный rm внутри bash -c в bypassPermissions запускался без вопроса

Запись в списке изменений короткая: rm на / или на домашнюю папку внутри скрипта bash -c или sh -c выполнялся без подтверждения в режиме bypassPermissions или под разрешающим правилом для shell. Исправление привязано к issue #96300. Снаружи такая команда выглядит как обычный вызов оболочки, а разрушительная часть сидит в строке аргумента.

Рядом закрыты ещё две щели в проверке Bash. Присваивание BASHPID, значение которого оболочка вычислила бы как арифметику, раньше проходило молча, сейчас перед ним появляется запрос. Хуки PreToolUse и PermissionRequest пропускались, если их сопоставление падало или вход инструмента не удавалось сериализовать в JSON; в 2.1.288 такой вызов блокируется.

Есть и одно послабление. Heredoc без кавычек вокруг разделителя, например python3 <<EOF, в песочнице с auto-allow просил одобрения на каждом запуске, даже когда в теле был только обычный текст и простые ссылки $VAR. Такие запуски проходят без лишних вопросов.

Как устроена проверка, мимо которой прошёл rm

По данным Codepointer, каждый вызов инструмента идёт через конвейер правил: внутренняя функция hasPermissionsToUseToolInner() выносит вердикт allow, deny или ask, а внешняя hasPermissionsToUseTool() разрешает его с учётом контекста. Правила deny проверяются раньше режима, поэтому срабатывают даже в bypassPermissions. Там же пишут, что пути вроде .git/ и .bashrc требуют подтверждения и с --dangerously-skip-permissions: изменённый .bashrc выполнится при следующем открытии оболочки.

Самым сложным случаем Codepointer называет Bash: у каждого инструмента своя checkPermissions(), и для Bash она разбирает команду в синтаксическое дерево в поисках инъекций. Представьте охранника, который проверяет сумку, но не вскрывает запечатанную коробку внутри неё; bash -c и есть такая коробка, где настоящая команда лежит строкой. Сам режим обхода Truefoundry объясняет усталостью от подтверждений: рефакторинг десяти файлов даёт больше 30 запросов, и их одобряют не читая.

Неинтерактивные сессии и сабагенты продолжают ответ после таймаута API

Таймаут API посреди ответа раньше проваливал весь ход. В 2.1.288 неинтерактивные сессии и сабагенты продолжают с частичного ответа, а ответы, где была только фаза размышления, отправляются повторно. Длинные разговоры падали с ошибкой «Prompt is too long» вместо автокомпакции, если последний ответ сообщил нулевой расход токенов; это тоже исправлено.

Отдельный блок касается --resume. Возобновление иногда теряло файлы и контекст, которые компакция только что вернула, не сохраняло последний ответ хода, читало обрезанный транскрипт, если сессия переписывала файл во время загрузки, и выбрасывало прежние размышления модели в разговорах, начатых на 2.1.286 или раньше. В issue на GitHub против версии 2.1.153 описан похожий сбой: пустые блоки размышлений с сохранённой подписью навсегда ломали возобновление ошибкой 400.

Для автономных запусков с CLAUDE_CODE_RETRY_WATCHDOG закрыт сценарий, когда после сбоя очень длинного стрима повторы шли часами: Claude Code стримит заново и сдаётся после трёх таймаутов. Лимит времени фоновых команд действует только в unattended-сессиях (-p, Agent SDK, CI, облако), в терминале, десктопном приложении и VS Code его нет.

Ответ MCP-сервера больше 16 МБ мог запустить инструмент дважды

Вызовы MCP-инструментов иногда выполнялись дважды, если результат удалённого сервера был больше 16 МБ или не разбирался. Если MCP-сервер посреди вызова просит расширить OAuth-права, Claude Code предложит авторизоваться заново. URL-запросы от серверов, которые не умеют сообщать о завершении, ждут кнопки «I'm done, continue», чтобы вы успели закончить в браузере.

Запросы к LSP висели бесконечно, если языковой сервер использовал динамическую регистрацию возможностей или переставал отвечать; сейчас они обрываются через 60 секунд, а requestTimeout задаётся для каждого сервера. /code-review получил --max-findings с числом или all, и выбор держится, пока вы не передадите --max-findings default. По данным Claude-world, MCP OAuth чинили и раньше: в v2.1.74 от 12 марта 2026 года исправляли зависания и обработку refresh-токенов.

В заметках не сказано, с какой версии rm внутри bash -c проходил без подтверждения и задело ли это кого-то на практике. Задержка до 1,5 секунды на первом запросе в новом окружении или после смены модели кажется мелочью, но в CI окружение каждый раз свежее, и платить её, вероятно, придётся на каждом прогоне. На наш взгляд, страннее всего молчаливая подмена: клиентский классификатор auto mode игнорирует закреплённые в ANTHROPIC_DEFAULT_SONNET_MODEL Sonnet 5.5 и Opus 5.5 и берёт Claude Sonnet 5, причину заметки не объясняют.

Когда исчезнет claude project purge

Команда claude project purge переименована в claude purge. Старое имя пока работает и печатает уведомление, но срок, после которого его уберут, в заметках не назван, так что скрипты лучше поправить заранее. После обновления стоит заглянуть и в /autocompact: окно автокомпакции хранится отдельно для каждой модели, и при переключении каждая модель сохраняет свою настройку.

Читайте также

  1. На модах Claude Code Anthropic собрала /diff и AGENTS.md
  2. Claude Code 2.1.286 считает стопку запросов на разрешение
  3. Claude Code научился собирать тесты для ваших приложений
  4. В проекте без CLAUDE.md Claude Code 2.1.277 читает AGENTS.md
  5. Шлюз узнает, какой агент Claude Code прислал запрос
  6. Плагины Claude Code теперь можно прогнать через тесты

Комментарии

Пока никто не написал. Будьте первым.

Присоединяйтесь к разговору

Войдите через Google, чтобы оставить комментарий. Имя и аватар подставятся из вашего профиля Google, а комментарий появится после модерации.

Из Google мы используем только имя и аватар. Почту не сохраняем.