СЕРЕЖА РИС

СтатьиClaude Code

Моды Claude Code: как поменять интерфейс агента

Содержание

В Claude Code появились моды. Мод это плагин, вся логика которого может жить в одном файле кода. Он меняет само приложение. Он может открыть свою панель сбоку, повесить строку над полем ввода, показать уведомление, добавить слэш-команду, остановить опасный вызов инструмента или дописать текст в системный промпт.

Главное: мод пишет сам агент. Описываешь словами, что хочешь, и Claude Code собирает мод в той же сессии.

Мне важнее всего, что моды работают в десктопном приложении: Claude Desktop, вкладка Code. Это тот же Claude Code, только в обычном окне, без терминала. Ещё моды работают в терминале и в расширении для VS Code.

Десктопное приложение Claude, вкладка Code: сайдбар с сессиями, пустая сессия и поле ввода

Claude Code в десктопном приложении Claude, вкладка Code. Кадр из ролика Anthropic

Я так сделал себе план дня справа от чата. Код руками не писал, файлы не открывал.

Что такое мод, простыми словами

Claude Code это агент, который сам пишет код и запускает команды. Плагин это дополнение к нему. По обзору в документации, мод это плагин, код которого работает внутри Claude Code. Пишут его на JavaScript или TypeScript (тот же JavaScript, только с подсказками, какие данные где лежат). Ставить Node.js (среду для запуска JavaScript) и собирать проект не нужно.

Устроено так. Claude Code сообщает о событиях: агент собрался вызвать инструмент, ты отправил промпт, приложение рисует спиннер. Мод подписывается на них хуками. Хук это функция, которую Claude Code вызывает, когда событие случилось. С событием хук может сделать три вещи: посмотреть и пропустить дальше, поменять его, или ответить сам, и тогда обычное поведение не запускается.

Схема мода: событие приходит в функцию мода, Claude Code рисует результат

Чтобы сделать что-то за пределами своего кода, мод зовёт API модов. Это набор команд, которые Claude Code даёт моду: нарисовать, добавить команду, вызвать модель, прочитать файл. Другого пути у него нет. Поэтому Claude Code может заранее показать список всего, что мод делает.

Чем мод отличается от соседей. В документации есть сравнение:

  • скилл это файл с инструкциями, который читает агент; он меняет то, что агент знает и делает;
  • хук из настроек запускает скрипт, HTTP-запрос или промпт на событие; он может пропустить, запретить или записать вызов;
  • MCP-сервер даёт агенту инструменты из внешней системы, например из трекера задач;
  • мод работает внутри приложения и единственный из четырёх умеет рисовать в интерфейсе.

Коротко: скилл учит агента, мод меняет само приложение.

Что мод может поменять в Claude Code

Событий много, их делят на группы: инструменты, промпты, команды и настройки, ходы агента, сессия, субагенты, интерфейс (справочник). Ниже то, что видно человеку, с одним примером на строку. Примеры взяты из документации и из моего мода.

Терминал Claude Code: мод дописал к спиннеру счётчик вызовов инструментов

Мод переписал спиннер: к «Thinking» добавился счётчик вызовов. Кадр из документации Anthropic, терминал

В широком окне десктопа справа от переписки стоят панели: превью, дифф, терминал, задачи, план. Панель мода встаёт в этот же ряд (как мод рисует интерфейс).

Claude Desktop, вкладка Code в работе: переписка по центру, справа панели Preview, Diff, Terminal, Tasks и Plan

Справа встроенные панели Claude Code. Сюда же мод добавляет свою. Кадр из ролика Anthropic

Что меняет мод Пример
Панель сбоку от переписки мой план дня «Сегодня»
Строка над полем ввода текущая ветка git над промптом
Строка под полем ввода статус проверок pull request (заявки на правку кода) раз в минуту
Всплывающее уведомление (тост) «Ход закончен», висит 4 секунды
Готовые части Claude Code: сообщения, строки вызовов, спиннер (значок «агент работает»), окно вопросов счётчик вызовов инструментов рядом со спиннером
Слэш-команда, которую набираешь через / /standup со сводкой за день, без хода агента
Новый инструмент для агента поиск задачи в трекере по номеру
Вызов инструмента, то есть действие агента запрет git push --force с объяснением агенту
Промпт и системный промпт (скрытая инструкция агенту) дописать имя ветки, когда в промпте есть pull request
Запрос к модели отправить один запрос другой модели

Где мод рисует, разобрано на странице про интерфейс. Панель в широком окне стоит справа от переписки, в узком над полем ввода. Строка над полем ввода общая для всех модов. Одно место закрыто: окно разрешений мод не перерисует.

