Моды в Claude Code

На этой неделе Anthropic выпустили прекрасную штуку в Claude Code — Mods. Практически это небольшие плагины к Claude Code, которые загружаются вместе с ним и могут выполнять свои функции во время сессии, модифицировать поведение Claude Code, даже рисовать свой собственный интерфейс или добавлять что-то к стандартному.

Меня, честно говоря, не очень впечатлили примеры, где один мод что-то рисовал по мере заполнения контекста, а другой что-то проверял в запускаемой команде, но у меня есть стандартная процедура — я вручаю ссылку с новой возможностью тому же Claude Code, запущенному в его основной папке ~/.claude, и предлагаю ему сопоставить возможность с имеющимися настройками. Впрочем, описание мода, который что-то проверяет в команде, натолкнуло на мысль, что можно попробовать сделать этакий умный хук. У меня есть несколько хуков, которые проверяют запускаемые команды на локальную специфику вроде замен стандартных утилит и сразу сообщающие об ошибке, и они стали первыми кандидатами на замену модом.

Дело в том, что все знания о локальной специфике вы можете описать в промптах, но это будет лишь проза, которая может и не попасть в конкретный шаг модели. Я много раз наблюдал, как агент дает команду, получает ошибку, догадывается, что у него сломалось экранирование или что на машине нет нужной библиотеки или используется другая оболочка терминала, исправляет ошибку — и это буквально больно наблюдать, как мощная модель тратит ход на выяснение подобной мелочи. Часть хуков у меня автоматически проверяет корректность команды и сразу сообщает об ошибке — это все равно еще один ход, но с четким сообщением и даже рекомендацией, что исправить. Исправлять автоматически сложно — скрипт может не справиться с корректным преобразованием. Так вот теперь это сделать можно — мод ловит этот же хук, но вместо того, чтобы вернуть ошибку, переписывает на лету команду с сохранением её смысла (там же такая же модель) и отдает обвязке на исполнение. Результат корректной команды возвращается в контекст основного агента, который и не подозревает о закулисной работе помощника — мне это в итоге напомнило автотюн.

Второй пример даже более очевидный — модель регулярно в ходе сессии получала “пинок” (nudge) — если идет реальная работа, сохрани состояние сессии в checkpoint. Это постоянный дневник проекта, который позволяет продолжить работу дальше с того же места и обойтись без непрозрачной процедуры компакта сессии. Мод позволил избавиться от такой работы — теперь окончание хода вызывает срабатывание мода, где более легкая модель — обычно Sonnet, — получает на вход контекст сессии и фиксирует прогресс. Сессию можно прерывать в любой момент — новый агент будет иметь полное представление о ходе работы и сможет продолжить.

Я не привожу конкретного кода или настроек, поскольку это всё прекрасно пишется самим Claude Code — гораздо важнее придумать, что именно должен делать мод. Пока есть вот такие две функции — корректор, исправляющий на лету ошибки в командах, и секретарь, фиксирующий работу. Есть идея еще про один, но надо замерить сначала — когда-то, еще с Claude Sonnet 3.5 меня выводила из себя привычка агента ставить заглушки и я подкрепил запреты это делать конкретным хуком, который искал фразы типа “TODO” или “Not Implemented” и пинал агента за это. В последний год вроде бы агент этого не делает, но мод позволил бы проверять это не регулярным выражением в коде, а анализом кода на лету.

А еще мод может влезать в системный промпт, который закладывается в агент на стороне Anthropic. Если у вас в настройках есть что-то, противоречащее системному промпту, это хороший способ перестать спорить с ним — например, системный промпт предписывает агенту запускать workflow только по явной команде пользователя, а можно вставить свою директиву “Запускай тогда, когда задача соответствует таким-то критериям, без дополнительного запроса”.

Подобные вещи даже лучше делать через мод еще и потому, что если Anthropic в новой модели уберет мешающую вам инструкцию, вы об этом узнаете по ошибке мода (он не найдет инструкцию, чтобы заменить), а ваши попытки переспорить промпт в CLAUDE.md так и будут занимать место, уже будучи ненужными.

В общем, хорошую штуку сделали в Anthropic.