Volver a las guías
Integración·26 de julio de 2026·Actualizado el 3 de octubre de 2026·12 min de lectura

Claude Code Router — dirige Claude Code a cualquier modelo o prescinde completamente del router

La mayoría de quienes recurren a claude-code-router solo quieren usar Claude Code en un lugar más barato — y eso es cambiar la URL base, no instalar nada. Aquí se explica cuándo el router realmente merece la pena, cómo se configura ahora que config.json ya no hace nada y una lista honesta de lo que una pasarela rompe.

Última revisión: .

La mayoría de las personas que buscan Claude Code Router quieren una de dos cosas distintas: enrutar Claude Code entre varios proveedores de modelos o simplemente ejecutar Claude Code en un lugar más barato que el precio de lista de Anthropic. Solo la primera opción necesita el router. Claude Code lee ANTHROPIC_BASE_URL de forma nativa, así que la segunda requiere tres variables de entorno y ningún software adicional.

Esta guía cubre ambas rutas, con los nombres exactos de las variables, la trampa de las credenciales que produce un 401 silencioso y una lista honesta de lo que deja de funcionar detrás de cualquier pasarela. Si has leído recientemente otro artículo sobre CCR, ve primero a Opción B: el config.json que esos artículos te indican editar ya no es la configuración que lee el router.

¿Cuál necesitas realmente?

Lo que quieresUsa
Ejecutar Claude en Claude Code, más baratoCambiar la URL base: sin instalación
Un modelo diferente para cada tarea (planificación / código / segundo plano)Cualquiera: variables ANTHROPIC_DEFAULT_*, o el router
Combinar varios proveedores detrás de un único Claude Codeclaude-code-router
Controlar Claude Code con modelos que no sean Claudeclaude-code-router
Registros por solicitud: proveedor, modelo, latencia, tokens, costeclaude-code-router
Enviar subagentes a un modelo diferente del bucle principalclaude-code-router: las variables de nivel no pueden dividir eso

El router es un servicio local: un proceso más que ejecutar, configurar y mantener actualizado y, desde 2026, una aplicación de escritorio con su propia interfaz en lugar de un archivo que editas. Justifica ese coste cuando realmente necesitas enrutamiento entre varios proveedores, contabilidad por solicitud o selección de modelos a nivel de subagente. No lo justifica cuando habría bastado con una URL base.

Opción A: cambiar la URL base (sin instalación)

Kunavo sirve la API Anthropic Messages nativa en /v1/messages, que es el endpoint al que llama Claude Code. Dirígelo allí:

~/.zshrc
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 tasks

ANTHROPIC_BASE_URL solo es el origen; Claude Code añade /v1/messages por sí mismo, así que no incluyas una ruta. Conserva las líneas de los modelos: el valor predeterminado integrado de Claude Code y su alias opus apuntan al Opus más reciente, y si Kunavo aún no ofrece ese modelo, la primera solicitud devuelve 404. El alias sonnet solicita Sonnet 5.5, que Kunavo no ofrece, por lo que sin la línea ANTHROPIC_DEFAULT_SONNET_MODEL /model sonnet, la fase de ejecución de opusplan y cualquier subagente configurado con model: sonnet devuelven 404. El alias opus está fijado en Opus 5.5 (claude-opus-5-5), lo que requiere Claude Code v2.1.280 o posterior; ejecuta claude update si tu versión es anterior. Obtén la clave del panel de control después de registrarte y añadir $10 de saldo; se muestra una sola vez.

Qué variable de credencial usar y por qué importa

Claude Code envía las dos variables de credenciales en cabeceras HTTP diferentes, y una clave en la cabecera que el servidor no lee falla con 401:

VariableCabecera enviadaEn Kunavo
ANTHROPIC_AUTH_TOKENAuthorization: BearerRecomendada: funciona en todas partes
ANTHROPIC_API_KEYx-api-keyFunciona para el chat y el descubrimiento de modelos después de una aprobación única

