Skip to main content
Subagents adalah instans agen terpisah yang dapat dihasilkan oleh agen utama Anda untuk menangani subtask yang terfokus. Gunakan mereka untuk mengisolasi konteks, menjalankan beberapa analisis secara paralel, dan menerapkan instruksi khusus tanpa menambah prompt agen utama Anda.

Ikhtisar

Anda dapat membuat subagen dalam tiga cara:
  • Secara Programatik: gunakan parameter agents dalam opsi query() Anda. Lihat referensi TypeScript dan Python
  • Berbasis Sistem File: tentukan agen sebagai file markdown di direktori .claude/agents/. Lihat mendefinisikan subagen sebagai file
  • Tujuan Umum Bawaan: Claude dapat memanggil subagen general-purpose bawaan kapan saja melalui alat Agent tanpa Anda perlu mendefinisikan apa pun
Panduan ini berfokus pada pendekatan programatik, yang direkomendasikan untuk aplikasi SDK.

Manfaat menggunakan subagents

Karena subagents adalah instance agent terpisah, mendelegasikan pekerjaan kepada mereka memberikan Anda empat manfaat:
  • Isolasi konteks: setiap subagent berjalan dalam percakapannya sendiri, yang dimulai segar kecuali subagent adalah fork. Bagaimanapun, panggilan alat perantara dan hasil tetap berada di dalam subagent; hanya pesan finalnya yang kembali ke parent. 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. Lihat What subagents inherit untuk mengetahui dengan tepat apa yang ada dalam konteks subagent.
  • Paralelisasi: beberapa subagents dapat berjalan secara bersamaan, sehingga subtask independen selesai dalam waktu yang paling lambat daripada jumlah semua dari mereka. Selama tinjauan kode, Anda dapat menjalankan subagents style-checker, security-scanner, dan test-coverage secara bersamaan daripada secara berurutan.
  • Instruksi dan pengetahuan khusus: setiap subagent dapat memiliki system prompt yang disesuaikan dengan keahlian spesifik, praktik terbaik, dan batasan. 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 agent utama.
  • Pembatasan alat: subagents dapat dibatasi pada alat tertentu, mengurangi risiko tindakan yang tidak diinginkan. Subagent doc-reviewer mungkin hanya memiliki akses ke alat Read dan Grep, memastikan bahwa ia dapat menganalisis tetapi tidak pernah secara tidak sengaja memodifikasi file dokumentasi Anda.

Buat subagen

Tentukan subagen langsung dalam kode Anda menggunakan parameter agents. Claude menjalankan subagen melalui tool Agent. Sebagian besar contoh di halaman ini hanya mencetak hasil akhir. Untuk memastikan bahwa Claude mendelegasikan ke subagen daripada menjawab secara langsung, lihat Deteksi invokasi subagen. Contoh ini membuat dua subagen: pengulas kode dengan akses baca-saja dan pelari tes 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. Subagen berjalan di latar belakang secara default. Panggilan tool Agent yang menghilangkan input run_in_background meluncurkan subagen latar belakang, dan Claude menetapkan run_in_background: false ketika memerlukan hasil sebelum melanjutkan. Atur field background ke true untuk memaksa eksekusi latar belakang untuk agen tertentu terlepas dari apa yang diminta Claude. Sebelum Claude Code v2.1.198, default latar belakang sedang diluncurkan secara bertahap, dan panggilan tool Agent yang menghilangkan run_in_background dapat menjalankan subagen secara sinkron. Subagen juga dapat menghasilkan subagen mereka sendiri. Untuk membatasi seberapa dalam nesting itu, berapa banyak subagen yang berjalan sekaligus, dan berapa banyak kueri yang dihabiskan, lihat Batasi kedalaman, konkurensi, dan pengeluaran subagen.

Definisi berbasis filesystem (alternatif)

Anda juga dapat mendefinisikan subagen sebagai file markdown di direktori .claude/agents/. Lihat dokumentasi subagen Claude Code untuk detail tentang pendekatan ini. Agen yang didefinisikan secara programatik memiliki prioritas lebih tinggi daripada agen berbasis filesystem dengan nama yang sama.
Ketika Claude memanggil tool Agent tanpa subagent_type, ia mendapatkan subagen general-purpose bawaan, yang dapat Claude hasilkan bahkan ketika Anda tidak mendefinisikan agen apa pun sendiri. Menetapkan CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1 menghapus default tersebut, dan panggilan seperti itu gagal dengan subagent_type is required.

Apa yang diwariskan subagent

