Skip to main content
Панель агента, мобильное приложение и любой инструмент, который сопрягается с работающей сессией, говорят на одном небольшом WebSocket-протоколе со слушателем сопряжения оркестратора. Сторонний хост — любой клиент, который вы строите на этом протоколе: панель Blender, расширение браузера, CLI, другой редактор, — который присоединяется к живой вкладке рабочего стола и управляет её сессией агента. Тот же агент, тот же контекст, без второго процесса Claude Code, ничего лишнего пользователю ставить не нужно.
Это ровно та поверхность, на которой построено мобильное приложение. Если вы умеете открыть WebSocket и отправить JSON, вы можете построить хост.

Как это работает

1

Рабочий стол уже слушает

Когда панель агента открыта, оркестратор запускает слушатель сопряжения с гейтингом по токену в LAN (см. Эндпоинты). Каждая открытая вкладка панели — это вкладка рабочего стола со стабильным tab_id и живой сессией агента.
2

Ваш хост подключается с токеном сопряжения

Откройте WebSocket к URL сопряжения с токеном в query string. Без валидного токена соединение отклоняется — сопряжение и есть вся граница безопасности.
3

Перечислите вкладки и присоединитесь

Отправьте list_tabs, чтобы узнать открытые вкладки рабочего стола, затем attach_tab, чтобы зеркалировать одну. Ваш хост теперь получает активность этой вкладки (стримом) и может ею управлять.
4

Управляйте общей сессией

Отправляйте кадры user_message. Пока вы присоединены, сервер направляет их на зеркалируемую вкладку — так что ваше сообщение входит в тот же разговор, в котором находится агент рабочего стола. Именно это делает это «один агент, общий контекст», а не второй сессией.

Эндпоинты

Слушатель сопряжения выводится из порта моста (COMFYUI_MCP_BRIDGE_PORT, по умолчанию 9180): URL сопряжения:
  • Токен либо закреплён пользователем через COMFYUI_MCP_PAIR_TOKEN (сопряжение всегда включено), либо чеканится на сессию и раздаётся через QR / поток сопряжения панели. Ваш хост получает его так же, как мобильное приложение: пользователь сопрягает его один раз.
  • По умолчанию в LAN, но публичная экспозиция встроена, когда пользователь её просит: модальное окно сопряжения панели предлагает режим «Интернет», который открывает зашифрованный быстрый туннель cloudflared, а предприятия могут направить его через собственный релей (COMFYUI_MCP_TUNNEL_BACKEND=relay). Токен гейтит в любом случае.

Формы сообщений

Все кадры — JSON-объекты с type. Кадры запрос/ответ несут cid (correlation id), который выбираете вы, и который эхом возвращается в соответствующем ответе.

Входящие — хост → оркестратор

Любое другое событие панели, которое вы отправляете, пока присоединены, точно так же направляется на зеркалируемую вкладку.

Исходящие — оркестратор → хост

Плюс живая активность агента зеркалируемой вкладки (стриминг ответов, статус, карточки), которую ваш хост отрисовывает.
attach_tab авторитетен — цель нельзя подделать. Сервер перезаписывает любой tab_id, который вы кладёте на исходящий кадр, вкладкой, к которой вы реально присоединились. Хост может управлять только вкладкой, к которой явно присоединился. Это нарочно; см. ниже.

Инварианты безопасности — хост ДОЛЖЕН их сохранять

Это гарантии, которые делают сопряжение безопасным. Построить хост, который их соблюдает, и есть весь контракт; хост, который пытается их обойти, — ровно то, что слушатель спроектирован отвергать.
Сохранять их — не ограничение вашего хоста: это и есть возможность. Они останавливают клиента от захвата сессии, с которой он никогда не сопрягался.
  1. Гейт токена. Слушатель отклоняет любое соединение без валидного токена сопряжения (verifyClient). Никогда не стройте поток, который сам возит или встраивает токен — пользователь сопрягает, один раз, намеренно.
  2. Авторитетный штамп attach_tab. Сервер, а не клиент, решает, на какую вкладку целятся ваши кадры. Не полагайтесь на клиентский tab_id для маршрутизации; сначала присоединитесь, потом отправляйте.
  3. Только не-headless цели. Можно присоединиться к настоящей вкладке рабочего стола, никогда к другому headless-клиенту (нельзя зеркалировать другой телефон/хост).
  4. Одна вкладка за раз. Присоединение к B сбрасывает подписку на A. Моделируйте одно активное зеркало на соединение.
  5. Закреплённый вид сокета. Вид соединения (headless vs рабочий стол) фиксируется на первом hello; не пытайтесь его перевернуть, чтобы обойти защиту от захвата.

Минимальный эталонный клиент

Научите LLM собрать ваш адаптер

Вставьте промпт ниже в Claude, ChatGPT или вашего агента для кода, чтобы он собрал каркас хост-адаптера для вашей платформы. Он несёт полный контракт протокола, так что модели не нужно гадать.
Copy this into your LLM

Зарегистрируйте свою интеграцию

Построили что-то? Зарегистрируйте — чтобы её можно было перечислить и чтобы мы могли предупреждать вас об изменениях протокола до выпуска:

Зарегистрировать сторонний хост

Откройте шаблон регистрации на GitHub — имя, платформа, репозиторий и против какой версии протокола вы строили.
Стабильность: кадры выше — то, на чём едет мобильное приложение, но это ещё не замороженный, версионированный контракт — читайте исходник (src/services/ui-bridge.ts) как авторитет и регистрируйте хост, чтобы вас уведомляли, когда формы сдвинутся.