Prefiere ANTHROPIC_AUTH_TOKEN por una razón concreta: ANTHROPIC_API_KEY necesita una aprobación única en una sesión interactiva, y una clave que rechazaste una vez se ignora después sin mostrar ninguna solicitud; es un fallo confuso en el que la variable está claramente establecida y claramente no se usa. El descubrimiento de modelos no decide esto en Kunavo. El descubrimiento de modelos de la pasarela de Claude Code envía solo el token bearer cuando se establece ANTHROPIC_AUTH_TOKEN y usa x-api-key como alternativa; el endpoint /v1/models de Kunavo lee la clave desde cualquiera de las dos cabeceras.

Haz que persista

Las exportaciones del shell solo se aplican a ese terminal y a todo lo que se inicie desde él; un editor abierto desde el dock no las verá, ni tampoco los agentes en segundo plano. Coloca los valores en un archivo de configuración para cubrirlo todo:

~/.claude/settings.json
{
  "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"
  }
}

Usa ~/.claude/settings.json para todos los proyectos. Nunca pongas una clave en el .claude/settings.json de un proyecto: ese archivo se confirma en el repositorio.

Verifica antes de confiar en ello

Prueba primero el endpoint directamente, para que un fallo apunte a la configuración y no a Claude Code:

verify.sh
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.

Después, inicia claude desde el mismo shell y ejecuta /status. Una línea Anthropic base URL que muestre api.kunavo.com y una línea Auth token que nombre tu variable confirman que ambas partes están activas.

Establece un modelo personalizado: elige explícitamente el slug

Kunavo resuelve los slugs de modelos mediante una coincidencia exacta y no crea alias para nombres con fecha, por lo que claude-sonnet-4-5-20250929 devuelve 404 mientras que claude-sonnet-5 funciona. Establece siempre ANTHROPIC_MODEL en lugar de depender del valor predeterminado integrado:

RolSlugEntrada/salida por 1M
Programación diaria (predeterminado)claude-sonnet-5$1.40 / $7.00
Generación anteriorclaude-sonnet-4-6$2.10 / $10.50
Refactorizaciones más complejas, modo de planificaciónclaude-opus-5-5$2.80 / $14.00
Tareas en segundo plano, solicitudes rápidasclaude-haiku-4-5$0.70 / $3.50

Las variables de alias permiten enrutar por tarea sin ningún router: ANTHROPIC_DEFAULT_OPUS_MODEL respalda el alias opus y el modo de planificación, ANTHROPIC_DEFAULT_SONNET_MODEL respalda sonnet y la fase de ejecución de opusplan, y ANTHROPIC_DEFAULT_HAIKU_MODEL respalda haiku además del trabajo en segundo plano de Claude Code —los resúmenes y títulos que acumulan costes silenciosamente. Apuntar esa variable a claude-haiku-4-5 es la línea de mayor valor de toda la configuración. (ANTHROPIC_SMALL_FAST_MODEL es la denominación obsoleta de la misma configuración.)

Opcional: muestra todos los modelos en el selector

Establece CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 (Claude Code v2.1.129+) y Claude Code consulta GET /v1/models al iniciarse, añadiendo lo que encuentra al selector /model etiquetado como From gateway. Kunavo sirve ese endpoint, por lo que aparece cada modelo de Claude habilitado y /model se convierte en un menú activo en lugar de una lista que mantienes manualmente. Cualquiera de las dos variables de credenciales funciona para ello; consulta la explicación anterior.

Opción B: claude-code-router, tal como funciona ahora

Empieza aquí, porque casi todo lo escrito sobre CCR describe una versión que ya no existe. Antes, el router era un archivo JSON y un comando ccr code. Ahora es un plano de control local con una aplicación de escritorio, una interfaz de administración, registros de solicitudes y una pasarela de modelos, y el config.json que aparece en todos los tutoriales ya no lo configura.

CCR mantiene su configuración de ejecución en ~/.claude-code-router/config.sqlite (%APPDATA%\claude-code-router\config.sqlite en Windows). Un config.json heredado se lee una vez, como fuente de migración, cuando todavía no existe una configuración SQLite. Después de esa primera ejecución, editarlo no afecta a la configuración en ejecución, sin ningún error ni advertencia. El bloque Providers que pegaste cuidadosamente simplemente no es la configuración.

