Langsung ke konten utama
Subagents adalah instans agen terpisah yang dapat dihasilkan oleh agen utama Anda untuk menangani subtask yang terfokus. Gunakan subagents untuk mengisolasi konteks, menjalankan beberapa analisis secara paralel, dan menerapkan instruksi khusus tanpa menambah prompt agen utama. Panduan ini menjelaskan cara mendefinisikan dan menggunakan subagents dalam SDK menggunakan parameter agents.

Ikhtisar

Anda dapat membuat subagents dengan tiga cara:
  • Secara programatis: gunakan parameter agents dalam opsi query() Anda. Lihat referensi TypeScript dan Python
  • Berbasis sistem file: tentukan agents sebagai file markdown di direktori .claude/agents/. Lihat mendefinisikan subagents sebagai file
  • Tujuan umum bawaan: Claude dapat memanggil subagent general-purpose bawaan kapan saja melalui alat Agent tanpa Anda mendefinisikan apa pun
Panduan ini berfokus pada pendekatan programatis, yang direkomendasikan untuk aplikasi SDK. Ketika Anda mendefinisikan subagents, Claude menentukan apakah akan memanggil mereka berdasarkan field description setiap subagent. Tulis deskripsi yang jelas yang menjelaskan kapan menggunakan subagent, dan Claude akan secara otomatis mendelegasikan tugas yang sesuai. Anda juga dapat secara eksplisit meminta subagent berdasarkan nama dalam prompt Anda, misalnya “Gunakan agen code-reviewer untuk…”.

Manfaat menggunakan subagents

Isolasi konteks

Setiap subagent berjalan dalam percakapan segar mereka sendiri. Panggilan alat perantara dan hasil tetap berada di dalam subagent; hanya pesan finalnya yang kembali ke parent. Lihat Apa yang diwarisi subagents untuk mengetahui dengan tepat apa yang ada dalam konteks subagent. Contoh: subagent research-assistant dapat menjelajahi puluhan file tanpa konten apa pun yang terakumulasi dalam percakapan utama. Parent menerima ringkasan ringkas, bukan setiap file yang dibaca subagent.

Paralelisasi

Beberapa subagents dapat berjalan secara bersamaan, sehingga subtask independen selesai dalam waktu yang paling lambat daripada jumlah dari semuanya. Contoh: selama tinjauan kode, Anda dapat menjalankan subagents style-checker, security-scanner, dan test-coverage secara bersamaan, bukan secara berurutan.

Instruksi dan pengetahuan khusus

Setiap subagent dapat memiliki prompt sistem yang disesuaikan dengan keahlian spesifik, praktik terbaik, dan batasan. Contoh: subagent database-migration dapat memiliki pengetahuan terperinci tentang praktik terbaik SQL, strategi rollback, dan pemeriksaan integritas data yang akan menjadi kebisingan yang tidak perlu dalam instruksi agen utama.

Pembatasan alat

Subagents dapat dibatasi pada alat tertentu, mengurangi risiko tindakan yang tidak diinginkan. Contoh: subagent doc-reviewer mungkin hanya memiliki akses ke alat Read dan Grep, memastikan dapat menganalisis tetapi tidak pernah secara tidak sengaja memodifikasi file dokumentasi Anda.

Membuat subagents

Tentukan subagents langsung dalam kode Anda menggunakan parameter agents. Claude memanggil subagents melalui alat Agent, jadi sertakan Agent dalam allowedTools untuk auto-approve invokasi subagent tanpa prompt izin. Sebagian besar contoh di halaman ini hanya mencetak hasil akhir. Untuk mengonfirmasi bahwa Claude mendelegasikan ke subagent daripada menjawab secara langsung, lihat Mendeteksi invokasi subagent. Contoh ini membuat dua subagents: peninjau kode dengan akses read-only dan runner test yang dapat menjalankan perintah.

Konfigurasi AgentDefinition