Про вызовы инструментов и промпты есть страница про события. Мод может придержать вызов, пока спрашивает тебя, ответить за инструмент, не запуская его, или отказать с причиной. Может переписать промпт или добавить к нему текст, который прочитает только агент.

Остальное даёт API модов. В нём группы методов: $.ui рисует, $.command и $.tool добавляют команды и инструменты, $.model шлёт свой запрос к модели, $.clock заводит таймеры. Ещё $.fs читает и пишет файлы, $.process запускает программы, $.http ходит в сеть, $.audio играет звук и читает текст вслух. $.store хранит данные, общие для всех сессий на компьютере, $.state держит состояние интерфейса. Запросы к модели идут за счёт твоей подписки или ключа API.

Как получить свой мод: попросить агента

Документация прямо предлагает так: опиши мод своими словами в обычной сессии. Claude возьмёт встроенный скилл plugin-authoring. Скилл знает, куда писать мод, какие события и методы есть в твоей версии и как мод загружается. Его можно вызвать и руками, командой /plugin-authoring.

Свой скилл «знающий API модов» писать не нужно. Когда мод загружается, Claude Code кладёт в его папку описание API ровно той версии, что у тебя стоит. Главный файл с типами у меня около 22 тысяч строк, с комментарием и примером к каждому методу. Поэтому агент знает актуальные события и элементы, даже если документация отстала.

Мой промпт, его можно повторить:

Сделай мод для Claude Desktop: панель справа «Сегодня», мои задачи на сегодня по приоритету из <путь к файлу плана>, строка над полем ввода с текущей задачей и кнопкой Готово, команды /today /next /done

Что дальше происходит:

  1. Агент пишет мод в папку сессии ~/.claude/dev-mods/. В обычном режиме разрешений Claude Code спросит про каждый файл: эта папка защищённая.
  2. На первом файле Claude Code спросит, включить ли горячую перезагрузку. Отвечай «Enable for this session». Это значит, что мод обновляется без перезапуска: загрузится в конце хода и будет перезагружаться после каждого хода, где агент поменял его файлы.
  3. В /plugin на вкладке Installed мод появится в списке, там же его можно выключить.
  4. Если что-то не так, говоришь агенту, что поменять. Если в переписке появилась строка с именем мода о том, что правка не загрузилась, скопируй её агенту: сам он эту строку не видит.

Проверки тоже есть. claude plugin validate показывает, на какие события мод подписан и что вызывает. claude plugin test гоняет тесты мода без сессии, входа и сети.

Терминал Claude Code: команда /tally отвечает счётчиком, строка о перезагрузке мода с четырьмя хуками

Учебный мод из документации: команда /tally и строка «reloaded» после правки. Кадр из документации Anthropic, терминал

Мой пример: план дня рядом с чатом

План дня у меня лежит в Markdown-файле. Каждое утро его собирает мой скилл: слоты по времени, задачи с приоритетом P0 (срочно) и P1, блок «Вне часов». Мод читает этот файл и показывает его в Claude Desktop.

Окно Claude Desktop: справа панель «Сегодня» с задачами по приоритету, над полем ввода строка «Сейчас:»

Макет моей панели «Сегодня» и строки «Сейчас:» на демо-данных

Справа панель «Сегодня». Сверху шапка с датой, неделей и счётчиком «0/6», кнопка «Обновить». Под ней карточка ближайшего слота в оранжевой рамке: время, название, сколько до начала. Дальше задачи по приоритету: кружок, номер, цветной чип P0 или P1, ссылка на задачу (issue), короткое название вроде «Урок 7: эфир». Клик по кружку отмечает задачу, сделанное зачёркивается и остаётся на месте.

Над полем ввода строка «Сейчас: P0 Урок 7: эфир · до урока 1 ч 20 мин · 1/3 готово» с кнопками «Готово» и «Скрыть». В статус-строке счётчик и время следующего слота, она обновляется раз в минуту. За 15 минут до слота приходит тост, один раз в день.

Команды три. /today открывает панель и возвращает строку. /next называет текущую задачу и отсчёт до слота. /done отмечает текущую и называет следующую.

Отметки «сделано» мод держит в своём хранилище. В файл плана он ничего не пишет: план остаётся таким, каким его собрал скилл. Весь мод уместился в три файла, главный на 247 строк, плюс тест на два случая. Оба проходят.

Сначала макеты, потом мод

Где вообще может жить план дня внутри Claude Desktop, я не знал. Поэтому до мода попросил агента отправить бриф в Claude Design: одна HTML-страница-каталог, все способы показать план дня внутри Claude Desktop. Вышло 11 вариантов на одних и тех же данных.

Четыре макета из Claude Design: панель справа, доска колонками, таймлайн дня, строка над полем ввода

Четыре из 11 вариантов: панель, доска, таймлайн, строка над полем ввода