Eso incluye esta página antes del 2026-09-06: el fragmento JSON que solía estar aquí era incorrecto, y era el tipo de error que cuesta una tarde, porque nada te indica que se ignoró. La configuración ahora se realiza en la interfaz de usuario (o, como respaldo, Settings → Export data; no copies archivos SQLite activos mientras CCR esté ejecutándose).

Instalar e iniciar

CCR se distribuye de dos formas: una aplicación de escritorio desde GitHub Releases (bandeja del sistema, actualización automática e integraciones de escritorio) y una CLI de npm para implementaciones sin interfaz o supervisadas. Ambas comparten el mismo directorio de configuración.

instalación e inicio
# 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.

Añadir Kunavo requiere una entrada de proveedor — Providers → Add provider, el ajuste predefinido Other / custom API endpoint, el endpoint https://api.kunavo.com y tu clave sk-kn- — y un perfil de Agent Config → Add profile → Claude Code. La versión campo por campo, incluidos Check Connection y el descubrimiento de modelos, está en la página de integración de Claude Code Router. El resto de esta sección cubre lo que esa página no explica: las credenciales, los costes y los modos de fallo.

Tres credenciales y de cuál se trata un 401

Esta es la forma más habitual en que una configuración funcional parece estar rota. CCR tiene tres secretos independientes y cada uno autentica un salto distinto:

CredencialAutenticaAdónde va
Tu clave de Kunavo (sk-kn-…)CCR → KunavoProviders → campo de clave de API del proveedor
Una clave de cliente de CCRCualquier cliente → la puerta de enlace de CCRSe crea en la página API Keys; sin ella, la puerta de enlace rechaza las solicitudes de modelos
El token de administración (ccr_web_token)Tú → la interfaz de CCR y RPCSe muestra en la URL que imprime ccr ui; trátalo como una contraseña

La correspondencia de puertos también confunde: la administración usa de forma predeterminada 127.0.0.1:3458 y la puerta de enlace de modelos, 127.0.0.1:3456. Una URL base dirigida a 3458 llega a la interfaz, no a la puerta de enlace. (Docker agrupa deliberadamente ambos servicios detrás de un único endpoint de Nginx, por eso las instrucciones de Docker son diferentes). Una interfaz accesible no implica que la puerta de enlace funcione: comprueba /health en la dirección de la puerta de enlace y confirma que Server muestre Running.

El mapa por nivel es lo importante

Claude Code no solicita un modelo, sino un nivel: el bucle principal necesita Sonnet u Opus, mientras que el trabajo en segundo plano (subagentes, búsquedas, resúmenes y títulos de conversaciones) necesita el modelo pequeño y rápido. Un perfil de Claude Code en Agent Config expone estos valores en campos independientes: un Model predeterminado y, opcionalmente, sustituciones para Fable, Opus, Sonnet y Haiku, cada una con un valor Provider/model. Si dejas un nivel vacío, Claude Code lo selecciona.

NivelAsignarlo aEntrada/salida por 1MLo que realmente se ejecuta ahí
OpusKunavo/claude-opus-5-5/ $14.00Modo de planificación y refactorizaciones complejas
Sonnet (predeterminado)Kunavo/claude-sonnet-5$1.40 / $7.00El bucle principal del agente: la mayoría de tus tokens
Sonnet, generación anteriorKunavo/claude-sonnet-4-6$2.10 / $10.50El mismo bucle, un 50% más caro que Sonnet 5
HaikuKunavo/claude-haiku-4-5$0.70 / $3.50Subagentes, clasificación de archivos, títulos y resúmenes

Lee esa tabla antes de copiar el mapa de niveles de otra persona, porque la división obvia es la primera palanca: claude-sonnet-5 cuesta un 50% menos que claude-opus-5-5 en Kunavo ($1.40 / $7.00 frente a $2.80 / ). La segunda palanca es el nivel Haiku: a $0.70 / $3.50 es 2× más barato que Sonnet 5, y absorbe un volumen que nunca ves: cada subagente, cada pasada de clasificación de archivos, cada título generado. claude-sonnet-4-6 ya no es el Sonnet barato: a $2.10 / $10.50 cuesta un 50% más que Sonnet 5, por eso los fragmentos anteriores establecen ANTHROPIC_MODEL=claude-sonnet-5.

