Claude Provider SwitcherSwitches the official Claude Code extension between model providers in one click — your native Claude subscription, direct provider endpoints (DeepSeek, MiniMax, …), a self-hosted gateway (LiteLLM, etc.) or a local server (LM Studio, Ollama). The active provider lives in the status bar: click it and pick another one from the menu — no panels to open. Per-profile hotkeys are even faster, and a sidebar view is where you add and edit connections (and can switch too). Pick a provider from the built-in catalog: the endpoint is pre-filled and the model list is fetched from the provider itself, so the only thing you usually type is your API key — while every connection parameter stays hand-editable when you need it. Languages: English · Русский · 中文
EnglishWhat it's for
Quick start
FeaturesThe interface
Setting up providers
Switching, day to day
Managing providers (sidebar)
The active provider is marked with a filled dot. Editing is field-by-field: pick a field, set its value, repeat, then Done. Color and Hotkey are chosen from a dropdown — no codes to remember. Adding a provider that isn't in the listThe Add provider menu ships a built-in catalog (loaded from a bundled
Click + Add provider, fill the row, then Save. Your providers then show up in the Add provider menu tagged Hotkeys
Profile fields
When do you need extra environment variables?Most setups never need these — the dedicated fields cover the common case. The Extra environment variables field is an escape hatch for third-party endpoints and gateways that need a per-provider tweak Claude Code reads from the environment. Common ones:
Example provider configsYou normally add these via the sidebar, but here are the values to enter (replace Native Claude subscription — leave every field empty (Base URL empty). DeepSeek (direct, Anthropic-compatible):
MiniMax (direct; models must be explicit):
Local LM Studio (offline) — enable the server (Developer → Start Server, port
Self-hosted gateway (LiteLLM / OpenAI-compatible proxy) — one endpoint, switch models with
Prefer editing JSON directly? Example
|
| Setting | Default | Description |
|---|---|---|
claudeProviderSwitcher.profiles |
[] |
Provider profiles { name, color?, hotkey?, env }. Managed via the sidebar. |
claudeProviderSwitcher.customProviders |
[] |
Extra providers added to the Add provider menu { name, baseUrl?, local?, icon?, opusModel?, sonnetModel?, haikuModel? }. Use this to add a provider that isn't built in; edit it as a table in the Settings UI. |
claudeProviderSwitcher.language |
auto |
UI language for the extension's own menus, notifications, sidebar, status bar and custom-providers table: auto / en / ru / zh. auto follows VS Code, falling back to English. Switches live. |
claudeProviderSwitcher.showStatusBarItem |
true |
Show the active-provider indicator in the status bar. |
claudeProviderSwitcher.showUsageStats |
true |
Show per-provider usage statistics (switch count + active time) in the tooltips. |
claudeProviderSwitcher.showTokenStats |
true |
Show per-provider token usage (today / last 7 days / last 30 days) in the tooltips, read from Claude Code's transcripts. Off disables transcript reading entirely. |
claudeProviderSwitcher.switchAction |
switch |
What happens on every switch (sidebar click, hotkey, cycle, menu): switch — switch the provider, then remind to restart the session; switchAndReload — switch and immediately reload the window so the next session picks up the new provider. |
claudeProviderSwitcher.writeClaudeSettings |
false |
Also mirror the active provider into the Claude Code CLI config at ~/.claude/settings.json (under env), so claude in a plain terminal uses the same provider. Only the keys this extension manages are touched; the rest of the file is preserved. Writes the active API key there in plain text. |
claudeProviderSwitcher.showRestartHint |
true |
After switching, tint the status bar item and remind you the Claude Code session must restart (new chat / Reload Window) to take effect. Clears on reload. |
claudeProviderSwitcher.applyPinnedOnOpen |
true |
When a workspace has a pinned provider, automatically switch to it on open. |
claudeProviderSwitcher.autoFallbackOnApply |
false |
Probe the target on every switch and, if it's unreachable, fall back to its configured fallback provider. When off, use Switch with fallback for on-demand failover. |
claudeProviderSwitcher.healthCheck |
manual |
How the 🟢/🔴 indicator refreshes: manual (the ❤ button / command) or periodic (on a timer). Token-free (GET /v1/models). |
claudeProviderSwitcher.healthCheckIntervalMinutes |
5 |
Refresh interval in minutes when healthCheck is periodic. |
Notes
- Start a new session after switching. Claude Code reads
claudeCode.environmentVariableswhen a session starts, not live — so after switching, open a new chat. A resumed chat (and a window reload, which restores the conversation) keeps the model and settings from its saved transcript, so a reload alone may not pick up a model change. SetclaudeProviderSwitcher.switchActiontoswitchAndReload, or use the Switch provider & reload window command, to reload automatically — but a fresh chat is the reliable way to apply a provider/model change. - Running sessions keep their provider. A switch only affects sessions started afterwards — which is exactly what lets you run different providers in parallel Claude Code tabs, in the same VS Code window or across windows (keep
switchActionatswitchfor that). - Prefer
ANTHROPIC_AUTH_TOKENoverANTHROPIC_API_KEYfor third-party endpoints (Bearer header). - Local servers (Ollama, LM Studio, llama.cpp, vLLM): the preset fills the Base URL and a throwaway token — set the model to your loaded model id. For llama.cpp, start
llama-serverwith--jinja, otherwise tool calls won't work and Claude Code stops acting like an agent. - Reasoning models may return an empty final message when
max_tokensis too low (tokens go into reasoning) — provider behavior, not the switcher.
Русский
Переключает официальное расширение Claude Code между провайдерами моделей в один клик: нативная подписка Claude, прямые эндпоинты (DeepSeek, MiniMax, …), свой шлюз (LiteLLM и т.п.) или локальный сервер (LM Studio, Ollama). Активный провайдер всегда виден в статус-баре: клик по индикатору — и выбираешь другого из меню, никакие панели открывать не нужно. Ещё быстрее — хоткеи на профиль; а подключения заводятся и редактируются в сайдбаре (переключаться оттуда тоже можно).
Провайдер выбирается из встроенного каталога: эндпоинт уже подставлен, а список моделей подтягивается с самого провайдера — так что обычно вводить нужно только API-ключ. При этом каждый параметр подключения остаётся доступным для ручного редактирования.
Основные сценарии
- Быстро переключать провайдеров внутри VS Code — при переключении переменные профиля пишутся в настройку
claudeCode.environmentVariablesрасширения Claude Code (читается при старте сессии). Твой~/.claude/settings.jsonне затрагивается. - …или синхронно с CLI — включи
writeClaudeSettings, и активный провайдер дополнительно зеркалится в~/.claude/settings.json, так чтоclaudeв обычном терминале переключается вместе с тобой. - Переключиться и сразу продолжить работу — команда Переключиться и перезагрузить окно (или
switchAction=switchAndReload) делает оба шага сразу, и новая сессия стартует на новом провайдере без лишних действий. В паре с авто-фолбэком недоступный провайдер автоматически заменяется резервным — переключение остаётся устойчивым. - Или работать с разными провайдерами параллельно — без авто-перезагрузки запущенные сессии сохраняют своего провайдера: переключись, открой новую вкладку Claude Code — и работай с двумя провайдерами одновременно прямо в одном окне VS Code (или в соседних окнах).
Быстрый старт
- Установи это расширение и Claude Code.
- Открой панель Claude Providers в Activity Bar (иконка из точек) → + Add provider. Выбери шаблон — Custom (пусто), Claude Subscription, Claude API, встроенный Anthropic-совместимый провайдер (DeepSeek, Kimi, MiniMax, Qwen, Z.ai, …) или локальный сервер (Ollama, LM Studio, llama.cpp, vLLM): Base URL (и маппинг моделей, где он фиксирован) подставится сам. Останется только вписать свой API-ключ. Все поля остаются редактируемыми (см. Поля профиля); пустой Base URL = нативная подписка.
- Переключайся кликом по индикатору в статус-баре, хоткеем профиля или по строке в сайдбаре.
- Запусти новую сессию Claude Code (новый чат / Reload Window) — переменные читаются при старте сессии, не на лету.
Возможности
Интерфейс
- 🔌 Статус-бар — активный провайдер всегда виден внизу окна; один клик открывает меню переключения, никакие панели не нужны. После переключения индикатор подсвечивается и напоминает перезапустить сессию (отключается настройкой
showRestartHint). - ⌨️ Хоткей на профиль — у каждого профиля своя комбинация (
Ctrl+Alt+1…Ctrl+Alt+9,Ctrl+Alt+0); новому профилю автоматически выдаётся ближайший свободный слот, биндинг сам прописывается в твойkeybindings.json. Плюс цикл:Ctrl+Alt+]/Ctrl+Alt+[(на macOSCmd+Alt+…). - 🎛️ Меню —
Claude Provider: Select provider…из палитры или через индикатор в статус-баре. - 🗂️ Сайдбар — панель Claude Providers в Activity Bar: добавить / изменить / удалить / дублировать / переместить / переключить провайдера. Редактирование по полям с выпадающими списками — без правки
settings.jsonруками и без кодов, которые надо помнить. - 🌐 Интерфейс на English / Русский / 中文 — настройка
language;autoследует языку VS Code.
Настройка провайдеров
- 📇 Встроенный каталог — Claude Subscription, Claude API, Anthropic-совместимые провайдеры (DeepSeek, Kimi, MiniMax, Qwen, Xiaomi MiMo, Z.ai, …) и локальные серверы (Ollama, LM Studio, llama.cpp, vLLM); Base URL и фиксированные маппинги моделей подставляются сами.
- 🧩 Выбор модели из списка — поля Opus/Sonnet/Haiku подтягивают каталог моделей провайдера (
GET /v1/models), и ты выбираешь из выпадающего списка, а не вводишь id вручную. - ➕ Свои провайдеры — табличный редактор (Manage custom providers…) для всего, чего нет в каталоге; твои записи появляются в меню Add provider с пометкой
(custom). Хранится в настройкеcustomProviders. - 🔐 Безопасные ключи — API-ключи хранятся в SecretStorage VS Code, а не в
settings.json; в редакторе показываются замаскированными. - ⚡ Проверка соединения — прямо из строки профиля проверить, что эндпоинт доступен и ключ принят.
- 🟢 Индикатор здоровья — цвет 🟢/🔴 показывает доступность каждого провайдера. Обновляй по кнопке (❤) или включи
healthCheck=periodic. Проверка идёт черезGET /v1/models— без инференса, ноль токенов. - 📊 Статистика использования — в подсказке каждого провайдера видно, сколько раз ты на него переключался, сколько времени он был активен и сколько токенов израсходовано за сегодня, за 7 дней и за 30 дней (вход / выход / кэш), с разбивкой по моделям рядом с каждой замапленной строкой Opus/Sonnet/Haiku. Токены читаются из транскриптов сессий Claude Code и относятся к тому провайдеру, который был активен на старте сессии. Считается локально (в globalState, не в
settings.json); сбросить — командой Сбросить статистику использования, скрыть — настройкамиshowUsageStats/showTokenStats(вторая также отключает чтение транскриптов). - 🧪 Доп. переменные окружения — задай любую другую переменную, которую читает Claude Code (напр.
ANTHROPIC_CUSTOM_HEADERS,CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY), на уровне профиля и без ручной правкиsettings.json. - 📤 Импорт / экспорт — поделиться профилями или сделать бэкап в JSON (ключи по умолчанию исключаются).
Переключение в работе
- ⚙️ Действие при переключении — настройка определяет, что происходит при каждом переключении: просто переключить (
switch, по умолчанию) или переключить и сразу перезагрузить окно (switchAndReload). Отдельная команда Переключиться и перезагрузить окно всегда делает оба шага, независимо от настройки. - 🔀 Авто-фолбэк — задай профилю резервный провайдер; Switch with fallback проверит его и, если он недоступен, переключится на резервный (по цепочке). Включи
autoFallbackOnApply, чтобы так работало при каждом переключении. - 📌 Привязка к workspace — закрепи провайдера за папкой; при открытии этого workspace расширение автоматически переключится на него (хранится по workspace, не в
settings.json). ПКМ → Pin to this workspace. - 🖥️ Зеркалирование в CLI —
writeClaudeSettingsдополнительно пишет активного провайдера в~/.claude/settings.json, чтобыclaudeв обычном терминале использовал его же. Трогаются только ключи, которыми управляет расширение; остальное в файле сохраняется. - 📝 Подсказка про шлюз — у профилей с
Base URL, похожим на сторонний LLM-шлюз, в тултипе появляется короткая заметка о поведении Claude Code для шлюзов (/modelиANTHROPIC_DEFAULT_*_MODEL). - ∞ Без лимита на число профилей (хоткеи покрывают первые 10 слотов; остальные — через сайдбар/меню).
Управление провайдерами (сайдбар)
| Действие | Где |
|---|---|
| Add | кнопка + в шапке → выбор шаблона (Custom / Claude Subscription / Claude API / встроенный провайдер), затем впиши ключ; сразу выдаёт ближайший свободный хоткей |
| Switch to | клик по строке (закрашенный кружок — активный) |
| Test connection | ⚡ в строке или ПКМ → Test connection |
| Edit | ✎ в строке или ПКМ → Edit |
| Delete | 🗑 в строке или ПКМ → Delete (удаление активного → переключение на первого оставшегося; удаление последнего → сброс на подписку) |
| Duplicate / Move up / Move down | контекстное меню (ПКМ) |
| Pin to this workspace | ПКМ → Pin to this workspace (при открытии этой папки провайдер включается автоматически; пункт Don’t auto-switch снимает привязку) |
| Switch with fallback | ПКМ → Switch with fallback (проверяет провайдера; если недоступен — переключает на резервного) |
| Switch & reload window | ПКМ → Переключиться и перезагрузить окно (переключает и перезагружает окно, чтобы новая сессия подхватила провайдера) |
| Check health | ❤ в шапке панели (обновляет 🟢/🔴 доступность всех провайдеров; без токенов) |
| Manage custom providers | меню «…» в шапке → Manage custom providers…, либо нижний пункт меню Add provider (табличный редактор для провайдеров не из встроенного списка) |
| Import / Export | меню «…» в шапке панели |
Активный провайдер помечен закрашенной точкой. Редактирование — по полям: выбрал поле, задал значение, повторил, потом Done. Color и Hotkey выбираются из списка — никаких кодов запоминать не надо.
Добавление провайдера, которого нет в списке
Меню Add provider содержит встроенный каталог (грузится из вшитого providers.json), но можно добавить и своего. Запусти Manage custom providers… — из меню Add provider (нижний пункт), из меню «…» в шапке панели или из палитры команд — откроется табличный редактор:
| Колонка | Смысл |
|---|---|
| Name | Имя в меню Add provider. |
| Base URL | ANTHROPIC_BASE_URL Anthropic-совместимого эндпоинта. Пусто — вариант «как подписка». |
| Local | Помещает провайдера в раздел Local servers, а не Anthropic-compatible providers. |
| Icon | Необязательно: файл логотипа из media/providers/ или id codicon (напр. server). |
| Opus / Sonnet / Haiku model | Необязательные модели по уровням, подставляются в новый профиль. |
Нажми + Add provider, заполни строку, затем Save. Провайдеры появятся в меню Add provider с пометкой (custom), а их эндпоинты так же сопоставляются с логотипами и health-check, как встроенные. Таблица один-в-один соответствует настройке claudeProviderSwitcher.customProviders — этот JSON можно править и напрямую. Ключи здесь не вводятся — их добавляешь в профиль (хранятся в SecretStorage) уже после выбора провайдера.
Хоткеи
- Назначаются на профиль. При Add ставится ближайший свободный
Ctrl+Alt+<n>; сменить можно в любой момент через Edit → Hotkey (или None). - Расширение само поддерживает твой User
keybindings.jsonв актуальном виде (трогает только свои записиclaudeProviderSwitcher.switchToIndex, чужие шорткаты не задевает).
Поля профиля
| Поле | Смысл |
|---|---|
| Name | Имя в меню, сайдбаре и статус-баре. |
| Badge | Цветная фигурка (🟢🔵🟣🟡🟠🟩🟦🔷…) из списка; авто-назначается при Add. (Логотип провайдера показывается в меню Add и во всплывающей подсказке.) |
| Hotkey | Необязательный Ctrl+Alt+<n>, авто-назначается при Add. |
| Fallback provider | (необязательно) другой профиль, на который переключаться, если этот недоступен — используется Switch with fallback и autoFallbackOnApply. |
ANTHROPIC_BASE_URL |
Anthropic-совместимый эндпоинт. Пусто = нативная подписка. |
ANTHROPIC_AUTH_TOKEN |
Ключ для сторонних эндпоинтов. Хранится в SecretStorage, а не в settings.json; в редакторе показывается замаскированным. |
ANTHROPIC_DEFAULT_FABLE_MODEL / …_OPUS_MODEL / …_SONNET_MODEL / …_HAIKU_MODEL |
На какие модели мапятся уровни Fable/Opus/Sonnet/Haiku. При выборе поля редактор подтягивает список моделей эндпоинта (GET /v1/models) — выбираешь из списка; ручной ввод всегда доступен. Уровень Fable при пустом поле берёт модель Opus (сторонние провайдеры не отдают claude-fable-5). |
API_TIMEOUT_MS |
(необязательно) таймаут запроса в мс. |
| Доп. переменные окружения | (необязательно) любая другая переменная, которую читает Claude Code — напр. CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY, ANTHROPIC_CUSTOM_HEADERS. Добавляются/меняются/удаляются в списке; ключи, у которых есть своё поле выше, отклоняются. |
Внутри Claude Code уровни можно менять командой
/model.
Когда реально нужны доп. переменные окружения?
Большинству они не нужны — штатных полей хватает для обычных случаев. Поле Доп. переменные окружения — это «отвёртка» для сторонних эндпоинтов и шлюзов, которым нужна донастройка на уровне провайдера, читаемая Claude Code из окружения. Частые:
| Переменная | Когда нужна | Почему per-provider |
|---|---|---|
MAX_THINKING_TOKENS = 0 |
Шлюз/модель отвергает запрос из-за thinking/reasoning-параметров (напр. 400 thinking options type cannot be disabled when reasoning_effort is set). 0 отключает thinking. |
Зависит от конкретного шлюза/модели |
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING = 1 |
То же на старых моделях (Opus 4.6 / Sonnet 4.6) — возврат к фиксированному бюджету thinking. | Зависит от модели |
ANTHROPIC_CUSTOM_HEADERS |
Эндпоинту нужны доп. HTTP-заголовки (второй токен, tenant-id, маршрутизация). Формат: Header-Name: value (несколько — через перенос строки). |
У каждого шлюза свои |
DISABLE_PROMPT_CACHING = 1 |
Эндпоинт не понимает cache_control и падает на кэшируемых запросах. |
Свойство этого провайдера |
ANTHROPIC_CUSTOM_MODEL_OPTION (+ …_NAME, …_DESCRIPTION) |
Добавить в picker /model id модели, которую discovery не покажет (напр. модель шлюза не на claude). |
Зависит от id моделей шлюза |
ANTHROPIC_DEFAULT_OPUS_MODEL_NAME / …_DESCRIPTION |
Дать прикреплённой модели шлюза понятное имя в picker /model. |
Косметика, по шлюзу |
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY = 1 |
Показать в /model остальные модели шлюза из его /v1/models. Твои три tier-модели уже в picker'е как Custom Opus/Sonnet/Haiku — это только для остального каталога, и добавляет лишь id на claude/anthropic (для имён вроде DeepSeek/MiniMax/GLM ничего не даёт — используй ANTHROPIC_DEFAULT_*_MODEL). Нужна редко. |
Per-gateway, по желанию |
Применяются в следующей сессии Claude Code (новый чат или перезагрузка окна). Возобновлённую сессию они не меняют — она тянет модель и настройки из сохранённого transcript.
Примеры провайдеров
Обычно их добавляют через сайдбар, но вот значения для ввода (вместо YOUR_*_KEY — свои ключи):
- Нативная подписка — все поля пустые (пустой Base URL).
- DeepSeek: Base URL
https://api.deepseek.com/anthropic, токенYOUR_DEEPSEEK_API_KEY, Opus/Sonnet/Haiku =deepseek-v4-pro/deepseek-v4-flash/deepseek-v4-flash. - MiniMax: Base URL
https://api.minimax.io/anthropic, токенYOUR_MINIMAX_API_KEY, Opus/Sonnet/Haiku =MiniMax-M3/MiniMax-M3/MiniMax-M2.7. - LM Studio: Base URL
http://localhost:1234, токенlmstudio, модель = точныйidизhttp://localhost:1234/v1/models(включи сервер: Developer → Start Server). - Свой шлюз: Base URL
https://your-gateway.example, токенYOUR_GATEWAY_KEY, модели — алиасы твоего шлюза.
Полный пример settings.json см. в свёрнутом блоке английской секции выше.
Настройки
| Настройка | По умолчанию | Описание |
|---|---|---|
claudeProviderSwitcher.profiles |
[] |
Профили { name, color?, hotkey?, env }. Управляются через сайдбар. |
claudeProviderSwitcher.customProviders |
[] |
Свои провайдеры для меню Add provider { name, baseUrl?, local?, icon?, opusModel?, sonnetModel?, haikuModel? }. Добавляйте недостающего провайдера; редактируется таблицей в UI настроек. |
claudeProviderSwitcher.language |
auto |
Язык интерфейса расширения (меню, уведомления, сайдбар, статус-бар, таблица провайдеров): auto / en / ru / zh. auto следует языку VS Code с откатом на английский. Переключается на лету. |
claudeProviderSwitcher.showStatusBarItem |
true |
Показывать индикатор активного провайдера в статус-баре. |
claudeProviderSwitcher.showUsageStats |
true |
Показывать статистику использования по провайдеру (число переключений + время активности) в подсказках. |
claudeProviderSwitcher.showTokenStats |
true |
Показывать токены по провайдеру (за сегодня / 7 дней / 30 дней) в подсказках, читая транскрипты Claude Code. Выкл. полностью отключает чтение транскриптов. |
claudeProviderSwitcher.switchAction |
switch |
Что делать при каждом переключении (клик в сайдбаре, хоткей, цикл, меню): switch — переключить и напомнить о перезапуске сессии; switchAndReload — переключить и сразу перезагрузить окно, чтобы новая сессия стартовала на новом провайдере. |
claudeProviderSwitcher.writeClaudeSettings |
false |
Дублировать активного провайдера в CLI-конфиг Claude Code ~/.claude/settings.json (в ключ env), чтобы claude в обычном терминале использовал того же провайдера. Трогаются только управляемые расширением ключи; остальное в файле сохраняется. Активный API-ключ пишется туда открытым текстом. |
claudeProviderSwitcher.showRestartHint |
true |
После переключения подсвечивать индикатор в статус-баре и напоминать, что сессию Claude Code нужно перезапустить (новый чат / Reload Window). Сбрасывается при перезагрузке окна. |
claudeProviderSwitcher.applyPinnedOnOpen |
true |
Если у workspace есть закреплённый провайдер — автоматически переключаться на него при открытии. |
claudeProviderSwitcher.autoFallbackOnApply |
false |
При каждом переключении проверять провайдера и, если он недоступен, переключаться на его резервного. Если выключено — failover по запросу командой Switch with fallback. |
claudeProviderSwitcher.healthCheck |
manual |
Как обновляется индикатор 🟢/🔴: manual (кнопка ❤ / команда) или periodic (по таймеру). Без токенов (GET /v1/models). |
claudeProviderSwitcher.healthCheckIntervalMinutes |
5 |
Интервал обновления (в минутах) при healthCheck = periodic. |
Заметки
- После переключения начни новую сессию. Claude Code читает
claudeCode.environmentVariablesпри старте сессии, а не на лету — поэтому после переключения открой новый чат. Возобновлённый чат (и перезагрузка окна, которая восстанавливает беседу) держит модель и настройки из сохранённого transcript, так что один лишь reload может не подхватить смену модели. Можно включитьclaudeProviderSwitcher.switchAction=switchAndReloadили использовать команду Переключиться и перезагрузить окно для авто-reload — но надёжно применяет смену провайдера/модели именно новый чат. - Запущенные сессии сохраняют своего провайдера. Переключение влияет только на сессии, начатые после него — именно это позволяет работать с разными провайдерами в параллельных вкладках Claude Code, в одном окне VS Code или в соседних (для этого держи
switchAction=switch). - Для сторонних эндпоинтов используй
ANTHROPIC_AUTH_TOKEN, неANTHROPIC_API_KEY(заголовок Bearer). - Локальные серверы (Ollama, LM Studio, llama.cpp, vLLM): пресет подставляет Base URL и токен-заглушку — задай модель = id своей загруженной модели. Для llama.cpp запускай
llama-serverс флагом--jinja, иначе не работают вызовы инструментов и Claude Code перестаёт вести себя как агент. - Reasoning-модели при малом
max_tokensмогут вернуть пустой финальный ответ — это поведение провайдера, не переключателя.
中文
让官方 Claude Code 扩展在不同模型服务商之间一键切换 —— 原生 Claude 订阅、服务商直连端点(DeepSeek、MiniMax 等)、 自建网关(LiteLLM 等)或本地服务(LM Studio、Ollama)。当前服务商始终显示在状态栏:点击 指示器即可从菜单中选择另一个,无需打开任何面板。每个配置的快捷键更快一步;侧边栏则用于添加和 编辑连接(也能在那里切换)。
从内置目录中选择服务商:端点已预填,模型列表直接从服务商拉取,通常只需输入你的 API 密钥 —— 同时所有连接参数仍可随时手动编辑。
主要场景
- 在 VS Code 内快速切换服务商 —— 切换时把配置的环境变量写入 Claude Code 扩展的
claudeCode.environmentVariables设置(会话启动时读取),不会触碰你的~/.claude/settings.json。 - ……或与 CLI 保持同步 —— 开启
writeClaudeSettings,当前服务商会同时镜像到~/.claude/settings.json,让终端里的claude跟着一起切换。 - 切换并立即继续工作 —— 切换服务商并重新加载窗口 命令(或
switchAction=switchAndReload) 一步完成切换与重载,新会话直接运行在新服务商上。配合自动回退:目标不可达时自动改用其备用服务商, 切换始终稳定可靠。 - 或并行使用多个服务商 —— 不开自动重载时,已运行的会话保持各自的服务商:切换后新开一个 Claude Code 标签页,即可在同一个 VS Code 窗口里同时使用两个服务商(跨窗口也可以)。
快速开始
- 安装本扩展和 Claude Code 扩展。
- 从活动栏打开 Claude Providers 视图(圆点图标),点击 + Add provider,选择一个模板 —— Custom(空白)、Claude Subscription、Claude API、内置的 Anthropic 兼容服务商(DeepSeek、Kimi、MiniMax、Qwen、Xiaomi MiMo、Z.ai 等)或本地服务(Ollama、LM Studio、llama.cpp、vLLM):Base URL(以及 固定的模型映射)会自动填好,你只需填入自己的 API 密钥。所有字段仍可编辑(见下方 配置字段);Base URL 留空 = 原生订阅。
- 点击状态栏指示器、用配置的快捷键,或点击侧边栏中的行来切换。
- 启动新的 Claude Code 会话(新对话 / 重载窗口)使其生效 —— Claude Code 在会话启动时读取环境变量, 不会实时刷新。
功能特性
界面
- 🔌 状态栏 —— 当前服务商始终显示在窗口底部;一次点击即打开切换菜单,无需任何面板。切换后会高亮 并提醒你重启会话(可用
showRestartHint关闭)。 - ⌨️ 每个配置独立快捷键(
Ctrl+Alt+1…Ctrl+Alt+9、Ctrl+Alt+0);新配置自动分配下一个空闲槽位, 快捷键自动写入你的keybindings.json。另有循环切换:Ctrl+Alt+]/Ctrl+Alt+[(macOS 为Cmd+Alt+…)。 - 🎛️ 菜单 —— 命令面板中的
Claude Provider: Select provider…,或通过状态栏项。 - 🗂️ 侧边栏 —— 活动栏中的 Claude Providers 视图,可添加 / 编辑 / 删除 / 复制 / 重排 / 切换 服务商。逐字段编辑、下拉选择 —— 无需手动改
settings.json,无需记任何代码。 - 🌐 界面支持 English / Русский / 中文 ——
language设置;auto跟随 VS Code。
配置服务商
- 📇 内置目录 —— Claude Subscription、Claude API、Anthropic 兼容服务商(DeepSeek、Kimi、MiniMax、Qwen、Xiaomi MiMo、Z.ai 等)和本地服务(Ollama、LM Studio、llama.cpp、vLLM);Base URL 与固定的模型映射 自动预填。
- 🧩 从列表选择模型 —— Opus/Sonnet/Haiku 字段会从服务商拉取模型目录(
GET /v1/models), 让你从下拉列表中选择,而无需手动输入 id。 - ➕ 添加自定义服务商 —— 表格编辑器(Manage custom providers…)可添加目录中没有的任意服务商; 自定义项以
(custom)标记出现在 Add provider 菜单中。由customProviders设置存储。 - 🔐 密钥安全 —— API 密钥存储在 VS Code SecretStorage 中,而非
settings.json;编辑器中以掩码显示。 - ⚡ 测试连接 —— 直接在行内检查端点是否可达、API 密钥是否被接受。
- 🟢 健康指示器 —— 用 🟢/🔴 颜色显示每个服务商的可达性。可按需刷新(❤ 按钮),或将
healthCheck设为periodic。检测使用GET /v1/models—— 不触发推理、零 token 消耗。 - 📊 使用统计 —— 每个服务商的悬浮提示会显示你切换到它的次数、它处于活跃状态的时长,以及今天、最近 7 天和最近 30 天的 token 用量(输入 / 输出 / 缓存),并在每个映射的 Opus/Sonnet/Haiku 行旁显示该模型的细分用量。token 数据读取自 Claude Code 的会话记录,并归属到会话开始时处于活跃状态的服务商。统计在本地进行(存于 globalState,而非
settings.json);可用 重置使用统计 命令清除,或用showUsageStats/showTokenStats隐藏(后者还会停止读取会话记录)。 - 🧪 额外环境变量 —— 按配置设置 Claude Code 读取的任意其他变量(如
ANTHROPIC_CUSTOM_HEADERS、CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY),无需手动编辑settings.json。 - 📤 导入 / 导出 —— 以 JSON 形式分享或备份配置(默认不含密钥)。
日常切换
- ⚙️ 切换行为设置 —— 控制每次切换时执行的操作:仅切换(
switch,默认),或切换并立即重新加载窗口 (switchAndReload)。专用的 切换服务商并重新加载窗口 命令始终一步完成两者,不受设置影响。 - 🔀 自动回退 —— 为配置指定一个回退服务商;Switch with fallback 会先探测目标,若不可达则切换到 回退服务商(沿链依次尝试)。开启
autoFallbackOnApply可让每次切换都执行此操作。 - 📌 绑定到工作区 —— 将服务商绑定到某个文件夹;打开该工作区时自动切换到它(按工作区存储, 不写入
settings.json)。右键 → Pin to this workspace。 - 🖥️ 同步到 CLI ——
writeClaudeSettings会把活动服务商同时写入~/.claude/settings.json,让普通 终端中的claude也使用它。仅修改本扩展管理的键,文件其余内容保持不变。 - 📝 网关提示 ——
Base URL看起来像第三方 LLM 网关的服务商,其悬停提示会附上关于 Claude Code 在 网关上对/model和ANTHROPIC_DEFAULT_*_MODEL行为的简短说明。 - ∞ 配置数量不限(快捷键覆盖前 10 个槽位,其余通过侧边栏/菜单切换)。
管理服务商(侧边栏)
| 操作 | 位置 |
|---|---|
| 添加 | 视图标题栏的 + → 选择模板(Custom / Claude Subscription / Claude API / 内置服务商),再填入密钥;自动分配下一个空闲快捷键 |
| 切换到 | 点击该行(实心圆点标记当前服务商) |
| 测试连接 | 行内 ⚡ 或右键 → Test connection |
| 编辑 | 行内 ✎ 或右键 → Edit |
| 删除 | 行内 🗑 或右键 → Delete(删除当前项会切到第一个剩余项;删除最后一个会重置为订阅) |
| 复制 / 上移 / 下移 | 右键菜单 |
| 绑定到工作区 | 右键 → Pin to this workspace(打开该文件夹时自动切换到此服务商;选 Don’t auto-switch 取消绑定) |
| 带回退切换 | 右键 → Switch with fallback(先探测该服务商;不可达则切换到其回退项) |
| 切换并重载窗口 | 右键 → 切换服务商并重新加载窗口(切换后重载,让新会话生效) |
| 健康检测 | 视图标题栏 ❤(刷新所有服务商的 🟢/🔴 可达性;零 token) |
| 管理自定义服务商 | 视图标题栏「…」菜单 → Manage custom providers…,或 Add provider 菜单底部项(为不在内置列表中的服务商打开表格编辑器) |
| 导入 / 导出 | 视图标题栏的「…」菜单 |
当前服务商以实心圆点标记。编辑是逐字段进行的:选择字段、填值、重复,最后 Done。颜色与快捷键 都从下拉列表选择 —— 无需记任何代码。
添加内置列表中没有的服务商
Add provider 菜单自带一份内置目录(从打包的 providers.json 加载),但你也可以添加自己的。运行 Manage custom providers… —— 从 Add provider 菜单(底部项)、视图标题栏「…」菜单或命令面板 —— 打开一个表格编辑器:
| 列 | 含义 |
|---|---|
| Name | 在 Add provider 菜单中显示的名称。 |
| Base URL | 服务商 Anthropic 兼容端点的 ANTHROPIC_BASE_URL。留空表示「订阅式」条目。 |
| Local | 将其列在 Local servers 而非 Anthropic-compatible providers 下。 |
| Icon | 可选:media/providers/ 下的标志文件,或 VS Code codicon id(如 server)。 |
| Opus / Sonnet / Haiku model | 可选的档位→模型默认值,会预填到新配置中。 |
点击 + Add provider,填好一行,然后 Save。你的服务商会以 (custom) 标记出现在 Add provider 菜单中,其端点也会像内置项一样用于标志匹配和健康检测。该表格与 claudeProviderSwitcher.customProviders 设置一一对应,你也可以直接编辑该 JSON。这里不填密钥 —— 选择服务商后在每个配置中单独添加(保存在 SecretStorage 中)。
快捷键
- 按配置分配。添加时默认取下一个空闲的
Ctrl+Alt+<n>;随时可在 Edit → Hotkey 修改(或设为 None)。 - 扩展会自动同步你的用户
keybindings.json(只管理自己的claudeProviderSwitcher.switchToIndex条目,绝不触碰你的其他快捷键)。
配置字段
| 字段 | 含义 |
|---|---|
| Name | 显示在菜单、侧边栏和状态栏。 |
| Badge | 彩色图形(🟢🔵🟣🟡🟠🟩🟦🔷…),从列表选择;添加时自动分配。(服务商标志显示在 Add 菜单和悬停提示中。) |
| Hotkey | 可选的 Ctrl+Alt+<n> 快捷键,添加时自动分配。 |
| Fallback provider | (可选)当此服务商不可达时切换到的另一个配置 —— 由 Switch with fallback 和 autoFallbackOnApply 使用。 |
ANTHROPIC_BASE_URL |
Anthropic 兼容端点。留空 = 原生订阅。 |
ANTHROPIC_AUTH_TOKEN |
第三方端点的 API 密钥。存储在 SecretStorage 中,而非 settings.json;编辑器中以掩码显示。 |
ANTHROPIC_DEFAULT_FABLE_MODEL / …_OPUS_MODEL / …_SONNET_MODEL / …_HAIKU_MODEL |
Fable/Opus/Sonnet/Haiku 档位映射到的模型。选择该字段时编辑器会拉取端点的模型列表(GET /v1/models)供下拉选择;也始终可手动输入。Fable 档位留空时默认使用 Opus 模型(第三方服务商不提供 claude-fable-5)。 |
API_TIMEOUT_MS |
(可选)请求超时(毫秒)。 |
| 额外环境变量 | (可选)Claude Code 读取的任意其他变量 —— 如 CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY、ANTHROPIC_CUSTOM_HEADERS。在小列表中添加/编辑/删除;上方已有专门字段的键会被拒绝。 |
在 Claude Code 内部仍可用
/model切换档位。
什么时候真的需要额外环境变量?
大多数场景都用不到 —— 专用字段已覆盖常见需求。额外环境变量字段是为第三方端点和网关准备的「应急口」, 用于设置 Claude Code 从环境读取的、针对单个服务商的调整。常见的有:
| 变量 | 何时需要 | 为何按服务商设置 |
|---|---|---|
MAX_THINKING_TOKENS = 0 |
网关/模型因 thinking/reasoning 参数拒绝请求(如 400 thinking options type cannot be disabled when reasoning_effort is set)。设为 0 关闭 thinking。 |
取决于具体网关/模型 |
CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING = 1 |
旧模型(Opus 4.6 / Sonnet 4.6)上同理 —— 恢复固定 thinking 预算。 | 取决于模型 |
ANTHROPIC_CUSTOM_HEADERS |
端点需要额外 HTTP 头(第二个令牌、tenant id、路由提示)。格式:Header-Name: value(多个用换行分隔)。 |
各网关各不相同 |
DISABLE_PROMPT_CACHING = 1 |
端点不理解 cache_control,对缓存请求报错。 |
该服务商的特性 |
ANTHROPIC_CUSTOM_MODEL_OPTION(+ …_NAME、…_DESCRIPTION) |
向 /model picker 添加 discovery 不会列出的模型 id(如非 claude 命名的网关模型)。 |
取决于网关的模型 id |
ANTHROPIC_DEFAULT_OPUS_MODEL_NAME / …_DESCRIPTION |
给固定的网关模型在 /model picker 里一个友好名称。 |
外观,按网关 |
CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY = 1 |
在 /model 中列出网关 /v1/models 里的其他模型。你的三个档位模型已作为 Custom Opus/Sonnet/Haiku 出现在 picker 中 —— 这只用于其余目录,且只添加 id 以 claude/anthropic 开头的模型(对 DeepSeek/MiniMax/GLM 之类的名称无效,请用 ANTHROPIC_DEFAULT_*_MODEL)。很少需要。 |
按网关,可选 |
这些在下一个 Claude Code 会话生效(新建对话或重新加载窗口)。它们不会改变恢复的会话 —— 后者沿用其已保存 transcript 中的模型与设置。
服务商示例(用自己的密钥替换 YOUR_*_KEY)
- 原生 Claude 订阅 —— 所有字段留空(Base URL 为空)。
- DeepSeek: Base URL
https://api.deepseek.com/anthropic,令牌YOUR_DEEPSEEK_API_KEY, Opus/Sonnet/Haiku =deepseek-v4-pro/deepseek-v4-flash/deepseek-v4-flash。 - MiniMax: Base URL
https://api.minimax.io/anthropic,令牌YOUR_MINIMAX_API_KEY, Opus/Sonnet/Haiku =MiniMax-M3/MiniMax-M3/MiniMax-M2.7。 - 本地 LM Studio: Base URL
http://localhost:1234,令牌lmstudio,模型 =http://localhost:1234/v1/models返回的精确id(启动服务:Developer → Start Server)。 - 自建网关: Base URL
https://your-gateway.example,令牌YOUR_GATEWAY_KEY,模型 = 你网关的模型别名。
设置项
| 设置 | 默认 | 说明 |
|---|---|---|
claudeProviderSwitcher.profiles |
[] |
服务商配置 { name, color?, hotkey?, env },通过侧边栏管理。 |
claudeProviderSwitcher.customProviders |
[] |
添加到 Add provider 菜单的自定义服务商 { name, baseUrl?, local?, icon?, opusModel?, sonnetModel?, haikuModel? },用于添加内置列表中没有的服务商;可在设置界面以表格形式编辑。 |
claudeProviderSwitcher.language |
auto |
扩展自身界面(菜单、通知、侧边栏、状态栏、自定义服务商表格)的语言:auto / en / ru / zh。auto 跟随 VS Code,回退到英语。实时切换。 |
claudeProviderSwitcher.showStatusBarItem |
true |
在状态栏显示当前服务商指示器。 |
claudeProviderSwitcher.showUsageStats |
true |
在悬浮提示中显示每个服务商的使用统计(切换次数 + 活跃时长)。 |
claudeProviderSwitcher.showTokenStats |
true |
在悬浮提示中显示每个服务商的 token 用量(今天 / 最近 7 天 / 最近 30 天),读取自 Claude Code 的会话记录。关闭后将完全停止读取会话记录。 |
claudeProviderSwitcher.switchAction |
switch |
每次切换(侧边栏点击、快捷键、循环、菜单)时执行的操作:switch —— 切换后提醒重启会话;switchAndReload —— 切换后立即重新加载窗口,使新会话使用新服务商。 |
claudeProviderSwitcher.writeClaudeSettings |
false |
同时将活动服务商写入 Claude Code CLI 配置 ~/.claude/settings.json(env 键),让普通终端中的 claude 使用同一服务商。仅修改本扩展管理的键,文件其余内容保持不变。活动 API 密钥会以明文写入该文件。 |
claudeProviderSwitcher.showRestartHint |
true |
切换后高亮状态栏项并提醒 Claude Code 会话需要重启(新建对话 / 重新加载窗口)才能生效。重载窗口后清除。 |
claudeProviderSwitcher.applyPinnedOnOpen |
true |
工作区有绑定的服务商时,打开即自动切换到它。 |
claudeProviderSwitcher.autoFallbackOnApply |
false |
每次切换前先探测目标,不可达则自动切到其回退服务商;关闭时可用 Switch with fallback 按需回退。 |
claudeProviderSwitcher.healthCheck |
manual |
🟢/🔴 指示器的刷新方式:manual(❤ 按钮 / 命令)或 periodic(定时)。零 token(GET /v1/models)。 |
claudeProviderSwitcher.healthCheckIntervalMinutes |
5 |
healthCheck 为 periodic 时的刷新间隔(分钟)。 |
说明
- 切换后请开始新会话。 Claude Code 在会话启动时读取
claudeCode.environmentVariables,而非实时刷新 —— 因此切换后请新建对话。恢复的对话(以及会恢复对话的窗口重载)会沿用其已保存 transcript 中的 模型与设置,所以仅重载窗口可能无法应用模型变更。可将claudeProviderSwitcher.switchAction设为switchAndReload,或使用 切换服务商并重新加载窗口 命令来自动重载 —— 但可靠地应用服务商/模型变更的方式 是新建对话。 - 已运行的会话保持原服务商。 切换只影响之后启动的会话 —— 正因如此,你可以在并行的 Claude Code 标签页中使用不同的服务商,同一个 VS Code 窗口内或跨窗口均可(此时请保持
switchAction为switch)。 - 第三方端点优先用
ANTHROPIC_AUTH_TOKEN而非ANTHROPIC_API_KEY(Bearer 头)。 - 本地服务(Ollama、LM Studio、llama.cpp、vLLM):预设会填好 Base URL 和一个占位令牌 —— 请把模型 设为你已加载模型的 id。对于 llama.cpp,启动
llama-server时要加--jinja,否则工具调用无法 工作,Claude Code 会不再像智能体一样运行。 - 推理类模型在
max_tokens过小时可能返回空的最终消息(token 都用于推理)—— 这是服务商行为,与本扩展无关。
Privacy / Конфиденциальность / 隐私
This extension stores nothing remotely and bundles no credentials. It reads claudeProviderSwitcher.profiles, keeps API keys in VS Code SecretStorage (not settings.json), writes claudeCode.environmentVariables (including the active provider's key, which Claude Code reads there), and manages its own entries in your keybindings.json. Test connection sends one request to the endpoint you configured — nowhere else. · Расширение ничего не хранит удалённо и не содержит ключей. Оно читает claudeProviderSwitcher.profiles, хранит API-ключи в SecretStorage VS Code (а не в settings.json), пишет claudeCode.environmentVariables (включая ключ активного провайдера, откуда его читает Claude Code) и ведёт свои записи в keybindings.json. Проверка соединения отправляет один запрос только на указанный тобой эндпоинт. · 本扩展不在远端存储任何内容,也不附带凭据。它读取 claudeProviderSwitcher.profiles,将 API 密钥保存在 VS Code SecretStorage(而非 settings.json), 写入 claudeCode.environmentVariables(含当前服务商的密钥,Claude Code 在此读取),并维护 keybindings.json 中属于自己的条目。测试连接 仅向你配置的端点发送一个请求。
Trademarks / Товарные знаки / 商标
Provider names and logos (DeepSeek, MiniMax, Qwen, Z.ai, Vercel, Poe, …) are trademarks of their respective owners and are used here for identification only. This extension is independent and not affiliated with, endorsed by, or sponsored by any of these providers. · Названия и логотипы провайдеров (DeepSeek, MiniMax, Qwen, Z.ai, Vercel, Poe и др.) — товарные знаки их владельцев и используются только для идентификации. Расширение независимо и не аффилировано ни с одним из провайдеров, не одобрено и не спонсируется ими. · 各服务商名称与标志(DeepSeek、MiniMax、Qwen、Z.ai、Vercel、Poe 等)为其各自所有者的商标,此处仅用于 标识。本扩展独立运作,与上述任何服务商无隶属、背书或赞助关系。
License
MIT
