Вступление: десять mods, три остаются
Claude Code mods — это функции на TypeScript внутри плагинов, которые могут перерисовать интерфейс Claude Code или переписать его поведение. Через день после их запуска в начале октября три разных видеообзора посоветовали разработчикам поставить десять из них. Двое авторов прямо на камеру признают, что некоторые mods ничего не экономят, но ни один не измерил ни одного. Этот тест измеряет: каждый из десяти разрекламированных mods прогнан на реальной рабочей неделе, с цифрой накладных расходов, цифрой экономии и вердиктом «оставить или удалить». Результат сразу: только три из десяти заслуживают места на машине работающего разработчика, и один из них молча тратит токены на каждый ответ.
Волна и что мы запускали
Собственное определение Anthropic умещается в один вдох: mod — это функция, которая цепляется к событию и может сработать до него, после него или вместо него. Событие — это вызов инструмента, отправленный prompt или часть отрисовываемого интерфейса. Mods — это обычный TypeScript, поставляемый внутри плагина, который ставится как любой другой.
Твит о запуске набрал четыре миллиона просмотров примерно за сутки, двадцать тысяч лайков и больше закладок, чем ответов и репостов вместе взятых. Через два дня после запуска общественный каталог уже просканировал больше тысячи публичных mods в сотнях репозиториев.
Стенд для этого теста — одна реальная рабочая неделя: 85 сессий в четырёх проектах, почти 900 prompts и чуть меньше 6000 вызовов инструментов. Каждый mod прошёл аудит валидатора, который перечисляет, к чему он цепляется и чего может касаться, и каждый mod выполнял одну и ту же задачу против чистого базового уровня, на актуальном релизе, на той же машине.
Главное разделение: шесть из десяти не стоят ничего, что можно измерить в рантайме, три стоят реального времени или реальных токенов, и один нарушает единственное обещание, которое даёт.
Декоративный слой в цифрах
Тихая шестёрка укладывается в шум соединения. Goal meter, repo heatmap, flight recorder, model router, session bookmarks и auto handoff все лежат между четвертью секунды экономии и пятой долей секунды добавки на базовой задаче примерно в четыре секунды.
| Mod | Изменение времени выполнения | Примечания |
|---|---|---|
| Goal meter | в пределах шума | декоративная панель |
| Repo heatmap | в пределах шума | подсвечивает файлы по мере чтения |
| Flight recorder | в пределах шума | живая временная шкала хода |
| Model router | в пределах шума | окупается на subagents, см. вердикт |
| Session bookmarks | в пределах шума | широкий набор возможностей |
| Auto handoff | ~70 мс в простое | пишет один handoff при пороге контекста |
Они выглядят отлично, и ничего не сломалось: каждый запуск каждой конфигурации правильно завершил задачу. В headless они ничего не стоят, потому что рисовать нечего; в терминале эти панели перерисовываются до тридцати раз в секунду, так что честная цена декоративного слоя — внимание, а не токены.
Аудит валидатора — вот где становится не до смеха. Mod bookmarks может обращаться к модели, запускать процессы на вашей машине и писать файлы, а пути к вашей конфигурации читает из окружения. Ничто из этого не скрыто и ничто не злонамеренно, но для закладок это очень большой охват. Четыре mods выбывают здесь: goal meter, heatmap и flight recorder как декорация с нулевой измеренной пользой, и mod bookmarks, потому что он просит больше, чем зарабатывает.
Флагман списывает с вас каждый ход
Suggestion engine — это mod, который во всех видео показывают первым: ваш ответ завершается, над полем ввода появляются три подсказки prompt, вы нажимаете цифру, и черновик заполняется сам. Механизм описан его же автором: когда ваш ход завершается, он форкает сессию, чтобы спросить модель об этих подсказках, и форк делит с сессией кэш prompt, так что стоит примерно как один короткий ответ. В обзорах эту строку не упоминают.
На стенде это около 250 лишних выходных токенов на подходящий ответ и почти три секунды лишнего времени, а подходящий ответ — это почти любой ответ: всё, что длиннее примерно восьмидесяти символов. У форка также нет проверки поверхности. Подсказки рисуются только в терминале, но форк срабатывает везде, включая headless-запуски, где рисовать вообще нечего.
| Mod | Измеренная цена | Когда срабатывает |
|---|---|---|
| Suggestion engine | ~250 выходных токенов + ~2,9 с на подходящий ответ | каждый ответ длиннее ~80 символов, включая headless |
| Cache keeper | ~1,5 с на ход, плюс вызовы модели в режиме прогрева | каждый ход, прогрев часами |
У cache keeper та же форма: около полутора секунд на ход, плюс режим прогрева, который часами тратит небольшие вызовы модели, чтобы кэш prompt не остыл. На подписке окно кэша и так составляет час, так что вы платите пингами за проблему, которую план в основном уже решил. Оба — честные решения с задокументированной ценой, оба — налог на каждый ход, который списки установки нигде не оценивают, и оба снимаются с машины.
Mod или хук: одна и та же задача
В Claude Code хуки были и раньше: shell-скрипт в ваших настройках, срабатывающий на те же события. Документация отвечает на вопрос выбора одной строкой таблицы: mod нужен для интерфейса и переписывания событий; хук — для блокировки, разрешения или логирования скриптом, который у вас уже есть.
Измеримая разница — запуск процесса. Хук из настроек запускает новый процесс на каждый вызов инструмента. По замерам на этой машине shell-хук, который ничего не делает, стоит около 8 мс, а хук, запускающий Node, около 43 мс, на каждый вызов, ещё до того, как скрипт что-либо сделает. На 5993 вызовах инструментов рабочей недели это больше четырёх минут чистого запуска интерпретатора. Mod ничего из этого не платит: его обработчик работает внутри собственного процесса движка, и лог движка показывает, что переход занимает около миллисекунды.
| Обработчик | Цена на вызов | Неделя из 5993 вызовов |
|---|---|---|
| Shell-хук (пустой) | ~8 мс | ~48 с |
| Node-хук (пустой) | ~43 мс | ~4,3 мин |
| Mod (внутри процесса) | ~1 мс | ~6 с |
Единственный реальный отчёт о миграции в природе говорит то же самое: двадцать семь shell-хуков свернулись в пять mods, и запуск процесса на каждый вызов исчез вместе с ними. Правило, которое остаётся: интерфейс или переписывание событий — mod; блокировать, разрешать или логировать скриптом, которому доверяете, — хук; цена запуска имеет значение только на тысячах вызовов; знания, которые вы повторяете, — skill. Хук, который вы прочитали, лучше mod, который вы не читали.
Охранник, который ничего не делает
Простейший защитный mod — это охранник, который следит за каждой shell-командой, и этот был написан так, чтобы падать. Claude Code попросили создать файл-маркер; охранник выбросил исключение; команда всё равно выполнилась, и файл появился. Это не баг, а документированное поведение по умолчанию: когда хук выбрасывает исключение, превышает время ожидания или возвращает неверную форму, Claude Code пропускает его и идёт дальше. Сломанная декорация не должна убивать сессию, но сломанный охранник пропускает всё молча, с одной строкой в debug-логе, которую никто не читает.
Исправление — один catch-обработчик, возвращающий deny. Тот же падающий охранник с catch отказывает в команде и называет причину сбоя. Одна строка решает, пропустит ли охранник при сбое или заблокирует, документация поставляет именно этот шаблон, и почти никто его не ставит.
Команда сообщества заново прогнала эти случаи на актуальном релизе и судила по файлам-маркерам, а не по тому, что сказала модель. Шаблон с catch блокировал при сбое три запуска из трёх, но один путь всё ещё молча сломан: deny, возвращённый после того, как вызов уже был передан дальше, не останавливает инструмент. Файл появился три раза из трёх, а модели сообщили, что запись не удалась.
Полевой отчёт, давший название этой проблеме, описывал охранника, который днями был включён, загружен и ничего не делал, потому что устаревший флаг выключил его изнутри: три зелёных индикатора статуса над счётчиком, застрявшим на нуле. Тишина, которая выглядит точно как здоровье.
Collision guard получает первое «оставить». Он решает реальную проблему — два открытых чата правят один файл — и его сбой громкий: он спрашивает в диалоге и никогда не разрешает молча. Он стоит около полусекунды на правках и ничего не добавляет в prompt. Поставьте его и всё равно дайте ему catch-обработчик.
Что вы отдаёте, вставляя чужой mod
Anthropic говорит это прямо в день запуска: mods работают с тем же доступом к вашей машине, что и сам Claude Code. Они не в песочнице; ставьте их так, как поставили бы любой код на свой компьютер. Конкретно, mod может действовать на вашей машине как вы: читать ваше окружение и настройки, где лежат ключи API; видеть каждый prompt и каждый вызов инструмента; переписывать их; одобрить вызов инструмента раньше, чем спросят вас; и тратить лимит вашего плана на собственные вызовы модели.
Две ловушки настигают даже осторожных пользователей. Правила разрешений управляют вызовами инструментов Claude, а не собственными вызовами mod: запретите Claude файл с окружением, и mod всё равно сможет прочитать этот файл напрямую собственным файловым доступом или запустить программу, которая это сделает. У сетевой политики тот же край: отключите веб-трафик, и собственные fetch-вызовы mod будут отклонены, но дочерний процесс, который запускает mod, выходит в сеть с полным доступом. Есть встроенный защитный mod, который загружается раньше всего, но только на управляемых машинах и для мест Team или Enterprise; одиночное место на личной подписке не получает ничего из этого.
Ничего из этого не теоретично. Пользователь опубликовал proof of concept через несколько дней после запуска: mod, кнопка которого запускает программу и пишет в домашний каталог, установленный из каталога без единого предупреждения, и его довод остаётся в силе: каталог выглядит как магазин приложений, что намекает на проверку, которой нет. Отдельный баг хуков на день сломал изоляцию subagents; мейнтейнер назвал это большой ошибкой и исправил в следующем релизе.
Собственное сканирование каталога по более чем тысяче публичных mods: больше четырёхсот запускают процессы хоста, почти четыреста читают файлы, а больше трёхсот видят каждый вызов инструмента. Оговорка каталога — правильная рамка: это след, а не приговор; трекеру PR нужно запускать git. Дисциплина стоит две минуты: запустите валидатор перед включением чего-либо и знайте выходы — безопасный режим на одну сессию, одна настройка, чтобы навсегда остановить все установленные хуки.
Оставить три, удалить семь
Из десяти три заслуживают места: collision guard, model router и auto handoff.
| Mod | Вердикт | Цифра за ним |
|---|---|---|
| Collision guard | оставить | ~0,5 с на правках, сбой громкий, в prompt ничего не добавляет |
| Model router | оставить | subagent тарифицируется по дешёвой модели, треть цены |
| Auto handoff | оставить | 70 мс пустоты, одна запись handoff при пороге контекста |
| Suggestion engine | удалить | ~250 выходных токенов + ~2,9 с на каждый подходящий ответ |
| Cache keeper | удалить | ~1,5 с на ход, пинги прогрева против окна кэша в 1 час |
| Recording mode | удалить | маскирует экран, но не диск |
| Goal meter | удалить | декорация, нулевая измеренная польза |
| Repo heatmap | удалить | декорация, нулевая измеренная польза |
| Flight recorder | удалить | декорация, нулевая измеренная польза |
| Session bookmarks | удалить | охват намного шире его задачи |
У model router есть чек: сессия на большой модели породила одного subagent, и собственный отчёт об использовании показал, что subagent тарифицировался по дешёвой модели, за треть цены за ту же небольшую работу. На неделях, насыщенных subagents, это реальные деньги. Auto handoff ничего не стоит до момента, когда окупается: семьдесят миллисекунд накладных расходов в простое, а за порогом контекста он один раз пишет handoff для холодного старта. Один из авторов волны признаёт, что ручная кнопка handoff на самом деле времени не экономит; как автоматическая запись по порогу, она экономит.
Дисциплина, которая выдерживает тест: читайте аудит валидатора перед включением чего-либо, давайте каждому охраннику catch-обработчик, чтобы он блокировал при сбое, и записывайте демо в безопасном режиме, а не доверяйтесь маскирующему mod. Ограничения реальны — одна неделя, одна машина, одна нагрузка, три запуска на точку на малой модели. Ваши три могут отличаться, но теперь вы знаете, как их найти.
AIDive