Dalam Python SDK, nama field multi-kata seperti disallowedTools dan mcpServers mempertahankan ejaan camelCase mereka untuk mencocokkan format wire daripada mengikuti konvensi snake_case Python. Lihat referensi AgentDefinition untuk detail. Dua perilaku subagent berubah dalam Claude Code v2.1.198:
  • Subagents berjalan di latar belakang secara default. Panggilan alat Agent yang menghilangkan input run_in_background meluncurkan subagent latar belakang, dan Claude menetapkan run_in_background: false ketika memerlukan hasil sebelum melanjutkan. Sebelum v2.1.198, menghilangkan run_in_background menjalankan subagent secara sinkron. Atur field background ke true untuk memaksa eksekusi latar belakang untuk agen tertentu terlepas dari apa yang diminta Claude.
  • Subagent mewarisi konfigurasi extended thinking sesi utama. Pada versi sebelumnya, extended thinking dinonaktifkan di dalam subagents terlepas dari pengaturan sesi utama.
Sejak Claude Code v2.1.172, subagents dapat menghasilkan subagents mereka sendiri. Subagent lima level di bawah agen utama tidak dapat menghasilkan subagents lebih lanjut, terlepas dari apakah itu berjalan di foreground atau background. Untuk mencegah subagent menghasilkan yang lain, hilangkan Agent dari array tools atau tambahkan ke disallowedTools. Lihat subagents bersarang untuk aturan kedalaman lengkap.

Definisi berbasis sistem file (alternatif)

Anda juga dapat mendefinisikan subagents sebagai file markdown di direktori .claude/agents/. Lihat dokumentasi subagents Claude Code untuk detail tentang pendekatan ini. Agen yang didefinisikan secara programatis memiliki prioritas lebih tinggi daripada agen berbasis sistem file dengan nama yang sama.
Bahkan tanpa mendefinisikan subagents khusus, Claude dapat menghasilkan subagent general-purpose bawaan. Ini berguna untuk mendelegasikan tugas penelitian atau eksplorasi tanpa membuat agen khusus. Sertakan Agent dalam allowedTools sehingga invokasi ini auto-approve tanpa prompt izin.

Apa yang diwarisi subagents

Jendela konteks subagent dimulai segar, tanpa percakapan parent, tetapi tidak kosong. Satu-satunya konten yang Anda teruskan dari parent ke subagent adalah string prompt alat Agent, jadi sertakan jalur file, pesan kesalahan, atau keputusan apa pun yang dibutuhkan subagent langsung dalam prompt itu. Subagent yang memiliki alat SendMessage dimulai dengan daftar agen bernama lainnya yang berjalan dalam sesi, sehingga mengetahui nama mana yang dapat dikirim pesan. Claude Code menambahkan daftar ke giliran pertama subagent secara otomatis. Fork tidak mendapatkan daftar karena mewarisi percakapan parent sebagai gantinya. Daftar memerlukan Claude Code v2.1.206 atau lebih baru.
Parent menerima pesan final subagent verbatim sebagai hasil alat Agent, tetapi dapat merangkumnya dalam respons sendiri. Untuk mempertahankan output subagent verbatim dalam respons yang menghadap pengguna, sertakan instruksi untuk melakukannya dalam prompt atau opsi systemPrompt yang Anda berikan ke panggilan query() utama.
Kesalahan API yang mengakhiri subagent lebih awal, seperti batas laju, tidak pernah disampaikan sebagai hasilnya. Jika batas laju, kelebihan beban, atau kesalahan server memotong subagent foreground yang sudah menghasilkan output teks, alat Agent mengembalikan output parsial itu dengan catatan bahwa subagent tidak selesai. Subagent yang tidak menghasilkan apa pun, atau yang output-nya hanya berupa panggilan alat tanpa teks, gagal dengan pesan kesalahan, Agent terminated early due to an API error, diikuti oleh detail kesalahan. Lihat API errors in subagents untuk perilaku foreground dan background. Penanganan output parsial ini memerlukan Claude Code v2.1.199 atau lebih baru. Dalam v2.1.199, batas laju, kelebihan beban, atau kesalahan server membiarkan bentuk tool-calls-only dengan hasil parsial kosong yang hanya berisi catatan cutoff.

