Documentazione

Documentazione

Claude Agent SDK

L’SDK dell’agente non ha un’opzione per l’URL di base: avvia la CLI Claude Code e le passa l’intero ambiente. È questo il punto in cui interviene l’instradamento, e bastano due variabili.

Cercare un’opzione base_url nell’SDK non restituisce nulla, e non si tratta di un’omissione nella documentazione: l’opzione non esiste. L’SDK esegue la CLI Claude Code come sottoprocesso, ed è la CLI a leggere ANTHROPIC_BASE_URL e ANTHROPIC_AUTH_TOKEN. Imposta queste due variabili e tutte le chiamate effettuate dall’agente vengono instradate senza dover modificare il codice dell’agente.

# 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.py
L’endpoint è la radice del servizio, https://api.kunavo.com, senza /v1. I client Anthropic aggiungono autonomamente /v1/messages. Qui vale la stessa regola che crea problemi con ogni altro client compatibile con Anthropic, spiegata nella pagina su ANTHROPIC_BASE_URL.

Perché l’ambiente viene passato alla CLI

Vale la pena dedicare un paragrafo a questo punto, perché distingue un espediente che potrebbe smettere di funzionare da una proprietà documentata su cui puoi fare affidamento. Il trasporto dei sottoprocessi dell’SDK Python crea l’ambiente del processo figlio a partire da os.environ del processo padre, rimuovendo una sola chiave: CLAUDECODE, affinché il processo figlio non creda di essere in esecuzione all’interno di una sessione di Claude Code; poi unisce CLAUDE_CODE_ENTRYPOINT, quindi ClaudeAgentOptions.env e infine la versione dell’SDK.

Ne conseguono due cose, e la seconda è quella che spesso viene fraintesa. Tutto ciò che è nella shell arriva alla CLI, quindi esportare le due variabili funziona. Inoltre, options.env viene unito in cima all’ambiente ereditato, quindi la forma esplicita prevale su un’esportazione obsoleta, anziché soccombervi. Il codice si trova in subprocess_cli.py.

La forma esplicita e quando usarla

Le variabili esportate vanno bene sul proprio computer, ma sono fragili in tutti gli altri ambienti: l’endpoint dell’agente dipende da come viene avviato il processo, e questo causa problemi la prima volta che viene eseguito da uno scheduler, in un container o in un job CI che non carica il tuo profilo. Passare env nell’oggetto delle opzioni rende l’instradamento parte del programma.

my_agent.py
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)

Passo dopo passo

  1. Crea una chiave su /app/keys e copiala: viene mostrata una sola volta.
  2. Scegli dove definire l’instradamento: variabili esportate per il lavoro locale, ClaudeAgentOptions(env=…) per tutto ciò che viene eseguito senza supervisione.
  3. Imposta ANTHROPIC_BASE_URL su https://api.kunavo.com e ANTHROPIC_AUTH_TOKEN sulla tua chiave sk-kn-….
  4. Imposta ANTHROPIC_MODEL, ANTHROPIC_DEFAULT_OPUS_MODEL e ANTHROPIC_DEFAULT_SONNET_MODEL sugli ID serviti: il valore predefinito integrato nella CLI e i suoi alias opus e sonnet seguono i modelli più recenti di Anthropic, mentre un modello non servito da Kunavo — Sonnet 5.5, richiesto dall’alias sonnet — restituisce 404.
  5. Imposta anche ANTHROPIC_DEFAULT_HAIKU_MODEL su claude-haiku-4-5: senza questa impostazione, l'alias haiku della CLI richiede un ID modello che Kunavo non offre (Haiku 5.5 dalla v2.1.293), quindi i subagenti definiti con model: haiku restituiscono 404. La stessa riga assegna al tier meno costoso le sottoattività in background avviate dalla CLI.
  6. Esegui il programma. Non devi modificare il codice dell’agente.

Quale livello usare per ciascuna sottoattività

Un agente suddivide il lavoro: una singola richiesta può tradursi in molti scambi fatturati, quindi la scelta del livello è qui più importante che in un’app di chat. Le tariffe, in USD per 1M token, input / output, sono aggiornate in tempo reale dal catalogo.

ID del modelloKunavo ingresso / uscitaIdeale per
claude-haiku-4-5$0.70 / $3.50Sottoattività in background generate automaticamente dalla CLI: frequenti, automatiche e facili da pagare troppo
claude-sonnet-5$1.40 / $7.00Il valore predefinito consigliato per il ragionamento vero e proprio dell’agente
claude-opus-5$3.50 / $17.50Solo quando un livello meno costoso richiede diversi tentativi per arrivare al risultato
Il calcolo per l’ultima riga — quanto deve peggiorare un livello meno costoso prima che smetta di convenire — è spiegato in Opus vs Sonnet vs Haiku. Se l’agente viene eseguito senza supervisione, la questione dei costi è trattata in esecuzione senza richieste di autorizzazione.

Verifica prima di eseguire il debug dell’SDK

