Claude Code v2.1.73-74 — утечка на 18 ГБ/час закрыта, корпоративные провайдеры через modelOverrides и /context, который сам говорит, где жмёт контекст
Claude Code v2.1.73-74 — утечка на 18 ГБ/час закрыта, корпоративные провайдеры через modelOverrides и /context, который сам говорит, где жмёт контекст
Два патча за два дня — 11 и 12 марта. По отдельности каждый выглядит как рутинный багфикс. Вместе — это закрытие одной из самых болезненных проблем Claude Code (утечка памяти, превращавшая ноутбук в обогреватель), новые корпоративные фичи и первый шаг к тому, чтобы CLI сам подсказывал, как не сжигать токены.
TL;DR: v2.1.73 добавляет
modelOverridesдля маппинга моделей на кастомных провайдеров (Bedrock, Vertex, Foundry) и фиксит CPU-фризы на permission промптах. v2.1.74 закрывает утечку памяти в 18 ГБ/час на Node.js, добавляет actionable-подсказки в/contextи настройкуautoMemoryDirectory. Если сидишь на v2.1.71 и раньше — обновляйся прямо сейчас.
Утечка в 18 ГБ/час — что происходило и как починили
Начнём с главного. С версии ~2.1.17 пользователи Claude Code на Node.js/npm сборке наблюдали катастрофическую утечку памяти: ArrayBuffer'ы от streaming API ответов не освобождались при досрочном завершении генератора. Результат — RSS процесса рос на ~26 МБ в секунду, то есть примерно 92 ГБ/час в теории, а на практике система становилась неюзабельной за 2-3 минуты.
Вот что показывал heap snapshot на v2.1.71:
- ArrayBuffer — 9 710 экземпляров, 2.56 ГБ, 85% heap'а
- Response — 4 экземпляра, 378 МБ, 13% heap'а
- Всё остальное — пыль
Проблема: streaming-чанки от API аллоцировались как ArrayBuffer по ~262 КБ каждый и никогда не попадали под garbage collection, потому что генератор держал ссылку. Когда ты прерывал запрос (Ctrl+C, смена контекста, timeout) — буферы оставались висеть в памяти навечно.
В v2.1.74 буферы теперь корректно освобождаются при досрочном завершении генератора. Фикс касается только Node.js/npm code path — если используешь нативный бинарник, у тебя была другая, менее критичная версия этой проблемы.
modelOverrides — подключаем Bedrock и Vertex без костылей
До v2.1.73 использовать Claude Code с кастомными провайдерами (Amazon Bedrock, Google Vertex AI, Microsoft Foundry) было возможно, но модельный picker не знал о твоих inference profile ARN'ах. Приходилось задавать переменные окружения и мириться с тем, что UI показывает одно, а под капотом работает другое.
Теперь в settings.json (user или local) можно прописать:
{ "modelOverrides": { "opus": "arn:aws:bedrock:us-east-1:123456789:inference-profile/opus-custom", "sonnet": "arn:aws:bedrock:us-east-1:123456789:inference-profile/sonnet-custom", "haiku": "us.anthropic.claude-haiku-4-5-v1" } }
Выбираешь "opus" в picker'е — под капотом уходит запрос на твой Bedrock ARN. Никаких переменных окружения, никаких скриптов-обёрток.
Бонус из того же релиза: субагенты с shorthand-именами (opus/sonnet/haiku) больше не даунгрейдятся молча на более старые версии моделей на Bedrock, Vertex и Foundry. Раньше ты мог думать, что агент работает на Opus 4.6, а по факту получать Opus 4.5 — и узнать об этом только по качеству ответов.
/context теперь говорит, что именно жрёт токены
Команда /context существовала и раньше — она показывала breakdown использования контекстного окна. Но в v2.1.74 её радикально улучшили: теперь она не просто показывает цифры, а даёт actionable-рекомендации.
Три категории подсказок:
- Context-heavy tools — какие MCP-серверы и инструменты съедают больше всего контекста. Типичный сценарий: ты подключил 5 MCP-серверов, из которых реально используешь 2, а остальные 3 жрут по 5-10К токенов каждый просто на описание схемы
- Memory bloat — раздутые CLAUDE.md или auto-memory файлы, которые загружаются в каждую сессию
- Capacity warnings — предупреждения о приближении к лимиту с конкретными шагами: "отключи такой-то MCP-сервер", "запусти /compact", "вынеси такие-то инструкции в skills"
Для тех, кто платит за токены (а это все, кроме Max-подписчиков) — это прямая экономия денег. Один лишний MCP-сервер в контексте может стоить $0.03-0.10 на каждый запрос, а за рабочий день набегает.
autoMemoryDirectory — кастомная папка для авто-памяти
По умолчанию авто-память хранится в ~/.claude/projects/<project>/memory/. Для большинства это нормально, но есть сценарии, когда нужно другое расположение:
- Синхронизация памяти между машинами через облачную папку
- Хранение на быстром SSD вместо сетевого диска
- Разделение памяти между разными окружениями одного проекта
Теперь в user или local settings:
{ "autoMemoryDirectory": "~/Dropbox/claude-memory/my-project" }
Важный нюанс: настройку нельзя задать в project settings (.claude/settings.json). Это сделано специально — чтобы злонамеренный .claude/settings.json в чужом репозитории не мог перенаправить запись памяти в произвольную директорию.
Что ещё починили в v2.1.73-74
Безопасность: managed policy с правилами ask можно было обойти через user-level allow правила или allowed-tools в скиллах. Починено — managed policy теперь всегда имеет приоритет. Для корпоративных деплоев это критически важно: IT-отдел задаёт правило "спрашивать перед удалением файлов", а разработчик не может молча переопределить его в своих настройках.
Model ID в агентах: полные model ID (типа claude-opus-4-5) молча игнорировались в frontmatter агентов и --agents JSON конфиге. Теперь агенты принимают те же значения, что и --model. Звучит как мелочь, но если ты писал кастомных агентов и не мог понять, почему модель не переключается — вот почему.
MCP OAuth: две проблемы — зависание аутентификации, когда callback-порт уже занят, и отсутствие повторного запроса авторизации после истечения refresh-токена на серверах, возвращающих ошибки с HTTP 200 (привет, Slack).
Voice mode на macOS: нативный бинарник молча падал, если терминал никогда не запрашивал разрешение на микрофон. Добавлен audio-input entitlement для корректного macOS-промпта.
RTL текст: иврит, арабский и другие RTL-скрипты теперь нормально рендерятся в Windows Terminal, conhost и VS Code integrated terminal.
CPU-фризы (v2.1.73): permission prompt для сложных bash-команд мог загнать процесс в 100% CPU loop. Если ты замечал, что Claude Code подвисает на секунду-другую при каждом одобрении команды — это оно. Починено.
Deadlock на skill-файлах (v2.1.73): одновременное изменение файлов в .claude/skills/ (например, при git pull) могло намертво заморозить Claude Code. Актуально для тех, кто синхронизирует skills через git.
Подводные камни
tmux-фриз на Linux никуда не делся. Пользователи на Ubuntu 24.04 с tmux 3.4 сообщают о том, что v2.1.73 вызывает появление жёлтой полосы поиска внизу терминала, блокирующей весь ввод. Проблема связана с ArrayBuffer leak (~980 МБ/час), который отличается от основной утечки, закрытой в v2.1.74. Если работаешь в tmux с несколькими сессиями Claude Code — есть риск. Воркэраунд: export CLAUDE_CODE_DISABLE_AUTOUPDATE=1 и остаться на v2.1.52.
Утечка исправлена только на Node.js/npm path. Нативный бинарник имеет свою версию проблемы с памятью (до 4.7 ГБ/час на Windows, issue #32772), и она пока открыта. Проверить, на какой сборке ты сидишь: claude --version — если видишь путь с node_modules, это npm-сборка.
modelOverrides не валидирует ARN'ы. Если ты опечатаешься в inference profile ARN — узнаешь об этом только в рантайме, когда первый запрос к Bedrock вернёт ошибку. Нет ни проверки формата при запуске, ни подсказок.
/context показывает приблизительные числа. Документация честно предупреждает: это approximation, а не точный подсчёт. Для принятия решений об оптимизации — достаточно, но не стоит ожидать побайтовой точности.
Альтернативы
- Copilot CLI v1.0.4 (вышел в тот же день, 11 марта) — добавил Extensions как экспериментальную фичу,
session.shell.execRPC для streaming-вывода и адаптивный цвет терминала. В отличие от Claude Code, не имеет аналога/contextдля управления токенами, но и не требует его — Copilot работает по модели "запрос-ответ" без длительных сессий - OpenCode — open-source terminal-агент с 108K звёздами. Нет привязки к одному провайдеру, работает с любой моделью через OpenRouter. Нет авто-памяти и managed policies, зато нет и утечек памяти в десятки гигабайт
- Codex CLI — OpenAI'шный терминальный агент, переписанный на Rust. Каждая задача выполняется в изолированном контейнере без сети — ультра-безопасно, но и ультра-ограниченно. Нет persistent context между запусками
Вердикт
Если ты на Claude Code и у тебя npm-сборка — обновляйся на v2.1.74 немедленно, утечка памяти была реально разрушительной. Если работаешь через Bedrock или Vertex — modelOverrides наконец делает это удобным, а не мучительным. /context с рекомендациями — маленькая, но полезная штука для всех, кто следит за расходом токенов. Единственная причина подождать — если ты на Linux с tmux и несколькими параллельными сессиями: там пока лучше остаться на v2.1.52 и подождать фикса ArrayBuffer-проблемы на нативном уровне.
Как попробовать
- Обнови Claude Code:
npm update -g @anthropic-ai/claude-codeили дождись автообновления - Проверь версию:
claude --version— должна быть 2.1.74+ - Запусти
/contextв сессии и посмотри, какие инструменты жрут больше всего токенов - Для корпоративных провайдеров — добавь
modelOverridesв~/.claude/settings.json - Если нужна кастомная папка для памяти — задай
autoMemoryDirectoryв тех же settings