Memanggil subagents

Invokasi otomatis

Claude secara otomatis memutuskan kapan akan memanggil subagents berdasarkan tugas dan description setiap subagent. Misalnya, jika Anda mendefinisikan subagent performance-optimizer dengan deskripsi “Performance optimization specialist for query tuning”, Claude akan memanggilnya ketika prompt Anda menyebutkan optimasi query. Tulis deskripsi yang jelas dan spesifik sehingga Claude dapat mencocokkan tugas ke subagent yang tepat.

Invokasi eksplisit

Untuk menjamin Claude menggunakan subagent tertentu, sebutkan berdasarkan nama dalam prompt Anda:
Ini melewati pencocokan otomatis dan langsung memanggil subagent bernama.

Konfigurasi agen dinamis

Anda dapat membuat definisi agen secara dinamis berdasarkan kondisi runtime. Contoh ini membuat peninjau keamanan dengan tingkat ketat yang berbeda, menggunakan model yang lebih kuat untuk tinjauan ketat.

Mendeteksi invokasi subagent

Claude menginvokasi subagents melalui alat Agent. Untuk mendeteksi ketika subagent diinvokasi, periksa blok tool_use di mana name adalah "Agent". Pesan dari dalam konteks subagent mencakup field parent_tool_use_id.
Nama alat diubah dari "Task" menjadi "Agent" dalam Claude Code v2.1.63. Rilis SDK saat ini memancarkan "Agent" dalam blok tool_use tetapi masih menggunakan "Task" dalam daftar alat system:init dan dalam result.permission_denials[].tool_name. Memeriksa kedua nilai dalam block.name memastikan kompatibilitas di seluruh versi SDK.
Struktur pesan berbeda antara SDK. Dalam Python, blok konten diakses langsung melalui message.content. Dalam TypeScript, SDKAssistantMessage membungkus pesan Claude API, jadi konten diakses melalui message.message.content. Contoh ini mengulangi pesan yang dialirkan, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent itu.

Melanjutkan subagents

Anda dapat melanjutkan subagent untuk terus dari mana ia berhenti daripada memulai dari awal. Subagent yang dilanjutkan mempertahankan riwayat percakapan lengkapnya, termasuk semua panggilan alat sebelumnya, hasil, dan penalaran. Ketika subagent selesai, hasil alat Agent mencakup blok teks yang berisi agentId: <id>. Agen bawaan Explore dan Plan adalah one-shot dan tidak mengembalikan agentId, jadi gunakan agen khusus atau general-purpose ketika Anda perlu melanjutkan. Untuk melanjutkan subagent secara programatis:
  1. Tangkap ID sesi: ekstrak session_id dari pesan selama query pertama
  2. Ekstrak ID agen: parse agentId dari teks hasil alat Agent
  3. Lanjutkan sesi: berikan resume: sessionId dalam opsi query kedua, dan sertakan ID agen dalam prompt Anda
Anda harus melanjutkan sesi yang sama untuk mengakses transkrip subagent. Setiap panggilan query() memulai sesi baru secara default, jadi berikan resume: sessionId untuk melanjutkan dalam sesi yang sama.Ketika menggunakan agen khusus, berikan definisi agen yang sama dalam parameter agents untuk kedua query.
Contoh di bawah mendefinisikan agen khusus endpoint-finder. Query pertama menjalankannya dan menangkap ID sesi dan ID agen dari hasil alat Agent, kemudian query kedua melanjutkan sesi untuk mengajukan pertanyaan tindak lanjut yang memerlukan konteks dari analisis pertama.
Transkrip subagent bertahan secara independen dari percakapan utama:
  • Pemadatan percakapan utama: ketika percakapan utama dipadatkan, transkrip subagent tidak terpengaruh. Mereka disimpan dalam file terpisah.
  • Persistensi sesi: transkrip subagent bertahan dalam sesi mereka. Anda dapat melanjutkan subagent setelah memulai ulang Claude Code dengan melanjutkan sesi yang sama.
  • Pembersihan otomatis: transkrip dibersihkan berdasarkan pengaturan cleanupPeriodDays, yang secara default adalah 30 hari.

