Dokumentasi
Claude Agent SDK
Agent SDK tidak memiliki opsi URL dasar—SDK menjalankan CLI Claude Code dan meneruskan seluruh lingkungan Anda kepadanya. Itulah celah peruteannya, dan hanya dua variabel yang diperlukan.
Pencarian opsi base_url di SDK tidak menemukan apa pun, dan ini bukan kekurangan dokumentasi—opsi tersebut memang tidak ada. SDK menjalankan CLI Claude Code sebagai subprocess, dan CLI-lah yang membaca ANTHROPIC_BASE_URL dan ANTHROPIC_AUTH_TOKEN. Tetapkan kedua variabel tersebut agar semua panggilan yang dilakukan agen diarahkan ke sana, tanpa perlu mengubah kode agen Anda.
# 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, tanpa /v1. Klien Anthropic menambahkan /v1/messages sendiri. Aturan yang sama juga sering membingungkan pengguna di klien lain yang kompatibel dengan Anthropic, dan penjelasannya ada di halaman ANTHROPIC_BASE_URL.Mengapa lingkungan diteruskan ke CLI
Bagian ini layak dijelaskan dalam satu paragraf, karena inilah perbedaan antara trik yang mungkin berhenti berfungsi dan perilaku terdokumentasi yang dapat Anda andalkan. Transport subprocess SDK Python membangun lingkungan proses anak dari os.environ milik induknya dengan menghapus satu kunci—CLAUDECODE, agar proses anak tidak mengira dirinya berjalan di dalam sesi Claude Code—lalu menggabungkan CLAUDE_CODE_ENTRYPOINT, kemudian ClaudeAgentOptions.env, lalu versi SDK.
Ada dua konsekuensinya, dan yang kedua sering disalahpahami. Semua yang ada di shell Anda diteruskan ke CLI, jadi mengekspor kedua variabel itu akan berfungsi. Lalu options.env digabungkan di atas lingkungan yang diwarisi, sehingga bentuk eksplisit mengungguli ekspor lama, bukan sebaliknya. Kodenya ada di subprocess_cli.py.
Bentuk eksplisit dan kapan harus menggunakannya
Variabel yang diekspor tidak masalah di komputer Anda sendiri, tetapi rentan di tempat lain: endpoint agen menjadi bergantung pada cara proses diluncurkan, dan ini akan gagal saat pertama kali dijalankan oleh penjadwal, di dalam kontainer, atau dalam tugas CI yang tidak memuat profil Anda. Meneruskan env melalui objek options menjadikan perutean bagian dari program.
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)Langkah demi langkah
- Buat key di
/app/keysdan salin — key hanya ditampilkan sekali. - Tentukan tempat perutean diatur: variabel yang diekspor untuk pekerjaan lokal,
ClaudeAgentOptions(env=…)untuk apa pun yang berjalan tanpa pengawasan. - Tetapkan
ANTHROPIC_BASE_URLkehttps://api.kunavo.comdanANTHROPIC_AUTH_TOKENke kuncisk-kn-…Anda. - Tetapkan
ANTHROPIC_MODEL,ANTHROPIC_DEFAULT_OPUS_MODEL, danANTHROPIC_DEFAULT_SONNET_MODELke ID yang disediakan: default bawaan CLI serta aliasopusdansonnetmengikuti model terbaru Anthropic, dan model yang tidak disediakan Kunavo — Sonnet 5.5, yang diminta oleh aliassonnet— mengembalikan 404. - Tetapkan juga
ANTHROPIC_DEFAULT_HAIKU_MODELkeclaude-haiku-4-5: tanpa pengaturan ini, aliashaikupada CLI meminta ID model yang tidak disediakan Kunavo (Haiku 5.5 sejak v2.1.293), sehingga subagen denganmodel: haikumenghasilkan 404. Baris yang sama menempatkan sub-tugas latar belakang yang dijalankan CLI sendiri pada tier termurah. - Jalankan program Anda. Tidak ada yang berubah pada kode agen.
Tingkat untuk setiap sub-tugas
Agen menjalankan banyak permintaan—satu hal yang Anda minta dapat menghasilkan banyak putaran bolak-balik yang dikenai biaya—jadi pemetaan tingkat lebih penting di sini daripada di aplikasi obrolan. Tarifnya dalam USD per 1M token, masukan / keluaran, dan dibaca langsung dari katalog.
| ID model | Kunavo masuk / keluar | Kesesuaiannya |
|---|---|---|
claude-haiku-4-5 | $0.70 / $3.50 | Sub-tugas latar belakang yang dibuat CLI secara otomatis—sering, otomatis, dan mudah membuat Anda membayar terlalu mahal |
claude-sonnet-5 | $1.40 / $7.00 | Pilihan bawaan yang tepat untuk penalaran utama agen |
claude-opus-5 | $3.50 / $17.50 | Gunakan hanya jika tingkat yang lebih murah memerlukan beberapa kali percobaan untuk berhasil |
Verifikasi sebelum menelusuri masalah SDK
Satu permintaan dapat memastikan apakah kegagalan disebabkan oleh kunci, endpoint, atau SDK. Jika responsnya 200, kredensial yang sama berfungsi untuk CLI yang dijalankan SDK, dan masalah yang tersisa terletak pada tempat variabel ditetapkan, bukan pada isinya.
# 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"}]}'Referensi
SDK ini bersifat sumber terbuka di anthropics/claude-agent-sdk-python. Perilaku lingkungan yang dijelaskan di sini berasal dari transport subprocess SDK itu sendiri, yang diperiksa pada 2026-09-04. SDK TypeScript memiliki arsitektur yang sama—SDK tersebut mengendalikan CLI alih-alih memanggil API—jadi CLI kembali membaca variabel perutean; README-nya tidak mendokumentasikan opsi ataupun perilaku tersebut, jadi pastikan nama opsinya di tipe SDK sebelum mengandalkan bentuk eksplisit di sana. Bagian Kunavo dijelaskan di Messages API, sementara klien lain yang menggunakan cara perutean serupa dibahas di pusat integrasi.
Pertanyaan umum
Bisakah Claude Agent SDK menggunakan URL dasar khusus?
Bisa, tetapi bukan melalui opsi SDK—tidak ada parameter base_url, itulah sebabnya pencarian di README tidak menemukan apa pun. SDK menjalankan CLI Claude Code sebagai subprocess, dan CLI-lah yang membaca ANTHROPIC_BASE_URL dan ANTHROPIC_AUTH_TOKEN. Dengan menetapkan kedua variabel tersebut di lingkungan tempat program Anda berjalan, setiap panggilan yang dilakukan agen akan diarahkan ke sana tanpa perlu mengubah kode agen Anda.
Bagaimana SDK meneruskan variabel lingkungan ke CLI?
SDK mewarisi seluruh lingkungan induk dan hanya menyaring satu kunci. Dalam transport subprocess SDK Python, lingkungan proses anak dibangun dari os.environ induk dengan CLAUDECODE dihapus, lalu digabung dengan CLAUDE_CODE_ENTRYPOINT, kemudian dengan ClaudeAgentOptions.env, lalu dengan versi SDK. Ada dua konsekuensinya: semua yang ada di shell Anda diteruskan ke CLI, dan options.env mengungguli shell karena digabungkan di atasnya.
Sebaiknya gunakan lingkungan atau ClaudeAgentOptions(env=...)?
Gunakan options.env di mana pun selain laptop pribadi Anda. Mengandalkan shell yang tersedia berarti endpoint agen bergantung pada cara proses diluncurkan, dan ini akan gagal saat pertama kali dijalankan oleh penjadwal, dalam kontainer, atau dalam tugas CI yang tidak memuat profil Anda. Meneruskan env secara eksplisit melalui objek options menjadikan perutean sebagai bagian dari program, bukan lingkungannya, dan nilainya digabungkan di atas lingkungan yang diwarisi sehingga juga mengungguli ekspor lama.
Apakah Agent SDK memerlukan akun Anthropic terpisah?
SDK memerlukan kredensial yang diterima oleh CLI Claude Code, tetapi kredensial tersebut tidak harus berasal dari pihak pertama. Karena perutean dilakukan melalui ANTHROPIC_BASE_URL dan ANTHROPIC_AUTH_TOKEN, endpoint yang menyediakan Anthropic Messages API dapat digunakan—di Kunavo, cukup gunakan satu kunci sk-kn- untuk https://api.kunavo.com, dengan biaya per token yang dipotong dari saldo prabayar, bukan dari paket berlangganan.
Model apa yang sebaiknya digunakan oleh program Agent SDK?
Sesuaikan tier dengan sub-tugas, karena agen menyebarkan pekerjaan ke beberapa tugas. Claude Haiku 4.5 dengan tarif $0.70 / $3.50 per 1 juta token cocok untuk pekerjaan latar belakang yang CLI hasilkan sendiri; Claude Sonnet 5 dengan tarif $1.40 / $7.00 adalah pilihan bawaan yang tepat; Claude Opus 5 dengan tarif $3.50 / $17.50 sepadan hanya jika tier yang lebih murah memerlukan beberapa percobaan. Tetapkan ANTHROPIC_DEFAULT_HAIKU_MODEL bersama variabel perutean lainnya. Tanpanya, alias haiku pada CLI meminta ID model yang tidak disediakan Kunavo, sehingga subagen dengan model: haiku menghasilkan 404. Jika diatur, pekerjaan latar belakang tersebut berjalan di Haiku, bukan di model utama Anda.
Apakah Agent SDK TypeScript bekerja dengan cara yang sama?
Arsitekturnya sama—SDK mengendalikan CLI Claude Code alih-alih memanggil API secara langsung—jadi CLI kembali menjadi pihak yang membaca variabel perutean. Halaman ini menjelaskan mekanismenya untuk SDK Python karena itulah sumber yang telah diperiksa; jika Anda menggunakan SDK TypeScript, pastikan nama opsinya di tipe SDK tersebut sebelum mengandalkan bentuk eksplisit, dan sementara itu gunakan variabel lingkungan yang diekspor.
Mengapa SDK menyaring CLAUDECODE dari lingkungan?
Tujuannya agar CLI yang dijalankan oleh SDK tidak mengira dirinya berjalan di dalam sesi induk Claude Code. Itulah satu-satunya kunci yang dihapus dari lingkungan yang diwarisi, dan dalam konteks ini hal tersebut hanya menunjukkan betapa lengkapnya semua yang lain diteruskan—termasuk dua variabel perutean yang digunakan halaman ini.