Enrutamiento de subagentes: lo que el mapa de niveles no puede hacer

Las sustituciones de nivel fijan todos los subagentes a un único modelo. CCR puede ser más preciso: cuando una solicitud de Claude Code coincide con la ruta integrada, inserta la lista de modelos disponibles en la descripción de la herramienta Agent / Task, y Claude Code antepone al prompt de cada agente generado una etiqueta con el modelo que quiere:

<CCR-SUBAGENT-MODEL>provider/model</CCR-SUBAGENT-MODEL>

CCR elimina la etiqueta y enruta esa solicitud en consecuencia, de modo que un subagente de búsqueda puede ejecutarse en Haiku mientras uno de revisión se ejecuta en Opus, elegido por tarea en lugar de quedar fijado. El interruptor es fácil de pasar por alto: el mecanismo está desactivado hasta que al menos un modelo tenga una Description en la página Models. Sin descripciones, CCR no inserta nada y todos los subagentes vuelven silenciosamente al modelo predeterminado del perfil. Escribe las descripciones según la tarea: «búsqueda de código, clasificación de archivos, subagentes paralelos económicos» para Haiku; «análisis de arquitectura, revisión de alto riesgo» para Opus. Cuando funciona, los registros de solicitudes muestran builtin:claude-code-subagent como motivo de la ruta.

Elección del protocolo y su coste en caché

CCR sondea el endpoint y elige un protocolo de red. Proporciónale el origen sin más https://api.kunavo.com y se comunicará mediante Anthropic Messages; proporciónale https://api.kunavo.com/v1 y utilizará el formato compatible con OpenAI. Ambas superficies están activas con la misma clave, y puedes anular la detección automática en la configuración avanzada.

Prefiere el formato Anthropic Messages. Mantiene cache_control en las solicitudes transmitidas, por lo que el almacenamiento en caché de prompts llega al modelo y la entrada almacenada en caché se factura al 10 % de la tarifa de entrada (cómo funciona): en un bucle de agente que reenvía un prefijo estable en cada paso, es el mayor ahorro individual disponible. La salvedad honesta es que un router en la ruta sigue editando las solicitudes: CCR elimina el mensaje del sistema de encabezado de facturación que Claude Code inyecta y añade la lista de modelos a las descripciones de herramientas cuando el enrutamiento de subagentes está activado. Ambos elementos se encuentran antes de tus puntos de ruptura de caché, así que cada cambio en ese contenido cuesta un fallo de caché mientras se calienta el nuevo prefijo. Después se mantiene estable, pero es una razón real por la que la opción A almacena en caché ligeramente mejor que la opción B, además de tener menos componentes que ejecutar.

Alternativa: reintento frente a conmutación por error

Conviene configurar Default on failure de la página Routing antes de necesitarlo. Retry reenvía al mismo modelo en 408, 409, 429 y 5xx, respetando Retry-After y, en caso contrario, aplicando una espera exponencial de 1 s hasta un máximo de 30 s. Fallback targets recorre una lista ordenada de modelos de respaldo y se activa ante cualquier código 4xx o 5xx, bajo la premisa de que la ausencia del modelo o el rechazo del proveedor podrían afectar solo al destino actual. Las reglas individuales pueden anular la configuración global. Cuando se ejecuta una alternativa, la respuesta incluye x-ccr-fallback-attempts y x-ccr-fallback-model para que puedas identificarlo posteriormente.

Verifica que realmente esté en la ruta

Inicia Claude Code desde el perfil, envía un mensaje y abre después Request logs en CCR. La fila muestra request model (lo que solicitó Claude Code), resolved provider y resolved model (adónde se envió); esa triple coincidencia es la prueba. Dentro de la CLI, /model muestra los modelos que expone CCR. Si Claude Code responde pero no aparece ninguna fila en el registro, lo iniciaste por tu cuenta en lugar de hacerlo mediante CCR, y el alcance del perfil es Only opened from CCR.

