Вы задаете короткий вопрос о ценах API в Claude Code, запускаете /context — и обнаруживаете, что треть окна контекста на миллион токенов просто исчезла. На другом компьютере — сорок процентов. Вопрос один и тот же, ответ один и тот же, а расход различается почти на сто тысяч токенов.
Это не случайность. В Claude Code есть две скрытые ловушки: одна сжигает токены при упоминании имени модели, вторая сбрасывает разрешения bash после первого же сообщения. Разберем обе по порядку и покажем, как их обойти.
Ловушка первая: имя модели — спусковой крючок для документации
Один инженер спросил «does fable use api billing?» и сразу запустил /context. Результат: 295 000 токенов улетело на один вопрос. На втором ноутбуке тот же вопрос съел 354 000 токенов. При этом контрольные вопросы без упоминания модели («какая последняя LTS-версия Node?», «чем MIT отличается от Apache 2.0?») обошлись в копейки: два вопроса на двоих — 7,5 тысячи токенов.
Разница в том, что в первом вопросе упоминается конкретная модель Claude. Это активирует встроенный навык claude-api, который подгружает полный пакет документации — сотни килобайт. Навык не отличает простой вопрос о цене от запроса на развертывание стримингового tool-use loop — и в обоих случаях грузит одно и то же.
При этом обычные механизмы экономии работают отлично. 59 MCP-инструментов занимают 0 токенов, потому что их схемы подгружаются лениво. Описания 16 навыков — всего 2,2 тысячи токенов. Весь перерасход сосредоточен в разделе Messages, куда документация claude-api попадает одним куском.
Ловушка вторая: allowed-tools живет один ход
Вы добавляете в навык allowed-tools: Bash(git add *) Bash(git commit *), запускаете /commit — и Claude коммитит без вопросов. Но следующая просьба снова вызывает запрос разрешения. Ничего не сломано: allowed-tools работает ровно так, как задумано, просто область действия уже, чем кажется.
Права действуют только в тот момент, когда навык вызывается. Как только вы отправляете следующее сообщение, разрешение очищается. При этом содержимое SKILL.md остается в контексте разговора навсегда — отсюда ощущение, что навык загружен, но права исчезли. Оба утверждения верны.
И еще один нюанс: allowed-tools — это не барьер безопасности. Он не запрещает остальные инструменты, а лишь заранее разрешает перечисленные. Если нужно действительно заблокировать что-то на время работы навыка, используйте disallowed-tools — он тоже действует один ход.
Как исправлять
Для токенов: если вопрос касается только цены или биллинга, переформулируйте его так, чтобы не упоминать имя модели. Вопрос без имени модели не активирует навык claude-api. И следите за /context после любых вопросов с упоминанием модели — так вы заметите раздувание на ранней стадии, пока оно не съело бюджет длинной сессии.
Для прав: если вам хочется, чтобы разрешение жило дольше одного хода, это верный признак: правилу место в настройках permission, а не во фронтматтере навыка. Разделение такое: allowed-tools и disallowed-tools внутри SKILL.md отвечают за один вызов; allow rules в настройках проекта или пользователя действуют всю сессию или проект; deny rules блокируют инструмент глобально.
Если у навыка есть собственный скрипт, ${CLAUDE_SKILL_DIR} подставляется и в markdown, и в bash-правила. Используйте эту переменную в обоих местах, чтобы правило точнее совпадало с реальной командой. Жестко прописанный путь сломается, когда навык установят в другое место. Для плагинных навыков переменная указывает на подпапку, а не на корень плагина, так что угадать путь вслепую рискованно.
Сводная таблица: где живут правила доступа
| Механизм | Где прописан | Сфера действия | Типичная задача |
|---|---|---|---|
| allowed-tools | frontmatter навыка | Один вызов навыка | Разрешить git commit без подтверждения |
| disallowed-tools | frontmatter навыка | Один вызов навыка | Запретить опасный инструмент |
| allow rules | settings проекта или пользователя | Сессия или проект | Постоянное разрешение на команду |
| deny rules | settings проекта или пользователя | Глобально | Заблокировать инструмент везде |
Что делать команде
Если вы используете Claude Code для долгих автоматизаций — CI, фоновые агенты — проведите аудит всех навыков с allowed-tools. Пометьте, какие права должны сохраняться между ходами, и перенесите их в settings. Параллельно проверяйте /context после коротких вопросов: если после упоминания модели тратится больше, чем обычно, — это повод переписать формулировку.
Обе проблемы имеют простую механику и простое решение. Первая — вопрос про имя модели, вторая — непонимание области действия разрешений. Достаточно один раз увидеть цифры в /context, чтобы больше никогда не жечь токены по незнанию.
Комментарии (0)
Войдите, чтобы комментировать.
Пока нет комментариев. Будьте первым.