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

Claude Code

Claude Code 2.1.312 перестал затирать большие CLAUDE.md

5 мин чтения

Наш ИИ-аналитик сам проверил эту историю: запускал, считал, сверял с оригиналами. Что мы проверили

Текст написан ИИ-моделью по источникам, на которые ведут ссылки, и сверен с ними второй моделью. Как мы работаем

Всё о теме: Claude Code: версии и изменения →

Anthropic в Claude Code 2.1.312 от 27 октября исправила ошибку: Claude мог перезаписать очень большой CLAUDE.md, файл правил или подключённый через @ файл в подкаталоге, хотя видел только его начало. Как сказано в заметках к релизу на GitHub, инструмент Write в таком случае просит Claude дочитать файл целиком или править его на месте. На Bedrock, Vertex, Foundry и Mantle после обновления короткий системный промпт получают имена моделей, которых Claude Code не знает, например собственные имена деплоев и ARN профилей инференса, даже если за ними стоит Sonnet или Haiku. Полный промпт возвращает CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0.

Кого касается короткий промпт

Под изменение попадают команды, которые обращаются к модели через облачного провайдера под своим именем деплоя или через ARN профиля инференса. Такие имена Claude Code считает нераспознанными и с 2.1.312 отдаёт им короткий системный промпт, какая бы модель ни стояла за ними. По коду 2.1.312, который мы разобрали, переменная CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT проверяется раньше любой проверки модели: со значением 0 промпт будет полным при любом имени.

Та же граница сдвинулась и для автоматической смены модели после помеченного сообщения: переключение распространили на нераспознанные имена, включая имена деплоев. Отключает его CLAUDE_CODE_DISABLE_REFUSAL_FALLBACK=1. Модель для переключения Claude Code выбирает по семейству из ANTHROPIC_DEFAULT_OPUS_MODEL, ANTHROPIC_DEFAULT_SONNET_MODEL и ANTHROPIC_DEFAULT_HAIKU_MODEL, если они заданы. Всю цепочку выбора мы не прослеживали.

Обе переменные описаны только в заметках к релизу. На страницах документации о настройках, Amazon Bedrock и конфигурации моделей 28 октября их не было.

Большие CLAUDE.md и правила

По документации Claude Code, CLAUDE.md из подкаталога загружается по требованию: когда Claude читает, пишет или правит другой файл в этом подкаталоге. Чтением считается и cat или head одного файла через Bash. Так же подгружаются @-импорты этого файла, правила из .claude/rules/ подкаталога и правила, привязанные к путям. Если файл больше лимита, Claude получает только его начало и пометку о том, что остальное нужно дочитать через Read.

Порог мы нашли в той же документации: 40 000 символов при контекстном окне 200K, а при окне 1M - 200 000 символов на Claude Opus 4.6 и Claude Sonnet 4.6 и 150 000 на более поздних моделях. Лимит действует с v2.1.309, до неё файлы, которые загружаются по требованию, не обрезались. По нашему прочтению, новая защита в Write закрывает как раз это обрезанное состояние: документация описывает обрезку, а заметки к релизу - перезапись.

Рядом исправили ещё одну ошибку с подкаталогами: навыки, привязанные к каталогу или к путям через paths:, не находились после того, как Bash делал cd глубже в git-репозиторий.

Хуки, телеметрия и вход в VS Code

Хуки типа prompt и agent ограничили: в одной сессии, включая субагентов, одновременно работают не более 24, плюс до 12 тех, что ждут дольше тайм-аута своего события. Тайм-аут меньше секунды считается за секунду. В коде эти числа заданы константами, ограничитель действует только на хуки prompt и agent, а в 2.1.311 его не было.

У субагента autoCompactWindow начал работать вместе с CLAUDE_CODE_AUTO_COMPACT_WINDOW: он может уменьшить окно автосжатия, заданное переменной, а раньше в таком сочетании ни на что не влиял. Увеличить это окно он по-прежнему не может.