Cuánto cuesta una sesión de programación

Claude Code reenvía el prompt del sistema, la conversación y el contexto de archivos actualizado en cada paso, por lo que la tarifa por token se acumula rápidamente. A las tarifas de Kunavo para claude-sonnet-5:

UnidadTokens (entrada / salida)KunavoLista de Anthropic
Un paso agentivo25,000 / 1,200$0.043$0.062
Una tarea de 20 pasos~500k / ~24k~$0.87~$1.24
Un día intenso (5 tareas)—~$4.34~$6.20

Eso supone aproximadamente un 30% de descuento en el modelo principal, antes del almacenamiento en caché de prompts. Las tarifas completas están en la guía de precios de la API de Claude, y la calculadora de costes utiliza tus propios recuentos de tokens.

Qué sigue funcionando y qué no

Dirigir Claude Code a cualquier puerta de enlace cambia algunas cosas. La lista es breve y conviene conocerla antes de comprometerte:

FunciónDetrás de una puerta de enlace
Programación, herramientas, subagentes, MCP y hooksSin cambios
caché de promptsFunciona: ruta nativa de Messages API
Tu suscripción a claude.aiNo se utiliza; se factura por token a la clave en su lugar
Remote ControlNo disponible: necesita una identidad de claude.ai
Dictado por vozNo disponible: por el mismo motivo
Recuentos de tokens de /contextEstimados localmente (consulta más abajo)

En la última fila: el recuento de tokens es el único endpoint que la especificación de puerta de enlace de Anthropic marca como opcional, y Claude Code estima localmente el uso del contexto cuando no está disponible. Kunavo no ofrece /v1/messages/count_tokens actualmente, por lo que tu cifra de /context es una estimación, no un recuento exacto. Nada se degrada más allá de ese número: la compactación automática y la sesión en sí no se ven afectadas.

Solución de problemas

La ruta de la URL base

SíntomaCausa y solución
401 en cada solicitudLa clave está en el encabezado que el servidor no lee. Cambia entre ANTHROPIC_AUTH_TOKEN y ANTHROPIC_API_KEY y vuelve a ejecutar el curl anterior.
Claude Code te pide iniciar sesión, pero curl funcionaUna URL base accesible no es una credencial. Establece ANTHROPIC_AUTH_TOKEN en algún lugar que se lea antes de la configuración inicial: una exportación del shell o ~/.claude/settings.json.
ANTHROPIC_API_KEY está configurada pero se ignora; no aparece ningún avisoLa aprobación única se rechazó anteriormente. Actívala en /config → Use custom API key o cambia a ANTHROPIC_AUTH_TOKEN.
404 al indicar el modeloCoincidencia exacta del slug: elimina cualquier sufijo de fecha y utiliza un slug de la tabla anterior.
400 al indicar thinking o adaptiveClaude Code solicita razonamiento adaptativo en los modelos 4.6 y posteriores. En Opus 4.6 y Sonnet 4.6, CLAUDE_CODE_DISABLE_ADAPTIVE_THINKING=1 lo evita.
/fast indica que el modo rápido está desactivadoLa comprobación de disponibilidad llama directamente a api.anthropic.com y no sigue tu URL base. Establece CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1.
Faltan modelos en el selectorActiva CLAUDE_CODE_ENABLE_GATEWAY_MODEL_DISCOVERY=1 o indícalos mediante las variables ANTHROPIC_DEFAULT_*_MODEL.

…y cuando el router está en la ruta

