Documentación
Claude Agent SDK
El SDK de Agent no tiene una opción para la URL base: inicia la CLI de Claude Code y le entrega todo el entorno. Ese es el punto de entrada del enrutamiento, y bastan dos variables.
Buscar una opción base_url en el SDK no da resultado, y no se trata de una omisión en la documentación: la opción no existe. El SDK ejecuta la CLI de Claude Code como subproceso, y es la CLI la que lee ANTHROPIC_BASE_URL y ANTHROPIC_AUTH_TOKEN. Define esas dos variables y se enrutarán todas las llamadas que realice el agente, sin modificar el código de este.
# The SDK has no base_url option. The CLI it spawns reads these, and the
# SDK passes the parent environment straight through — so exporting them
# before your program starts is enough.
export ANTHROPIC_BASE_URL=https://api.kunavo.com
export ANTHROPIC_AUTH_TOKEN=sk-kn-...
# Pin models Kunavo serves: the CLI's default and its opus/sonnet aliases
# follow Anthropic's newest models, and the sonnet alias asks for Sonnet 5.5,
# which Kunavo does not serve — unpinned, those requests 404.
export ANTHROPIC_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_OPUS_MODEL=claude-opus-5-5
export ANTHROPIC_DEFAULT_SONNET_MODEL=claude-sonnet-5
export ANTHROPIC_DEFAULT_HAIKU_MODEL=claude-haiku-4-5
python my_agent.pyhttps://api.kunavo.com, sin /v1. Los clientes de Anthropic añaden /v1/messages por su cuenta. Aquí se aplica la misma regla que suele causar problemas en los demás clientes compatibles con Anthropic, y se explica en la página de ANTHROPIC_BASE_URL.Por qué el entorno llega a la CLI
Vale la pena dedicarle un párrafo, porque esta es la diferencia entre un truco que podría dejar de funcionar y una propiedad documentada en la que puedes basarte. El transporte de subprocesos del SDK de Python construye el entorno del proceso hijo a partir de os.environ del proceso padre, eliminando una sola clave: CLAUDECODE, para que el hijo no crea que se ejecuta dentro de una sesión de Claude Code; después combina CLAUDE_CODE_ENTRYPOINT, luego ClaudeAgentOptions.env y, por último, la versión del SDK.
De ahí se desprenden dos cosas; la segunda es la que suele entenderse mal. Todo lo que esté en tu shell llega a la CLI, así que exportar las dos variables funciona. Además, options.env se combina por encima del entorno heredado, por lo que la forma explícita prevalece sobre una variable exportada obsoleta en lugar de quedar subordinada a ella. El código está en subprocess_cli.py.
La forma explícita y cuándo exigirla
Las variables exportadas funcionan bien en tu propio equipo y son frágiles en cualquier otro entorno: el endpoint del agente pasa a depender de cómo se inició el proceso, lo cual falla la primera vez que se ejecuta mediante un programador, en un contenedor o en un trabajo de CI que no carga tu perfil. Pasar env en el objeto de opciones integra el enrutamiento en el programa.
from claude_agent_sdk import ClaudeSDKClient, ClaudeAgentOptions
# The explicit form. options.env is merged ON TOP of the inherited
# environment, so this wins over whatever the shell happens to hold —
# which is what you want in anything that is not your own laptop.
options = ClaudeAgentOptions(
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",
},
)
async with ClaudeSDKClient(options=options) as client:
await client.query("Summarise the open TODOs in this repo")
async for message in client.receive_response():
print(message)Paso a paso
- Cree una clave en
/app/keysy cópiela: se muestra una sola vez. - Decide dónde se define el enrutamiento: variables exportadas para el trabajo local,
ClaudeAgentOptions(env=…)para todo lo que se ejecute sin supervisión. - Define
ANTHROPIC_BASE_URLcomohttps://api.kunavo.comyANTHROPIC_AUTH_TOKENcomo tu clavesk-kn-…. - Configura
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_OPUS_MODELyANTHROPIC_DEFAULT_SONNET_MODELcon identificadores disponibles: el valor predeterminado integrado de la CLI y sus aliasopusysonnetsiguen los modelos más recientes de Anthropic, y un modelo que Kunavo no ofrece —Sonnet 5.5, solicitado por el aliassonnet— devuelve 404. - Opcionalmente, define
ANTHROPIC_DEFAULT_HAIKU_MODELpara que las subtareas en segundo plano que inicia la CLI usen el nivel de menor costo. - Ejecuta el programa. No cambia nada en el código del agente.
Qué nivel usar para cada subtarea
Un agente distribuye el trabajo: una sola petición tuya se convierte en muchos viajes de ida y vuelta facturables, por lo que la asignación de niveles importa más aquí que en una aplicación de chat. Las tarifas son USD por 1M de tokens, entrada / salida, y se obtienen en tiempo real del catálogo.
| ID de modelo | Entrada / salida de Kunavo | Uso recomendado |
|---|---|---|
claude-haiku-4-5 | $0.70 / $3.50 | Subtareas en segundo plano que la CLI genera por su cuenta: frecuentes, automáticas y fáciles de pagar de más |
claude-sonnet-5 | $1.40 / $7.00 | El valor predeterminado práctico para el razonamiento propio del agente |
claude-opus-5 | $3.50 / $17.50 | Solo cuando el nivel más barato necesita varios intentos para conseguirlo |
Verifica antes de depurar el SDK
Una solicitud basta para determinar si el problema está en la clave, el endpoint o el SDK. Si devuelve 200, la misma credencial funciona para la CLI que inicia el SDK, y cualquier problema restante estará en cómo se definen las variables, no en sus valores.
# Settles whether a failure is the key, the endpoint, or the SDK.
# 200 here means the same credential works for the CLI the SDK spawns.
curl -sS https://api.kunavo.com/v1/messages \
-H "Authorization: Bearer sk-kn-..." \
-H "anthropic-version: 2023-06-01" \
-H "content-type: application/json" \
-d '{"model":"claude-haiku-4-5","max_tokens":16,
"messages":[{"role":"user","content":"ping"}]}'Referencia
El SDK es de código abierto en anthropics/claude-agent-sdk-python. El comportamiento del entorno que se describe aquí corresponde a su propio transporte de subprocesos; se consultó el 2026-09-04. El SDK de TypeScript tiene la misma arquitectura: controla la CLI en lugar de llamar a la API, así que la CLI vuelve a leer las variables de enrutamiento. Su README no documenta ni la opción ni el comportamiento, así que confirma el nombre de la opción en sus tipos antes de confiar allí en la forma explícita. El servicio de Kunavo es la API de Messages; encontrarás otros clientes que usan el mismo tipo de enrutamiento en el centro de integraciones.
Preguntas frecuentes
¿Puede el SDK de Claude Agent usar una URL base personalizada?
Sí, pero no mediante una opción del SDK: no hay ningún parámetro base_url, por eso buscarlo en el README no da resultado. El SDK ejecuta la CLI de Claude Code como subproceso, y es la CLI la que lee ANTHROPIC_BASE_URL y ANTHROPIC_AUTH_TOKEN. Al definir esas dos variables en el entorno donde se ejecuta el programa, se enrutan todas las llamadas que realiza el agente sin modificar el código de este.
¿Cómo pasa el SDK las variables de entorno a la CLI?
Hereda todo el entorno del proceso padre y filtra exactamente una clave. En el transporte de subprocesos del SDK de Python, el entorno del proceso hijo se construye a partir de os.environ del proceso padre menos CLAUDECODE; después se combina con CLAUDE_CODE_ENTRYPOINT, luego con ClaudeAgentOptions.env y, por último, con la versión del SDK. De ahí se desprenden dos consecuencias: todo lo que esté en tu shell llega a la CLI, y options.env prevalece sobre el shell porque se combina encima de este.
¿Debería usar el entorno o ClaudeAgentOptions(env=...)?
Usa options.env en cualquier entorno que no sea tu propio portátil. Depender del shell del entorno significa que el endpoint del agente depende de cómo se inició el proceso, lo cual falla la primera vez que se ejecuta mediante un programador, en un contenedor o en un trabajo de CI que no carga tu perfil. Al pasar env explícitamente en el objeto de opciones, el enrutamiento pasa a ser una propiedad del programa y no de su entorno; además, se combina encima del entorno heredado, por lo que también prevalece sobre una variable exportada obsoleta.
¿El SDK de Agent necesita una cuenta de Anthropic aparte?
Necesita una credencial que acepte la CLI de Claude Code, que no tiene por qué ser de primera parte. Como el enrutamiento se realiza mediante ANTHROPIC_BASE_URL y ANTHROPIC_AUTH_TOKEN, funciona cualquier endpoint que ofrezca la API de Anthropic Messages; en Kunavo, basta una clave sk-kn- para https://api.kunavo.com. Se factura por token desde un saldo prepagado, en lugar de mediante un plan.
¿Qué modelos debería usar un programa del SDK de Agent?
Elige el nivel según la subtarea, porque un agente se ramifica. Claude Haiku 4.5 a $0.70 / $3.50 por 1M de tokens es la opción adecuada para el trabajo en segundo plano que la CLI genera por sí sola; Claude Sonnet 5 a $1.40 / $7.00 es la opción predeterminada de trabajo; Claude Opus 5 a $3.50 / $17.50 solo merece la pena cuando un nivel más barato necesita varios intentos. Configurar ANTHROPIC_DEFAULT_HAIKU_MODEL junto con las dos variables de enrutamiento es una sola línea que reduce el coste de cada ejecución.
¿El SDK de Agent para TypeScript funciona igual?
Tiene la misma arquitectura: el SDK controla la CLI de Claude Code en lugar de llamar directamente a la API, así que la CLI vuelve a ser quien lee las variables de enrutamiento. Esta página explica el mecanismo para el SDK de Python porque esa es la implementación cuyo código se consultó; si usas el SDK de TypeScript, confirma el nombre de la opción en sus propios tipos antes de confiar en la forma explícita, y mientras tanto usa las variables de entorno exportadas.
¿Por qué el SDK filtra CLAUDECODE del entorno?
Así, la CLI iniciada por el SDK no cree que se está ejecutando dentro de una sesión principal de Claude Code. Es la única clave que se elimina del entorno heredado, y aquí solo importa como prueba de que todo lo demás se transmite íntegramente, incluidas las dos variables de enrutamiento de las que depende esta página.