TL;DR
- Из десяти модов оставьте три: collision-guard, model-router и auto-handoff. У каждого измеренные накладные расходы на безголовой задаче чтения близки к нулю, и каждый решает проблему, которую вы можете назвать.
- Удалите next-steps. Он форкает сессию после каждого подходящего ответа и в нашем прогоне стоил +250 выходных токенов и +2850 мс за ход, в том числе на поверхностях, где его подсказки вообще не рисуются.
- Удалите cache-keeper (+1589 мс, платные пинги модели), recording-mode (он маскирует отображение, а не сохранённую историю) и session-bookmarks (закладка, которая может вызывать модель, запускать процессы и писать файлы).
- Удалите goal-meter, repo-heatmap и flight-recorder, если вам не нужна их визуальная часть. Они почти ничего не стоят и не показали измеримой пользы.
- Любой guard-мод по умолчанию fail open. Без обработчика
.catchguard, который бросает исключение, пропускается, и команда выполняется. - Моды не изолированы в песочнице. Прочитайте вывод
claude plugin validate, прежде чем ставить мод.
Что говорят измерения
Шумиха и масштаб. У анонсирующего твита на момент нашего снимка 2026-10-03 было 4,138,918 просмотров, 20,021 лайк и 13,440 закладок s11. Каталог сообщества насчитывает 1018 модов в 873 репозиториях-кандидатах, скан от 2026-10-03 на Claude Code 2.1.288 s9.
Мод это функция, подключённая к событию. Она может выполняться до события, после него, вместо него или оборачивать его s1. Моды требуют Claude Code v2.1.287 или новее и включены по умолчанию s2.
Сначала безопасность. Слова самой Anthropic: "Mods run with the same access to your machine as Claude Code itself. They aren't sandboxed" s1. Процесс, запущенный модом, работает вне песочницы, даже если вы включили sandboxing s2. Даже при запрещённом Read(.env) мод всё равно может прочитать этот файл через $.fs.read или запустить программу, которая это сделает s6. По скану каталога 409 модов запускают процессы на хосте, 167 пишут файлы, 150 выходят в сеть, а 28 не проходят валидацию на этой версии s9.
Охват против заявленной задачи. В нашем статическом аудите session-bookmarks вызывает $.model.complete, $.process.run и $.fs.write: самый широкий охват в наборе ради функции закладок. У next-steps самый маленький след: ни fs, ни process, ни env. Строки calls: и env reads:, на которых построен аудит, печатает claude plugin validate s6.
У флагманского мода есть цена за каждый ход. next-steps форкает сессию через $.model.fork на turn.complete, и в README сказано, что форк "costs about one short reply" s10. Подсказки рисуются только в терминале, на других поверхностях ничего не видно s10. Отключить форк нельзя. В нашем безголовом прогоне он добавил +250 выходных токенов и +2850 мс, причём форк попадал в расход сессии, а на экране ничего не отображалось s10.
Документированные пределы. Время выполнения хука ограничено 10 секундами на событие, чтение и запись через $.fs 4 MiB на файл, а $.store 4 MiB JSON в сумме s3.
Guard-ы работают fail open. В документации сказано: хук без обработчика .catch, который бросает исключение, выходит по таймауту или возвращает неверную структуру, пропускается, и вместо него выполняется следующий обработчик s7. Мы это воспроизвели: Bash-guard, который бросает исключение и не имеет .catch, позволил touch ./marker-failopen.txt создать файл. Тот же guard с .catch, возвращающим {deny}, файл не создал. В одном полевом отчёте guard был включён и запущен, но ничего не делал, а plugin list по-прежнему показывал "enabled" s8.
Открытый баг на 2.1.288: deny, возвращённый после await next(e), не останавливает инструмент, и файл был записан 3 раза из 3, хотя модели сообщили, что запись не удалась s5.
Моды против хуков из settings. Хук из settings запускает процесс на каждый вызов. Мы измерили запуск: 2.2 мс для бинарника true, 8.3 мс для bash -c 'exit 0', 26.1 мс для python3 -c 'pass' и 43.1 мс для node -e ''. На 5,993 вызова инструментов в неделю node-хук стоит 258 с. Мод внутри процесса ничего из этого не платит. Документация рекомендует хук из settings, когда у вас уже есть скрипт, который блокирует, разрешает или логирует событие s2. Один отчёт о миграции: с 27 shell-хуков на 5 модов s8.
Маскирование только на уровне отображения. recording-mode переписывает то, что рисует ui.render. ~/.claude/history.jsonl хранит промпт как он был набран, а один тестировщик нашёл свою canary-строку 7 раз в записях queue-operation транскрипта s5.
Где моды не работают. Безголовый claude -p и Agent SDK запускают хуки, но ничего не рисуют; сессия Desktop под WSL не запускает ни то, ни другое s2.
Доверие к каталогу. Тестировщик опубликовал мод, кнопка которого запускала программу через $.process.run и писала файл в его домашний каталог. Он устанавливался как любой другой мод, без предупреждения s5. Это самостоятельно опубликованный proof of concept, а не атака, замеченная в реальности.
Измерения
Корпус: последние 7 дней реальной рабочей среды, 85 сессий, 4 проекта, 882 пользовательских промпта, 11,010 ходов ассистента, 5,993 вызова инструментов. Бенчмарк на Claude Code 2.1.288 (macOS).
| конфиг | длит. мс | Δдлит. | вых. ток. | Δвых. | задача ок |
|---|---|---|---|---|---|
| baseline | 3980 | 0 | 247 | 0 | 3/3 |
| next-steps | 6830 | +2850 | 497 | +250 | 3/3 |
| cache-keeper | 5569 | +1589 | 367 | +120 | 3/3 |
| recording-mode | 8240 | +4260* | 598 | +351* | 3/3 |
| goal-meter | 3722 | -258 | 244 | -3 | 3/3 |
| collision-guard | 4565 | +585 | 376 | +129* | 3/3 |
| repo-heatmap | 4119 | +139 | 257 | +10 | 3/3 |
| flight-recorder | 3949 | -31 | 261 | +14 | 3/3 |
| model-router | 3698 | -282 | 238 | -9 | 3/3 |
| session-bookmarks | 4152 | +172 | 235 | -12 | 3/3 |
| auto-handoff | 4051 | +71 | 248 | +1 | 3/3 |
Строки со * скорее всего объясняются разбросом ответов. recording-mode во время прогона был выключен и в выключенном состоянии ничего не добавляет.
Протокол для повторения:
- Ставьте по одному моду и убедитесь, что он проходит
claude plugin validate. - Запускайте одну и ту же задачу только на чтение безголово через
claude -pна haiku, по 3 повтора на конфиг, и берите медиану длительности и выходных токенов. - Приводите только разницу по длительности и выходным токенам. Стоимость в USD зависит от порядка кэша между конфигами, поэтому её игнорируйте.
- Для стоимости запуска замерьте 30 запусков тела каждого хука, возьмите медиану и умножьте на ваше недельное число вызовов инструментов.
Сделайте это в понедельник
- Запустите
claude plugin validateдля каждого установленного мода и прочитайте строкиcalls:иenv reads:. - Отключите любой мод, чей охват (процесс, запись в fs, вызов модели) больше его задачи.
- Отключите next-steps, если вы в основном работаете в безголовых запусках, панели VS Code или SDK, где его подсказки не рисуются.
- Добавьте
.catchс возвратом{ deny: ... }в каждый guard-мод, на который вы полагаетесь. - Докажите, что каждый guard fail closed: заставьте его бросить исключение, выполните команду, создающую файл-маркер, и проверьте, что файл не появился.
- Не рассчитывайте, что мод-маскировщик уберёт секреты из
~/.claude/history.jsonlили транскрипта. Проверьте оба файла на диске. - Замените shell-хуки на каждый вызов, запускающие node или python, модом внутри процесса или скомпилированным бинарником, если стоимость запуска набегает за неделю вызовов.
- Выучите выключатели: отключить один мод в
/plugin,--safe-modeна одну сессию,"disableAllHooks": trueв~/.claude/settings.jsonвезде.
Что читать дальше
- Сделайте свой: пошаговый разбор мода на ~80 строк с важными подводными камнями (состояние на уровне модуля сбрасывается при горячей перезагрузке, поэтому храните данные в
$.state) s4. - Решите, что нужно, мод, хук, skill или settings, по собственной истории: один практик советует сначала искать повторяющиеся проблемы в логах сессий s12.
- Прочитайте полный список событий и лимитов, прежде чем писать guard s3.
- Управление на уровне организации здесь не рассматривается. Для одиночного разработчика важно одно:
sec-defaultзагружается, когда на машине есть managed settings или вы вошли с тарифом Team или Enterprise, и он не добавляет других ограничений s6. - Происхождение дизайна, включая баг изоляции worktree, исправленный в 2.1.288, и внутреннее устройство рантайма, описано в открытой ветке s5.
- Примеры модов от Anthropic (token-weather, blast-radius, replay-theater) выложены без поддержки s2.
Источники
- Customize Claude Code with mods, блог Anthropic. Зачем читать: официальное определение и предупреждение об отсутствии песочницы словами самой Anthropic.
- Mods overview, документация. Зачем читать: сравнение модов и хуков, матрица поверхностей и выключатели.
- Mods reference, документация. Зачем читать: полный список событий и документированные лимиты.
- Getting started with Claude Code mods, claude.dev (Addy Osmani). Зачем читать: лучший практический разбор с подводными камнями, которых нет в других источниках.
- Mods issue #91870, GitHub. Зачем читать: полевые отчёты об изоляции, fail closed и утечках в историю.
- Manage mods for your organization, документация. Зачем читать: аудит через validate и пределы каждого механизма защиты.
- React to events with a mod, документация. Зачем читать: порядок цепочки middleware и fail open по умолчанию.
- The Guard I Installed Was Enabled, Running, and Doing Nothing, блог. Зачем читать: единственный полевой отчёт о миграции, с 27 shell-хуков на 5 модов.
- awesome-claude-code-mods, GitHub. Зачем читать: размер экосистемы и готовый метод аудита.
- next-steps plugin source, GitHub. Зачем читать: реальная механика флагманского мода, включая форк на каждый ход.
- ClaudeDevs release tweet, X. Зачем читать: анонс запуска и его охват.
- Avid's session-log mining workflow, X. Зачем читать: способ решить, что строить или ставить, ещё до установки чего-либо.
FAQ
Моды изолированы в песочнице?
Нет. Anthropic говорит, что моды работают с тем же доступом к вашей машине, что и сам Claude Code s1. Программы, запущенные модом, тоже работают вне песочницы s2.
Что будет, если мой guard-мод упадёт?
Без обработчика .catch он пропускается, и команда выполняется s7. Добавьте .catch, возвращающий { deny: ... }, чтобы он работал fail closed.
Моды тратят токены?
Только если вызывают модель. Из десяти запущенных нами измеримую цену показали next-steps и cache-keeper; у остальных в нашем прогоне устойчивых накладных расходов не было.
Как быстро выключить моды?
Отключите один в /plugin, запустите сессию с --safe-mode или задайте "disableAllHooks": true в ~/.claude/settings.json s2. Встроенные моды ни один из этих способов не останавливает.
Можно ли проверить, что делает мод, до установки?
Да. claude plugin validate перечисляет хуки, вызовы API и переменные окружения, которые он читает s6.
AIDive