VS Code Extensions
Claude Kimi Bridge

Claude Kimi Bridge

by StephaneBerthoz

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.

Downloads

2

Rating

(0)

Version

0.9.3

Last updated

Aug 06, 2026

VS Code Marketplace Licence MIT

Utilise Claude et Kimi dans le même panneau Claude Code, avec tes abonnements — sans clé API, sans facturation au token.

Claude Kimi Bridge est une extension VSCode qui branche le panneau officiel Claude Code sur tes deux abonnements : Anthropic et Kimi. Un mini-proxy local fait la jonction, et le sélecteur /model du panneau te laisse passer de l'un à l'autre à chaud, au milieu d'une session.

Pourquoi ?

  • Deux abonnements, un seul panneau. Tu payes déjà Claude et Kimi — autant t'en servir dans le même outil, sans jongler entre deux CLI.
  • Zéro clé API. L'extension réutilise les tokens OAuth déjà présents sur ta machine (ceux des CLI Claude Code et Kimi Code). Rien à configurer, rien à payer en plus.
  • Zéro friction. Changer de provider revient à taper /model. Pas de rechargement de fenêtre, pas de redémarrage de session.
  • Quota mort ? Pas grave. Si un provider répond « rate limit », la requête repart automatiquement chez l'autre.

En pratique

  1. Installe l'extension, clique sur l'icône Claude Switcher dans la barre d'activité (à gauche).
  2. Choisis le profil Proxy — Claude ↔ Kimi.
  3. Ouvre le panneau Claude Code, tape /modelClaude Fable 5, Claude Opus 5, 🌙 Kimi K3 (1M) et les autres apparaissent dans la liste.
  4. Change de modèle quand tu veux : c'est immédiat, la conversation suit.

Le tout premier démarrage demande un rechargement de fenêtre (VSCode ne lit les variables d'environnement qu'au lancement du processus Claude). Ensuite, plus jamais.

Deux profils

Profil Ce que ça fait
Direct — Claude Tout part chez Anthropic, comme si l'extension n'existait pas. Un id Kimi resté « collé » dans la session est réécrit à la volée vers directModel.
Proxy — Claude ↔ Kimi Un proxy local (127.0.0.1) relaie le panneau vers Claude ou Kimi selon le modèle choisi dans /model.

Basculer de l'un à l'autre est instantané (Ctrl+Shift+P → « Claude Switcher : Basculer Direct ↔ Proxy » — parfait pour un raccourci clavier).

Ce que tu vois dans la sidebar

  • Profil actif et état du proxy (cette fenêtre est l'hôte, ou a adopté le proxy d'une autre).
  • Quotas 5h en direct : Kimi et Claude (capté des en-têtes anthropic-ratelimit-*), avec alerte quand il reste moins de 10 % chez Kimi.
  • Compteurs de tokens par provider : entrée, sortie, cache — cumulés entre sessions, remise à zéro en un clic.
  • Historique des 12 dernières requêtes : modèle demandé → modèle réellement routé, statut, latence, tokens, repli éventuel. Exportable en CSV.
  • Catalogue de modèles éditable : ajoute ou retire des modèles du picker /model sans toucher au JSON.
  • Boutons d'action : changer de profil, tester le proxy, ouvrir la config…

Le filet de sécurité : repli automatique

Quand un provider répond une erreur de quota ou de rate-limit (HTTP 429), la requête est renvoyée chez l'autre — tu ne t'en rends pas compte :

  • Kimi en panne de quota → repli vers Claude (fallbackModel, défaut claude-sonnet-4-5).
  • Claude saturé → repli vers Kimi (claudeFallbackModel, défaut k3).
  • Réglable modèle par modèle depuis la sidebar (fallbackMap / claudeFallbackMap) : « si k3 est plein, tente claude-fable-5 ». La valeur "none" désactive le repli pour un modèle donné.
  • Une surcharge transitoire (503/529 « overloaded ») déclenche d'abord un simple retry sur le même modèle.
  • Anti-boucle : un repli ne déclenche jamais un autre repli.

Multi-fenêtres : ça suit tout seul

