La plupart des personnes qui recherchent Claude Code Router veulent l’une de deux choses différentes : router Claude Code entre plusieurs fournisseurs de modèles, ou simplement exécuter Claude Code à un coût inférieur au tarif catalogue d’Anthropic. Seul le premier cas nécessite le routeur. Claude Code lit nativement ANTHROPIC_BASE_URL, donc le second se résume à trois variables d’environnement et aucun logiciel supplémentaire.
Ce guide couvre les deux voies, avec les noms exacts des variables, le piège d’identifiants qui produit un 401 silencieux et une liste honnête de ce qui cesse de fonctionner derrière toute passerelle. Si vous avez récemment lu un autre article sur CCR, passez d’abord à Option B : le config.json que ces articles vous demandent de modifier n’est plus la configuration lue par le routeur.
De laquelle avez-vous réellement besoin ?
| Ce que vous voulez | Utilisez |
|---|---|
| Exécuter Claude dans Claude Code, à moindre coût | Remplacement de l’URL de base — aucune installation |
| Un modèle différent par tâche (planification / code / arrière-plan) | L’un ou l’autre — variables ANTHROPIC_DEFAULT_*, ou le routeur |
| Combiner plusieurs fournisseurs derrière un seul Claude Code | claude-code-router |
| Piloter Claude Code avec des modèles non-Claude | claude-code-router |
| Journaux par requête : fournisseur, modèle, latence, tokens, coût | claude-code-router |
| Envoyer les sous-agents vers un modèle différent de celui de la boucle principale | claude-code-router — les variables de niveau ne peuvent pas séparer cela |
Le routeur est un service local : un processus supplémentaire à exécuter, configurer et maintenir à jour — et, depuis 2026, une application de bureau dotée de sa propre interface plutôt qu’un fichier à modifier. Il justifie ce coût lorsque vous avez réellement besoin d’un routage multi-fournisseurs, d’une comptabilisation par requête ou d’une sélection de modèle au niveau des sous-agents. Il ne le justifie pas lorsqu’une URL de base aurait suffi.
Option A — remplacement de l’URL de base (aucune installation)
Kunavo fournit l’API native Anthropic Messages à /v1/messages, qui est l’endpoint appelé par Claude Code. Faites-le pointer vers celle-ci :
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-... # create at kunavo.com/app/keys
export ANTHROPIC_MODEL=claude-sonnet-5 # exact slug — see the table below
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5 # the opus alias and plan mode (v2.1.280+)
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5 # the sonnet alias; Sonnet 5.5 is not on Kunavo
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5 # background tasksANTHROPIC_BASE_URL désigne uniquement l’origine — Claude Code ajoute lui-même /v1/messages, n’incluez donc aucun chemin. Conservez les lignes de modèle : le modèle par défaut intégré à Claude Code et son alias opus aboutissent tous deux au dernier modèle Opus ; si Kunavo ne propose pas encore ce modèle, la première requête renvoie une erreur 404. L’alias sonnet demande Sonnet 5.5, que Kunavo ne propose pas ; sans la ligne ANTHROPIC_DEFAULT_SONNET_MODEL, /model sonnet, la phase d’exécution de opusplan et tout sous-agent configuré sur model: sonnet renvoient une erreur 404. L’alias opus est verrouillé sur Opus 5.5 (claude-opus-5-5), ce qui nécessite Claude Code v2.1.280 ou une version ultérieure — exécutez claude update si votre version est plus ancienne. Obtenez la clé dans le tableau de bord après votre inscription et l’ajout de $10 de crédit ; elle ne s’affiche qu’une seule fois.
Quelle variable d’identifiants — et pourquoi cela compte
Claude Code envoie les deux variables d’identifiants dans des en-têtes HTTP différents, et une clé placée dans l’en-tête que le serveur ne lit pas échoue avec 401 :
| Variable | En-tête envoyé | Sur Kunavo |
|---|---|---|
ANTHROPIC_AUTH_TOKEN | Authorization: Bearer | Recommandé — fonctionne partout |
ANTHROPIC_API_KEY | x-api-key | Fonctionne pour le chat et la découverte des modèles après une approbation unique |
Préférez ANTHROPIC_AUTH_TOKEN pour une raison précise : ANTHROPIC_API_KEY nécessite une approbation unique dans une session interactive, et une clé refusée une fois est ensuite ignorée sans nouvelle invite — un échec déroutant où la variable est clairement définie mais manifestement inutilisée. La découverte des modèles ne fait pas de distinction sur Kunavo. La découverte des modèles de la passerelle de Claude Code envoie uniquement le token bearer lorsque ANTHROPIC_AUTH_TOKEN est défini et utilise x-api-key sinon ; l’endpoint /v1/models de Kunavo lit la clé depuis l’un ou l’autre en-tête.
Rendez la configuration persistante
Les exports du shell ne s’appliquent qu’à ce terminal et à tout ce qui est lancé depuis celui-ci — un éditeur ouvert depuis le dock ne les verra pas, pas plus que les agents d’arrière-plan. Placez les valeurs dans un fichier de paramètres pour couvrir tous les cas :
{
"env": {
"ANTHROPIC_BASE_URL": "https://api.kunavo.com",
"ANTHROPIC_AUTH_TOKEN": "sk-kn-...",
"ANTHROPIC_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_OPUS_MODEL": "claude-opus-5-5",
"ANTHROPIC_DEFAULT_SONNET_MODEL": "claude-sonnet-5",
"ANTHROPIC_DEFAULT_HAIKU_MODEL": "claude-haiku-4-5"
}
}Utilisez ~/.claude/settings.json pour tous les projets. Ne placez jamais une clé dans le .claude/settings.json d’un projet — ce fichier est versionné.
Vérifiez avant de lui faire confiance
Testez d’abord l’endpoint directement, afin qu’un échec pointe vers la configuration plutôt que vers Claude Code :
curl -X POST "$ANTHROPIC_BASE_URL/v1/messages" \
-H "Authorization: Bearer $ANTHROPIC_AUTH_TOKEN" \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-sonnet-5","max_tokens":1,"messages":[{"role":"user","content":"."}]}'
# A response starting with {"id":"msg_ means the URL and key both work.
# 401 -> the key is in the wrong header; see "Which credential variable" below.Lancez ensuite claude depuis le même shell et exécutez /status. Une ligne Anthropic base URL affichant api.kunavo.com et une ligne Auth token mentionnant votre variable confirment que les deux parties sont actives.
Définir un modèle personnalisé — choisir explicitement le slug
Kunavo résout les slugs de modèles par correspondance exacte et ne crée pas d’alias pour les noms suffixés d’une date ; claude-sonnet-4-5-20250929 renvoie donc 404 tandis que claude-sonnet-5 réussit. Définissez toujours ANTHROPIC_MODEL plutôt que de vous fier à la valeur par défaut intégrée :
| Rôle | Slug | Entrée / sortie par million |
|---|---|---|
| Codage quotidien (par défaut) | claude-sonnet-5 | $1.40 / $7.00 |
| Génération précédente | claude-sonnet-4-6 | $2.10 / $10.50 |
| Refactorisations les plus difficiles, mode planification | claude-opus-5-5 | $2.80 / $14.00 |
| Tâches d’arrière-plan, demandes rapides | claude-haiku-4-5 | $0.70 / $3.50 |
Les variables d’alias vous permettent d’acheminer chaque tâche sans aucun routeur : ANTHROPIC_DEFAULT_OPUS_MODEL alimente l’alias opus et le mode plan, ANTHROPIC_DEFAULT_SONNET_MODEL alimente sonnet et la phase d’exécution de opusplan, et ANTHROPIC_DEFAULT_HAIKU_MODEL alimente haiku ainsi que le travail en arrière-plan de Claude Code — les résumés et les titres qui accumulent discrètement des coûts. La définir sur claude-haiku-4-5 est la ligne la plus rentable de toute la configuration. (ANTHROPIC_SMALL_FAST_MODEL est l’ancienne écriture obsolète du même paramètre.)
Facultatif : afficher tous les modèles dans le sélecteur
Définissez CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 (Claude Code v2.1.129+) et Claude Code interroge GET /v1/models au démarrage, en ajoutant ce qu’il trouve au sélecteur /model libellé From gateway. Kunavo fournit cet endpoint, donc chaque modèle Claude activé apparaît et /model devient un menu dynamique au lieu d’une liste maintenue manuellement. L’une ou l’autre variable d’identifiants fonctionne pour cela — voir ci-dessus.
Option B — claude-code-router, tel qu’il fonctionne réellement aujourd’hui
Commencez ici, car presque tout ce qui a été écrit sur CCR décrit une version qui n’existe plus. Le routeur était autrefois un fichier JSON et une commande ccr code. Il s’agit désormais d’un plan de contrôle local doté d’une application de bureau, d’une interface de gestion, de journaux de requêtes et d’une passerelle de modèles — et le config.json que montre chaque tutoriel ne le configure plus.
CCR conserve sa configuration d’exécution dans
~/.claude-code-router/config.sqlite(%APPDATA%\claude-code-router\config.sqlitesous Windows). Unconfig.jsonancien est lu une seule fois, comme source de migration, lorsqu’aucune configuration SQLite n’existe encore. Après ce premier lancement, sa modification n’affecte pas la configuration active — sans erreur ni avertissement. Votre blocProviderssoigneusement collé n’est tout simplement pas la configuration.
Cela inclut cette page avant le 2026-09-06 : l’extrait JSON qui se trouvait ici était erroné, et d’une manière qui peut coûter un après-midi, car rien ne vous indique qu’il a été ignoré. La configuration s’effectue désormais dans l’interface (ou, en sauvegarde, Settings → Export data — ne copiez pas les fichiers SQLite actifs pendant l’exécution de CCR).
Installer et lancer
CCR est disponible sous deux formes : une application de bureau disponible dans GitHub Releases (barre d’état, mises à jour automatiques, intégrations de bureau) et une interface CLI npm pour les déploiements sans interface graphique ou supervisés. Elles partagent le même répertoire de configuration.
# CCR ships as a desktop app (GitHub Releases) or an npm CLI. Both read the
# same ~/.claude-code-router directory. The CLI needs Node.js 22+.
npm install -g @musistudio/claude-code-router
ccr ui # management UI on :3458, model gateway on :3456
# Configure the provider and an Agent Config profile in that UI, then launch
# Claude Code through the profile by name:
ccr "Claude Code - Kunavo" # npm CLI
ccr-app "Claude Code - Kunavo" # the desktop app's own launcher
# There is no 'ccr code' in the current command reference. The service commands
# are start / ui / stop / serve / web; everything else is a profile name.Ajouter Kunavo consiste en une entrée de fournisseur — Providers → Add provider, préréglage Other / custom API endpoint, endpoint https://api.kunavo.com, votre clé sk-kn- — et un profil Agent Config → Add profile → Claude Code. La version détaillée champ par champ, notamment Check Connection et la découverte des modèles, se trouve sur la page d’intégration de Claude Code Router. Le reste de cette section couvre ce que cette page n’aborde pas : les identifiants, les coûts et les modes de défaillance.
Trois identifiants, et celui concerné par une erreur 401
C’est la cause la plus fréquente d’une configuration fonctionnelle qui semble défaillante. CCR utilise trois secrets distincts, qui authentifient trois étapes différentes :
| Identifiant | Authentifie | Destination |
|---|---|---|
Votre clé Kunavo (sk-kn-…) | CCR → Kunavo | Providers → champ de clé API du fournisseur |
| Une clé client CCR | Tout client → la passerelle CCR | Créée sur la page API Keys ; sans elle, la passerelle rejette les requêtes de modèles |
Le jeton de gestion (ccr_web_token) | Vous → l’interface et les RPC de CCR | S’affiche dans l’URL ccr ui — traitez-le comme un mot de passe |
L’association des ports prend également au dépourvu : la gestion utilise par défaut 127.0.0.1:3458 et la passerelle de modèles 127.0.0.1:3456. Une URL de base pointant vers 3458 atteint l’interface, pas la passerelle. (Docker regroupe délibérément les deux derrière un seul endpoint Nginx, d’où la différence des instructions Docker.) Une interface accessible ne garantit pas une passerelle fonctionnelle : vérifiez /health à l’adresse de la passerelle et confirmez que Server affiche Running.
La correspondance par niveau est essentielle
Claude Code ne demande pas un modèle, mais un niveau — la boucle principale utilise Sonnet ou Opus, tandis que les tâches en arrière-plan (sous-agents, recherche, résumés, titres de conversation) utilisent le modèle rapide et léger. Un profil Claude Code dans Agent Config expose ces éléments dans des champs distincts : un Model par défaut, ainsi que des remplacements facultatifs pour Fable, Opus, Sonnet et Haiku, chacun acceptant une valeur Provider/model. Laissez un niveau vide et Claude Code le sélectionnera.
| Niveau | Associer à | Entrée / sortie par million | Ce qui s’y exécute réellement |
|---|---|---|---|
| Opus | Kunavo/claude-opus-5-5/ $14.00 | Mode Plan, refactorisations complexes | |
| Sonnet (par défaut) | Kunavo/claude-sonnet-5 | $1.40 / $7.00 | La boucle principale de l’agent — la majeure partie de vos tokens |
| Sonnet, génération précédente | Kunavo/claude-sonnet-4-6 | $2.10 / $10.50 | Même boucle, 50 % plus cher que Sonnet 5 |
| Haiku | Kunavo/claude-haiku-4-5 | $0.70 / $3.50 | Sous-agents, tri des fichiers, titres, résumés |
Lisez ce tableau avant de reprendre la répartition des niveaux de quelqu’un d’autre, car la séparation évidente est le premier levier : claude-sonnet-5 coûte 50 % moins cher que claude-opus-5-5 sur Kunavo ($1.40 / $7.00 contre $2.80 / ). Le deuxième levier est le niveau Haiku : à $0.70 / $3.50, il est 2× moins cher que Sonnet 5, et il prend en charge un volume que vous ne voyez jamais — chaque sous-agent, chaque passage de tri des fichiers et chaque titre généré. claude-sonnet-4-6 n’est plus le Sonnet économique : à $2.10 / $10.50, il coûte 50 % de plus que Sonnet 5, raison pour laquelle les extraits ci-dessus définissent ANTHROPIC_MODEL=claude-sonnet-5.
Routage des sous-agents — ce que la correspondance de niveaux ne peut pas faire
Les remplacements de niveaux assignent tous les sous-agents à un seul modèle. CCR peut aller plus loin : lorsqu’une requête Claude Code correspond à la route intégrée, il injecte la liste des modèles disponibles dans la description de l’outil Agent / Task, et Claude Code préfixe l’invite de chaque agent créé d’une balise indiquant le modèle souhaité :
<CCR-SUBAGENT-MODEL>provider/model</CCR-SUBAGENT-MODEL>
CCR retire la balise et route cette requête en conséquence : un sous-agent de recherche peut donc utiliser Haiku tandis qu’un sous-agent de révision utilise Opus, selon la tâche plutôt que par affectation fixe. Le commutateur est facile à manquer : le mécanisme reste désactivé tant qu’au moins un modèle n’a pas de Description sur la page Models. Sans description, CCR n’injecte rien et chaque sous-agent revient discrètement au modèle par défaut du profil. Rédigez les descriptions selon l’adéquation à la tâche — « recherche de code, tri de fichiers, sous-agents parallèles économiques » pour Haiku, « analyse d’architecture, révision à haut risque » pour Opus. Lorsqu’il fonctionne, les journaux de requêtes affichent builtin:claude-code-subagent comme motif de routage.
Choix du protocole et coût en cache
CCR sonde l’endpoint et sélectionne un protocole filaire. Donnez-lui l’origine nue https://api.kunavo.com et il utilise Anthropic Messages ; donnez-lui https://api.kunavo.com/v1 et il utilise le format OpenAI-compatible. Les deux interfaces sont actives avec la même clé, et vous pouvez remplacer la détection automatique dans les paramètres avancés.
Préférez le format Anthropic Messages. Il conserve cache_control sur le réseau : la mise en cache des invites atteint donc le modèle et les entrées mises en cache sont facturées à 10 % du tarif des entrées (comment cela fonctionne) — pour une boucle d’agent qui renvoie un préfixe stable à chaque étape, c’est la plus grande économie individuelle disponible. La réserve honnête est qu’un routeur placé sur le chemin modifie encore les requêtes : CCR supprime le message système d’en-tête de facturation injecté par Claude Code et ajoute la liste des modèles aux descriptions d’outils lorsque le routage des sous-agents est activé. Les deux éléments se trouvent avant vos points de rupture du cache ; chaque modification de ce contenu entraîne donc un défaut de cache tandis que le nouveau préfixe se réchauffe. Le comportement devient ensuite stable — mais c’est une véritable raison pour laquelle l’Option A offre un cache légèrement meilleur que l’Option B, en plus d’être plus simple à exploiter.
Solution de secours : nouvelle tentative ou basculement
Le paramètre Default on failure de la page Routing mérite d’être défini avant d’en avoir besoin. Retry renvoie la requête au même modèle pour 408, 409, 429 et 5xx, en respectant Retry-After et, à défaut, en appliquant un délai exponentiel de 1 s jusqu’à un plafond de 30 s. Fallback targets parcourt une liste ordonnée de modèles de secours et se déclenche pour toute réponse 4xx ou 5xx, selon l’idée qu’un modèle introuvable ou un rejet du fournisseur peut ne concerner que la cible actuelle. Les règles individuelles peuvent remplacer le paramètre global. Lorsqu’un basculement s’exécute, la réponse contient x-ccr-fallback-attempts et x-ccr-fallback-model, afin que vous puissiez l’identifier a posteriori.
Vérifier qu’il se trouve réellement sur le chemin
Lancez Claude Code depuis le profil, envoyez un message, puis ouvrez Request logs dans CCR. La ligne affiche request model (ce que Claude Code a demandé), resolved provider et resolved model (où la requête a été envoyée) — ce triplet en constitue la preuve. Dans la CLI, /model répertorie les modèles exposés par CCR. Si Claude Code répond mais qu’aucune ligne n’apparaît dans les journaux, vous avez lancé Claude Code vous-même plutôt que par l’intermédiaire de CCR, et la portée du profil est Only opened from CCR.
Coût d’une session de programmation
Claude Code renvoie l’invite système, la conversation et le nouveau contexte de fichiers à chaque étape ; le tarif par token se cumule donc rapidement. Aux tarifs Kunavo pour claude-sonnet-5 :
| Unité | Jetons (entrée / sortie) | Kunavo | Tarif catalogue Anthropic |
|---|---|---|---|
| Une étape agentique | 25,000 / 1,200 | $0.043 | $0.062 |
| Une tâche de 20 étapes | ~500k / ~24k | ~$0.87 | ~$1.24 |
| Une journée intensive (5 tâches) | — | ~$4.34 | ~$6.20 |
Cela représente environ 30 % de réduction sur le modèle principal, avant la mise en cache des invites. Les tarifs complets figurent dans le guide des tarifs de l’API Claude, et le calculateur de coûts utilise vos propres nombres de tokens.
Ce qui fonctionne encore — et ce qui ne fonctionne pas
Pointer Claude Code vers une passerelle modifie quelques éléments. La liste est courte et mérite d’être connue avant de vous engager :
| Fonctionnalité | Derrière une passerelle |
|---|---|
| Programmation, outils, sous-agents, MCP, hooks | Non affecté |
| Mise en cache des prompts | Fonctionne — route native de l’API Messages |
| Votre abonnement claude.ai | Non utilisé ; facturation par token sur la clé à la place |
| Remote Control | Indisponible — nécessite une identité claude.ai |
| Dictée vocale | Indisponible — pour la même raison |
Comptage des tokens de /context | Estimé localement (voir ci-dessous) |
Pour cette dernière ligne : le comptage des tokens est le seul endpoint que la spécification de passerelle d’Anthropic marque comme facultatif, et Claude Code estime localement l’utilisation du contexte lorsqu’il est absent. Kunavo ne fournit pas /v1/messages/count_tokens actuellement ; votre valeur /context est donc une estimation et non un décompte exact. Rien ne se dégrade au-delà de ce nombre — la compaction automatique et la session elle-même restent inchangées.
Dépannage
Le chemin de l’URL de base
| Symptôme | Cause et solution |
|---|---|
401 à chaque requête | La clé se trouve dans l’en-tête que le serveur ne lit pas. Basculez entre ANTHROPIC_AUTH_TOKEN et ANTHROPIC_API_KEY, puis réessayez la commande curl ci-dessus. |
| Claude Code vous demande de vous connecter, mais curl fonctionne | Une URL de base accessible n’est pas un identifiant. Définissez ANTHROPIC_AUTH_TOKEN à un emplacement lu avant la configuration initiale : export shell ou ~/.claude/settings.json. |
ANTHROPIC_API_KEY défini mais ignoré, aucune invite | L’approbation unique a été refusée précédemment. Activez-la sous /config → Use custom API key, ou basculez vers ANTHROPIC_AUTH_TOKEN. |
404 indiquant le modèle | Correspondance exacte du slug — supprimez tout suffixe de date et utilisez un slug du tableau ci-dessus. |
400 indiquant thinking ou adaptive | Claude Code demande un raisonnement adaptatif sur les modèles 4.6 et ultérieurs. Sur Opus 4.6 et Sonnet 4.6, CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 permet de contourner ce comportement. |
/fast indique que le mode rapide est désactivé | La vérification de disponibilité appelle directement api.anthropic.com et ne suit pas votre URL de base. Définissez CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1. |
| Modèles absents du sélecteur | Activez CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1, ou nommez-les à l’aide des variables ANTHROPIC_DEFAULT_*_MODEL. |
…et lorsque le routeur se trouve sur le chemin
| Symptôme | Cause et solution |
|---|---|
Les modifications de config.json ne changent rien | Elles ne le peuvent pas. La configuration d’exécution se trouve dans config.sqlite ; le fichier JSON sert de source de migration unique. Effectuez la modification dans l’interface. |
ccr code introuvable | Absent de l’ensemble actuel de commandes. Lancez un profil par son nom : ccr "My Profile", ou ccr-app "My Profile" depuis l’application de bureau. |
ccr introuvable après l’installation | Le répertoire bin global de npm ne figure pas dans PATH, ou Node est antérieur à 22. Vérifiez npm prefix -g et node --version. |
| L’interface se charge, mais les requêtes de modèles échouent | La gestion et la passerelle sont des services différents sur des ports différents. Confirmez que Server affiche Running et dirigez les clients vers :3456, pas vers :3458. |
| La passerelle renvoie 401 alors que le fournisseur est validé | Aucune clé client CCR. Créez-en une sur la page API Keys — il s’agit d’un identifiant distinct de votre clé sk-kn-. |
| Claude Code s’exécute, mais rien n’apparaît dans Request logs | Vous avez lancé Claude Code directement alors que la portée du profil est Only opened from CCR. Lancez-le depuis CCR ou définissez la portée sur System default. |
| Chaque sous-agent utilise le modèle par défaut | Le routage des sous-agents dépend du champ Description de la page Models. Sans description, CCR n’injecte aucune instruction de routage et la balise n’est jamais écrite. |
/model ne répertorie aucun modèle CCR | Aucun fournisseur ni modèle n’est configuré, ou le profil est désactivé. Exécutez d’abord Check Connection sur le fournisseur. |
Les corrections erreur par erreur pour l’API elle-même se trouvent dans les pages de dépannage invalid API key et rate limit.
Questions fréquentes
Ai-je besoin de claude-code-router pour utiliser Claude Code avec une autre API ?
Non. Claude Code lit nativement ANTHROPIC_BASE_URL ; le pointer vers n’importe quel endpoint qui fournit l’API Anthropic Messages ne nécessite aucun logiciel supplémentaire — trois variables d’environnement et vous avez terminé. CCR vaut la peine lorsque vous voulez router les requêtes entre plusieurs fournisseurs, obtenir des journaux par requête indiquant le fournisseur, le modèle, la latence, les tokens et le coût, ou utiliser un modèle différent par sous-agent plutôt qu’un modèle unique pour tous. Si votre objectif est simplement d’exécuter Claude sur un endpoint moins cher, le remplacement de l’URL de base est la configuration la plus légère et la plus fiable : aucun service supplémentaire, et la mise en cache des prompts est transmise directement.
Pourquoi la modification du fichier config.json de claude-code-router ne fait-elle rien ?
Parce qu’il ne s’agit plus de la configuration lue par CCR. Les builds actuelles conservent la configuration d’exécution dans ~/.claude-code-router/config.sqlite (%APPDATA%\claude-code-router\config.sqlite sous Windows) et ne lisent un config.json ancien qu’une seule fois, comme source de migration, lorsqu’aucune configuration SQLite n’existe encore. Après ce premier lancement, le fichier JSON est ignoré — silencieusement, sans erreur — ; un tableau Providers ou un bloc Router modifié manuellement ne prend donc tout simplement jamais effet. Effectuez plutôt la modification dans l’interface de bureau CCR, et utilisez Settings → Export data si vous souhaitez une sauvegarde au niveau du fichier. La plupart des tutoriels CCR tiers décrivent encore le fichier JSON.
Comment lancer Claude Code via claude-code-router maintenant ?
Par nom de profil, et non avec ccr code. Créez un profil sous Agent Config → Add profile → Claude Code, choisissez un modèle, enregistrez, puis lancez-le : ccr "Claude Code - Work" avec la CLI npm, ou ccr-app "Claude Code - Work" avec l’application de bureau, qui fournit également à chaque carte de profil un bouton de terminal pour la CLI et un bouton de lecture pour l’application Claude. L’ensemble actuel des commandes de la CLI est start, ui, stop, serve et web, plus un nom ou un identifiant de profil ; il n’existe aucune sous-commande code. Ajoutez les propres indicateurs de l’agent après un double tiret, par exemple : ccr "Claude Code - Work" cli -- --model sonnet.
Claude Code peut-il utiliser un modèle personnalisé ?
Techniquement, oui : ANTHROPIC_MODEL accepte tout slug fourni par l’endpoint derrière ANTHROPIC_BASE_URL, et claude-code-router ajoute par-dessus un routage par tâche entre les fournisseurs. La limite honnête est que la documentation de la passerelle d’Anthropic indique qu’elle ne prend pas en charge le routage de Claude Code vers des modèles non-Claude via une passerelle ; l’utilisation d’outils et le comportement agentique avec un modèle non-Claude restent donc non testés plutôt que pris en charge. Sur Kunavo, la voie prise en charge consiste à utiliser un slug Claude sur un endpoint moins cher ; les autres modèles du catalogue sont accessibles via l’API compatible OpenAI, et non via Claude Code. La règle du slug exact et le tableau des modèles se trouvent dans définir un modèle personnalisé ci-dessus, et le catalogue complet est disponible sur la page des modèles.
De quelle URL de base et de quelles variables d’environnement Claude Code a-t-il besoin ?
Définissez ANTHROPIC_BASE_URL sur https://api.kunavo.com (Claude Code ajoute lui-même /v1/messages), ANTHROPIC_AUTH_TOKEN sur votre clé sk-kn- et ANTHROPIC_MODEL sur un slug de modèle exact, tel que claude-sonnet-5. Verrouillez également les alias : ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5 pour /model opus et le mode plan (Opus 5.5 nécessite Claude Code v2.1.280 ou une version ultérieure — exécutez claude update), ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5, car l’alias sonnet demande sinon Sonnet 5.5, que Kunavo ne propose pas, et ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5 afin que les tâches en arrière-plan soient facturées au tarif le plus bas.
Dois-je utiliser ANTHROPIC_AUTH_TOKEN ou ANTHROPIC_API_KEY ?
Utilisez ANTHROPIC_AUTH_TOKEN. Il est envoyé dans un en-tête Authorization: Bearer et prend effet immédiatement, tandis que ANTHROPIC_API_KEY est envoyé comme x-api-key et nécessite une approbation interactive unique — une clé refusée une fois est ensuite ignorée silencieusement. Sur Kunavo, cette approbation constitue toute la différence : les endpoints /v1/messages et /v1/models derrière la découverte des modèles de la passerelle de Claude Code lisent tous deux la clé depuis l’un ou l’autre en-tête.
Pourquoi Claude Code indique-t-il que le modèle n’est pas disponible ?
Kunavo fait correspondre exactement les slugs de modèles et ne crée pas d’alias pour les noms suffixés d’une date ; une requête pour claude-sonnet-4-5-20250929 renvoie donc une erreur 404, tandis que claude-sonnet-5 fonctionne. Définissez ANTHROPIC_MODEL sur un slug exact du catalogue plutôt que de vous fier au modèle par défaut intégré de Claude Code. L’autre cause fréquente est l’alias sonnet : sans verrouillage, il demande Sonnet 5.5, que Kunavo ne propose pas ; /model sonnet, la phase d’exécution d’opusplan et tout sous-agent configuré sur model: sonnet renvoient une erreur 404 jusqu’à ce que ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5 soit défini.
Qu’est-ce qui cesse de fonctionner lorsque Claude Code passe par une passerelle ?
Trois éléments, par conception. Remote Control et la dictée vocale nécessitent tous deux une identité claude.ai et sont indisponibles lorsqu’un identifiant de passerelle est défini. La vérification de disponibilité de /fast appelle directement api.anthropic.com au lieu de suivre votre URL de base ; elle peut donc signaler que le mode rapide est indisponible alors que les requêtes normales fonctionnent ; CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1 le rétablit. Le codage, les outils, les sous-agents, MCP et la mise en cache des prompts ne sont pas affectés.
Puis-je utiliser mon abonnement Claude Pro ou Max à la place ?
Non. Les abonnements Chat n’incluent pas l’accès à l’API, et la définition d’un identifiant de passerelle met délibérément votre connexion claude.ai en pause — les limites de l’abonnement cessent de s’appliquer et l’utilisation est facturée au token sur la clé à la place. Consultez Claude Code est-il gratuit ? pour le détail complet.
Cela fonctionne-t-il avec l’extension VS Code ?
Oui, mais l’extension vérifie les identifiants avant le lancement ; définissez-les donc dans le paramètre claudeCode.environmentVariables propre à VS Code plutôt que seulement dans ~/.claude/settings.json.
Et Cursor, Kilo Code ou Cline ?
Ils utilisent un champ de fournisseur compatible OpenAI au lieu de variables d’environnement — URL de base https://api.kunavo.com/v1, même clé. La configuration et le routage des modèles par outil sont détaillés dans les guides Cline, Roo Code et Kilo Code.