Membangun Agen dengan Claude Agent SDK

Foto oleh n3wjack on flickr
Claude Agent SDK adalah library dari Anthropic untuk membangun AI agent tingkat produksi di atas agent loop, tool bawaan, dan manajemen konteks yang sama seperti yang menjalankan Claude Code. Tersedia untuk Python sebagai claude-agent-sdk dan untuk TypeScript sebagai @anthropic-ai/claude-agent-sdk, dan ia menangani loop eksekusi tool untuk Anda alih-alih mengharuskan Anda mengimplementasikannya sendiri dari API mentah.
Dengan API mentah, Anda mengimplementasikan loop tool sendiri: mengirim pesan, memeriksa alasan berhenti, menjalankan tool, lalu mengirim hasilnya kembali. Agent SDK menjalankan loop tersebut secara internal, jadi Anda cukup memanggil query dengan sebuah prompt dan daftar tool yang diizinkan, dan Claude membaca file, menjalankan perintah, serta mengedit kode secara otonom sambil mengalirkan pesan kembali.
Pakai subagent ketika sebuah tugas berpotensi memenuhi konteks agen utama dengan hal-hal antara yang tidak relevan, misalnya mengeksplorasi puluhan file saat review seluruh basis kode. Setiap subagent berjalan di konteks barunya sendiri dan hanya mengembalikan ringkasan akhir, dan karena subagent bisa berjalan bersamaan, subtugas yang independen selesai secara paralel alih-alih berurutan.
Bisa. Memberikan daftar tool yang diizinkan hanya menyetujui lebih awal tool-tool tersebut, dan field tools milik subagent bisa membatasinya lebih jauh lagi, misalnya hanya Read, Grep, dan Glob untuk reviewer yang hanya membaca. Perlu dicatat bahwa daftar izin tidak mempersempit apa yang disetujui mode bypassPermissions, karena mode tersebut menyetujui otomatis setiap pemanggilan tool tanpa peduli daftar yang disebutkan.
Bisa aman, asalkan Anda menerapkan disiplin operasional yang sama seperti untuk sistem otomatis mana pun yang punya akses shell dan file: kunci versi model dan SDK, catat setiap pemanggilan tool ke jejak audit yang persisten, tambahkan aturan penolakan eksplisit untuk perintah destruktif, dan batasi jumlah giliran agentic pada proses tanpa pengawasan agar agen yang kebingungan gagal secara jelas alih-alih terus berputar.