La première fenêtre VSCode héberge le proxy (port 4177). Les suivantes le détectent et s'y rattachent toutes seules. Tu fermes la fenêtre hôte ? Une autre relance le proxy automatiquement — même port, même token, le panneau Claude n'y voit que du feu. Le mode Direct/Proxy est synchronisé entre fenêtres.

Le garde-fou « modèle global »

Petit piège de Claude Code : le modèle choisi dans /model est écrit dans ~/.claude/settings.json, global à toute la machine. Sans protection, un terminal externe lancerait claude avec un id Kimi → 404 chez Anthropic.

L'extension veille : dès qu'un id Kimi apparaît dans le settings global, elle le migre vers le settings du projet (la session garde son choix) et répare le global avec un modèle Claude. Silencieusement, sans clic.

Sous le capot

  • Tokens locaux uniquement. Kimi : ~/.kimi-code/credentials/kimi-code.json, rafraîchi automatiquement (les tokens tournés sont réécrits dans le fichier, ton CLI Kimi reste connecté). Claude : ~/.claude/.credentials.json, relu à chaque requête.
  • Un seul point d'accroche officiel : la redirection (ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY) est posée une fois dans claudeCode.environmentVariables. Elle ne quitte jamais VSCode et se retire via « Désactiver la redirection ».
  • Tes settings ne sont jamais modifiés, sauf par le garde-fou ci-dessus — qui ne touche que l'id du modèle.
  • 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 donc via des alias claude-kimi-* (le vrai id Kimi est rétabli au routage). Tu peux toujours taper /model k3 à la main.

Configuration

Tout est préfixé claudeProviderSwitcher.* et se règle depuis la sidebar ou les settings VSCode :

Setting Défaut Rôle
defaultProfile remember Profil au démarrage : remember / direct / proxy. Définissable par workspace.
extraModels [] Modèles supplémentaires exposés au picker /model.
fallbackModel claude-sonnet-4-5 Repli Kimi → Claude (vide = désactivé).
claudeFallbackModel k3 Repli Claude → Kimi (vide = désactivé).
fallbackMap / claudeFallbackMap {} Repli par modèle, prioritaire sur les deux ci-dessus.
directModel claude-fable-5 Modèle Claude utilisé en Direct quand la session envoie un id Kimi.
smartRouting true Côté Kimi : gros contexte → k3 (1M), requêtes légères → kimi-for-coding-highspeed.
smartRoutingThreshold 100000 Seuil de contexte (tokens estimés) pour le routage vers k3.
quotaAlertThresholdPercent 10 Alerte quota Kimi en % restant (0 = désactivée).
autoScopeModel true Garde-fou « modèle global » automatique (false = réparation en 1 clic).
repairModel claude-fable-5[1m] Modèle écrit dans le settings global par le garde-fou.
upstreamTimeoutSeconds 600 Timeout des requêtes vers Kimi/Anthropic (→ 504 au lieu de pendre). Corps limités à 50 Mo (→ 413).

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

Limites (honnêtement)

  • Seule la première pose de la redirection (ou sa désactivation) demande un rechargement de fenêtre. Tout le reste — profil, modèle, replis, config — est à chaud.
  • Le port 4177 est déjà pris par autre chose ? La redirection est bloquée par sécurité (le panneau Claude parlerait à ce service) ; une notification propose de réessayer ou d'utiliser un port aléatoire.
  • Les CLI Codex/Grok sont détectés mais pas bridgés (protocole propriétaire).
  • Utiliser un token OAuth d'abonnement via un proxy local est une zone grise vis-à-vis des conditions Anthropic/Kimi. Le client reste Claude Code officiel, mais c'est toi qui vois.

Dev

npm install
npm run compile        # tsc → out/
npm test               # tests unitaires + intégration proxy (30 tests, node:test)
node scripts/test-proxy.mjs    # tests standalone contre le vrai proxy
node scripts/validate-kimi.mjs # vérifie le login Kimi local
npx vsce package --no-dependencies

CI : GitHub Actions — compile + tests sur Ubuntu et Windows à chaque push/PR.

Licence

MIT

Related extensions