Claude Code 2.1.261 добавляет /skill-doctor: находим skills, которые только тратят контекст
Тело skill загружается по требованию, а её имя и описание лежат в списке, который всегда находится в промпте и ограничен 1% окна контекста. Claude Code 2.1.261 добавляет /skill-doctor: отчёт показывает, какие загруженные skills не используются и во что обходится каждая, чтобы убрать их прежде, чем бюджет начнёт вытеснять те, которыми вы действительно пользуетесь.
Claude Code 2.1.261 вышел 4 сентября с небольшой командой, отвечающей на вопрос, на который владельцы забитого каталога ~/.claude/skills до сих пор ответить не могли: /skill-doctor показывает, какие загруженные skills остаются без применения и во что они обходятся по контексту, чтобы их можно было убрать. В справочнике команд команды пока нет, но механизм, о котором она отчитывается, задокументирован, и его стоит понять до чтения вывода.
Skill, которую вы никогда не вызываете, не бесплатна
Привычная модель такая: skills дешёвые, потому что загружаются лениво. Это верно лишь наполовину. Тело SKILL.md попадает в диалог только при вызове skill. Имя и описание — нет: Claude Code загружает в контекст список имён и описаний всех skills, чтобы модель знала, что доступно.
У этого списка фиксированный бюджет. Согласно документации по skills, он “scales at 1% of the model’s context window”, а суммарный текст каждой записи в любом случае ограничен 1536 символами. Когда список перестаёт помещаться в бюджет, Claude Code начинает отбрасывать описания, начиная с тех skills, которые вы вызываете реже всего.
Поэтому неиспользуемая skill стоит дороже собственных токенов. Она конкурирует за общий бюджет со skills, на которые вы полагаетесь, а урезанное описание теряет как раз те ключевые слова, по которым модель сопоставляет ваш запрос. В итоге skill молча перестаёт срабатывать, и никакой ошибки, объясняющей причину, нет. /doctor уже давал оценку общей стоимости списка и его главных статей расхода; в 2.1.261 разрез по каждой skill, использованные против неиспользуемых, вынесен в отдельный отчёт.
Как превратить отчёт в настройки
Когда понятно, какие записи лишние, skillOverrides в .claude/settings.json меняет видимость, не трогая SKILL.md в общем репозитории:
{
"skillOverrides": {
"legacy-context": "name-only",
"deploy": "user-invocable-only",
"old-migration-helper": "off"
}
}
"name-only" оставляет skill в списке, но убирает её описание, освобождая бюджет. "user-invocable-only" скрывает её от модели, оставляя /deploy доступным для ручного ввода. "off" скрывает от обоих. Для своей собственной skill эквивалент во frontmatter — это disable-model-invocation: true, который полностью убирает описание из контекста. Учтите, что skills из плагинов игнорируют skillOverrides; ими управляют через /plugin.
Если отчёт говорит, что каждая skill своё место оправдывает, поднимайте потолок вместо сокращения: skillListingBudgetFraction принимает долю (0.02 для 2%), SLASH_COMMAND_TOOL_CHAR_BUDGET — фиксированное число символов, а skillListingMaxDescChars сдвигает ограничение в 1536 символов на запись. Затем проверьте по строке Skills в /context, которая начиная с v2.1.196 показывает размер списка уже после применения бюджета, а не полный текст.
В том же релизе есть ещё две ручки для контекста: bashOutputMaxChars и taskOutputMaxChars повышают объём вывода команд и фоновых задач, который Claude получает прямо в диалоге, прежде чем он сохраняется в файл, вплоть до 128K символов, а --append-subagent-system-prompt-file читает системный промпт субагента из файла, когда он слишком велик для командной строки. Если вы отстали от потока релизов, в 2.1.259 появился managedMcpServers двумя днями ранее.
Подробности в changelog Claude Code.
Comments
Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.