Foto oleh n3wjack on flickr
Kebanyakan tim yang mencoba membangun AI agent dari nol akhirnya membangun ulang mekanisme yang sama: sebuah loop yang mengirim prompt ke model, menjalankan tool call yang dihasilkan, mengembalikan hasilnya ke model, lalu mengulang sampai model memberikan jawaban akhir. Claude Agent SDK melewati langkah itu. Ia adalah agent loop, eksekusi tool, dan manajemen konteks yang sama seperti yang menjalankan Claude Code, dikemas sebagai library yang bisa dipanggil dari Python atau TypeScript.
Tulisan ini adalah panduan praktis, bukan gambaran promosi. Isinya membahas bagian yang benar-benar penting saat mulai membangun sesuatu yang nyata: bagaimana perilaku loop tersebut, cara mendefinisikan dan membatasi tool, kapan subagent layak dipakai meski menambah kompleksitas, bagaimana mode izin menentukan apa yang berjalan tanpa konfirmasi, serta detail operasional yang membedakan sekadar demo dari agen operasional yang siap produksi.
Dengan Anthropic API mentah, Anda yang mengimplementasikan loop-nya sendiri: mengirim pesan, memeriksa apakah alasan berhenti adalah pemakaian tool, menjalankan tool tersebut sendiri, mengirim hasilnya kembali, lalu mengulang. Agent SDK membalik urutan itu. Anda cukup memanggil query dengan sebuah prompt dan daftar tool yang diizinkan, lalu Claude membaca file, menjalankan perintah, dan mengedit kode secara otonom, sambil mengalirkan pesan kembali ke Anda seiring prosesnya berjalan.
Di baliknya, ini adalah mesin yang persis sama dengan yang dijalankan di dalam Claude Code: tool bawaan yang sama, manajemen konteks yang sama, dan model sesi yang sama. Hal ini penting lebih dari sekadar kedengarannya, karena artinya agen sudah tahu kapan harus berhenti, kapan harus bertanya untuk memperjelas sesuatu, dan kapan sebuah tugas benar-benar selesai, tanpa Anda perlu merancang sendiri aturan penghentian.
import { query } from "@anthropic-ai/claude-agent-sdk";
for await (const message of query({
prompt: "Find and fix the failing test in payments.ts",
options: {
allowedTools: ["Read", "Edit", "Bash", "Grep"],
},
})) {
if ("result" in message) console.log(message.result);
}Contoh di bawah ini mendekati agen paling minimal yang masih berguna. Ia diberi akses Read, Edit, Bash, dan Grep, lalu model dibiarkan mencari tahu sisanya: menemukan test yang gagal, memahami penyebabnya, dan menambal kodenya.
Mulailah setiap agen baru dengan daftar tool yang diizinkan seketat mungkin, bahkan saat masih prototipe. Jauh lebih mudah menyadari ada kemampuan yang kurang dibanding menyadari agen diam-diam menjalankan perintah yang sebenarnya tidak pernah Anda maksudkan untuk diizinkan.
SDK ini dilengkapi tool bawaan yang sama seperti yang dipakai Claude Code sehari-hari, jadi Anda jarang perlu menulis sendiri tool untuk membaca file atau menjalankan shell. Kumpulan tool yang paling sering dipakai untuk agen coding atau operasional meliputi:
Untuk kebutuhan di luar kumpulan tersebut, SDK terhubung ke sistem eksternal lewat Model Context Protocol. Arahkan ke MCP server untuk database, tool otomasi browser, atau API internal, dan tool-tool tersebut akan muncul di daftar tool yang sama seperti tool bawaan, tanpa Anda perlu menulis kode integrasi terpisah.
Satu percakapan agen yang berjalan lama akan menumpuk segala hal yang pernah dilakukannya: setiap file yang dibaca, setiap perintah yang dijalankan, setiap hasil antara. Untuk perbaikan bug yang terfokus, itu tidak masalah. Namun untuk review seluruh basis kode, artinya konteks agen utama Anda akan penuh dengan hal-hal yang sama sekali tidak relevan dengan jawaban akhirnya.
const options = {
allowedTools: ["Read", "Grep", "Glob", "Agent"],
agents: {
"code-reviewer": {
description: "Expert code reviewer for quality and security reviews.",
prompt: "Analyze code quality, flag security issues, suggest fixes.",
tools: ["Read", "Grep", "Glob"],
model: "sonnet",
},
"test-runner": {
description: "Runs and analyzes the test suite.",
prompt: "Run tests, report failures, and propose minimal fixes.",
tools: ["Bash", "Read", "Grep"],
},
},
};Subagent mengatasi hal ini dengan berjalan dalam konteks baru miliknya sendiri. Agen induk mendelegasikan sebuah subtugas, subagent mengeksplorasi dan bekerja secara terisolasi, dan hanya ringkasan akhirnya yang dikembalikan ke induknya. Karena setiap subagent bisa membawa system prompt dan daftar tool terbatasnya sendiri, Anda bisa membuat code reviewer yang hanya bisa membaca berdampingan dengan test runner yang punya akses shell, dan menjalankan keduanya secara bersamaan alih-alih berurutan.
Ketika sesi induk berjalan dalam mode bypassPermissions atau acceptEdits, setiap subagent yang dibuatnya mewarisi mode yang sama itu dan tidak bisa dibatasi secara individual. Subagent dengan system prompt yang lebih longgar dari agen utama Anda pun akan mendapat akses yang sama tanpa batasan. Jika Anda butuh satu subagent yang benar-benar terisolasi ketat, jaga sesi induk tetap di mode yang lebih ketat daripada mengandalkan daftar tool milik subagent itu sendiri.
Setiap pemanggilan tool yang ingin dilakukan agen melewati pemeriksaan izin sebelum benar-benar dieksekusi. Daftar tool yang diizinkan dan aturan penolakan diperiksa lebih dulu, dan sisanya jatuh ke mode izin yang sedang aktif. Empat mode yang benar-benar akan Anda pakai dalam praktik berperilaku sangat berbeda satu sama lain:
| Mode | Perilaku | Kapan dipakai |
|---|---|---|
| default | Tidak ada persetujuan otomatis; apa pun yang tidak diizinkan secara eksplisit memicu callback persetujuan Anda | Sesi interaktif di mana seorang manusia sedang mengawasi dan menyetujui |
| acceptEdits | Edit file dan operasi berkas disetujui otomatis; tool lain tetap melalui pemeriksaan izin normal | Iterasi cepat di dalam direktori kerja terisolasi yang sudah Anda percaya |
| plan | Claude mengeksplorasi dan mengusulkan rencana; edit file tidak pernah disetujui otomatis, bahkan jika ada aturan izin yang cocok | Alur kerja review kode yang perubahannya perlu persetujuan manusia sebelum diterapkan |
| bypassPermissions | Setiap pemanggilan tool disetujui otomatis tanpa konfirmasi, kecuali ada aturan penolakan eksplisit | Hanya untuk lingkungan yang sepenuhnya terisolasi dan sekali pakai, bukan untuk mesin bersama |
Kesalahan yang perlu ditegaskan secara eksplisit: daftar tool yang diizinkan tidak mempersempit apa yang bisa dilakukan bypassPermissions. Hanya menyebutkan Read di daftar izin Anda sementara mode diatur ke bypassPermissions tetap membuat agen bisa menjalankan Bash, Write, dan Edit, karena daftar izin hanya menyetujui lebih awal tool yang disebutkan, bukan membatasi tool yang tidak disebutkan. Jika Anda butuh bypassPermissions tetapi ingin memblokir perintah tertentu, gunakan aturan penolakan eksplisit alih-alih memangkas daftar izin.
Jarak antara prototipe yang berfungsi dan sesuatu yang benar-benar Anda percayakan untuk berjalan di infrastruktur produksi sebagian besar soal pengaturan default, bukan soal fitur. Berikut daftar periksa singkat yang beberapa kali menyelamatkan saya dari penyesalan:
Tidak ada satu pun dari daftar ini yang eksotis. Ini adalah disiplin operasional yang sama seperti yang akan Anda terapkan pada sistem otomatis mana pun yang bisa menjalankan perintah dan mengedit file tanpa pengawasan, hanya saja diterapkan pada sistem yang langkah berikutnya dipilih oleh model alih-alih skrip yang tetap.
Paket TypeScript-nya dirilis sebagai @anthropic-ai/claude-agent-sdk di npm, dan ia menyertakan binary Claude Code native sebagai dependensi opsional, sehingga instalasi baru tidak memerlukan instalasi Claude Code terpisah di mesin tersebut.
Agent SDK bukan alat yang tepat untuk setiap jenis integrasi. Ia benar-benar berguna khususnya saat tugasnya mendapat manfaat dari pemakaian tool bertahap secara otonom:
Jika kebutuhan Anda hanya satu prompt dengan satu respons yang diharapkan tanpa pemakaian tool, Anthropic client SDK biasa jauh lebih sederhana dan permukaan keamanannya lebih kecil untuk diamankan. Pilih Agent SDK ketika nilainya justru ada pada loop itu sendiri, bukan sekadar keluaran model.