Kecuali subagent adalah fork, jendela konteksnya dimulai segar, tanpa percakapan induk, tetapi tidak kosong. Satu-satunya konten yang Anda teruskan dari induk ke subagent adalah string prompt alat Agent, jadi sertakan jalur file, pesan kesalahan, atau keputusan apa pun yang dibutuhkan subagent langsung dalam prompt tersebut. 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 induk sebagai gantinya. Subagent juga mewarisi konfigurasi pemikiran yang diperluas dari sesi utama. Tabel di bawah mencantumkan apa yang diterima konteks subagent non-fork dan apa yang ditinggalkannya.
Induk menerima laporan akhir subagent, tetapi dapat merangkumnya dalam respons miliknya sendiri. Untuk mempertahankan output subagent verbatim dalam respons yang menghadap pengguna, sertakan instruksi untuk melakukannya dalam prompt atau opsi systemPrompt yang Anda teruskan ke panggilan query() utama.Dalam v2.1.210 dan yang lebih baru, Claude Code memindai pesan terakhir untuk pola berbentuk instruksi sebelum induk membacanya. Pemindaian memperlakukan tiga jenis pola secara berbeda:
  • Peniruan tag kontrol: Claude Code menetralkan tag yang hanya dipancarkan harness, seperti blok <system-reminder>, di tempat. Ini menyisipkan garis miring terbalik setelah kurung sudut pembuka dan tidak menghapus apa pun.
  • Penyebutan konfigurasi izin: Claude Code menyimpan referensi ke konfigurasi izin, seperti .claude/settings.json, bypassPermissions, atau --dangerously-skip-permissions, seperti yang ditulis.
  • Penanda giliran: baris yang dimulai dengan Human: atau Assistant: mendapatkan garis miring terbalik sebelum titik dua, sehingga pesan tidak dapat meniru batas giliran percakapan.
Untuk kecocokan tag kontrol atau konfigurasi izin, Claude Code menambahkan baris penanda [harness: ...] yang menamai pola yang cocok; kecocokan penanda giliran tidak menambahkan baris penanda. Itu adalah satu-satunya modifikasi yang dilakukan pemindaian: tidak pernah menghapus atau mengubah kata-kata subagent.
Kesalahan API yang mengakhiri subagent lebih awal, seperti batas laju, tidak pernah dikirimkan sebagai hasilnya. Lihat Kesalahan API dalam subagent untuk perilaku foreground dan background.

Panggil subagen

Pemanggilan otomatis

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

Pemanggilan eksplisit

Untuk menjamin Claude menggunakan subagen tertentu, sebutkan namanya dalam prompt Anda:
Ini melewati pencocokan otomatis dan secara langsung memanggil subagen yang dinamai.

Konfigurasi agen dinamis

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

Deteksi pemanggilan subagent

Claude memanggil subagent melalui tool Agent. Untuk mendeteksi ketika subagent dipanggil, periksa blok tool_use di mana name adalah "Agent". Pesan dari dalam konteks subagent mencakup field parent_tool_use_id. Di TypeScript, setiap pesan assistant dan user yang dihasilkan subagent juga membawa agent_id: task_id dari event task subagent tersebut. agent_id memerlukan TypeScript Agent SDK v0.3.292 atau yang lebih baru.
Tool muncul sebagai "Agent" dalam blok tool_use tetapi sebagai "Task" dalam daftar tool system:init. Sebelum Claude Code v2.1.63, blok tool_use juga menamakannya "Task". Untuk menjaga deteksi tetap berfungsi di seluruh versi SDK, cocokkan kedua nilai dalam block.name.
Struktur pesan berbeda antara SDK. Di Python, Anda mengakses blok konten secara langsung melalui message.content. Di TypeScript, SDKAssistantMessage membungkus pesan API Claude, jadi Anda mengakses konten melalui message.message.content. Contoh ini melakukan iterasi melalui pesan yang di-stream, mencatat ketika subagent dipanggil dan ketika pesan berikutnya berasal dari dalam konteks eksekusi subagent tersebut. Versi TypeScript juga mencatat agent_id dari setiap pesan subagent yang membawanya.

Melanjutkan subagents

Anda dapat melanjutkan subagent untuk meneruskan dari tempat ia berhenti daripada memulai dari awal. Subagent yang dilanjutkan mempertahankan riwayat percakapan lengkapnya, termasuk semua panggilan alat sebelumnya, hasil, dan penalaran. Ketika subagent berhenti pada batas maxTurns nya, Claude Code menandai output dalam hasil alat Agent sebagai parsial, sehingga Claude mengetahui bahwa jalannya belum selesai. Ketika subagent selesai, hasil alat Agent mencakup blok teks yang berisi agentId: <id>. Agent Explore dan Plan bawaan adalah one-shot dan tidak mengembalikan agentId, jadi gunakan agent kustom atau general-purpose ketika Anda perlu melanjutkan. Untuk melanjutkan subagent secara terprogram:
  1. Tangkap ID sesi: ekstrak session_id dari pesan selama kueri pertama
  2. Ekstrak ID agent: parse agentId dari teks hasil alat Agent
  3. Lanjutkan sesi: teruskan resume: sessionId dalam opsi kueri kedua, dan sertakan ID agent dalam prompt Anda. Setiap panggilan query() memulai sesi baru secara default, dan Anda harus melanjutkan sesi yang sama untuk mengakses transkrip subagent.
Saat menggunakan agent kustom, teruskan definisi agent yang sama dalam parameter agents untuk kedua kueri.
Contoh di bawah ini mendefinisikan agent endpoint-finder kustom. Kueri pertama menjalankannya dan menangkap ID sesi dan ID agent dari hasil alat Agent, kemudian kueri kedua melanjutkan sesi untuk mengajukan pertanyaan lanjutan yang memerlukan konteks dari analisis pertama.
Transkrip subagent disimpan dalam file terpisah dan bertahan secara independen dari percakapan utama. Lihat melanjutkan subagents di Claude Code untuk perilaku pemadatan dan periode pembersihan cleanupPeriodDays.

