> ## Documentation Index
> Fetch the complete documentation index at: https://comfyui-mcp.artokun.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Бэкенды / провайдеры

> Агент панели работает на ЛЮБОЙ LLM: Claude, ChatGPT, Gemini, Grok, Kimi или GLM на вашей собственной подписке/тарифе, бесплатная локальная модель через Ollama / LM Studio / llama.cpp (вообще без аккаунта) или любая размещённая модель через OpenAI-совместимый эндпоинт. Как работают нейтральный к провайдеру порт AgentBackend, выбор и матрица возможностей.

Агент [боковой панели](/docs/docs/ru/panel) **не привязан к провайдеру**. Выберите
**Claude**, **ChatGPT**, **Gemini** или **Ollama (локально)** — и соответствующий
агент запустится в фоне: подпискам не нужен API-ключ, а локальным моделям не
нужен аккаунт вообще. Бэкенд Ollama также говорит с **любым OpenAI-совместимым
эндпоинтом** (OpenRouter, DeepSeek, GLM, MiMo, vLLM, LM Studio), так что
«принесите свою модель» покрывает всё от бесплатной 4B на вашем GPU до
передовых. Все провайдеры делят одни и те же инструменты живого холста, те же
знания о моделях, те же одноразовые загрузки воркфлоу, ту же защиту от лишних
трат. [LLM Arena](/docs/docs/ru/arena) оценивает любого из них на настоящих задачах
ComfyUI.

```
panel (pick a provider) ⇄ loopback bridge ⇄ orchestrator (Claude · ChatGPT · Gemini · any LLM) ⇄ your graph
```

## Выберите провайдера, а не порт

Панель показывает **выбор бэкенда** — чипы Claude / ChatGPT / Gemini /
Antigravity / Grok / Kimi / GLM / Ollama / LM Studio / llama.cpp /
OpenRouter / Свой эндпоинт
(экспериментальные провайдеры вроде Copilot появляются за экспериментальным
переключателем). Нажатие на один подключает этого провайдера на одном общем
оркестраторе (один порт моста обслуживает всех провайдеров; каждая вкладка
панели выбирает своего провайдера в рукопожатии). URL моста живёт в
**«Дополнительно»** для оркестраторов, которыми управляет пользователь.

Смена провайдера **начинает новый чат** — разговоры не общие между
провайдерами — и панель публикует системную заметку об этом. Плейсхолдер
поля ввода следует за активным бэкендом («Спросите Claude…» / «Спросите
Ollama…»).

## Войти (один раз на провайдера — или вообще не входить)

* **Claude** — `claude` (или `claude setup-token`) — OAuth claude.ai (подписка).
* **ChatGPT (Codex)** — `codex login` — вход ChatGPT (подписка); работает
  через app-server Codex.
* **ChatGPT (прямой OAuth)** — лишний шаг не нужен, если вы когда-либо
  выполняли `codex login`: бэкенд `chatgpt` переиспользует `~/.codex/auth.json`
  и говорит с ChatGPT напрямую (без процесса Codex). Если ack говорит, что
  файла аутентификации нет, выполните `codex login` один раз.
* **Gemini** — `gemini` — вход Google. Заметьте: бесплатный индивидуальный
  вход Google сняли 2026-06-18: бэкенду Gemini CLI теперь нужен
  `GEMINI_API_KEY` или корпоративный / Code Assist аккаунт. Индивидуальным
  подписчикам: используйте **Antigravity** ниже.