SíntomaCausa y solución
Las ediciones de config.json no cambian nadaNo pueden hacerlo. La configuración en tiempo de ejecución está en config.sqlite; el archivo JSON es una fuente de migración de un solo uso. Realiza el cambio en la interfaz de usuario.
No se encontró ccr codeNo forma parte del conjunto de comandos actual. Inicia un perfil por nombre: ccr "My Profile" o ccr-app "My Profile" desde la aplicación de escritorio.
ccr no se encontró después de la instalaciónEl directorio bin global de npm no está en PATH o Node es anterior a 22. Comprueba npm prefix -g y node --version.
La interfaz se carga, pero fallan las solicitudes de modelosLa administración y la puerta de enlace son servicios distintos en puertos distintos. Confirma que Server muestre Running y dirige los clientes a :3456, no a :3458.
La puerta de enlace devuelve 401 aunque el proveedor funcionaNo hay ninguna clave de cliente de CCR. Crea una en la página API Keys; es una credencial distinta de tu clave sk-kn-.
Claude Code se ejecuta, pero no aparece nada en Request logsIniciaste Claude Code directamente mientras el alcance del perfil es Only opened from CCR. Inícialo desde CCR o cambia el alcance a System default.
Todos los subagentes utilizan el modelo predeterminadoEl enrutamiento de subagentes depende del campo Description de la página Models. Sin descripciones, CCR no inserta ninguna instrucción de enrutamiento y la etiqueta nunca se escribe.
/model no muestra modelos de CCRNo hay ningún proveedor ni modelo configurado, o el perfil está desactivado. Ejecuta primero Check Connection en el proveedor.

Las correcciones específicas de cada error de la API están en las páginas de solución de problemas invalid API key y rate limit.

Preguntas frecuentes

¿Necesito claude-code-router para usar Claude Code con una API diferente?

No. Claude Code lee ANTHROPIC_BASE_URL de forma nativa, así que dirigirlo a cualquier endpoint que sirva la API Anthropic Messages no requiere software adicional: tres variables de entorno y listo. Merece la pena ejecutar CCR cuando quieres enrutar entre varios proveedores, obtener registros por solicitud del proveedor, modelo, latencia, tokens y coste, o usar un modelo diferente por subagente en lugar de un único modelo para todos. Si tu objetivo es simplemente ejecutar Claude en un endpoint más barato, cambiar la URL base es una configuración más pequeña y fiable: no requiere ningún servicio adicional y la caché de solicitudes pasa directamente.

¿Por qué editar el config.json de claude-code-router no hace nada?

Porque ya no es la configuración que lee CCR. Las compilaciones actuales mantienen la configuración de ejecución en ~/.claude-code-router/config.sqlite (%APPDATA%\claude-code-router\config.sqlite en Windows) y leen un config.json heredado exactamente una vez, como fuente de migración, cuando todavía no existe una configuración SQLite. Después de esa primera ejecución, el archivo JSON se ignora silenciosamente, sin ningún error, por lo que una matriz Providers o un bloque Router editados manualmente simplemente nunca surten efecto. Haz el cambio en la interfaz de escritorio de CCR y usa Settings → Export data si quieres una copia de seguridad a nivel de archivo. La mayoría de los tutoriales de CCR de terceros todavía describen el archivo JSON.

¿Cómo inicio ahora Claude Code mediante claude-code-router?

Por nombre de perfil, no con ccr code. Crea un perfil en Agent Config → Add profile → Claude Code, elige un modelo, guárdalo y después inícialo: ccr "Claude Code - Work" con la CLI de npm, o ccr-app "Claude Code - Work" con la aplicación de escritorio, que también proporciona a cada tarjeta de perfil un botón de terminal para la CLI y un botón de reproducción para la aplicación Claude. El conjunto actual de comandos de la CLI es start, ui, stop, serve y web, además de un nombre o id de perfil; no existe ningún subcomando code. Añade las opciones propias del agente después de dos guiones, por ejemplo: ccr "Claude Code - Work" cli -- --model sonnet.

¿Puede Claude Code usar un modelo personalizado?