Una richiesta basta per capire se il problema riguarda la chiave, l’endpoint o l’SDK. Se restituisce 200, la stessa credenziale funziona per la CLI avviata dall’SDK; se qualcosa continua a non funzionare, il problema riguarda dove sono impostate le variabili, non i loro valori.

# 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"}]}'

Riferimenti

L’SDK è open source su anthropics/claude-agent-sdk-python. Il comportamento dell’ambiente descritto qui deriva dal suo trasporto dei sottoprocessi, esaminato il 2026-09-04. L’SDK TypeScript ha la stessa architettura: controlla la CLI anziché chiamare l’API, quindi è ancora la CLI a leggere le variabili di instradamento. Il suo README non documenta né l’opzione né questo comportamento, quindi verifica il nome dell’opzione nei relativi tipi prima di affidarti alla forma esplicita. Il lato Kunavo è costituito dall’API Messages; gli altri client che usano lo stesso instradamento sono elencati nell’hub delle integrazioni.

Domande frequenti

L’SDK dell’agente Claude può usare un URL di base personalizzato?

Sì, ma non tramite un’opzione dell’SDK: non esiste un parametro base_url, ed è per questo che cercarlo nel README non dà risultati. L’SDK esegue la CLI Claude Code come sottoprocesso, ed è la CLI a leggere ANTHROPIC_BASE_URL e ANTHROPIC_AUTH_TOKEN. Impostando queste due variabili nell’ambiente in cui viene eseguito il programma, ogni chiamata effettuata dall’agente viene instradata senza dover modificare il codice dell’agente.

In che modo l’SDK passa le variabili d’ambiente alla CLI?

Eredita l’intero ambiente del processo padre ed esclude esattamente una chiave. Nel trasporto dei sottoprocessi dell’SDK Python, l’ambiente del processo figlio viene creato partendo da os.environ del processo padre, meno CLAUDECODE, poi unendo CLAUDE_CODE_ENTRYPOINT, quindi ClaudeAgentOptions.env e infine la versione dell’SDK. Ne derivano due conseguenze: tutto ciò che è nella shell arriva alla CLI e options.env prevale sulla shell perché viene unito in un secondo momento.

È meglio usare l’ambiente o ClaudeAgentOptions(env=...)?

Usa options.env in tutti gli ambienti che non siano il tuo computer personale. Affidarsi all’ambiente della shell significa che l’endpoint dell’agente dipende da come è stato avviato il processo; questo causa problemi la prima volta che viene eseguito da uno scheduler, in un container o in un job CI che non carica il tuo profilo. Passare env in modo esplicito nell’oggetto delle opzioni rende l’instradamento una proprietà del programma, anziché dell’ambiente circostante; inoltre, viene unito all’ambiente ereditato e quindi prevale anche su un’esportazione obsoleta.

L’SDK dell’agente richiede un account Anthropic separato?

Richiede una credenziale accettata dalla CLI Claude Code, che non deve necessariamente essere di prima parte. Poiché l’instradamento avviene tramite ANTHROPIC_BASE_URL e ANTHROPIC_AUTH_TOKEN, funziona un endpoint che espone l’API Anthropic Messages: su Kunavo basta una chiave sk-kn- per https://api.kunavo.com; l’addebito è per token e viene scalato da un saldo prepagato, anziché da un piano.

Quali modelli dovrebbe usare un programma basato sull’SDK dell’agente?

Scegli il tier in base alla sottoattività, perché un agente distribuisce il lavoro su più attività. Claude Haiku 4.5 a $0.70 / $3.50 per 1M di token è adatto al lavoro in background generato automaticamente dalla CLI; Claude Sonnet 5 a $1.40 / $7.00 è la scelta predefinita più pratica; Claude Opus 5 a $3.50 / $17.50 vale la pena solo quando un tier meno costoso richiederebbe vari tentativi. In ogni caso, imposta ANTHROPIC_DEFAULT_HAIKU_MODEL insieme alle variabili di instradamento: senza questa impostazione, l'alias haiku della CLI richiede un ID modello che Kunavo non offre, quindi i subagenti definiti con model: haiku restituiscono 404; con l'impostazione, il lavoro in background viene eseguito con Haiku anziché con il modello principale.

L’SDK dell’agente TypeScript funziona allo stesso modo?

Ha la stessa architettura: l’SDK controlla la CLI Claude Code anziché chiamare direttamente l’API, quindi è ancora la CLI a leggere le variabili di instradamento. Questa pagina descrive il meccanismo dell’SDK Python perché è quello di cui è stato esaminato il codice sorgente; se usi l’SDK TypeScript, verifica il nome dell’opzione nei relativi tipi prima di affidarti alla forma esplicita e, nel frattempo, usa le variabili d’ambiente esportate.

Perché l’SDK esclude CLAUDECODE dall’ambiente?

Per evitare che una CLI avviata dall’SDK creda di essere in esecuzione all’interno di una sessione padre di Claude Code. È l’unica chiave rimossa dall’ambiente ereditato; in questo caso è rilevante solo perché dimostra quanto tutto il resto venga passato integralmente, comprese le due variabili di instradamento da cui dipende questa pagina.