Pembatasan alat

Gunakan field tools untuk membatasi apa yang dapat dilakukan subagen:
  • Abaikan tools: subagen mendapatkan setiap alat yang tersedia untuk subagen
  • Daftar alat: subagen hanya mendapatkan yang tersebut. Misalnya, pengulas kode yang tidak boleh mengedit file mendapatkan ["Read", "Grep", "Glob"]
Alat yang Anda tinggalkan tidak ada dalam sesi subagen sama sekali: Claude bekerja tanpanya, tanpa permintaan izin atau kesalahan. Contoh ini membuat agen analisis baca-saja yang dapat memeriksa kode tetapi tidak dapat memodifikasi file atau menjalankan perintah.

Kombinasi alat umum

Batasi kedalaman, konkurensi, dan pengeluaran subagen

Bagian ini menjelaskan TypeScript SDK v0.3.219 dan Python SDK v0.2.127 dan yang lebih baru, rilis yang menggabungkan Claude Code v2.1.219 atau yang lebih baru. Pada rilis sebelumnya, beberapa batas ini hilang atau default berbeda, jadi tingkatkan sebelum Anda mengandalkannya untuk membatasi jalankan. Referensi variabel lingkungan dan giliran dan anggaran mencatat versi Claude Code yang menambahkan setiap variabel dan penegakan batas pengeluaran subagen.
Claude memutuskan sendiri kapan akan menspawn subagen dan berapa banyak yang akan dispawn. Setiap subagen membuat permintaan API-nya sendiri, yang dihitung terhadap total_cost_usd kueri, dan subagen dapat menspawn subagen mereka sendiri, jadi satu prompt dapat berkembang menjadi pohon agen. Anda dapat membatasi pertumbuhan itu dengan tiga cara: seberapa dalam subagen bersarang, berapa banyak yang berjalan sekaligus, dan berapa banyak seluruh kueri menghabiskan. Atur batas kedalaman dan konkurensi sebagai variabel lingkungan melalui opsi env, dan batas pengeluaran sebagai opsi kueri: Kedua SDK memperlakukan opsi env secara berbeda: SDK TypeScript mengganti lingkungan subprocess dengannya, jadi sebarkan process.env ke dalamnya untuk menjaga variabel seperti PATH, sementara SDK Python menggabungkannya ke dalam lingkungan yang diwariskan. Contoh ini mematikan penyarangan, memungkinkan paling banyak lima subagen sekaligus, dan menghentikan kueri setelah pengeluaran yang diperkirakan mencapai $5:
Apa yang Anda lihat tergantung pada batas mana, jika ada, yang dicapai kueri:
  • Di bawah batas pengeluaran: Anda melihat success dan biaya yang diperkirakan.
  • Pada batas pengeluaran: Anda melihat error_max_budget_usd dengan biaya pada atau di atas 5, dan kemudian penanganan kesalahan Anda berjalan.
  • Pada batas konkurensi: Anda melihat blok tool_result dalam aliran pesan yang membawa Concurrent subagent limit reached. Claude menerima blok yang sama sebagai hasil alat Agent.

Jalankan Opus 5 dengan subagen

Claude Opus 5 mendelegasikan ke subagen lebih mudah daripada model sebelumnya, jadi batas kedalaman, konkurensi, dan pengeluaran paling penting pada kueri yang menjalankan Opus 5. Panduan prompting Opus 5 memiliki instruksi delegasi yang dapat Anda tambahkan ke prompt apa pun. Apakah Claude Code menambahkan instruksi sendiri tergantung pada prompt sistem mana yang Anda gunakan:
  • Preset claude_code: ketika modelnya adalah Opus 5, Claude Code menambahkan baris ke prompt sistemnya yang memberi tahu Claude untuk tidak memanggil alat Agent kecuali diminta. Alat Agent tetap tersedia.
  • Prompt kustom, atau tidak ada systemPrompt: Claude Code tidak membangun prompt sistemnya, jadi baris itu tidak ada. Tambahkan instruksi delegasi dari panduan prompting ke prompt Anda sendiri.
Setiap instruksi hanya mengarahkan Claude, jadi atur batasnya juga. Claude Code menegakkannya bagaimanapun Claude memutuskan untuk mendelegasikan.

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:
  • Gunakan prompting eksplisit: sebutkan subagent berdasarkan nama dalam prompt Anda, misalnya “Gunakan agen code-reviewer untuk memeriksa modul autentikasi”
  • 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.
  • File di bawah direktori yang ditambahkan: Claude Code memuat .claude/agents/ dari direktori yang ditambahkan dengan opsi add_dirs (Python) atau additionalDirectories (TypeScript), atau CLI --add-dir atau /add-dir, tetapi tidak memantaunya, jadi file baru atau yang telah diedit di sana memerlukan restart sesi.
  • 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.