Subagen bekerja dalam satu sesi. Untuk menjalankan banyak sesi independen secara paralel dan memantaunya dari satu tempat, lihat agen latar belakang. Untuk sesi terpisah yang mengirimkan pesan satu sama lain, lihat pesan lintas sesi. Untuk tim sesi yang terkoordinasi yang Claude buat dan awasi, lihat tim agen.
- Pertahankan konteks dengan menjaga eksplorasi dan implementasi di luar percakapan utama Anda
- Terapkan batasan dengan membatasi alat mana yang dapat digunakan subagen
- Gunakan kembali konfigurasi di seluruh proyek dengan subagen tingkat pengguna
- Spesialisasi perilaku dengan prompt sistem yang terfokus untuk domain tertentu
- Kontrol biaya dengan merutekan tugas ke model yang lebih cepat dan lebih murah seperti Haiku
description subagen Anda, dan pindahkan detail ke prompt sistem setiap subagen, yang hanya dimuat ketika subagen tersebut berjalan.
Subagent bawaan
Claude Code mencakup subagent bawaan yang Claude gunakan secara otomatis jika sesuai. Masing-masing mewarisi aturan izin percakapan induk; sebagian besar berjalan dengan set alat yang terbatas. Explore dan Plan melewati file CLAUDE.md Anda dan status git sesi induk untuk menjaga penelitian tetap cepat dan hemat biaya. Setiap subagent bawaan lainnya dan subagent khusus memuat keduanya, kecuali definisinya menetapkan bidangomitClaudeMd untuk melewati file CLAUDE.md pengguna, proyek, dan lokal. Untuk rincian lengkap tentang apa yang mencapai subagent, lihat apa yang dimuat saat startup.
- Explore
- Plan
- General-purpose
- Other
Agen cepat yang dioptimalkan hanya-baca untuk mencari dan menganalisis basis kode.
- Model: mewarisi dari percakapan utama, dibatasi pada Opus di Claude API, jadi Explore tidak pernah berjalan pada model yang lebih mahal daripada yang sudah Anda pilih untuk sesi, kecuali Anda menetapkan
CLAUDE_CODE_SUBAGENT_MODELdan memaksanya ke setiap subagent - Tools: alat hanya-baca; Write dan Edit ditolak
- Purpose: penemuan file, pencarian kode, eksplorasi basis kode
Explore menggantikan yang bawaan dan menyimpan bidang model miliknya sendiri, jadi tentukan satu dengan model: haiku untuk menjaga eksplorasi pada model dengan biaya lebih rendah.Claude mendelegasikan ke Explore ketika perlu mencari atau memahami basis kode tanpa membuat perubahan. Ini menjaga hasil eksplorasi di luar konteks percakapan utama Anda.Saat memanggil Explore, Claude menentukan tingkat ketelitian: quick untuk pencarian yang ditargetkan, medium untuk eksplorasi seimbang, atau very thorough untuk analisis komprehensif.- Untuk memblokir tipe bawaan tertentu, tambahkan ke
permissions.denyseperti yang ditunjukkan dalam Nonaktifkan subagent tertentu. - Untuk mencegah Claude mendelegasikan ke subagent apa pun, tolak alat
Agentitu sendiri denganpermissions.deny. - Untuk menghapus hanya subagent bawaan
ExploredanPlan, aturCLAUDE_CODE_DISABLE_EXPLORE_PLAN_AGENTS=1. Claude membaca dan mengeksplorasi file secara langsung alih-alih mendelegasikan ke mereka. Memerlukan Claude Code v2.1.198 atau lebih baru. - Dalam mode non-interaktif dan Agent SDK, atur
CLAUDE_AGENT_SDK_DISABLE_BUILTIN_AGENTS=1untuk menghapus semua tipe bawaan dan menyediakan hanya milik Anda sendiri.
subagent_type gagal dengan subagent_type is required ketika sesi tidak memiliki subagent general-purpose untuk kembali.
Selain subagent bawaan ini, Anda dapat membuat subagent Anda sendiri dengan prompt khusus, pembatasan alat, mode izin, hooks, dan skills. Bagian berikut menunjukkan cara memulai dan menyesuaikan subagent.
Quickstart: buat subagent pertama Anda
Subagent adalah file Markdown dengan frontmatter YAML. Untuk membuat satu, minta Claude menulisnya untuk Anda, atau tulis file sendiri. Mulai dari v2.1.198, perintah/agents tidak lagi membuka wizard pembuatan interaktif; menjalankannya mencetak pengingat untuk meminta Claude atau mengedit .claude/agents/ secara langsung. File subagent, bidang frontmatter, dan lokasi .claude/agents/ dan ~/.claude/agents/ tidak berubah; hanya wizard terminal yang dihapus.
Panduan ini membuat subagent tingkat pengguna yang meninjau kode dan menyarankan perbaikan.
1
Minta Claude membuat subagent
Di Claude Code, jelaskan subagent yang Anda inginkan dan di mana menyimpannya:Claude menulis file dengan
name, description, daftar tools, model, dan system prompt.2
Tinjau file
Buka Karena file berada di
~/.claude/agents/code-improver.md dan konfirmasi frontmatter sesuai dengan yang Anda minta. Hasilnya terlihat seperti ini:~/.claude/agents/, subagent tersedia di setiap proyek di mesin Anda. Untuk membatasi ke satu proyek saja, pindahkan ke direktori .claude/agents/ proyek tersebut. Pilih cakupan subagent membandingkan keduanya.3
Coba
Minta Claude mendelegasikan ke subagent baru:Claude mendelegasikan ke subagent baru Anda, yang memindai basis kode dan mengembalikan saran perbaikan. Dalam transkrip, delegasi muncul sebagai baris pemanggilan alat yang menunjukkan nama subagent diikuti oleh deskripsi tugas singkat, seperti
code-improver(Suggest code improvements).Jika Claude tidak dapat menemukan subagent baru, mulai ulang Claude Code dan coba lagi. Ini terjadi hanya ketika ~/.claude/agents/ tidak ada sebelum sesi dimulai, karena sesi yang berjalan tidak mendeteksi direktori agents yang baru dibuat.Pada Claude Code v2.1.197 dan lebih awal,
/agents membuka wizard interaktif dengan tab Running yang mencantumkan subagent aktif dan tab Library untuk membuat, mengedit, dan menghapusnya. Konfigurasi subagent
Lokasi file subagent menentukan siapa yang dapat menggunakannya, dan frontmatter-nya menentukan apa yang dapat dilakukannya. Bagian ini mencakup tempat file subagent berada dan setiap field yang didukungnya.Pilih cakupan subagent
Simpan file subagent di lokasi berbeda tergantung pada cakupan. Ketika beberapa subagent berbagi nama yang sama, Claude Code menggunakan yang dari lokasi dengan prioritas lebih tinggi.
Subagent proyek (
.claude/agents/) ideal untuk subagent yang spesifik untuk codebase. Periksa mereka ke dalam version control sehingga tim Anda dapat menggunakan dan meningkatkannya secara kolaboratif.
Subagent proyek ditemukan dengan berjalan naik dari direktori kerja saat ini, jadi setiap .claude/agents/ antara sana dan akar repositori dipindai. Ketika lebih dari satu direktori bersarang ini mendefinisikan name yang sama, Claude Code menggunakan definisi yang paling dekat dengan direktori kerja.
Ketika Anda menambahkan direktori dengan --add-dir atau /add-dir, Claude Code juga memuat folder .claude/agents/ miliknya, bersama dengan subagent proyek Anda. Lihat Additional directories untuk jenis konfigurasi lain mana yang dimuat dari --add-dir. Untuk berbagi subagent di seluruh proyek tanpa --add-dir, gunakan ~/.claude/agents/ atau plugin.
Subagent pengguna (~/.claude/agents/) adalah subagent pribadi yang tersedia di semua proyek Anda.
Claude Code memindai .claude/agents/ dan ~/.claude/agents/ secara rekursif, jadi Anda dapat mengorganisir definisi ke dalam subfolder seperti agents/review/ atau agents/research/. Jalur subdirektori tidak mempengaruhi cara subagent diidentifikasi atau dipanggil, karena identitas hanya berasal dari field frontmatter name.
Jaga nilai name tetap unik di seluruh pohon: jika dua file di bawah direktori .claude/agents/ yang sama, termasuk subfolder-nya, mendeklarasikan nama yang sama, Claude Code hanya memuat salah satunya, dipilih berdasarkan urutan pembacaan filesystem daripada prioritas yang terdokumentasi. Di seluruh direktori proyek bersarang, definisi yang paling dekat dengan direktori kerja menang, seperti dijelaskan di atas. Pemeriksaan setup /doctor melaporkan file di direktori yang sama yang berbagi nama dan menyarankan untuk mengganti nama atau menghapus semua kecuali satu. Sebelum v2.1.205, /doctor membuka layar diagnostik yang mencantumkan duplikat dan menunjukkan definisi mana yang aktif.
Direktori agents/ plugin juga dipindai secara rekursif. Tidak seperti cakupan proyek dan pengguna, subfolder di dalam direktori agents/ plugin menjadi bagian dari scoped identifier: file di agents/review/security.md dalam plugin my-plugin terdaftar sebagai my-plugin:review:security.
Subagent yang didefinisikan CLI dilewatkan sebagai JSON saat meluncurkan Claude Code. Mereka hanya ada untuk sesi itu dan tidak disimpan ke disk, menjadikannya berguna untuk pengujian cepat atau skrip otomasi. Anda dapat mendefinisikan beberapa subagent dalam satu panggilan --agents:
- macOS, Linux, WSL
- Windows PowerShell
--agents juga menerima jalur ke file JSON yang menyimpan objek yang sama, untuk definisi yang terlalu besar untuk dilewatkan di baris perintah. Misalnya, claude -p --agents ./agents.json "Review my changes" membaca definisi dari file itu. Dalam sesi interaktif, Claude Code menolak jalur file. Bentuk file memerlukan Claude Code v2.1.281 atau lebih baru.
Setiap kunci tingkat atas dalam JSON adalah nama agent, dan nilainya adalah definisi agent itu. Jangan mulai nama dengan -. Definisi mengambil field ini:
prompt: system prompt agent, setara dengan badan markdown dalam subagent berbasis file.promptmungkin kosong. Jika Anda memilih agent denganpromptkosong dan tidak ada fieldmemorysebagai agent sesi dengan--agent, system prompt sesi dibiarkan tidak berubah.promptkosong memerlukan Claude Code v2.1.281 atau lebih baru.- Field frontmatter:
description,tools,disallowedTools,model,permissionMode,mcpServers,hooks,maxTurns,skills,initialPrompt,memory,effort,background,omitClaudeMd, danisolation. - Field yang diabaikan:
colordanexperimentaltidak diterima di sini dan diabaikan daripada ditolak.
Invalid --agents configuration.
Subagent yang dikelola digunakan oleh administrator organisasi. Tempatkan file markdown di .claude/agents/ di dalam managed settings directory, menggunakan format frontmatter yang sama seperti subagent proyek dan pengguna. Definisi yang dikelola mengambil alih subagent proyek dan pengguna dengan nama yang sama.
Subagent plugin berasal dari plugins yang telah Anda instal. Mereka dimuat secara otomatis bersama subagent kustom Anda dan muncul dalam typeahead @-mention di bawah nama cakupan mereka. Lihat plugin components reference untuk detail tentang membuat subagent plugin.
Untuk alasan keamanan, subagent plugin tidak mendukung field frontmatter
hooks, mcpServers, atau permissionMode. Field ini diabaikan saat memuat agent dari plugin. Jika Anda membutuhkannya, salin file agent ke .claude/agents/ atau ~/.claude/agents/. Anda juga dapat menambahkan aturan ke permissions.allow dalam settings.json atau settings.local.json, tetapi aturan ini berlaku untuk seluruh sesi, bukan hanya subagent plugin.Tulis file subagent
File subagent menggunakan YAML frontmatter untuk konfigurasi, diikuti oleh system prompt dalam Markdown:Claude Code memantau
~/.claude/agents/ dan .claude/agents/. Ketika Anda menambah atau mengedit file subagent di disk, atau meminta Claude untuk menulisnya untuk Anda, Claude Code mendeteksi perubahan dalam beberapa detik dan delegasi berikutnya menggunakan definisi yang diperbarui, tanpa perlu restart.Tiga kasus masih memerlukan restart:- Pemantau hanya mencakup direktori yang ada saat sesi dimulai, jadi setelah membuat file agent pertama cakupan di direktori
agentsbaru, restart untuk memuatnya. - Claude Code tidak memantau
.claude/agents/di dalam direktori yang ditambahkan dengan--add-diratau/add-dir, jadi setelah menambah atau mengedit subagent di sana, restart untuk memuat perubahan. - Sesi yang dimulai dengan
--disable-slash-commandstidak memantau direktori ini sama sekali.
.claude/agents/code-reviewer.md
--append-subagent-system-prompt untuk menambahkan teks Anda ke akhir system prompt setiap subagent, subagent bersarang termasuk, terlepas dari forked subagent, yang menggunakan kembali prompt percakapan sendiri. Memerlukan Claude Code v2.1.205 atau lebih baru. Jika teks Anda terlalu panjang untuk dilewatkan di baris perintah, simpan ke file dan lewatkan jalur dengan --append-subagent-system-prompt-file sebagai gantinya. Flag file memerlukan Claude Code v2.1.261 atau lebih baru.
Subagent dimulai di direktori kerja saat ini percakapan utama. Dalam subagent, perintah cd tidak bertahan antara panggilan tool Bash atau PowerShell dan tidak mempengaruhi direktori kerja percakapan utama. Untuk memberikan subagent salinan terisolasi dari repositori, atur isolation: worktree.
Subagent dengan isolation: worktree menjalankan perintah Bash dan PowerShell-nya di dalam worktree-nya. Perintah yang direktori kerjanya diselesaikan ke checkout utama Anda, misalnya karena direktori worktree dihapus saat subagent berjalan, gagal dengan kesalahan. Sebelum v2.1.203, perintah seperti itu dapat berjalan di checkout utama.
Pemeriksaan direktori kerja ini mencakup seluruh repositori yang berisi direktori tempat Anda meluncurkan Claude Code. Ketika sesi Anda berjalan di worktree tertaut miliknya sendiri, pemeriksaan juga mencakup checkout utama yang worktree itu tertaut darinya. Sebelum v2.1.210, pemeriksaan hanya mencakup direktori peluncuran itu sendiri. Perintah yang direktori kerjanya diselesaikan di tempat lain di repositori yang sama, seperti akar repositori saat Anda meluncurkan Claude Code dari subdirektori monorepo, berjalan di sana sebagai gantinya dari gagal.
Untuk perintah Bash, Claude Code juga memeriksa perintah itu sendiri dalam dua cara:
- Ini memblokir perintah yang mengarahkan git ke checkout utama.
- Ini menolak perintah ketika tidak dapat memverifikasi dari teks perintah bahwa git apa pun yang dijalankan perintah tetap di dalam worktree, misalnya ketika nama perintah dihitung saat runtime.
isolation: worktree; lihat How Claude Code enforces isolation.
Referensi frontmatter
Konfigurasi subagent dengan YAML frontmatter antara penanda--- di bagian atas file-nya, dan tulis system prompt-nya sebagai Markdown setelah --- penutup. Hanya name dan description yang diperlukan.
Nama field multi-kata menggunakan camelCase, seperti maxTurns dan disallowedTools, dan harus cocok dengan tabel persis: Claude Code mengabaikan field yang tidak dikenalinya tanpa melaporkan kesalahan. Untuk mengetahui mengapa file subagent tidak dimuat, lihat Subagent files Claude Code skips.
Tulis
cacheTtl di dalam peta experimental, bukan di tingkat atas frontmatter.
File subagent yang Claude Code lewati
Claude Code melewati file dalam direktoriagents proyek, pengguna, atau yang dikelola, atau dalam satu di bawah direktori yang Anda tambahkan dengan --add-dir, tanpa melaporkannya dalam sesi, ketika frontmatter memiliki salah satu masalah ini:
- Tidak ada
name: Claude Code memperlakukan file sebagai dokumentasi yang disimpan di samping agent Anda. ---pembuka yang bukan baris pertama file: Claude Code membaca file sebagai tidak memiliki frontmatter dan memperlakukannya sebagai dokumentasi.nameyang dimulai dengan-atau berisi:: Claude Code melewati file dan menulis kesalahan ke debug log. Lihat barisnamedalam tabel di atas.nametetapi tidak adadescription: Claude Code melewati file dan menulis alasannya ke debug log.- YAML yang tidak diuraikan: Claude Code tidak membaca field dari file, melewatinya, dan menulis kesalahan penguraian ke debug log.
--debug.
Plugin subagent yang frontmatter-nya tidak memiliki name atau tidak diuraikan masih dimuat, di bawah nama file-nya.
Untuk menemukan file dalam direktori agents yang frontmatter-nya tidak diuraikan, jalankan claude plugin validate terhadap direktori, misalnya .claude/agents atau ~/.claude/agents. Claude Code hanya memeriksa direktori yang Anda namai, dan tidak menandai file yang frontmatter-nya diuraikan tetapi tidak memiliki name. Memerlukan Claude Code v2.1.233 atau lebih baru.
Pilih model
Fieldmodel mengontrol model mana yang digunakan subagent:
- Model alias: gunakan salah satu alias yang tersedia:
sonnet,opus,haiku, ataufable - ID model lengkap: gunakan ID model lengkap seperti
claude-opus-5-5atauclaude-sonnet-5. Menerima nilai yang sama seperti flag--model - inherit: gunakan model yang sama seperti percakapan utama
model untuk invokasi spesifik itu. Claude Code menyelesaikan model subagent dalam urutan ini:
- Parameter
modelper-invokasi - Frontmatter
modeldefinisi subagent, di manainheritmemilih model percakapan utama - Variabel lingkungan
CLAUDE_CODE_SUBAGENT_MODEL, ketika Anda mengaturnya ke alias model atau ID model - Model percakapan utama
opus dalam parameter per-invokasi atau frontmatter diselesaikan ke model percakapan utama sebagai gantinya dari versi yang ditunjuk alias:
- Model percakapan utama milik keluarga itu: subagent berjalan pada model persis percakapan utama, termasuk akhiran
[1m]apa pun, jadi mendapat extended context window yang sama seperti percakapan utama. - Claude Code tidak dapat mengetahui keluarga model percakapan utama, pada provider selain Anthropic API: ini dapat terjadi dengan application inference profile ARN di Amazon Bedrock yang Claude Code belum diselesaikan ke model pendukung. Kasus ini hanya mencakup alias
opus, dan tidak berlaku ketika Anda mengaturANTHROPIC_DEFAULT_OPUS_MODEL, karenaopuskemudian diselesaikan ke model yang Anda atur.
CLAUDE_CODE_SUBAGENT_MODEL selalu diselesaikan ke versi yang ditunjuk alias, bahkan ketika ia menamai keluarga percakapan utama.
Mengatur CLAUDE_CODE_SUBAGENT_MODEL dengan sendirinya tidak mengubah model yang dijalankan subagent Explore dan Plan bawaan. Untuk mengubahnya, lihat Run every subagent on one model.
Sebelum v2.1.251, CLAUDE_CODE_SUBAGENT_MODEL datang pertama dalam urutan ini dan menimpa parameter per-invokasi dan frontmatter, termasuk model: inherit.
Mengatur variabel ke inherit sama dengan membiarkannya tidak diatur. Sebelum v2.1.196, nilai itu memaksa subagent ke model percakapan utama dan mengabaikan sumber lain.
Claude Code memeriksa parameter per-invokasi, frontmatter, dan nilai variabel lingkungan terhadap availableModels allowlist organisasi Anda. Untuk nilai yang diblokir, ia mengganti model lain:
- Ketika nilai yang diblokir adalah alias keluarga seperti
opus, Claude Code menjalankan subagent pada versi terbaru keluarga itu yang allowlist izinkan, mengikuti substitution rules dan provider scope yang sama seperti/model. Sebelum v2.1.222, Claude Code menjalankan subagent pada model yang diwarisi untuk alias keluarga yang diblokir juga. - Untuk nilai yang diblokir lainnya, pada provider di mana substitusi itu tidak beroperasi, atau ketika allowlist tidak mengizinkan versi keluarga, Claude Code menjalankan subagent pada model yang diwarisi sebagai gantinya. Jika Anda mengatur
CLAUDE_CODE_SUBAGENT_MODEL, Claude Code mencoba model itu terlebih dahulu, di bawah aturan yang sama ini.
/tasks. Claude Code menamai model pada baris subagent, dan menambahkan effort level ketika definisi subagent, atau skill yang difork-nya, mengatur effort. Memerlukan Claude Code v2.1.242 atau lebih baru.
Parameter model per-invokasi juga berlaku ketika subagent dilanjutkan atau dikirim pesan tindak lanjut, jadi subagent tetap pada model itu. Sebelum v2.1.211, melanjutkan menghapus nilai per-invokasi dan subagent kembali ke field model definisinya atau, tanpanya, model percakapan utama.
Mulai v2.1.198, subagent juga mewarisi konfigurasi extended thinking percakapan utama: jika thinking aktif dalam sesi Anda, aktif untuk subagent, dan jika mati, tetap mati. Tidak ada pengaturan thinking per-subagent. Sebelum v2.1.198, subagent berjalan dengan extended thinking dinonaktifkan terlepas dari pengaturan percakapan utama.
Jalankan setiap subagent pada satu model
CLAUDE_CODE_SUBAGENT_MODEL adalah default, jadi definisi subagent atau model yang Claude lewatkan masih mengambil alih. Untuk menerapkan satu model ke setiap subagent, teammate, dan workflow agent, juga atur CLAUDE_CODE_SUBAGENT_MODEL_FORCE ke 1. Memerlukan Claude Code v2.1.257 atau lebih baru.
- Jika Anda mengatur kedua variabel, subagent berjalan pada model dalam
CLAUDE_CODE_SUBAGENT_MODEL. - Jika Anda hanya mengatur
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, subagent berjalan pada model percakapan utama.
env dari settings file:
/tasks saat subagent berjalan. Baris subagent menunjukkan model yang dijalankannya.
Sementara CLAUDE_CODE_SUBAGENT_MODEL_FORCE aktif, Claude Code mengabaikan field model dari setiap definisi subagent, termasuk subagent Explore dan Plan bawaan, dan Claude tidak dapat melewatkan model saat memulai subagent. Dua jenis subagent masih berjalan pada model percakapan utama:
- Fork
- Skill yang berjalan dalam subagent dengan
model: inherit
CLAUDE_CODE_SUBAGENT_MODEL_FORCE, subagent Explore bawaan menjaga model cap-nya.
Kontrol kemampuan subagent
Anda dapat mengontrol apa yang dapat dilakukan subagent melalui akses tool, mode izin, dan aturan bersyarat.Tool yang tersedia
Subagent mewarisi built-in tools dan MCP tools yang tersedia dalam percakapan utama, dipersempit oleh dua filter: yang pertama menghapus daftar singkat tool dari setiap subagent, dan yang kedua mengurangi set tool bawaan untuk subagent yang berjalan di background, yang merupakan default. Di macOS, Linux, dan WSL, subagent juga dapat menerima tool Glob dan Grep ketika percakapan utama tidak memilikinya, seperti dijelaskan di bawah Glob tool behavior. Forks melewati kedua filter dan menerima pool tool persis percakapan utama. Filter pertama menghapus tool ini, bahkan ketika tercantum dalam fieldtools:
Agent, ketika subagent berada di depth limit; dalam fork tool tetap terdaftar tetapi mengembalikan kesalahan sebagai gantinya dari spawningAskUserQuestionEndConversation, yang hanya dapat mengakhiri percakapan utama; lihat EndConversation tool behaviorEnterPlanModeExitPlanMode, kecualipermissionModesubagent adalahplanScheduleWakeupWaitForMcpServersWorkflow
Agent dan ExitPlanMode, yang mengikuti kondisi filter pertama di mana pun subagent berjalan, subagent latar belakang menyimpan setiap tool MCP tetapi hanya tool bawaan ini: Read, Grep, Glob, LSP, Bash, PowerShell, Edit, Write, NotebookEdit, WebFetch, WebSearch, TodoWrite, Skill, ToolSearch, EnterWorktree, ExitWorktree, Monitor, TaskStop, SendMessage, dan Artifact, ditambah SubagentHandback untuk subagent yang melaporkan melaluinya. Claude Code menghapus setiap tool bawaan lainnya dari subagent latar belakang, baik yang diwarisi atau tercantum dalam field tools, jadi definisi yang sama dapat diselesaikan ke tool berbeda di latar depan dan latar belakang. Penghapusan melaporkan tidak ada kesalahan kecuali itu meninggalkan daftar tools diselesaikan ke tidak ada apa-apa.
Sebelum v2.1.280, subagent latar belakang tidak dapat menggunakan LSP.
ListAgents mengikuti filter ini seperti tool bawaan apa pun: subagent latar depan mewarisnya dalam sesi di mana cross-session messaging diaktifkan, dan subagent latar belakang tidak menyimpannya.
Teammate dalam agent teams juga menyimpan task tools dan cron tools: TaskCreate, TaskGet, TaskList, TaskUpdate, CronCreate, CronDelete, dan CronList.
Dalam sesi tanpa Task tools, Claude Code tidak menyediakan task tools ke subagent juga, bahkan ketika subagent menjalankan model berbeda. Teammate in-process mengikuti sesi Anda dengan cara yang sama, sementara teammate dalam split pane miliknya sendiri berjalan sebagai proses Claude Code terpisah, jadi modelnya sendiri yang memutuskan.
Untuk membatasi tool, gunakan field tools sebagai allowlist atau field disallowedTools sebagai denylist. Contoh ini menggunakan tools untuk hanya mengizinkan Read, Grep, Glob, dan Bash. Subagent tidak dapat mengedit file, menulis file, atau menggunakan tool MCP apa pun:
disallowedTools untuk mewarisi pool tool subagent kecuali Write dan Edit. Subagent menyimpan Bash, tool MCP, dan sisa pool-nya:
disallowedTools diterapkan terlebih dahulu, kemudian tools diselesaikan terhadap pool yang tersisa. Tool yang tercantum di keduanya dihapus.
Ketika tidak ada dalam daftar tools yang diselesaikan ke tool, misalnya karena setiap entri salah eja atau menamai tool yang tidak tersedia untuk subagent, Claude Code biasanya menolak untuk meluncurkan subagent dan tool Agent mengembalikan kesalahan yang menamai entri yang tidak diselesaikan; lihat Agent would be spawned with zero tools untuk pesan dan cara memperbaiki setiap entri. Sebelum v2.1.208, subagent itu diluncurkan tanpa tool dan dapat mengembalikan hasil kosong atau membingungkan.
Kedua field menerima pola tingkat server MCP sebagai tambahan untuk nama tool yang tepat: mcp__<server> atau mcp__<server>__* memberikan atau menghapus setiap tool dari server yang dinamai. Dalam disallowedTools, mcp__* juga menghapus setiap tool MCP dari server apa pun. Contoh ini menghapus setiap tool dari server MCP github sambil menyimpan tool dari server lain dan tool bawaan dalam pool-nya:
disallowedTools dengan specifier, seperti Bash(git push *), masih menghapus seluruh tool dari subagent, bukan hanya perintah yang cocok. Untuk menyimpan Bash dan memblokir perintah spesifik, tambahkan Bash deny rule seperti Bash(git push *) ke permissions.deny dalam pengaturan Anda. Aturan berlaku untuk percakapan utama dan subagent.
Batasi subagent mana yang dapat di-spawn
Ketika agent berjalan sebagai thread utama denganclaude --agent, ia dapat menspawn subagent menggunakan tool Agent. Untuk membatasi tipe subagent mana yang dapat di-spawn, gunakan sintaks Agent(agent_type) dalam field tools.
Dalam versi 2.1.63, tool Task diganti nama menjadi Agent. Referensi
Task(...) yang ada dalam pengaturan dan definisi agent masih berfungsi sebagai alias.worker dan researcher yang dapat di-spawn. Jika agent mencoba menspawn tipe lain, permintaan gagal dan agent hanya melihat tipe yang diizinkan dalam prompt-nya. Untuk memblokir agent spesifik sambil mengizinkan semua yang lain, gunakan permissions.deny sebagai gantinya.
Untuk mengizinkan spawning subagent apa pun tanpa pembatasan, gunakan Agent tanpa tanda kurung:
Agent dari daftar tools sepenuhnya, agent tidak dapat menspawn subagent apa pun dengan tool Agent.
Sintaks allowlist Agent(agent_type) hanya berlaku untuk agent yang berjalan sebagai thread utama dengan claude --agent. Dalam definisi subagent, mencantumkan Agent dalam tools memungkinkan subagent itu menspawn subagent miliknya sendiri sementara depth limit mengizinkannya, tetapi daftar tipe apa pun di dalam tanda kurung diabaikan.
Cakupan MCP server ke subagent
Gunakan fieldmcpServers untuk memberikan subagent akses ke MCP server yang tidak tersedia dalam percakapan utama. Server inline yang didefinisikan di sini terhubung ketika subagent dimulai, tunduk pada trust rule untuk folder file agent, dan terputus ketika selesai. Referensi string berbagi koneksi sesi induk.
Field
mcpServers berlaku dalam kedua konteks di mana file agent dapat berjalan:- Sebagai subagent, di-spawn melalui tool Agent atau @-mention
- Sebagai sesi utama, diluncurkan dengan
--agentatau settingagent
.mcp.json dan file pengaturan, di bawah trust rule yang sama untuk folder file agent. Dalam /mcp, server jarak jauh (HTTP atau SSE) yang telah Anda gunakan sebelumnya dapat menunjukkan cached status sebagai gantinya; Claude Code menghubungkannya ketika Claude pertama kali memanggil salah satu tool-nya..mcp.json, dikunci dengan nama server, dan mendukung tipe stdio, http, sse, dan ws.
Untuk menjaga MCP server keluar dari percakapan utama sepenuhnya dan menghindari deskripsi tool-nya mengonsumsi konteks di sana, tentukan secara inline di sini daripada di .mcp.json. Subagent mendapatkan tool; percakapan induk tidak.
Claude Code memuat server inline dari file agent dalam direktori .claude/agents/ proyek Anda, atau dalam direktori .claude/agents/ direktori --add-dir, hanya setelah Anda mempercayai folder tempat file agent berasal. Sebelum v2.1.238, Claude Code memuat server ini tanpa memeriksa kepercayaan.
- Kepercayaan yang tidak dihitung: kepercayaan folder induk, dan kepercayaan otomatis yang sesi
-patau SDK dapatkan untuk hooks dalam file pengaturan - Sampai saat itu: Claude Code melewati setiap server inline dalam file agent itu dan menulis kunci
projects["<path>"].hasTrustDialogAcceptedyang tepat untuk~/.claude.jsonke debug log - Direktori
--add-dir: direktori di luar repositori workspace terpercaya Anda memerlukan entri kepercayaan miliknya sendiri, karena file.claude/agents/miliknya tidak mewarisi kepercayaan workspace Anda
- Nama yang mereferensikan server yang sudah Anda konfigurasi
- Server inline dalam file agent dari
~/.claude/agents/, dalam satu yang Anda lewatkan dengan--agentsatau opsi SDKagents, atau dalam satu yang managed settings sediakan
--strict-mcp-configdan--bare- Enterprise managed MCP configuration
allowedMcpServersdandeniedMcpServerspolicies
--strict-mcp-config tidak memfilter server yang Anda lewatkan inline melalui --agents atau opsi SDK agents, karena itu adalah input pengguna eksplisit.
Mode izin
AturpermissionMode untuk memilih mode izin yang dijalankan subagent. Gunakan nilai config mode, jadi mode Manual adalah default. Jika Anda membiarkannya tidak diatur, subagent mewarisi mode izin percakapan utama.
Mode izin percakapan utama memutuskan apakah Claude Code menggunakan nilai yang Anda atur:
- Ketika percakapan utama berada dalam
bypassPermissions,acceptEdits, atau auto mode, subagent berjalan dalam mode yang sama dan Claude Code mengabaikanpermissionModeyang Anda atur. Di bawah auto mode, classifier mengevaluasi panggilan tool subagent dengan aturan blok dan izin percakapan utama. Ketika subagent selesai, classifier juga meninjau pekerjaan dan laporan finalnya sebelum laporan dikirimkan, seperti How auto mode handles subagents menjelaskan. - Ketika percakapan utama berada dalam mode
default,dontAsk, atauplan, subagent berjalan dalam mode izin yang Anda atur, kecualibypassPermissions. Subagent yang mendeklarasikanbypassPermissionsmenyimpan mode percakapan utama sebagai gantinya. PengecualianbypassPermissionsmemerlukan Claude Code v2.1.267 atau lebih baru.
permissionMode menerima nilai ini, dan manual sebagai alias untuk default:
Muat skills sebelumnya ke dalam subagent
Gunakan fieldskills untuk menyuntikkan konten skill ke dalam konteks subagent saat startup. Ini memberikan subagent pengetahuan domain tanpa memerlukan untuk menemukan dan memuat skill selama eksekusi.
Skill dari daftar tools atau tambahkan ke disallowedTools.
Anda tidak dapat memuat skill sebelumnya yang mengatur disable-model-invocation: true, karena memuat sebelumnya menarik dari set skill yang sama yang dapat dipanggil Claude. Ini termasuk skill /verify bundel: hanya Anda yang dapat menjalankannya, jadi tidak dapat dimuat sebelumnya juga.
Jika skill yang tercantum hilang atau dinonaktifkan, misalnya oleh kebijakan organisasi Anda, Claude Code melewatinya dan mencatat peringatan ke debug log.
Ini adalah kebalikan dari menjalankan skill dalam subagent. Dengan
skills dalam subagent, subagent mengontrol system prompt dan memuat konten skill. Dengan context: fork dalam skill, konten skill disuntikkan ke dalam agent yang Anda tentukan. Dalam kedua kasus subagent dimulai tanpa riwayat percakapan Anda.Aktifkan persistent memory
Fieldmemory memberikan subagent direktori persisten yang bertahan di seluruh percakapan. Subagent menggunakan direktori ini untuk membangun pengetahuan seiring waktu, seperti pola codebase, wawasan debugging, dan keputusan arsitektur.
Memory subagent adalah bagian dari auto memory: jika Anda mematikan auto memory, dengan setting
autoMemoryEnabled atau CLAUDE_CODE_DISABLE_AUTO_MEMORY, field memory tidak berpengaruh dan subagent diluncurkan tanpa instruksi memory atau akses tool memory yang dijelaskan di bawah.
Ketika memory diaktifkan:
- System prompt subagent mencakup instruksi untuk membaca dan menulis ke direktori memory.
- System prompt subagent juga mencakup 200 baris pertama atau 25KB dari
MEMORY.mddalam direktori memory, mana pun yang lebih dulu, dengan instruksi untuk mengkurasiMEMORY.mdjika melebihi batas itu. - Tool Read, Write, dan Edit secara otomatis diaktifkan sehingga subagent dapat mengelola file memory-nya.
-
projectadalah cakupan default yang direkomendasikan. Ini membuat pengetahuan subagent dapat dibagikan melalui version control. - Minta subagent untuk berkonsultasi dengan memory-nya sebelum memulai pekerjaan: “Review PR ini, dan periksa memory Anda untuk pola yang telah Anda lihat sebelumnya.”
- Minta subagent untuk memperbarui memory-nya setelah menyelesaikan tugas: “Sekarang Anda selesai, simpan apa yang Anda pelajari ke memory Anda.” Seiring waktu, ini membangun basis pengetahuan yang membuat subagent lebih efektif.
-
Sertakan instruksi memory langsung dalam file markdown subagent sehingga secara proaktif mempertahankan basis pengetahuan miliknya sendiri:
Aturan bersyarat dengan hooks
Untuk kontrol yang lebih dinamis atas penggunaan tool, gunakan hookPreToolUse untuk memvalidasi operasi sebelum dieksekusi. Ini berguna ketika Anda perlu mengizinkan beberapa operasi tool sambil memblokir yang lain.
Contoh ini membuat subagent yang hanya mengizinkan kueri database read-only. Hook PreToolUse menjalankan skrip yang ditentukan dalam command sebelum setiap perintah Bash dieksekusi:
UPDATE: skrip keluar dengan kode 2, Claude Code memblokir perintah, dan subagent melihat pesan Blocked: Only SELECT queries are allowed.
Lihat Hook input untuk skema input lengkap dan exit codes untuk cara exit code mempengaruhi perilaku. Di Windows, tulis skrip hook dalam PowerShell dan tambahkan shell: powershell ke entri hook seperti ditunjukkan dalam running hooks in PowerShell.
Nonaktifkan subagent spesifik
Anda dapat mencegah Claude dari menggunakan subagent spesifik dengan menambahkannya ke arraydeny dalam settings Anda. Gunakan format Agent(subagent-name) di mana subagent-name cocok dengan field name subagent.
--disallowedTools:
Tentukan hooks untuk subagent
Subagent dapat mendefinisikan hooks yang berjalan selama lifecycle subagent. Ada dua cara untuk mengonfigurasi hooks:- Dalam frontmatter subagent: tentukan hooks yang berjalan hanya saat subagent itu aktif
- Dalam
settings.json: tentukan hooks seluruh sesi yang juga menyala di dalam subagent. Peristiwa tool sepertiPreToolUsedanPostToolUsemenyala untuk panggilan tool subagent dengan cara yang sama seperti dalam percakapan utama, danSubagentStartdanSubagentStopmenyala ketika subagent dimulai atau selesai
PreToolUse dalam settings.json juga berjalan sebelum setiap tool yang digunakan subagent.
Hook dalam frontmatter subagent
Tentukan hooks langsung dalam file markdown subagent. Hook ini hanya berjalan saat subagent spesifik itu aktif dan dibersihkan ketika selesai.Hook frontmatter menyala ketika agent di-spawn sebagai subagent melalui tool Agent atau @-mention, dan ketika agent berjalan sebagai sesi utama melalui
--agent atau setting agent. Dalam kasus sesi-utama mereka berjalan bersama hook apa pun yang didefinisikan dalam settings.json.~/.claude/agents/ dan dari definisi yang Anda lewatkan dengan --agents berjalan tanpa langkah ini. Jika Anda menambahkan folder dengan --add-dir dari luar repositori workspace terpercaya Anda, percayai folder itu secara terpisah: hook .claude/agents/ miliknya tidak mewarisi kepercayaan workspace. Sampai Anda mempercayai folder, subagent masih berjalan, tetapi Claude Code melewati hook frontmatter-nya dan mencatat kesalahan ke debug log yang menjelaskan cara mempercayai folder. Ini adalah aturan yang lebih ketat daripada untuk hook dalam file pengaturan: mempercayai folder induk tidak cukup, dan sesi -p tidak dihitung sebagai terpercaya. What runs before you trust a folder membandingkan keduanya. Sebelum v2.1.218, hook frontmatter dapat berjalan dari folder yang belum Anda percayai, termasuk dalam sesi non-interaktif.
Semua hook events didukung. Peristiwa paling umum untuk subagent adalah:
Contoh ini memvalidasi perintah Bash dengan hook
PreToolUse dan menjalankan linter setelah edit file dengan PostToolUse:
Stop dalam frontmatter secara otomatis dikonversi ke peristiwa SubagentStop.
Hook tingkat proyek untuk peristiwa subagent
Konfigurasi hooks dalamsettings.json yang merespons peristiwa lifecycle subagent dalam sesi utama.
Kedua peristiwa mendukung matcher untuk menargetkan tipe agent spesifik berdasarkan nama. Nilai matcher adalah frontmatter
name agent untuk subagent tingkat proyek dan pengguna, atau pengenal cakupan plugin seperti my-plugin:db-agent untuk plugin subagents. Nama cakupan berisi titik dua, jadi dievaluasi sebagai unanchored regular expression; jangkarnya dengan ^ dan $, seperti dalam ^my-plugin:db-agent$, untuk mencocokkan hanya agent itu.
Contoh ini menjalankan skrip setup hanya ketika subagent db-agent dimulai, dan skrip cleanup ketika subagent apa pun berhenti:
Bekerja dengan subagent
Pahami delegasi otomatis
Claude secara otomatis mendelegasikan tugas berdasarkan deskripsi tugas dalam permintaan Anda, bidangdescription dalam konfigurasi subagent, dan konteks saat ini. Untuk mendorong delegasi proaktif, sertakan frasa seperti “use proactively” dalam bidang deskripsi subagent Anda.
Jaga deskripsi tetap singkat: Claude Code menampilkan peringatan startup ketika deskripsi gabungan subagent Anda melampaui batas 15.000 token, dan masih memuat setiap subagent.
Jika subagent dikirim dalam plugin, Anda dapat mengukur seberapa andal Claude mendelegasikan ke dalamnya di seluruh prompt realistis daripada memeriksa satu per satu: claude plugin eval menjalankan setiap prompt dengan dan tanpa plugin dan menilai hasilnya.
Panggil subagent secara eksplisit
Ketika delegasi otomatis tidak cukup, Anda dapat meminta subagent sendiri. Tiga pola meningkat dari saran satu kali ke default sesi-lebar:- Bahasa alami: sebutkan subagent dalam prompt Anda; Claude memutuskan apakah akan mendelegasikan
- @-mention: menjamin subagent berjalan untuk satu tugas
- Sesi-lebar: seluruh sesi berjalan sebagai subagent itu melalui flag
--agentatau pengaturanagent
@ dan pilih subagent dari typeahead, dengan cara yang sama Anda @-mention file. Ini memastikan subagent tertentu berjalan daripada meninggalkan pilihan kepada Claude:
my-plugin:code-reviewer atau my-plugin:review:security ketika plugin mengorganisir agen ke dalam subfolder. Subagent background bernama yang saat ini berjalan dalam sesi juga muncul di typeahead, menunjukkan status mereka di samping nama.
Anda juga dapat mengetik mention secara manual tanpa menggunakan picker: @agent-<name> untuk subagent lokal, atau @agent- diikuti dengan nama yang dibatasi untuk subagent plugin, misalnya @agent-my-plugin:code-reviewer. Saat Anda mengetik formulir ini, typeahead menampilkan kecocokan file daripada agen. Penyebutan agen masih diselesaikan saat Anda mengirimkan.
Jalankan seluruh sesi sebagai subagent. Lewatkan --agent <name> untuk memulai sesi di mana thread utama itu sendiri mengambil pembatasan alat dan model subagent:
--system-prompt melakukannya. File CLAUDE.md dan memori proyek masih dimuat melalui aliran pesan normal, bahkan ketika definisi agen menetapkan omitClaudeMd.
Nama agen muncul sebagai @<name> di header startup sehingga Anda dapat mengonfirmasi itu aktif.
Ini berfungsi dengan subagent bawaan dan khusus, dan pilihan bertahan ketika Anda melanjutkan sesi: Claude Code memulihkan pembatasan alat dan model agen bersama dengan percakapan. Jika agen tidak lagi ada saat Anda melanjutkan, sesi berlanjut dengan alat default dan menampilkan peringatan yang menyebutkan agen. Untuk prompt sistem dalam kedua kasus, lihat Bendera prompt sistem dalam percakapan yang dilanjutkan.
Untuk subagent yang disediakan plugin, Anda dapat melewatkan hanya nama agen dan Claude Code akan menemukannya:
agents/ nya, sertakan subfolder dalam nama yang dibatasi, misalnya claude --agent my-plugin:review:security.
Untuk menjadikannya default untuk setiap sesi dalam proyek, atur agent dalam .claude/settings.json:
Jalankan subagent di foreground atau background
Subagent dapat berjalan di foreground atau background:- Subagent foreground memblokir percakapan utama sampai selesai. Prompt izin dilewatkan kepada Anda saat muncul.
- Subagent background berjalan secara bersamaan sementara Anda terus bekerja. Ketika subagent background mencapai panggilan alat yang memerlukan izin, Claude Code menampilkan prompt di sesi utama Anda dan menyebutkan subagent yang bertanya. Setujui untuk membiarkan subagent melanjutkan, atau tekan Esc untuk menolak panggilan alat itu saja tanpa menghentikan subagent.
- Jika anggota tim agen dalam proses yang menghasilkan subagent, Claude Code menjalankannya di foreground. Claude Code menolak dengan kesalahan untuk menghasilkan subagent anggota tim yang definisinya menetapkan
background: true. Di mana fork mode mati dan Anda belum mematikan background tasks, Claude Code juga menolak dengan kesalahan ketika anggota tim menetapkanrun_in_background: true. - Jika Anda menetapkan
CLAUDE_CODE_DISABLE_BACKGROUND_TASKSke1, Claude Code menjalankan subagent di foreground, dalam setiap jenis sesi dan apakah fork mode aktif atau tidak. - Di mana fork mode aktif, seperti yang terjadi secara default dalam sesi interaktif, Claude Code menjalankan subagent di background, subagent fork dan non-fork sama-sama, dan Claude tidak dapat meminta foreground.
- Di mana fork mode mati, Claude menjalankan subagent di background secara default dan di foreground ketika memerlukan hasil sebelum melanjutkan. Fork mode mati dalam mode non-interaktif dengan
-pdan dalam Agent SDK kecuali Anda mengaktifkannya. Untuk menjaga subagent tertentu di background bahkan ketika Claude menginginkan hasil, atur bidang frontmatterbackgroundketrue.
context: fork, Claude Code mengikuti aturan dalam Jalankan skills dalam subagent sebagai gantinya, apakah fork mode aktif atau tidak.
Subagent background berjalan dengan set alat bawaan yang lebih kecil daripada subagent foreground, kecuali untuk fork percakapan dan subagent foreground yang dilanjutkan.
Subagent background menampilkan setiap prompt izin di sesi utama Anda. Ketika Anda menjawab salah satu prompt tersebut dengan pilihan yang berlangsung melampaui panggilan alat itu, seperti hibah yang berlangsung untuk sisa sesi, Claude Code menerapkan jawaban Anda ke seluruh sesi, termasuk percakapan utama Anda.
Subagent background dapat meninggalkan perintah Bash atau PowerShell background berjalan melampaui akhir giliran. Ketika perintah itu berakhir, Claude Code mengirim notifikasi ke subagent.
Hasil subagent background mencapai Claude sebagai notifikasi penyelesaian dalam giliran yang lebih baru. Claude menunggu notifikasi itu sebelum melaporkan hasil subagent, dan jika Anda bertanya tentang kemajuan terlebih dahulu, itu melaporkan bahwa subagent masih berjalan. Sebelum v2.1.211, Claude kadang melaporkan hasil untuk subagent background yang belum selesai.
Anda juga dapat mengarahkan ini sendiri:
- Di mana fork mode mati, minta Claude untuk menjalankan tugas di background atau di foreground
- Tekan Ctrl+B untuk menempatkan tugas yang sedang berjalan di background
- Ketika subagent selesai dengan sukses, Claude Code menghapus barisnya segera dan, kecuali dalam mode pembaca layar, menampilkan
/tasks to see subagentsdi footer selama 30 detik. Selama 30 detik itu, jalankan/tasksdan tekanEnterpada subagent untuk membuka transkrip. Sebelum v2.1.232, Claude Code menyimpan baris selama 30 detik setelah subagent selesai, sama seperti yang gagal, dan tidak menampilkan petunjuk footer. - Ketika subagent gagal atau Anda menghentikannya, Claude Code menyimpan barisnya selama 30 detik. Untuk menghapus baris lebih cepat, pilih dan tekan
x.
/tasks, ditandai selesai dan diurutkan di bawah pekerjaan yang sedang berjalan, selama 30 detik yang sama dengan petunjuk footer. Tampilan detailnya tetap terbuka ketika subagent selesai. Subagent yang gagal atau yang Anda hentikan meninggalkan daftar. Sebelum v2.1.208, subagent yang selesai meninggalkan daftar saat itu selesai dan tampilan detailnya ditutup.
Nama subagent
Claude dapat memberi subagent nama dengan melewatkan parametername pada panggilan alat Agent, dan dapat melakukannya sendiri, tanpa bertanya kepada Anda terlebih dahulu. Nama membuat subagent dapat dialamatkan: Claude dapat mengirim pesan atau melanjutkannya berdasarkan nama setelah selesai.
Dalam sesi interaktif dengan tim agen diaktifkan, subagent yang Claude hasilkan dari percakapan utama dengan name diluncurkan sebagai anggota tim sebagai gantinya, kecuali panggilan adalah fork atau melewatkan isolation pada panggilan itu sendiri. Nilai isolation dalam frontmatter subagent tidak mencegahnya, dan anggota tim kemudian berjalan di direktori kerja sesi utama. Lihat Bagaimana Claude memulai tim agen.
Kesalahan API dalam subagent
Ketika sesuatu memotong respons subagent di tengah-aliran, dan respons parsial berisi teks tetapi tidak ada panggilan alat, Claude Code meminta subagent untuk melanjutkan daripada mengakhiri run. Ini terjadi dalam sesi interaktif juga. Run berakhir pada kesalahan hanya setelah kelanjutan itu habis. Mulai dari v2.1.199, subagent yang run-nya berakhir pada kesalahan API, seperti batas penggunaan atau kesalahan server berulang, melaporkan kegagalan itu kembali ke Claude daripada mengembalikan teks kesalahan seolah-olah itu adalah temuan subagent. Apa yang Claude terima tergantung di mana subagent berjalan:- Foreground: jika batas laju, kelebihan beban, atau kesalahan server memotong subagent yang sudah menghasilkan output teks, alat Agent mengembalikan output parsial itu dengan catatan bahwa subagent dipotong dan tidak menyelesaikan tugasnya. Subagent yang tidak menghasilkan apa pun, atau yang output-nya hanya panggilan alat, gagal dengan
Agent terminated early due to an API error, diikuti oleh detail kesalahan. Dalam v2.1.199, batas laju, kelebihan beban, atau kesalahan server yang memotong bentuk tool-calls-only mengembalikan hasil parsial kosong yang hanya berisi catatan cut-off sebagai gantinya. - Background: subagent ditandai gagal, dan pesan yang Claude terima saat berakhir menyebutkan kesalahan API dan menyertakan output terakhir subagent, jadi pekerjaan parsial tidak hilang.
Pemindaian output subagent
Claude Code memindai laporan akhir setiap subagent sebelum Claude membacanya. Subagent mungkin telah membaca file, halaman web, atau output perintah yang tidak pernah Anda tinjau, dan teks dari sumber tersebut dapat membawa instruksi yang ditujukan ke percakapan utama. Pemindaian tidak pernah menghapus atau menulis ulang apa pun; itu membuat dua jenis perubahan yang mungkin Anda perhatikan dalam laporan:- Penyisipan backslash: pemindaian menyisipkan backslash ke dalam teks yang meniru output Claude Code itu sendiri, seperti tag
<system-reminder>atau baris yang dimulai denganHuman:atauAssistant:, sehingga peniruan dibaca sebagai teks biasa daripada disalahartikan sebagai bagian dari percakapan. - Baris penanda: pemindaian menambahkan baris yang dimulai dengan
[harness: subagent output matched instruction-shaped pattern(s):ketika laporan meniru tag seperti<system-reminder>atau menyebutkan pengaturan izin sepertibypassPermissionsatau--dangerously-skip-permissions. Penyebutan pengaturan izin mendapatkan baris penanda, tetapi teks itu sendiri tetap seperti yang ditulis.
Pemindaian output subagent memerlukan Claude Code v2.1.210 atau lebih baru.
Pola umum
Isolasi operasi volume tinggi
Salah satu penggunaan paling efektif untuk subagent adalah mengisolasi operasi yang menghasilkan jumlah output besar. Menjalankan tes, mengambil dokumentasi, atau memproses file log dapat mengonsumsi konteks yang signifikan. Dengan mendelegasikan ini ke subagent, output verbose tetap dalam konteks subagent sementara hanya ringkasan relevan yang kembali ke percakapan utama Anda.Jalankan penelitian paralel
Untuk investigasi independen, hasilkan beberapa subagent untuk bekerja secara bersamaan:Rantai subagent
Untuk alur kerja multi-langkah, minta Claude untuk menggunakan subagent secara berurutan. Setiap subagent menyelesaikan tugasnya dan mengembalikan hasil ke Claude, yang kemudian melewatkan konteks relevan ke subagent berikutnya.Pilih antara subagent dan percakapan utama
Gunakan percakapan utama ketika:- Tugas memerlukan bolak-balik yang sering atau penyempurnaan iteratif
- Beberapa fase berbagi konteks yang signifikan, seperti perencanaan, implementasi, dan pengujian
- Anda membuat perubahan cepat dan tertarget
- Latensi penting. Subagent yang bukan fork dimulai segar dan mungkin memerlukan waktu untuk mengumpulkan konteks
- Tugas menghasilkan output verbose yang Anda tidak butuhkan dalam konteks utama Anda
- Anda ingin menerapkan pembatasan alat atau izin tertentu
- Pekerjaan mandiri dan dapat mengembalikan ringkasan
/btw sebagai gantinya dari subagent. Ini melihat konteks penuh Anda tetapi tidak memiliki akses alat, dan jawabannya tidak ditambahkan ke riwayat.
Biarkan subagent menghasilkan subagent mereka sendiri
Secara default, subagent dapat menghasilkan subagent-nya sendiri, hingga tiga lapisan di bawah percakapan utama. Pada batas kedalaman, Claude Code menahan alatAgent dari setiap subagent kecuali fork, jadi subagent pada batas melakukan pekerjaan yang didelegasikan itu sendiri dan mengembalikan satu ringkasan. Fork pada batas menyimpan Agent dalam daftar alat yang diwariskan, tetapi alat mengembalikan kesalahan daripada menghasilkan.
Subagent bersarang cocok untuk tugas yang didelegasikan yang itu sendiri terbagi menjadi subtask paralel, seperti subagent reviewer yang mengirimkan verifier per temuan. Dalam sesi interaktif, hanya ringkasan subagent tingkat atas yang kembali kepada Anda dan output perantara tetap keluar dari percakapan utama Anda: subagent yang meluncurkan subagent background menunggu hasil mereka sebelum selesai. Dalam mode non-interaktif dan Agent SDK, subagent peluncur tidak menunggu, jadi subagent background bersarang yang selesai setelah peluncurnya telah berakhir melaporkan ke percakapan utama Anda sebagai gantinya.
Untuk mengubah batas, atur CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH ke jumlah lapisan subagent yang Anda inginkan di bawah percakapan utama Anda. Misalnya, entri ini dalam settings.json membatasi nesting pada dua lapisan:
1 untuk mematikan nesting.
Subagent bersarang dikonfigurasi dengan cara yang sama seperti subagent tingkat atas dan diselesaikan dari scope yang sama. Untuk menjaga satu subagent agar tidak menghasilkan sementara nesting aktif, seperti reviewer yang harus tetap read-only, hilangkan Agent dari daftar tools atau tambahkan ke disallowedTools.
Dalam terminal, Claude Code menampilkan subagent bersarang sebagai pohon dalam panel subagent di bawah input prompt dan menandai setiap baris yang masih memiliki keturunan dalam panel dengan hitungan (+N) mereka. Buka baris untuk melihat saudara dan anak langsung subagent itu dengan jalur kembali ke main.
Versi sebelumnya menggunakan default yang berbeda:
- v2.1.172 hingga v2.1.216: subagent dapat bersarang secara default, hingga lima lapisan dalam, dan batas tidak dapat diubah.
- v2.1.217 hingga v2.1.218: batas default ke satu, jadi subagent tidak dapat menghasilkan miliknya sendiri kecuali Anda menaikkannya; v2.1.219 menaikkan default ke tiga.
Batas subagent bersamaan
Dua batas mengontrol penggunaan subagent, masing-masing dengan variabelnya sendiri: yang ini menghentikan Claude dari menghasilkan lebih banyak subagent sementara terlalu banyak berjalan, dan batas kedalaman membatasi seberapa dalam subagent bersarang. Tidak ada batas pada jumlah total subagent yang dapat Claude hasilkan selama sesi. Secara default, ketika 20 subagent berjalan dalam sesi, menghasilkan yang lain dengan alat Agent gagal denganConcurrent subagent limit reached, dan kesalahan memberi tahu Claude untuk tidak mencoba ulang. Menghasilkan berhasil lagi ketika hitungan yang berjalan turun di bawah batas. Untuk mengubah batas, atur CLAUDE_CODE_MAX_CONCURRENT_SUBAGENTS ke bilangan bulat positif apa pun. Sesi dengan ultracode aktif dikecualikan: batas tidak diterapkan di sana. Memerlukan Claude Code v2.1.217 atau lebih baru.
Batas hanya memblokir subagent yang Claude hasilkan dengan alat Agent, tetapi run lain menempati slot yang sama:
- Fork dalam sesi yang Anda mulai dengan
/subtaskmenempati slot saat berjalan dan tidak pernah diblokir oleh batas. - Melanjutkan subagent yang sudah selesai menempati slot segar tanpa memeriksa batas, jadi resume dapat mendorong hitungan yang berjalan melampaui batas.
Kelola konteks subagent
Apa yang dimuat saat startup
Setiap subagent dimulai dengan jendela konteks yang segar dan terisolasi. Ini tidak melihat riwayat percakapan Anda, skills yang sudah Anda panggil, atau file yang sudah Claude baca. Claude menyusun pesan delegasi yang merangkum tugas, dan subagent bekerja dari sana. Pengecualiannya adalah fork, yang mewarisi percakapan induk daripada memulai segar. Konteks awal subagent non-fork berisi:- Prompt sistem: prompt agen itu sendiri ditambah detail lingkungan yang Claude Code tambahkan, bukan prompt sistem Claude Code. Subagent khusus mendefinisikan milik mereka dalam badan markdown atau bidang
prompt. Agen bawaan memiliki prompt yang telah ditentukan sebelumnya. - Pesan tugas: prompt delegasi yang Claude tulis saat menyerahkan pekerjaan.
- File CLAUDE.md: setiap level dari hierarki CLAUDE.md yang dimuat percakapan utama, termasuk
~/.claude/CLAUDE.md, aturan proyek,CLAUDE.local.md, file kebijakan yang dikelola, dan fileAGENTS.mdapa pun yang dimuat sebagai instruksi proyek. Agen Explore dan Plan bawaan melewati ini. Subagent yang definisinya menetapkanomitClaudeMdhanya memuat file kebijakan yang dikelola, atau tidak ada sama sekali ketika definisi berasal dari pengaturan yang dikelola. - Status Git: snapshot yang diambil di awal sesi induk. Tidak ada ketika direktori kerja bukan repositori Git atau ketika
includeGitInstructionsadalahfalse. Explore dan Plan melewatinya terlepas. - Skills yang dimuat sebelumnya: konten lengkap dari skill apa pun yang dinamai dalam bidang
skillsagen. Agen bawaan tidak memuat skills sebelumnya. - Daftar saudara: pengingat sistem yang mencantumkan
maindan setiap agen bernama lainnya dalam sesi, masing-masing nilaitoyang valid untukSendMessage. Memerlukan Claude Code v2.1.206 atau lebih baru. Daftar muncul hanya ketika alat subagent mencakupSendMessagedan setidaknya satu agen lain memiliki nama, baik Claude menamakannya saat memunculkannya atau berjalan sebagai anggota tim agen. Ini adalah snapshot yang diambil ketika subagent dimulai, jadi agen yang dinamai nanti tidak muncul.
omitClaudeMd: true dalam frontmatter atau --agents JSON.
Percakapan utama masih memiliki CLAUDE.md penuh Anda saat membaca hasil subagent ini, jadi sebagian besar aturan tidak perlu mencapai subagent itu sendiri. Jika aturan harus, seperti “abaikan direktori vendor/,” nyatakan kembali dalam prompt yang Anda berikan Claude saat mendelegasikan.
Anda tidak dapat mengubah subagent mana yang menerima status git. Hanya Explore dan Plan yang melewatinya.
Beberapa status percakapan utama tidak pernah mencapai subagent non-fork:
- Gaya output: subagent menjalankan prompt sistemnya sendiri, jadi gaya output Anda tidak membentuk responsnya, kecuali dalam fork.
- Memori otomatis: memori otomatis percakapan utama tidak dimuat. Untuk memberi subagent memori persisten miliknya sendiri, gunakan bidang
memory. - Ukuran jendela konteks: jendela konteks subagent diukur oleh modelnya sendiri, bukan induk. Mendelegasikan ke model dengan jendela yang lebih kecil memberikan subagent itu jendela yang lebih kecil.
Lanjutkan subagent
Setiap invokasi subagent membuat instance baru daripada melanjutkan yang sebelumnya. Untuk melanjutkan pekerjaan subagent yang ada daripada memulai dari awal, minta Claude untuk melanjutkannya. Subagent yang dilanjutkan mempertahankan riwayat percakapan lengkap mereka, termasuk semua panggilan alat sebelumnya, hasil, dan penalaran. Jika subagent menghasilkan subagent background miliknya sendiri, riwayat itu mencakup hasil yang mereka berikan saat berjalan. Subagent melanjutkan tepat di mana ia berhenti daripada memulai segar.- Ketika subagent selesai, Claude menerima ID agennya.
- Agen bawaan Explore dan Plan adalah one-shot dan tidak mengembalikan ID agen, jadi Claude tidak dapat melanjutkan mereka. Gunakan
general-purposeatau subagent khusus ketika Anda perlu melanjutkan pekerjaan. - Ketika subagent berhenti pada batas
maxTurns, Claude Code menandai output yang dikembalikan sebagai parsial. Untuk subagent yang mengembalikan ID agen, Claude Code juga mencatat dalam hasil bahwa Claude dapat mengirim pesan ke subagent untuk melanjutkan dari tempat ia berhenti.
SendMessage dengan ID agen atau nama agen sebagai bidang to untuk melanjutkannya. SendMessage tidak memerlukan tim agen untuk diaktifkan; hanya pesan protokol tim terstruktur seperti shutdown_request dan plan_approval_response yang melakukannya. Melampaui subagent dan rekan tim, dalam sesi di mana cross-session messaging diaktifkan, Claude dapat menggunakan alat yang sama untuk mengirim pesan sesi Claude Code Anda yang lain, di mesin ini atau melampaui.
Untuk melanjutkan subagent, minta Claude untuk melanjutkan pekerjaan sebelumnya:
SendMessage, subagent melanjutkan di background tanpa invokasi Agent baru. Hal yang sama berlaku untuk subagent yang Claude hentikan dengan alat TaskStop, setelah run yang dihentikan telah keluar. Run yang dilanjutkan menyimpan set alat dari tempat subagent pertama kali berjalan dan dapat terus membaca prompt cache yang dihangatkan run asli.
Subagent yang memiliki alat SendMessage dapat mengirim pesan itu juga. Dalam sesi interaktif, agen yang dilanjutkan kemudian melaporkan kembali ke subagent yang melanjutkannya, bukan ke percakapan utama Anda. Subagent itu menunggu hasil sebelum menyelesaikan pekerjaan miliknya sendiri. Ketika subagent mengirim pesan ke agen yang dilaporkannya, seperti peluncurnya sendiri, Claude Code melanjutkan agen itu tanpa mengarahkan ulang hasilnya.
Subagent yang Anda hentikan sendiri, dengan x dalam /tasks atau permintaan SDK stop_task, tidak auto-resume. Jika Claude mengirimnya pesan, pesan ditolak dan Claude diberitahu agen dibatalkan.
Sementara baris subagent itu masih dalam panel subagent, ketik ke dalam transkrip untuk melanjutkannya sendiri. Setelah itu, pesan dari Claude dapat auto-resume lagi.
Melanjutkan memulai run baru dari agen di bawah ID yang sama, jadi subagent yang sudah gagal atau selesai menunjukkan sebagai berjalan lagi dalam daftar tugas dan dalam peristiwa tugas SDK Agent. Sebelum v2.1.205, itu terus menunjukkan status gagal atau selesai sebelumnya sementara run yang dilanjutkan sedang bekerja.
Mulai dari v2.1.199, SendMessage memeriksa bahwa nama masih merujuk ke agen yang sama yang dicapai sebelumnya dalam percakapan. Jika agen yang lebih baru telah mengambil nama, seperti agen background yang di-spawn ulang yang menggunakannya kembali, Claude Code menolak pengiriman daripada mengirimkannya ke agen yang salah, dan kesalahan melaporkan agen mana yang sekarang dicapai nama sehingga Claude dapat menargetkan ulang. Untuk mencapai agen sebelumnya sementara masih berjalan, Claude mengalamatkannya dengan ID agen yang diterima saat menghasilkan agen itu. Pemeriksaan dibatasi pada percakapan saat ini dan direset pada /clear.
Mulai dari v2.1.198, subagent memperlakukan pesan dari agen yang meluncurkannya sebagai arahan tugas normal, termasuk koreksi kursus mid-task, dan bertindak atas mereka dalam pengaturan izin mereka sendiri. Dua batas masih berlaku terlepas dari siapa yang mengirim pesan: tidak ada pesan dari agen apa pun yang dihitung sebagai persetujuan Anda untuk prompt izin yang tertunda, dan tidak ada pesan agen yang dapat mengubah pengaturan izin subagent, CLAUDE.md, atau konfigurasi. Hanya sistem izin atau pesan Anda sendiri yang dapat memberikan persetujuan.
Anda juga dapat meminta Claude untuk ID agen jika Anda ingin mereferensikannya secara eksplisit, atau temukan ID dalam file transkrip di ~/.claude/projects/{project}/{sessionId}/subagents/. Setiap transkrip disimpan sebagai agent-{agentId}.jsonl.
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: Claude Code menghapus transkrip subagent setelah periode retensi
cleanupPeriodDays, 30 hari secara default, mengikuti aturan sweep retensi.
Auto-compaction
Subagent mendukung pemadatan otomatis menggunakan logika yang sama dengan percakapan utama. Pemadatan dipicu di bawah kondisi yang sama, danCLAUDE_AUTOCOMPACT_PCT_OVERRIDE berlaku untuk subagent juga. Lihat environment variables untuk kapan override berlaku.
Peristiwa pemadatan dicatat dalam file transkrip subagent:
preTokens menunjukkan berapa banyak token yang digunakan sebelum pemadatan terjadi.
Fork percakapan saat ini
Jalankan subagent yang di-fork dengan
/subtask, yang memerlukan Claude Code v2.1.212 atau lebih baru. Ketika tampilan agent dimatikan, /subtask tidak tersedia dan /fork memulai subagent yang di-fork sebagai gantinya; jika tidak /fork menyalin seluruh sesi ke sesi latar belakang baru.fork melalui alat Agent. Anda mengontrol apakah itu dapat dengan mode fork, yang diaktifkan secara default dalam sesi interaktif.
Anda dapat memulai fork sendiri dengan /subtask diikuti oleh tugas, terlepas dari apakah mode fork diaktifkan atau tidak. Pada v2.1.161 hingga v2.1.211 perintahnya adalah /fork. Claude Code memberi nama fork dari kata-kata pertama tugas. Contoh berikut mem-fork percakapan untuk draft kasus uji sementara Anda melanjutkan dengan implementasi dalam sesi utama:
Amati dan arahkan fork yang sedang berjalan
Fork yang sedang berjalan muncul di panel di bawah input prompt, dengan satu baris untuk sesi utama dan satu untuk setiap fork. Ketika fork selesai dengan sukses, Claude Code menghapus barisnya. Claude Code menyimpan baris fork yang gagal atau yang Anda hentikan selama 30 detik, sama seperti untuk subagent latar belakang lainnya. Sebelum v2.1.232, Claude Code juga menyimpan baris fork yang selesai selama 30 detik. Gunakan kunci ini untuk berinteraksi dengan panel:
Dengan transkrip fork atau subagent terbuka, pesan tindak lanjut dan skills pergi ke agen tersebut, tetapi perintah bawaan masih berjalan dalam percakapan utama Anda. Mulai dari v2.1.199, mengetik
/model atau /fast dalam tampilan itu menampilkan pemberitahuan bahwa itu mengubah model percakapan utama atau mode cepat, bukan agen yang dilihat, daripada menjalankannya secara diam-diam.
Bagaimana fork berbeda dari subagent lainnya
Fork mewarisi segalanya yang dimiliki sesi utama pada saat spawn. Subagent lainnya dimulai segar dari definisinya.
Karena prompt sistem fork dan definisi alat identik dengan induk, permintaan pertamanya menggunakan kembali prompt cache induk. Ini membuat forking lebih murah daripada menelurkan subagent segar untuk tugas yang memerlukan konteks yang sama.
Ketika Claude menelurkan fork melalui alat Agent, Claude dapat melewatkan
isolation: "worktree" sehingga edit file fork ditulis ke git worktree terpisah daripada checkout Anda. Fork tidak dapat menelurkan fork lebih lanjut.
Aktifkan atau nonaktifkan mode fork
Claude Code mengaktifkan mode fork secara default dalam sesi interaktif dan membiarkannya dimatikan secara default dalam mode non-interaktif dengan-p dan dalam Agent SDK. Default interaktif memerlukan Claude Code v2.1.232 atau lebih baru. Pada versi sebelumnya, atur CLAUDE_CODE_FORK_SUBAGENT ke 1 untuk mengaktifkan mode fork.
Anda dapat mengetahui mode fork diaktifkan dari cara Claude Code menangani alat Agent:
- Claude dapat menelurkan fork dengan meminta tipe subagent
fork. Ketika Claude tidak meminta tipe, Claude mendapatkan subagent general-purpose, jika sesi masih memiliki tipe tersebut. Subagent yang di-spawn dari definisi, seperti Explore, bekerja seperti biasanya. - Claude Code menjalankan subagent yang Claude spawn di latar belakang, fork dan subagent non-fork sama-sama, terlepas dari kasus yang tetap di latar depan. Claude Code juga menghapus parameter
run_in_backgroundalat Agent, sehingga Claude tidak dapat meminta latar depan.
CLAUDE_CODE_FORK_SUBAGENT untuk mengganti default:
1mengaktifkan mode fork dalam mode non-interaktif dan Agent SDK juga0menonaktifkan mode fork dalam setiap jenis sesi
fork dengan aturan Agent(fork). Claude Code masih menjalankan subagent yang Claude spawn di latar belakang, terlepas dari kasus yang sama yang tetap di latar depan.
Contoh subagent
Contoh-contoh ini mendemonstrasikan pola efektif untuk membangun subagent. Gunakan mereka sebagai titik awal, atau hasilkan versi yang disesuaikan dengan Claude.Peninjau kode
Subagent hanya-baca yang meninjau kode tanpa memodifikasinya. Contoh ini menunjukkan cara merancang subagent yang terfokus dengan akses alat terbatas yang mengecualikan Edit dan Write, dan prompt terperinci yang menentukan dengan tepat apa yang harus dicari dan cara memformat output.Debugger
Subagent yang dapat menganalisis dan memperbaiki masalah. Tidak seperti peninjau kode, yang ini mencakup Edit karena memperbaiki bug memerlukan memodifikasi kode. Prompt menyediakan alur kerja yang jelas dari diagnosis ke verifikasi.Data scientist
Subagent khusus domain untuk pekerjaan analisis data. Contoh ini menunjukkan cara membuat subagent untuk alur kerja khusus di luar tugas pengkodean khas. Ini secara eksplisit menetapkanmodel: sonnet untuk analisis yang lebih mampu.
Validator kueri database
Subagent yang memungkinkan akses Bash tetapi memvalidasi perintah untuk mengizinkan hanya kueri SQL hanya-baca. Contoh ini menunjukkan cara menggunakan hooksPreToolUse untuk validasi bersyarat ketika Anda memerlukan kontrol lebih halus daripada bidang tools.
command dalam konfigurasi hook Anda:
shell: powershell ke entri hook. Lihat menjalankan hooks dalam PowerShell.
Hook menerima JSON melalui stdin dengan perintah Bash dalam tool_input.command. Kode keluar 2 memblokir operasi dan mengirimkan pesan kesalahan kembali ke Claude. Lihat Hooks untuk detail tentang kode keluar dan Hook input untuk skema input lengkap.
Prompt sistem memberitahu subagent untuk menolak permintaan penulisan, jadi hook adalah backstop: jika subagent mencoba penulisan bagaimanapun, Claude Code memblokir perintah dan subagent melihat pesan Blocked: Write operations not allowed. Use SELECT queries only..
Langkah berikutnya
Sekarang setelah Anda memahami subagent, jelajahi fitur terkait ini:- Distribusikan subagent dengan plugins untuk berbagi subagent di seluruh tim atau proyek
- Jalankan Claude Code secara terprogram dengan Agent SDK untuk CI/CD dan otomasi
- Gunakan MCP servers untuk memberikan subagent akses ke alat dan data eksternal