* **Antigravity (подписка Google)** — установите официальный Antigravity
  CLI с [antigravity.google](https://antigravity.google), один раз выполните
  `agy` и завершите Google Sign-In (тарифы AI Pro/Ultra и бесплатные). Бэкенд
  ведёт `agy -p` на каждый ход с непрерывностью разговора `--continue`, читает
  живой каталог моделей из `agy models` и подключает инструменты ComfyUI +
  панели MCP через безопасный для слияния `.agents/mcp_config.json` рабочей
  области. Возможности снижены нарочно (нет задокументированного машиночитаемого
  потока событий): финальный текст ответа стримится, но нет прогресса по
  инструментам и нет входа изображений. Непрерывность разговора использует
  `agy --continue` (последний разговор аккаунта), поэтому гоняйте ОДНУ вкладку
  antigravity за раз — вторая вкладка или интерактивная сессия `agy` в
  терминале может украсть тред.
  `COMFYUI_MCP_ANTIGRAVITY_MODEL` закрепляет модель,
  `COMFYUI_MCP_ANTIGRAVITY_PATH` указывает на нестандартную установку.
* **Grok** — установите Grok CLI (xAI / Grok Build) и один раз выполните
  `grok`, чтобы войти; бэкенд ведёт его в режиме ACP. Панель также предлагает
  строку OAuth-входа в панели, когда Grok не готов.
* **Kimi (рекомендуется)** — установите [Kimi Code CLI](https://moonshotai.github.io/kimi-code/)
  и выполните `kimi login` (поток device-code); бэкенд переиспользует этот вход
  из `~/.kimi-code/credentials/kimi-code.json` (устаревший путь `~/.kimi` всё
  ещё читается как запасной). Это использует вашу **подписку Kimi Code** и
  предпочтительный способ гонять Kimi — дешевле и с более высоким лимитом, чем
  ключ Moonshot с оплатой за токен ниже. Задавайте `KIMI_API_KEY` вместо этого
  только для CI / использования без CLI, или `KIMI_CODE_HOME`, чтобы указать
  на нестандартный каталог учётных данных (`KIMI_SHARE_DIR` всё ещё чтится для
  тех, кто задал старое имя). OAuth-вход в панели тоже предлагается.
* **GLM** — задайте `ZAI_API_KEY` (Z.AI Coding Plan; также принимаются
  `GLM_API_KEY` / `ZHIPUAI_API_KEY`). Без CLI.
* **Kimi K3 (Moonshot)** — **альтернатива с оплатой за токен**, когда нет
  подписки Kimi Code (если она есть, предпочитайте маршрут **Kimi** выше).
  Задайте `MOONSHOT_API_KEY` с
  [platform.kimi.ai](https://platform.kimi.ai/console/api-keys). Без CLI. Это
  ключ **платформы** Moonshot (модель по умолчанию `kimi-k3`, база
  `https://api.moonshot.ai/v1`) — отдельно от провайдера **Kimi** выше,
  который является coding-подпиской Kimi Code. Переопределите модель через
  `COMFYUI_MCP_MOONSHOT_MODEL` и базу через `COMFYUI_MCP_MOONSHOT_BASE_URL`.
* **MiniMax** — задайте `MINIMAX_API_KEY` с
  [platform.minimax.io](https://platform.minimax.io/console/api-keys). Без CLI.
  Модель по умолчанию — `MiniMax-M3`, база по умолчанию — глобальный эндпоинт
  `https://api.minimax.io/v1` (совместимый с OpenAI, обычный Bearer). Для
  региона Китай задайте `COMFYUI_MCP_MINIMAX_BASE_URL=https://api.minimaxi.com/v1`.
  Переопределите модель через `COMFYUI_MCP_MINIMAX_MODEL`.
* **Copilot (экспериментально)** — войдите из экспериментальной строки
  провайдера панели. По умолчанию выключен; сначала включите экспериментальные
  бэкенды в Настройках.
* **Ollama (локально)** — без входа. Установите Ollama и подтяните модель с
  вызовом инструментов (`ollama pull gemma4:e4b`). Для **размещённой** модели
  вместо этого задайте `COMFYUI_MCP_OLLAMA_API=openai`,
  `COMFYUI_MCP_OLLAMA_BASE_URL` (например,
  `https://openrouter.ai/api/v1`) и API-ключ
  (`COMFYUI_MCP_OLLAMA_API_KEY` / `OPENROUTER_API_KEY`).
* **Свой эндпоинт** — без потока входа. Нацельте на любой OpenAI-совместимый
  `/v1` (vLLM, DeepSeek, Together, Azure, удалённый llama-server) в Настройки →
  Свой эндпоинт; добавьте API-ключ там, если сервер его требует (маскированный
  ввод, хранится 0600 оркестратором). См.
  [Локальные LLM → Свой эндпоинт](/docs/docs/ru/local-llms#свой-эндпоинт-любой-openai-совместимый-сервер).

### Готовность при подключении и онбординг

Каждый чип провайдера деградирует ЧЕСТНО, когда не готов: ack подключения
говорит вам точный недостающий шаг («Задайте ZAI\_API\_KEY…», «выполните
`codex login`…», «Войдите из экспериментальной строки…») вместо падения на
первом сообщении — а провайдер, чьи учётные данные появляются позже,
переключается в готовый на следующем «Подключить» без перезапуска.

Панель определяет готовность каждого провайдера в момент **«Подключить»** —
CLI в `PATH` плюс вход на диске для провайдеров с подпиской, присутствующий
бинарник для Ollama (остановленный демон деградирует мягко при подключении).
Вам не нужно гадать, какой провайдер настроен:

* **Карточка онбординга** появляется, только когда **ни один** провайдер не
  готов, с одноразовым шагом настройки на провайдера (для Ollama это установка
  * подтягивание модели, а не вход).
* Если сохранённый выбор провайдера непригоден, панель **автоматически
  переключится на готового провайдера** (сохранённое предпочтение
  восстанавливается, как только вы его настроите).
* Строка неготового провайдера становится действием **«настроить»**, которое
  подставляет шаг настройки работающему агенту.

## Как ведётся каждый провайдер

Оркестратор зависит от нейтрального к провайдеру порта **`AgentBackend`**
(внедрение зависимости). Каждый провайдер — адаптер:

|                           | Claude                                            | ChatGPT (Codex)              | Gemini                                 | Ollama / любая LLM                                                                                                         |
| ------------------------- | ------------------------------------------------- | ---------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| Драйвер                   | Claude Agent SDK — постоянная стриминговая сессия | JSON-RPC `codex app-server`  | `gemini --acp` (Agent Client Protocol) | прямой HTTP — Ollama `/api/chat` или любой OpenAI-совместимый `/v1/chat/completions`; бэкенд владеет всем агентским циклом |
| Аутентификация            | OAuth claude.ai                                   | вход ChatGPT                 | вход Google                            | нет (локально) / bearer-ключ (размещённый)                                                                                 |
| Инструменты живого холста | MCP-сервер SDK in-process                         | loopback streamable-HTTP MCP | loopback streamable-HTTP MCP           | [роутер из 6 инструментов](/docs/docs/ru/local-llms) через тот же loopback MCP                                                  |
| Headless MCP `comfyui`    | in-process                                        | stdio, объявленный в конфиге | stdio, объявленный в конфиге           | stdio-подпроцесс компактного режима за роутером                                                                            |

Определения инструментов `panel_*` живут в **одном общем списке**,
зарегистрированном на каждый путь, поэтому поверхность живого холста (включая
гейтинг подтверждения разрушительных операций для `panel_clear` /
`panel_restart_comfyui`) одинакова между провайдерами. Паритет автоматический
— ни один путь не перереализует инструмент. Бэкенд Ollama/любая-LLM
дополнительно оборачивает обе поверхности инструментов за шестью инструментами
роутера, чтобы небольшие модели не тонули в схемах — см.
[Локальные LLM и другие агенты](/docs/docs/ru/local-llms).

## Матрица возможностей

Дескриптор возможностей на бэкенд позволяет панели **мягко деградировать**
на функциях, которые провайдер не умеет:

| Возможность                                 | Claude          | ChatGPT (Codex)         | Gemini               | Ollama / любая LLM                                 |
| ------------------------------------------- | --------------- | ----------------------- | -------------------- | -------------------------------------------------- |
| Постоянный канал (толкать ходы со временем) | ✅               | ✅ (тред + `turn/start`) | ✅                    | ✅ (история в памяти)                               |
| Стриминговые дельты                         | ✅               | ✅                       | ✅                    | ✅ (NDJSON / SSE)                                   |
| Прервать посреди хода                       | ✅               | ✅ (`turn/interrupt`)    | ✅ (`session/cancel`) | ✅ (abort запроса)                                  |
| Откат разговора (форк на ходе)              | ✅ `forkSession` | ⚠️ выключено            | ⚠️ выключено         | ⚠️ выключено                                       |
| MCP-инструменты in-process                  | ✅               | ❌                       | ❌                    | ❌ (роутер над MCP-клиентами)                       |
| Перечисление моделей                        | ✅               | ✅ (`config/read`)       | статический каталог  | ✅ (`/api/tags` или `/models`)                      |
| Vision (вход изображений)                   | ✅               | ✅                       | ✅                    | ❌ (зависит от модели; пока выключено)              |
| Вход аудио                                  | ❌               | ❌                       | ❌                    | ✅ Ollama (проверено) · ⚠️ остальные (не проверено) |
| Слэш-команды провайдера                     | ✅               | ❌                       | ❌                    | ❌                                                  |

### Вход аудио — какие бэкенды, честно

Агент может вести аудиоинструменты ComfyUI на каждом бэкенде. **Слышать**
аудиофайл — уже, и таблица выше нарочно консервативна, потому что молча
брошенное вложение хуже отказанного:

* **Ollama (бэкенд `ollama`, нативный `/api/chat`) — поддерживается,
  проверяется по возможностям и проверен от конца до конца.** Аудио едет в
  массиве `images[]`, который является собственным носителем Ollama для аудио,
  а не хаком. Подтверждено вживую против локальной Ollama с `gemma4:e2b`,
  которая транскрибировала настоящий WAV.
  * **На модель, не на провайдера.** Прежде чем что-либо отправить, бэкенд
    спрашивает `POST /api/show`, сообщает ли *эта* модель возможность `audio`.
    Если нет, вложение отклоняется по имени, заявленный список возможностей
    цитируется вам, и вам говорят, какие модели умеют слышать
    (`ollama pull gemma4:e2b` / `gemma4:e4b` / `nemotron3:33b`). Заметьте:
    `GET /api/tags` тоже возвращает массив `capabilities` и это **не** тот же
    ответ — та же модель не сообщала audio там и сообщала audio из `/api/show`
    — поэтому консультируется только `/api/show`.
  * Возможность перепроверяется на каждом ходе, который несёт аудио, потому
    что тег Ollama изменчив: `ollama pull` может заменить веса под тем же
    именем, и кэшированный вердикт мог пережить модель, которую описывал.
* **LM Studio / llama.cpp / OpenRouter / GLM / Kimi / Moonshot / MiniMax /
  Copilot / свои OpenAI-совместимые эндпоинты — пытаемся, НЕ проверяем
  возможности.** Все они говорят на `/v1/chat/completions`,
  у которого нет эндпоинта возможностей, чтобы спросить, поэтому аудио
  отправляется как часть содержимого `input_audio`, и вам на этом ходе говорят,
  что доставка **не подтверждена**: *«Я не могу подтвердить, что модель их
  реально получает — если ответ не отражает то, что в файле, она его не
  услышала.»* Отказывать вместо этого значило бы отказать в аудио каждому
  эндпоинту, у которого просто нет API возможностей; страж, который не может
  сработать, — не вердикт. Сама форма `input_audio` была проверена против
  OpenAI-совместимого эндпоинта Ollama; чтит ли её *данный* сторонний хост —
  не то, что мы можем проверить, и мы этого не утверждаем.
* **Claude, ChatGPT (Codex), Codex CLI, Gemini, Grok, Antigravity, pi** — нет
  входа аудио в этой сборке. Прикрепление аудио отклоняется, прежде чем ход
  собран, и и вам, и модели говорят, называя провайдера и что сработало бы
  вместо этого.

  На Gemini/Grok это намеренный пропуск, а не пробел протокола: ACP
  *определяет* ContentBlock `audio`, но требует, чтобы агент сначала заявил
  возможность промпта `audio`, и ни один CLI этого не наблюдался. Путь
  отправки, который никогда не может быть использован, чей режим отказа —
  вложение, о неприбытии которого пользователю никогда не говорят, хуже
  честного отказа — поэтому он не поставляется.

Переключатель **«Вслепую»** про *пиксели*: он удерживает изображения и
**не** удерживает аудио.

Принуждение «Вслепую» доходит и до **нативных инструментов** агента, не
только до поверхности MCP comfyui: встроенный бэкенд Claude работает с
гейтом PreToolUse, который отказывает собственным `Read`/`WebFetch` на
содержимом изображений (растровые файлы по расширению *и* magic bytes, PDF,
выходы ноутбуков и URL ComfyUI `/view`), когда «Вслепую» включён — читается
вживую на каждый вызов, так что переключение посреди сессии связывает уже
следующий вызов инструмента. Полосы API/локальные (семейство Ollama, GLM,
Kimi, свои эндпоинты) несут только нашу поверхность инструментов, поэтому
MCP-скруб покрывает их полностью. **Полосы CLI** (Codex, Gemini, Grok,
Antigravity, pi, Copilot) гоняют свои собственные бинарники агентов, чьи
встроенные файловые инструменты мы не можем хукнуть — включение «Вслепую»
там публикует видимое предупреждение, которое говорит именно это, вместо
того чтобы подразумевать гарантию, которую мы не можем держать.

#### Как аудиофайл попадает на ход

Оркестратор принимает аудио на кадре панели `message` двумя способами:

```jsonc theme={null}
{ "type": "message", "text": "what key is this in?",
  "audio":  [{ "filename": "song.mp3", "type": "input" }],   // preferred
  "images": [{ "filename": "song.mp3", "type": "input" }] }  // also routed to audio
```

Вторая форма существует, потому что сборка панели, которая знает только про
`images`, иначе отдала бы аудиофайл части содержимого vision. Всё с аудио-
расширением автоматически переносится на путь аудио — включая форматы, которые
мы не умеем кодировать (`.wma`, `.mid`, `.aiff`), так что вы получаете
«конвертируйте в один из…», а не ошибку изображения.

Отправка одного и того же файла в **обоих** массивах (как в примере выше)
безопасна: ссылка идентифицируется по filename + subfolder + type, поэтому
доставляется один раз и считается один раз против лимита двух вложений на ход.
Её не принимают за второй файл и затем не отказывают за то, что не влезает.

<Note>
  **Элемент управления поля ввода** для выбора аудиофайла живёт в панели
  (`comfyui-mcp-panel`), которая является отдельным репозиторием — этой части
  нет в этом релизе. Пока она не приземлится, проводной контракт выше — то, что
  отправляет клиент, а маршрут упражняется от конца до конца со стороны
  оркестратора.
</Note>

Только нативный путь Ollama выше проверен от конца до конца, и это единственный,
где «эта модель умеет слышать» установлено, а не предположено. OpenAI-
совместимый путь — честная попытка с честной оговоркой; всё остальное в этом
разделе описывает отказ, а не возможность.

**Откат разговора** (форк чата обратно к прошлому ходу) — только Claude;
откат **кода/графа** (`/revert`, двойной Esc, снимки по ходам) работает на
каждом бэкенде, потому что живёт в оркестраторе, а не у провайдера.

## Усилие рассуждения при переключении

Выбор усилия/модели — **на провайдера**. Выбранное усилие переживает смену
провайдера, отображаясь на ближайший валидный уровень целевого бэкенда
(панель и бэкенды оркестратора делают одно и то же отображение):

* **Claude:** `low` · `medium` · `high` · `xhigh` · `max`
* **ChatGPT (Codex):** `none` · `minimal` · `low` · `medium` · `high` · `xhigh` · `max` · `ultra`
  (`max` / `ultra` на моделях класса GPT-5.6)
* **Gemini / Ollama:** пользовательской шкалы усилия нет — селектор скрыт.

## Паритет знаний и стоимости

Поскольку только Claude может загружать нативные скиллы, встроенная экспертиза
публикуется как один MCP-инструмент, который может вызвать любой бэкенд —
`list_packs`, чьи действия покрывают скиллы (`skill_list`, `skill_read`),
установочные пакеты (`list`, `read_workflow`) и шаблоны сервера
(`list_templates`) — плюс страховочная сетка локальный-GPU-vs-платный-API
(`action: "check_runtime"`) и одноразовый `panel_load_workflow`. См.
[Скиллы, пакеты и стоимость выполнения](/docs/docs/tools/skills-knowledge).

## См. также

* [Боковая панель](/docs/docs/ru/panel) — полный UX панели
* [Локальные LLM и другие агенты](/docs/docs/ru/local-llms) — роутер из 6 инструментов, требования к модели, настройка Hermes/OpenClaw/Copilot
* [Арена LLM](/docs/docs/ru/arena) — оцените СВОЮ модель на настоящих задачах ComfyUI
* [Скиллы, пакеты и стоимость выполнения](/docs/docs/tools/skills-knowledge) — инструменты паритета + стоимости
* Документ дизайна: [`design/agent-backend-injection.md`](https://github.com/artokun/comfyui-mcp/blob/main/design/agent-backend-injection.md)