Pembatasan alat

Subagents dapat memiliki akses alat terbatas melalui field tools:
  • Hilangkan field: agen mewarisi semua alat yang tersedia (default)
  • Tentukan alat: agen hanya dapat menggunakan alat yang terdaftar
Contoh ini membuat agen analisis read-only yang dapat memeriksa kode tetapi tidak dapat memodifikasi file atau menjalankan perintah.

Kombinasi alat umum

Skalakan dengan alur kerja dinamis

Subagents bekerja dengan baik untuk beberapa tugas yang didelegasikan per putaran. Untuk menjalankan yang mengoordinasikan puluhan hingga ratusan agen, gunakan alat Workflow, yang memindahkan orkestrasi ke dalam skrip yang dijalankan runtime di luar konteks percakapan. Lihat alur kerja dinamis untuk cara alur kerja berbeda dari delegasi subagent putaran demi putaran. Alat Workflow tersedia dalam TypeScript Agent SDK v0.3.149 dan yang lebih baru. Sertakan Workflow dalam allowedTools untuk auto-approve jalankan alur kerja. Skema input dan output alat tercantum dalam referensi TypeScript.

Troubleshooting

Claude tidak mendelegasikan ke subagents

Jika Claude menyelesaikan tugas secara langsung daripada mendelegasikan ke subagent Anda:
  • Periksa bahwa invokasi Agent disetujui: sertakan Agent dalam allowedTools untuk auto-approve panggilan subagent. Tanpa itu, invokasi Agent jatuh ke callback canUseTool Anda atau, dalam mode dontAsk, ditolak
  • Gunakan prompting eksplisit: sebutkan subagent berdasarkan nama dalam prompt Anda, misalnya “Gunakan agen code-reviewer untuk…”
  • Tulis deskripsi yang jelas: jelaskan dengan tepat kapan menggunakan subagent sehingga Claude dapat mencocokkan tugas dengan tepat

Agen berbasis filesystem tidak dimuat

Claude Code memantau ~/.claude/agents/ dan .claude/agents/ dan mengambil file agen baru atau yang telah diedit dalam beberapa detik, tanpa perlu restart. Jika definisi tidak pernah muncul, kerjakan melalui penyebab-penyebab ini:
  • Direktori agents baru: pemantau hanya mencakup direktori yang ada saat sesi dimulai, jadi file pertama di direktori baru memerlukan restart sesi. Ini adalah penyebab paling umum.
  • Frontmatter tidak valid atau name duplikat: periksa YAML file, dan apakah agen yang ada sudah menggunakan name tersebut.
  • --disable-slash-commands: sesi yang dimulai dengan flag ini tidak memantau direktori-direktori ini dan selalu memerlukan restart untuk memuat file baru.
  • Agen programatik dengan nama yang sama: agents yang dilewatkan ke query() menimpa agen filesystem dengan nama yang sama.
Untuk format file, lihat cara menulis file subagent.

Kegagalan prompt panjang di Windows

Di Windows, subagents dengan prompt yang sangat panjang mungkin gagal karena batasan panjang baris perintah sebesar 8191 karakter. Jaga prompt tetap ringkas atau gunakan agen berbasis filesystem untuk instruksi kompleks.
  • Subagents Claude Code: dokumentasi subagent komprehensif termasuk definisi berbasis sistem file
  • Alur kerja dinamis: orkestrasi banyak subagents dari skrip untuk pekerjaan yang terlalu besar untuk satu percakapan
  • Ikhtisar SDK: memulai dengan Claude Agent SDK