> · 8 мин

Claude Code v2.1.73-74 — утечка на 18 ГБ/час закрыта, корпоративные провайдеры через modelOverrides и /context, который сам говорит, где жмёт контекст

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.exec RPC для 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-проблемы на нативном уровне.

Как попробовать

  1. Обнови Claude Code: npm update -g @anthropic-ai/claude-code или дождись автообновления
  2. Проверь версию: claude --version — должна быть 2.1.74+
  3. Запусти /context в сессии и посмотри, какие инструменты жрут больше всего токенов
  4. Для корпоративных провайдеров — добавь modelOverrides в ~/.claude/settings.json
  5. Если нужна кастомная папка для памяти — задай autoMemoryDirectory в тех же settings
$ ls ./related/

Похожие статьи

subscribe.sh

$ cat /dev/blog/updates

> Свежие заметки о программировании,

> DevOps и AI — прямо в мессенджер

./subscribe