Там были панель справа, доска колонками P0, P1 и «Сделано», таймлайн дня, строка над полем ввода, статус-строка, тост, слэш-команды, подсказка в поле ввода, панель для узкого окна, фоновый режим без интерфейса с планом в системном промпте и мобильное приложение. Я выбрал панель и добавил строку над полем ввода.

Приём годится для любого мода. Мест, где мод может что-то показать, много. Посмотреть их на своих данных проще до того, как агент напишет код. Claude Design сейчас переезжает в Artifacts приложения Claude, старый адрес работает до 14 декабря.

Ограничения

Свой набор элементов. Мод рисует из готовых деталей: блоки, текст, кнопки, ссылки, поля ввода, списки выбора, Markdown, код, SVG. Можно задать цвета, рамки, размер текста. Часть элементов работает только в терминале, SVG наоборот только в Desktop и VS Code (таблица в справочнике).

Первая версия расходится с макетом. У меня первая панель вышла сырой: текст из файла плана длинными строками, большие кнопки «Готово». Я написал агенту «это не так, как в дизайне» и приложил скриншот. Агент переверстал по первому макету: шапка, карточка слота, компактные строки с чипами. Структура и иерархия совпали с макетом, до пикселя его не повторить.

Мод работает с твоими правами. Песочницы нет. Мод может читать и писать файлы, видеть промпты и вызовы инструментов, ходить в сеть, тратить твои лимиты на запросы к модели. Чужие моды ставь только от тех, кому доверяешь. До установки claude plugin validate покажет, что мод делает.

Где ничего не нарисуется. В запуске claude -p и в облачных сессиях хуки мода работают, интерфейса нет. В сессиях WSL (Linux внутри Windows) в Claude Desktop моды не грузятся вовсе. Версии: в терминале нужна 2.1.287 или новее, в Claude Desktop моды работают с 2.1.286. У меня 2.1.316.

Как сохранить мод и поделиться

Есть подвох. Мод, который написал Claude, грузится только в той сессии, где его сделали. Папку сессии Claude Code удаляет, когда она старше настройки cleanupPeriodDays.

Чтобы мод остался, его папку копируют к себе, например в ~/mods/. Дальше варианты из документации:

  • для себя: запускать Claude Code с флагом --plugin-dir и путём к папке мода;
  • для пары человек: отправить им папку или архив;
  • для команды: положить мод в свой маркетплейс плагинов, например в приватный репозиторий;
  • для всей организации: администратор ставит моды через управляемые настройки;
  • для всех: открыть репозиторий маркетплейса или отправить плагин в каталог Anthropic.

У организаций свои рычаги (страница для администраторов). Настройка allowManagedModsOnly пускает только моды организации. На машинах с управляемыми настройками и на планах Team и Enterprise первым грузится встроенный страж: мод пользователя не меняет системный промпт и управляемые хуки и не обходит правила разрешений. Выключить моды у себя можно запуском с --safe-mode на одну сессию или настройкой disableAllHooks насовсем.

Как Claude Desktop хранит сессии, я разбирал в переносе 275 сессий на второй аккаунт. Готовые моды Anthropic лежат в исходниках Claude Code, их удобно показать агенту как образец.

Если хочешь так же: в Кружке разбираем это на практике, с агентами и вживую.

Частые вопросы

Что такое мод в Claude Code?

Мод это плагин Claude Code, код которого работает внутри самого приложения. Он подписывается на события, например вызов инструмента или отрисовку спиннера, и может их наблюдать, менять или обрабатывать сам. Так мод рисует панели, добавляет команды и правит вызовы инструментов.

Чем мод отличается от скилла и обычного хука?

Скилл это файл с инструкциями, который читает агент. Обычный хук из настроек запускает скрипт на событие и может пропустить, запретить или записать вызов. Мод работает внутри Claude Code и единственный из них умеет рисовать в интерфейсе.

Нужно ли уметь программировать, чтобы сделать мод?

Нет. Мод можно попросить словами в обычной сессии. Claude пишет его по встроенному скиллу plugin-authoring, который знает события и методы именно твоей версии Claude Code.

Где работают моды?

В Claude Code в терминале с версии 2.1.287, во вкладке Code в Claude Desktop с версии 2.1.286 и в расширении для VS Code. В сессиях WSL в Claude Desktop моды не грузятся. В запуске claude -p хуки мода работают, но ничего не рисуется.

Безопасно ли ставить чужой мод?

Мод работает с твоими правами и без песочницы: читает файлы, видит промпты и вызовы инструментов, может ходить в сеть. Ставь моды только от авторов, которым доверяешь. Команда claude plugin validate до установки покажет, на какие события мод подписан и что он вызывает.