Mecánicamente, sí: ANTHROPIC_MODEL acepta cualquier slug que sirva el endpoint detrás de ANTHROPIC_BASE_URL, y claude-code-router añade el enrutamiento por tarea entre proveedores. El límite real es que la propia documentación de la pasarela de Anthropic afirma que no admite dirigir Claude Code a modelos que no sean Claude mediante ninguna pasarela, por lo que el uso de herramientas y el comportamiento agéntico en un modelo no-Claude son un territorio no probado, no una configuración compatible. En Kunavo, la ruta compatible es un slug de Claude en un endpoint más barato; los demás modelos del catálogo se pueden alcanzar mediante la API compatible con OpenAI, no mediante Claude Code. La regla del slug exacto y la tabla de modelos aparecen en establecer un modelo personalizado más arriba, y el catálogo completo está en la página de modelos.

¿Qué URL base y variables de entorno necesita Claude Code?

Configura ANTHROPIC_BASE_URL como https://api.kunavo.com (Claude Code añade /v1/messages por sí mismo), ANTHROPIC_AUTH_TOKEN con tu clave sk-kn- y ANTHROPIC_MODEL con un identificador exacto, como claude-sonnet-5. Fija también los alias: ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5 para /model opus y el modo de planificación (Opus 5.5 requiere Claude Code v2.1.280 o posterior; ejecuta claude update), ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5 porque, de lo contrario, el alias sonnet solicita Sonnet 5.5, que Kunavo no ofrece, y ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5 para que las tareas en segundo plano se cobren a la tarifa más económica.

¿Debo usar ANTHROPIC_AUTH_TOKEN o ANTHROPIC_API_KEY?

Usa ANTHROPIC_AUTH_TOKEN. Se envía en una cabecera Authorization: Bearer y surte efecto inmediatamente, mientras que ANTHROPIC_API_KEY se envía como x-api-key y requiere una aprobación interactiva única; una clave que rechazaste una vez se ignora silenciosamente después. En Kunavo, esa aprobación es la única diferencia: tanto /v1/messages como el endpoint /v1/models detrás del descubrimiento de modelos de la pasarela de Claude Code leen la clave desde cualquiera de las dos cabeceras.

¿Por qué Claude Code dice que el modelo no está disponible?

Kunavo compara exactamente los identificadores de modelos y no crea alias para nombres con fecha, por lo que una solicitud de claude-sonnet-4-5-20250929 devuelve 404, mientras que claude-sonnet-5 funciona. Configura ANTHROPIC_MODEL con un identificador exacto del catálogo en lugar de depender del valor predeterminado integrado de Claude Code. La otra causa habitual es el alias sonnet: si no está fijado, solicita Sonnet 5.5, que Kunavo no ofrece, por lo que /model sonnet, la fase de ejecución de opusplan y cualquier subagente configurado con model: sonnet devuelven 404 hasta que se configure ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5.

¿Qué deja de funcionar cuando Claude Code se ejecuta mediante una pasarela?

Tres cosas, por diseño. Remote Control y el dictado por voz necesitan una identidad de claude.ai y no están disponibles mientras haya configurada una credencial de pasarela. La comprobación de disponibilidad de /fast llama directamente a api.anthropic.com en lugar de seguir tu URL base, por lo que puede informar de que el modo rápido no está disponible aunque las solicitudes normales funcionen; CLAUDE_CODE_SKIP_FAST_MODE_ORG_CHECK=1 lo restablece. La programación, las herramientas, los subagentes, MCP y la caché de solicitudes no se ven afectados.

¿Puedo usar en su lugar mi suscripción Claude Pro o Max?

No. Las suscripciones de Chat no incluyen acceso a la API, y establecer una credencial de pasarela deja deliberadamente en pausa tu inicio de sesión de claude.ai: los límites de la suscripción dejan de aplicarse y el uso se factura por token a la clave en su lugar. Consulta ¿Claude Code es gratuito? para ver el desglose completo.

¿Funciona con la extensión de VS Code?

Sí, pero la extensión comprueba las credenciales antes de iniciarse, así que establécelas en la propia configuración claudeCode.environmentVariables de VS Code, no solo en ~/.claude/settings.json.

¿Y Cursor, Kilo Code o Cline?

Esos usan un campo de proveedor compatible con OpenAI en lugar de variables de entorno: URL base https://api.kunavo.com/v1, misma clave. La configuración y el enrutamiento de modelos por herramienta se explican en las guías de Cline, Roo Code y Kilo Code.