Documentation
Claude Agent SDK
Le SDK Agent ne propose pas d’option d’URL de base : il lance la CLI Claude Code et lui transmet l’intégralité de votre environnement. C’est à cet endroit que s’effectue le routage, et deux variables suffisent.
Rechercher une option base_url dans le SDK ne donne aucun résultat, et ce n’est pas un oubli de la documentation : l’option n’existe pas. Le SDK exécute la CLI Claude Code en tant que sous-processus, et c’est la CLI qui lit ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN. Définissez ces deux variables et tous les appels de l’agent seront acheminés, sans modifier le code de votre agent.
# 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, sans /v1. Les clients Anthropic ajoutent eux-mêmes /v1/messages. La même règle qui pose problème dans tous les autres clients compatibles avec Anthropic s’applique ici ; elle est expliquée sur la page ANTHROPIC_BASE_URL.Pourquoi l’environnement est transmis à la CLI
Cela mérite un paragraphe, car c’est ce qui distingue une astuce susceptible de cesser de fonctionner d’une propriété documentée sur laquelle vous pouvez vous appuyer. Le transport par sous-processus du SDK Python construit l’environnement enfant à partir de os.environ du parent, en supprimant une seule clé — CLAUDECODE — pour que l’enfant ne pense pas s’exécuter dans une session Claude Code ; il fusionne ensuite CLAUDE_CODE_ENTRYPOINT, puis ClaudeAgentOptions.env, puis la version du SDK.
Deux conséquences en découlent, et la seconde est celle que l’on comprend souvent mal. Tout ce qui se trouve dans votre shell parvient à la CLI, donc l’exportation des deux variables fonctionne. Et options.env est fusionné par-dessus l’environnement hérité : la forme explicite prend donc le dessus sur une ancienne exportation au lieu de céder devant elle. Le code se trouve dans subprocess_cli.py.
La forme explicite et les cas où il faut l’exiger
Les variables exportées conviennent sur votre propre machine et deviennent fragiles partout ailleurs : le point de terminaison de l’agent dépend alors du mode de lancement du processus, et cela échoue dès qu’il s’exécute sous un planificateur, dans un conteneur ou dans une tâche CI qui ne charge pas votre profil. Transmettre env dans l’objet options fait du routage une propriété du programme.
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)Étape par étape
- Créez une clé sur
/app/keyset copiez-la — elle n’est affichée qu’une seule fois. - Choisissez où définir le routage : variables exportées pour le travail local,
ClaudeAgentOptions(env=…)pour toute exécution sans surveillance. - Définissez
ANTHROPIC_BASE_URLsurhttps://api.kunavo.cometANTHROPIC_AUTH_TOKENsur votre clésk-kn-…. - Définissez
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_OPUS_MODELetANTHROPIC_DEFAULT_SONNET_MODELsur des identifiants servis : la valeur par défaut intégrée à la CLI ainsi que ses aliasopusetsonnetsuivent les modèles les plus récents d’Anthropic, et un modèle non servi par Kunavo — Sonnet 5.5, demandé par l’aliassonnet— renvoie 404. - Définissez éventuellement
ANTHROPIC_DEFAULT_HAIKU_MODELpour que les sous-tâches exécutées en arrière-plan par la CLI utilisent le niveau le moins cher. - Exécutez votre programme. Rien ne change dans le code de l’agent.
Quel niveau pour quelle sous-tâche
Un agent répartit le travail : une seule demande peut entraîner de nombreux allers-retours facturés. La correspondance entre les niveaux importe donc davantage ici que dans une application de discussion. Les tarifs sont exprimés en USD par 1M de jetons, entrée / sortie, et proviennent du catalogue en temps réel.
| Identifiant du modèle | Entrée / sortie sur Kunavo | Utilisation conseillée |
|---|---|---|
claude-haiku-4-5 | $0.70 / $3.50 | Sous-tâches d’arrière-plan lancées automatiquement par la CLI — fréquentes, automatiques et faciles à surpayer |
claude-sonnet-5 | $1.40 / $7.00 | Le choix par défaut adapté au raisonnement proprement dit de l’agent |
claude-opus-5 | $3.50 / $17.50 | Uniquement lorsqu’un niveau moins cher nécessite plusieurs tentatives pour y parvenir |
Vérifiez avant de déboguer le SDK
Une requête suffit à déterminer si l’échec vient de la clé, du point de terminaison ou du SDK. Si elle renvoie 200, le même identifiant fonctionne pour la CLI lancée par le SDK, et tout problème qui persiste concerne l’endroit où les variables sont définies, pas leur contenu.
# 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"}]}'Références
Le SDK est open source sur anthropics/claude-agent-sdk-python. Le comportement de l’environnement décrit ici provient de son propre transport par sous-processus, consulté le 2026-09-04. Le SDK TypeScript a la même architecture : il pilote la CLI au lieu d’appeler l’API, et c’est donc encore la CLI qui lit les variables de routage. Son README ne documente ni l’option ni ce comportement ; vérifiez donc le nom de l’option dans ses types avant de vous fier à la forme explicite. Côté Kunavo, il s’agit de l’API Messages ; les autres clients qui utilisent le même routage sont répertoriés sur le hub des intégrations.
Questions fréquentes
Le SDK Agent Claude peut-il utiliser une URL de base personnalisée ?
Oui, mais pas au moyen d’une option du SDK : il n’existe pas de paramètre base_url, ce qui explique pourquoi une recherche dans le README ne donne aucun résultat. Le SDK exécute la CLI Claude Code en tant que sous-processus, et c’est la CLI qui lit ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN. Définir ces deux variables dans l’environnement d’exécution de votre programme achemine tous les appels de l’agent, sans modifier son code.
Comment le SDK transmet-il les variables d’environnement à la CLI ?
Il hérite de tout l’environnement parent et filtre exactement une clé. Dans le transport par sous-processus du SDK Python, l’environnement enfant est construit à partir de os.environ du parent, moins CLAUDECODE, puis fusionné avec CLAUDE_CODE_ENTRYPOINT, puis avec ClaudeAgentOptions.env, puis avec la version du SDK. Deux conséquences en découlent : tout ce qui se trouve dans votre shell parvient à la CLI, et options.env prend le dessus sur le shell, puisqu’il est fusionné par-dessus.
Dois-je utiliser l’environnement ou ClaudeAgentOptions(env=...) ?
Utilisez options.env dès que vous n’êtes plus sur votre propre ordinateur. Si vous vous fiez à l’environnement ambiant du shell, le point de terminaison de l’agent dépend du mode de lancement du processus ; cela échoue dès qu’il s’exécute sous un planificateur, dans un conteneur ou dans une tâche CI qui ne reprend pas votre profil. Transmettre explicitement env dans l’objet options fait du routage une propriété du programme plutôt que de son environnement, et cette valeur est fusionnée par-dessus l’environnement hérité : elle prend donc aussi le dessus sur une ancienne exportation.
Le SDK Agent a-t-il besoin d’un compte Anthropic distinct ?
Il lui faut un identifiant que la CLI Claude Code accepte, qui n’a pas besoin de provenir directement d’Anthropic. Comme le routage passe par ANTHROPIC_BASE_URL et ANTHROPIC_AUTH_TOKEN, tout point de terminaison qui fournit l’API Anthropic Messages convient. Sur Kunavo, il s’agit d’une clé sk-kn- associée à https://api.kunavo.com ; la facturation se fait par jeton à partir d’un solde prépayé, plutôt que par abonnement.
Quels modèles un programme utilisant le SDK Agent doit-il utiliser ?
Adaptez le niveau à la sous-tâche, car un agent distribue son travail. Claude Haiku 4.5 à $0.70 / $3.50 par million de tokens est le niveau adapté au travail d’arrière-plan que la CLI génère seule ; Claude Sonnet 5 à $1.40 / $7.00 est le choix par défaut pour le travail courant ; Claude Opus 5 à $3.50 / $17.50 ne vaut le coût que lorsqu’un niveau moins cher nécessite plusieurs tentatives. Définir ANTHROPIC_DEFAULT_HAIKU_MODEL en plus des deux variables de routage est une seule ligne qui réduit le coût de chaque exécution.
Le SDK Agent TypeScript fonctionne-t-il de la même façon ?
Son architecture est la même : le SDK pilote la CLI Claude Code au lieu d’appeler directement l’API ; c’est donc encore la CLI qui lit les variables de routage. Cette page décrit le mécanisme pour le SDK Python, car c’est la source qui a été consultée. Si vous utilisez le SDK TypeScript, vérifiez le nom de l’option dans ses propres types avant de vous fier à la forme explicite, et utilisez entre-temps les variables d’environnement exportées.
Pourquoi le SDK filtre-t-il CLAUDECODE de l’environnement ?
Ainsi, une CLI lancée par le SDK ne croit pas s’exécuter dans une session parente Claude Code. C’est la seule clé supprimée de l’environnement hérité. Ici, cela montre surtout à quel point tout le reste est transmis intégralement, y compris les deux variables de routage dont dépend cette page.