Skip to content
| Marketplace
Sign in
Visual Studio Code>Other>Claude Kimi BridgeNew to Visual Studio Code? Get it now.
Claude Kimi Bridge

Claude Kimi Bridge

Stephane Berthoz

| (0) | Free
Switch the official Claude Code panel between the Claude subscription (direct) and a local multi-provider proxy (Claude ↔ Kimi) using local OAuth bearer tokens. One-time environment redirect; hot profile switching, synchronized across windows.
Installation
Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.
Copied to clipboard
More Info

Claude Kimi Bridge

CI Marketplace

Extension VSCode qui bascule le panneau officiel Claude Code entre deux profils, en n'utilisant que tes abonnements (tokens bearer OAuth locaux) — jamais de clé API, jamais de facturation au token.

Profils

  • Direct — Claude (abonnement) : tout est routé vers Anthropic (login OAuth) ; un id Kimi resté « sticky » dans la session est réécrit à chaud vers directModel.
  • Proxy — Claude ↔ Kimi (abonnements) : un mini-proxy local (127.0.0.1, partagé entre fenêtres, relancé automatiquement si la fenêtre hôte se ferme) relaie le panneau vers Claude et Kimi selon le modèle choisi. Le sélecteur /model du panneau liste les modèles des deux providers (découverte native via /v1/models) → switch à chaud dans le panneau.

Changement de profil à chaud (v0.8+) : la redirection (env) est posée une seule fois et ne change plus ; le profil est un simple mode de routage interne au proxy — basculer Direct ↔ Proxy est immédiat, sans rechargement de fenêtre.

Modèles exposés en mode Proxy (ordre = priorité, conservé par le picker) : Claude Fable 5, Claude Opus 5, 🌙 Kimi K3 (1M) en tête, puis Sonnet 5, les autres alias Kimi et les 4.5. Catalogue éditable depuis la sidebar (section « Modèles du picker ») : ajout (id exposé + cible provider optionnelle), suppression, réinitialisation — prise en compte à la prochaine nouvelle conversation Claude.

Note filtre CLI : le picker /model ne retient de la découverte gateway que les ids préfixés claude/anthropic (codé en dur dans le CLI) — les modèles Kimi y figurent via leurs alias claude-kimi-* (champ target = vrai id Kimi, traduit au routage). Les ids bruts k3/kimi-* restent utilisables en saisissant /model k3 à la main ; la sidebar ne liste que les alias, comme le picker.

Usage

  1. Clic sur l'icône dans la barre de statut (ou Ctrl+Shift+P → « Claude Switcher : Changer de profil »).
  2. Choisir le profil → immédiat, sans rechargement. Seule la toute première activation de la redirection demande un rechargement (les variables d'env ne sont lues qu'au lancement du processus Claude).
  3. En mode Proxy : ouvrir le panneau Claude Code, taper /model → les modèles Kimi et Claude apparaissent ; changer de modèle = changer de provider, sans rechargement.

Commandes : Changer de profil · Basculer Direct ↔ Proxy (idéale pour un raccourci clavier) · Revenir en Direct · État du proxy et des tokens · Ouvrir le panneau de configuration · Désactiver la redirection. Logs : panneau Output « Claude Kimi Bridge ».

