Карточки сообщества, MCP-серверы и скиллы — всё подключается стрелкой
Два выпуска за одно утро открыли холст для кода, который писали не мы. Трудность была не в функциях, а в том, чтобы сдержать обещание: агент дотягивается только до того, что даёт ему стрелка.
До этой недели каждая карточка на холсте NeuroSquad была нашей. 0.1.123 изменил это сразу в трёх местах: карточки сообщества, которые может сделать и опубликовать на GitHub кто угодно, MCP-серверы из официального реестра MCP и скиллы со skills.sh — и каждое из этого выдаётся конкретному агенту стрелкой. Через полтора часа 0.1.125 добавил проверенные карточки: отрецензированный список со значком, у которого точный смысл.
У холста есть одно правило, благодаря которому его можно читать: агент пользуется ровно тем, на что указывают его стрелки. Открывать холст для чужого кода имело смысл, только если это правило уцелеет. Большая часть работы в этих выпусках — о том, чтобы оно уцелело.
Сначала — сделать карточку дешёвой в добавлении
Первые карточки вшивались в приложение руками: тип карточки в объединении типов, ветка на холсте, подписи, иконки, запись в таблицах MCP-сервера, шаг в каскаде удаления — около десятка мест на карточку. По одной это терпимо, а при параллельной работе над несколькими — гарантированный конфликт.
Поэтому сначала встроенные карточки стали плагинами: одна папка на стороне страницы, один модуль в главном процессе, IPC-каналы под общим префиксом, MCP-инструменты, которые регистрирует сама карточка, строки в собственном файле. Холст, сайдбар, стрелки и удаление обращаются с любой плагин-карточкой одинаково. Когда карточка — плагин, дать написать её кому-то другому — вопрос изоляции, а не проводки.
Карточки сообщества: песочница, из которой не выбраться за пределы карточки
Карточка сообщества — это маленькое веб-приложение. Его можно было бы запускать в отдельном нативном веб-представлении, но это оверлей уровня ОС: он лежал бы поверх холста, а не внутри него, и не масштабировался и не обрезался бы вместе с ним. Вместо этого карточка работает в изолированном iframe с непрозрачным origin, который отдаётся через собственный протокол приложения. Прежде чем строить на этом, мы проверили, что такой фрейм может и чего не может в этой конкретной версии Electron:
- Он работает в отдельном процессе ОС. Карточка, крутившая пустой цикл четыре секунды, не заморозила холст: таймер хоста продолжал тикать, самый большой разрыв — 63 мс.
window.api, Node иrequireтам просто нет, а обращение к родительской странице бросает ошибку безопасности.localStorageи IndexedDB недоступны (отсюда собственный API хранилища), а внешние запросы блокирует политика безопасности контента фрейма.- Он не может открывать окна, уходить в полноэкранный режим, читать буфер обмена и включать микрофон.
Две проверки не прошли, и именно они самые ценные. WebRTC полностью игнорирует политику безопасности контента: WebRTC-соединение дотянулось до TCP-порта на локальной машине. Исправление прямолинейное — загрузочный скрипт карточки удаляет конструктор WebRTC до того, как выполнится любой код карточки. Вторая была в приложении, а не во фрейме: его обработчик разрешений выдавал микрофон любому, кто попросит. Теперь он выдаёт его только собственной странице приложения верхнего уровня — это строка «Доступ к микрофону выдаётся только самому приложению» в журнале изменений.
Карточка никогда не общается со страницей, на которой нарисована. Она получает порт сообщений в главный процесс, привязанный к одному экземпляру карточки, и каждый запрос проверяется там по правам, которые пакет объявил, а вы выдали при установке. Всё, что доходит до другой карточки или агента, — передача данных через порт, промпт агенту, ввод в терминал, — требует и права, и стрелки между двумя карточками. Стрелка — это согласие именно на этот поток данных.
Установка — по адресу на GitHub, с привязкой к коммиту и сверкой с хэшем дерева файлов пакета. Обновления происходят только по вашему клику и сначала показывают, что изменилось в правах. Как сделать свою карточку — на странице Card SDK.
Проверенные карточки: значок, который значит одно
У установки по адресу есть очевидная дыра: как найти карточку, которую стоит ставить? 0.1.125 добавляет каталог карточек, проверенных командой NeuroSquad; он лежит в публичном репозитории и пополняется через пул-реквесты. Искать по нему можно в меню «Своя карточка…» или в настройках.
Значок решает главный процесс, и значит он ровно следующее: установленная карточка взята из проверенного репозитория, на проверенном коммите, и хэш её файлов, посчитанный при установке, совпадает с хэшем в каталоге. Локальная папка разработки, другой коммит или другие файлы — значка нет.
Установка из каталога идёт на шаг дальше: если имя, версия или хэш не совпадают с записью каталога, установка отклоняется. Выбирать приходилось между «поставить без значка» и «не ставить», а подменённый пакет — не то, что стоит тихо ставить. Более новая проверенная версия предлагается как обновление с обычным сравнением прав и никогда не ставится сама; карточка, пропавшая из списка, теряет значок, и с вашего холста ничего не удаляется.
MCP-серверы и скиллы — по стрелке
Каталог в приложении ищет по официальному реестру MCP (около 35 тысяч серверов) и по skills.sh (20 тысяч самых устанавливаемых скиллов). Поиск локальный, прямо в приложении, по снимкам, которые идут вместе с ним и обновляются инкрементально, — поэтому он работает без сети и мгновенно.
Очевидный способ дать агенту MCP-сервер — прописать его в конфиг агентского CLI. Мы сознательно так не сделали. NeuroSquad сам выступает MCP-клиентом каждого установленного сервера и отдаёт его инструменты через собственный MCP-сервер как <alias>__<tool> — только агентам, у которых есть стрелка к карточке сервера, и только пока эта стрелка существует. В папки настроек вашего CLI ничего не пишется, а секреты сервера не покидают главный процесс. Claude Code подхватывает новую стрелку без перезапуска; остальные CLI видят её при следующем старте.
Figma Context
io.github.GLips/Figma-Context-MCP · v0.13.2
Выдан агентам: 0
Протяните стрелку от карточки к агенту.
инструментов: 2 figma_context__*
Скиллы устроены так же — через один инструмент, skill_load, в описании которого перечислены подключённые к агенту скиллы и когда какой применять. Один флаг отделил функцию от демонстрации: агенты прячут MCP-инструменты за поиском инструментов, и в живой проверке свежий агент ни разу не загрузил подходящий скилл. С пометкой «загружать всегда» он сам загрузил нужный.
brainstorming
obra/superpowers
You MUST use this before any creative work - creating features, building components, adding functionality, or modifying behavior. Explores user intent, requirements and design before implementation.
Выдан агентам: 0
Протяните стрелку от карточки к агенту.
Что изменил аудит безопасности
Оба выпуска перед выходом прошли аудит безопасности, и три его результата стоит описать:
- У каждого агента свой токен для MCP-сервера приложения, выведенный из секрета текущего запуска и id агента. Раньше один агент теоретически мог действовать от имени другого; теперь чужой путь отвечает 401.
- Сторонние инструменты живут на втором MCP-сервере, которого нет в списке заранее разрешённых инструментов CLI. Поэтому CLI спрашивает вас перед каждым вызовом инструмента с чужого сервера, — а список инструментов при установке запоминается отпечатком, так что сервер, который позже поменяет свои инструменты, ждёт, пока вы примете изменения.
- Скилл берётся целиком, с одного коммита. Собственный хэш содержимого skills.sh не воспроизводится по файлам, которые он отдаёт, поэтому приложение закрепляет свой SHA-256 ровно тех файлов, которые вы просмотрели, и ставит именно их.
Не всё встаёт на место. Официальный удалённый сервер Figma отвечает 403 на динамическую регистрацию клиента — он принимает только одобренных клиентов, — поэтому каталог предлагает вместо него сервер сообщества, который работает с личным токеном. Пакеты, которым нужен локальный HTTP-сервер, пока не поддерживаются. И то и другое записано, а не обойдено.
Подробнее — на страницах MCP-серверов и скиллов, полный список — в журнале изменений 0.1.123 и 0.1.125.