Событие OpenTelemetry claude_code.safety_event Claude Code перестал отправлять всего через пять версий после того, как оно появилось в 2.1.307. Поле mcp_server.name для удалённых MCP-серверов с фиксированным URL, которые объявлены плагинами из официального маркетплейса Anthropic, показывает настоящее имя сервера вместо custom. Спиннер, значения effort в OpenTelemetry и транскрипты показывают уровень, который реально действует, хотя раньше в них попадал только что выбранный посреди задачи уровень, ещё не применённый моделью.

Что ещё есть в списке изменений:

  • в шлюзе Claude apps появился oidc.user_id_claim: людей можно опознавать по другому полю id_token вместо sub, например по oid из Microsoft Entra ID;
  • после входа из расширения VS Code управляемые настройки и политика организации не загружались до конца сессии, это исправлено;
  • в VS Code сессия, которая не смогла загрузить настройки организации, завершалась с одним кодом выхода, а вкладка теперь объясняет причину и предлагает Retry или Sign in again;
  • в полноэкранном режиме клик по подсказке «to send now» под сообщением в очереди отправляет его сразу, как и клавиша;
  • команда с недопустимым именем мешала загрузке всех команд, из-за чего claude -p мог ничего не вывести;
  • пятичасовое окно в сообщениях о лимитах называется «5-hour limit» вместо «session limit»;
  • Code Review проверял устаревший коммит или не проверял ничего, если GitHub присылал push-событие с опозданием, а теперь берёт текущий коммит пул-реквеста.

Авторский разбор

Что мы проверили

28 октября мы сравнили сборки Claude Code 2.1.311 и 2.1.312, включая npm-обёртку, и сверили их с документацией.

Как мы проверяем истории

В главном заметки к релизу подтвердились, но два пункта в коде устроены иначе, чем звучат. Событие телеметрии о срабатываниях проверок безопасности не удалено: его выключили значением флага по умолчанию, а код отправки остался. Нераспознанное имя модели в коде определяется проверкой подстрок, поэтому имя деплоя, где прямо написано sonnet или haiku, под новое правило может не попасть.

  • В sdk-tools.d.ts у результата AskUserQuestion появилось поле unanswered со значениями skipped, replied_in_chat и dismissed. Оно заполняется только в сессии, которая объявляет возможность ask_user_question_unanswered_v1. В заметках к релизу его нет.
  • Отправку claude_code.safety_event решает флаг tengu_snoopy_creek: в 2.1.311 по умолчанию он был true, в 2.1.312 стал false. Сам отправитель и места вызова не изменились. Мы делаем вывод, что событие можно включить обратно без нового релиза, но такого переключения не наблюдали. Документация по мониторингу 28 октября всё ещё описывала событие как действующее с v2.1.307.
  • Знакомым в 2.1.312 считается имя, которое нашлось в каталоге моделей, содержит claude-3-, haiku или sonnet либо совпадает с одним из имён от claude-opus-4-0 до claude-opus-4-7. В 2.1.311 судьбу остальных имён решала отдельная ветка, в 2.1.312 её удалили. Отсюда наш вывод по скомпилированному коду: Bedrock-идентификатор или ARN со словом sonnet или haiku на этом шаге остаётся знакомым, а ARN профиля инференса с непрозрачным id и имя деплоя без этих слов - нет. Что делает с именем нормализация перед проверкой, мы не отследили. Кроме того, в коде есть запрос GetInferenceProfile с тайм-аутом 8 секунд, который выясняет модель за профилем, но к выбору промпта мы его не привязали. Для имён, не прошедших проверку, по коду полный промпт возвращает только CLAUDE_CODE_SIMPLE_SYSTEM_PROMPT=0.

Claude Code

Claude Code и две бесплатные модели не сошлись на Next.js

Heroku агенты брали для Python в 14 из 30 запусков, а для Next.js ни разу из 29, и так у всех: Claude Code, DeepSeek и GLM. На Next.js те же модели не сошлись в главном выборе ни в одной из трёх категорий. Куда вы деплоите проекты, которые собрал агент?

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

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

Войдите, чтобы оставить комментарий. Он появится после модерации.