Sidebar dédiée : icône « Claude Switcher » dans la barre d'activité (à gauche) — profil actif, état du proxy (avec le rôle de la fenêtre : hôte / adopté), quota Kimi 5h en direct, quota Claude 5h (capté des en-têtes anthropic-ratelimit-*), compteurs de tokens par provider (entrée/sortie/cache, cumul persisté entre sessions, bouton de remise à zéro), boutons d'action (dont tester le proxy et exporter l'historique en CSV).

Settings :

  • claudeProviderSwitcher.extraModels — modèles supplémentaires exposés au sélecteur /model (routage par préfixe : k3*/kimi* → Kimi, le reste → Anthropic).
  • claudeProviderSwitcher.defaultProfile — remember (défaut) / direct / proxy ; définissable au niveau workspace pour un profil par défaut par dossier.
  • claudeProviderSwitcher.fallbackModel — repli automatique : si Kimi renvoie une erreur de quota/rate-limit (HTTP 429 ou corps d'erreur explicite), la requête est renvoyée vers ce modèle Claude (défaut claude-sonnet-4-5, vide = désactivé). Compteur de replis dans la sidebar.
  • claudeProviderSwitcher.fallbackMap — repli par modèle Kimi (prioritaire sur fallbackModel) : {"k3": "claude-fable-5"}. La valeur "none" désactive le repli pour ce modèle. Éditable depuis la sidebar (selects par modèle) — tout est appliqué à chaud.
  • claudeProviderSwitcher.claudeFallbackModel — repli inverse : si Claude renvoie une erreur de quota/rate-limit, la requête est renvoyée vers ce modèle Kimi (défaut k3, vide = désactivé). Anti-boucle : une tentative de repli ne déclenche jamais un nouveau repli.
  • claudeProviderSwitcher.claudeFallbackMap — repli par modèle Claude (prioritaire sur claudeFallbackModel) : {"claude-opus-4-5": "k3"}. La valeur "none" désactive le repli pour ce modèle. Éditable depuis la sidebar.
  • Repli ou pas, une surcharge transitoire (503/529 « overloaded ») déclenche d'abord un retry unique sur le même modèle — sans changement de provider.
  • claudeProviderSwitcher.quotaAlertThresholdPercent — seuil d'alerte du quota Kimi 5h en % restant (défaut 10, 0 = désactivé) ; la notification propose de basculer en Direct.
  • claudeProviderSwitcher.smartRouting — routage intelligent côté Kimi (défaut activé) : contexte estimé ≥ seuil → k3 (1M) ; requêtes légères vers un modèle k3* → kimi-for-coding-highspeed.
  • claudeProviderSwitcher.smartRoutingThreshold — seuil en tokens estimés (défaut 100000).
  • claudeProviderSwitcher.directModel — profil Direct : modèle Claude utilisé quand la session envoie un id Kimi (défaut claude-fable-5). Réécriture à chaud, sans rechargement.
  • claudeProviderSwitcher.upstreamTimeoutSeconds — timeout des requêtes vers Kimi/Anthropic (défaut 600) : à l'expiration, la requête échoue en 504 au lieu de pendre. Les corps de requête sont par ailleurs limités à 50 Mo (→ 413).
  • claudeProviderSwitcher.autoScopeModel — garde-fou « modèle global » automatique (défaut activé) : un id Kimi écrit dans ~/.claude/settings.json est migré vers .claude/settings.local.json du projet et le global est réparé (repairModel), silencieusement. false = prompt de réparation en 1 clic.
  • claudeProviderSwitcher.repairModel — modèle de remplacement écrit dans le settings global par le garde-fou (défaut claude-fable-5[1m]).

La sidebar affiche aussi : l'historique des 12 dernières requêtes (modèle demandé → routé, statut, latence, tokens, repli éventuel) et la détection des CLI Codex/Grok (statut seulement — leur protocole propriétaire n'est pas encore bridgé).

Portée & architecture de la redirection

  • Le profil actif est mémorisé par projet/fenêtre (workspaceState) ; le mode courant est en plus synchronisé entre fenêtres via le proxy partagé.
  • La redirection (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY) est posée une seule fois dans claudeCode.environmentVariables (seul point d'accroche officiel). Le token est stable et partagé par machine (~/.claude-provider-switcher/runtime.json) : il reste valide quelle que soit la fenêtre qui héberge le proxy — c'est ce qui rend les bascules à chaud possibles. Elle ne fuit jamais hors de VSCode et se retire via « Désactiver la redirection ».
  • Multi-fenêtres : la première fenêtre héberge le proxy (port 4177) ; les suivantes l'adoptent (sonde /control/health). Si l'hôte se ferme, une autre fenêtre le relance automatiquement — même port, même token, transparent pour le panneau Claude.
  • ~/.claude/settings.json et les fichiers du projet ne sont jamais modifiés… sauf par le garde-fou ci-dessous.

Garde-fou « modèle global » (automatique, v0.8+)

Le modèle choisi dans le picker /model est écrit par Claude Code dans ~/.claude/settings.json (global, lu par toutes les sessions claude de la machine). Dès qu'un id Kimi y apparaît, l'extension le migre vers .claude/settings.local.json du projet courant (portée projet, prioritaire sur le global — la session garde son choix) et répare le global avec repairModel. Silencieux, sans clic : un id Kimi ne peut plus partir chez Anthropic depuis un terminal externe → fini les 404.

Tokens (abonnements uniquement)

  • Kimi : lit ~/.kimi-code/credentials/kimi-code.json, rafraîchit via https://auth.kimi.com/api/oauth/token quand le token expire (~15 min) et réécrit les tokens tournés dans le fichier (le Kimi CLI reste connecté). Endpoint : https://api.kimi.com/coding/v1 avec les en-têtes X-Msh-* attendus.
  • Claude : lit ~/.claude/.credentials.json (claudeAiOauth), rafraîchit via https://console.anthropic.com/v1/oauth/token si besoin (le CLI Claude Code le fait déjà de lui-même ; relecture du fichier à chaque requête).

Dev

npm install
npm run compile        # tsc → out/
npm run lint           # vérification de types sans émission
npm test               # tests unitaires + intégration proxy (30 tests, node:test)
node scripts/test-proxy.mjs      # tests standalone contre le vrai proxy (auth, catalogue, routage Kimi + Claude)
node scripts/validate-kimi.mjs   # vérifie le login Kimi local (token, refresh, endpoint quota)
node scripts/check-model-persistence.mjs  # inspecte où Claude Code persiste le modèle choisi
npx vsce package --no-dependencies
code --install-extension claude-kimi-bridge-0.9.2.vsix

CI : GitHub Actions (.github/workflows/ci.yml) — compile + tests sur Ubuntu et Windows à chaque push/PR.

Limites

  • Seule la première pose de la redirection (ou sa désactivation) demande un rechargement de fenêtre — les env sont lues au lancement du processus Claude. Tout le reste (profil, modèle, replis, config) est à chaud.
  • Port 4177 occupé par un service étranger → redirection bloquée (le panneau Claude parlerait à ce service) : notification avec « Réessayer » ou « Utiliser un port aléatoire » (l'env suit alors le port réel, avec rechargement).
  • L'usage d'un token OAuth d'abonnement via un proxy local est une zone grise côté conditions Anthropic/Kimi — le client reste Claude Code, mais tu utilises à tes risques.
  • Contact us
  • Jobs
  • Privacy
  • Manage cookies
  • Terms of use
  • Trademarks
© 2026 Microsoft