Ikhtisar
Anda dapat membuat subagen dalam tiga cara:- Secara Programatik: gunakan parameter
agentsdalam opsiquery()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-purposebawaan kapan saja melalui alat Agent tanpa Anda perlu mendefinisikan apa pun
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-assistantdapat 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, dantest-coveragesecara 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-migrationdapat 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-reviewermungkin 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
Definisi programatik (direkomendasikan)
Tentukan subagen langsung dalam kode Anda menggunakan parameteragents. 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 alatSendMessage 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:atauAssistant:mendapatkan garis miring terbalik sebelum titik dua, sehingga pesan tidak dapat meniru batas giliran percakapan.
[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.Panggil subagen
Pemanggilan otomatis
Claude secara otomatis memutuskan kapan harus memanggil subagen berdasarkan tugas dandescription 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: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 bloktool_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.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 batasmaxTurns 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:
- Tangkap ID sesi: ekstrak
session_iddari pesan selama kueri pertama - Ekstrak ID agent: parse
agentIddari teks hasil alat Agent - Lanjutkan sesi: teruskan
resume: sessionIddalam opsi kueri kedua, dan sertakan ID agent dalam prompt Anda. Setiap panggilanquery()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.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.
cleanupPeriodDays.
Pembatasan alat
Gunakan fieldtools 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"]
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.
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:
- Di bawah batas pengeluaran: Anda melihat
successdan biaya yang diperkirakan. - Pada batas pengeluaran: Anda melihat
error_max_budget_usddengan biaya pada atau di atas5, dan kemudian penanganan kesalahan Anda berjalan. - Pada batas konkurensi: Anda melihat blok
tool_resultdalam aliran pesan yang membawaConcurrent 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.
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 alatWorkflow, 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
agentsbaru: 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
nameduplikat: periksa YAML file, dan apakah agen yang ada sudah menggunakannametersebut. --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 opsiadd_dirs(Python) atauadditionalDirectories(TypeScript), atau CLI--add-diratau/add-dir, tetapi tidak memantaunya, jadi file baru atau yang telah diedit di sana memerlukan restart sesi. - Agen programatik dengan nama yang sama:
agentsyang dilewatkan kequery()menimpa agen filesystem dengan nama yang sama.
Dokumentasi terkait
- Subagent Claude Code: dokumentasi subagent 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