SpyBara
Go Premium

sub-agents.md 2026-09-28 22:59 UTC to 2026-09-29 08:02 UTC

This page contains 183 additions and 181 deletions.

2026
Fri 18 23:58 Tue 22 23:59 Fri 25 23:58 Mon 28 22:59 Tue 29 10:02

Buat subagen kustom

Buat dan gunakan subagen AI khusus di Claude Code untuk alur kerja spesifik tugas dan manajemen konteks yang lebih baik.

Subagen adalah asisten AI khusus yang menangani jenis tugas tertentu. Gunakan satu ketika tugas sampingan akan membanjiri percakapan utama Anda dengan hasil pencarian, log, atau konten file yang tidak akan Anda referensikan lagi: subagen melakukan pekerjaan itu dalam konteksnya sendiri dan mengembalikan hanya ringkasannya. Tentukan subagen kustom ketika Anda terus-menerus menjalankan jenis pekerja yang sama dengan instruksi yang sama.

Setiap subagen berjalan dalam jendela konteksnya sendiri dengan prompt sistem kustom, akses alat tertentu, dan izin independen. Subagen juga mengirimkan permintaannya sendiri, yang dihitung terhadap batas penggunaan yang sama dengan percakapan utama Anda. Ketika Claude menemukan tugas yang cocok dengan deskripsi subagen, Claude mendelegasikan ke subagen tersebut, yang bekerja secara independen dan mengembalikan hasil. Untuk melihat penghematan konteks dalam praktik, visualisasi jendela konteks menjelaskan sesi di mana subagen menangani penelitian dalam jendela terpisahnya sendiri.

Subagen membantu Anda:

  • 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

Claude menggunakan deskripsi setiap subagen untuk memutuskan kapan mendelegasikan tugas. Ketika Anda membuat subagen, tulis deskripsi yang jelas sehingga Claude tahu kapan menggunakannya.

Deskripsi tersebut menggunakan konteks, jadi simpan deskripsi tetap singkat. Ketika deskripsi gabungan subagen Anda, kecuali yang bawaan, melebihi 15.000 token, Claude Code menampilkan peringatan saat startup dengan jumlah token total. Potong bidang 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 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 bidang omitClaudeMd untuk melewati file CLAUDE.md pengguna, proyek, dan lokal. Untuk rincian lengkap tentang apa yang mencapai subagent, lihat apa yang dimuat saat startup.

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_MODEL dan memaksanya ke setiap subagent
  • Tools: alat hanya-baca; Write dan Edit ditolak
  • Purpose: penemuan file, pencarian kode, eksplorasi basis kode

Mulai dari v2.1.198, Explore mewarisi model percakapan utama alih-alih selalu berjalan pada Haiku. Di Claude API, model yang diwarisi dibatasi pada Opus: percakapan utama pada tingkat yang lebih tinggi menjalankan Explore pada Opus, dan percakapan utama pada Sonnet atau Haiku menjalankan Explore pada model yang sama. Di penyedia lain apa pun, seperti Amazon Bedrock, Google Cloud's Agent Platform, Microsoft Foundry, atau Claude Platform on AWS, Explore mewarisi model percakapan utama secara langsung.

User atau project subagent bernama 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.

Subagent bawaan terdaftar secara default dalam sesi interaktif. Untuk membatasi mereka:

Panggilan alat Agent yang menghilangkan 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:

Create a personal code-improver subagent in ~/.claude/agents/ that scans
files and suggests improvements for readability, performance, and best
practices. It should explain each issue, show the current code, and
provide an improved version. Make it read-only and have it use Sonnet.

Claude menulis file dengan name, description, daftar tools, model, dan system prompt.

2

Tinjau file

Buka ~/.claude/agents/code-improver.md dan konfirmasi frontmatter sesuai dengan yang Anda minta. Hasilnya terlihat seperti ini:

---
name: code-improver
description: Scans files and suggests improvements for readability, performance, and best practices. Use after writing or modifying code.
tools: Read, Grep, Glob
model: sonnet
---

You are a code improvement specialist. For each issue you find, explain
the problem, show the current code, and provide an improved version.

Karena file berada di ~/.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:

Use the code-improver agent to suggest improvements in this project

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.

Anda sekarang memiliki subagent yang dapat Anda gunakan di proyek apa pun di mesin Anda untuk menganalisis basis kode dan menyarankan perbaikan.

Anda juga dapat menulis file subagent secara manual, mendefinisikannya melalui flag CLI, atau mendistribusikannya melalui plugins. Bagian berikut mencakup semua opsi konfigurasi.

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.

Lokasi Cakupan Prioritas Cara membuat
Managed settings Seluruh organisasi 1 (tertinggi) Digunakan melalui managed settings
--agents CLI flag Sesi saat ini 2 Lewatkan JSON saat meluncurkan Claude Code
.claude/agents/ Proyek saat ini 3 Tanya Claude, atau buat file secara manual
~/.claude/agents/ Semua proyek Anda 4 Tanya Claude, atau buat file secara manual
Direktori agents/ plugin Tempat plugin diaktifkan 5 (terendah) Diinstal dengan plugins

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:

claude --agents '{
"code-reviewer": {
"description": "Expert code reviewer. Use proactively after code changes.",
"prompt": "You are a senior code reviewer. Focus on code quality, security, and best practices.",
"tools": ["Read", "Grep", "Glob", "Bash"],
"model": "sonnet"
},
"debugger": {
"description": "Debugging specialist for errors and test failures.",
"prompt": "You are an expert debugger. Analyze errors, identify root causes, and provide fixes."
}
}'

Dalam non-interactive mode, --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. prompt mungkin kosong. Jika Anda memilih agent dengan prompt kosong dan tidak ada field memory sebagai agent sesi dengan --agent, system prompt sesi dibiarkan tidak berubah. prompt kosong 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, dan isolation.
  • Field yang diabaikan: color dan experimental tidak diterima di sini dan diabaikan daripada ditolak.

Untuk apa yang Claude Code lakukan dengan nilai yang tidak dapat dimuat, dan flag serta variabel lingkungan yang melewati pemeriksaan itu, lihat 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.

Definisi subagent dari salah satu cakupan ini juga tersedia untuk agent teams: saat menspawn teammate, Anda dapat mereferensikan tipe subagent, dan Claude Code menerapkan bagian dari definisi itu ke teammate. Lihat agent teams untuk bagian mana yang berlaku di setiap mode tampilan.

Tulis file subagent

File subagent menggunakan YAML frontmatter untuk konfigurasi, diikuti oleh system prompt dalam Markdown:

---
name: code-reviewer
description: Reviews code for quality and best practices
tools: Read, Glob, Grep
model: sonnet
---

You are a code reviewer. When invoked, analyze the code and provide
specific, actionable feedback on quality, security, and best practices.

Frontmatter mendefinisikan metadata dan konfigurasi subagent. Badan menjadi system prompt yang memandu perilaku subagent. Subagent menerima hanya system prompt ini ditambah detail lingkungan dasar seperti direktori kerja, bukan system prompt Claude Code.

Dalam non-interactive mode, lewatkan --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.

Vektor pengalihan dan aturan bentuk tercantum di bawah How Claude Code enforces isolation. Perintah PowerShell hanya mendapatkan pemeriksaan direktori kerja.

Perintah Monitor melalui pemeriksaan direktori kerja dan konten perintah yang sama seperti perintah Bash.

Ketika percakapan utama itu sendiri berjalan terisolasi dalam worktree, Claude Code menerapkan pemeriksaan yang sama ke sesi dan ke setiap subagent yang dihasilkannya, termasuk subagent tanpa 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.

Field Diperlukan Deskripsi
name Ya Pengenal unik, seperti code-reviewer atau reviewer-v2. Hooks menerima nilai ini sebagai agent_type. Nama file tidak harus cocok. Nama tidak dapat berisi :, yang dicadangkan untuk plugin-scoped identifiers seperti my-plugin:reviewer. Claude Code tidak memuat file yang nama-nya berisi satu dan mencatat kesalahan ke debug log. Sebelum v2.1.218, nama seperti itu diterima
description Ya Kapan Claude harus mendelegasikan ke subagent ini
tools Tidak Tools yang dapat digunakan subagent, sebagai string yang dipisahkan koma seperti Read, Grep, Bash atau daftar YAML. Mewarisi setiap tool yang tersedia untuk subagent jika dihilangkan. Jika tidak ada entri dalam daftar yang diselesaikan ke tool, subagent biasanya gagal diluncurkan dengan kesalahan yang menamai entri. Untuk memuat Skills ke dalam konteks, gunakan field skills daripada mencantumkan Skill di sini
disallowedTools Tidak Tools untuk ditolak, dihapus dari daftar yang diwarisi atau ditentukan. Format yang sama seperti tools. Entri dengan specifier, seperti Bash(git push *), masih menghapus seluruh tool
model Tidak Model untuk digunakan: sonnet, opus, haiku, fable, ID model lengkap seperti claude-opus-5-5, atau inherit. Ketika Anda menghilangkannya, Claude Code memilih model dalam subagent model order
permissionMode Tidak Permission mode: default, acceptEdits, auto, dontAsk, bypassPermissions, plan, atau manual sebagai alias untuk default. Alias manual memerlukan Claude Code v2.1.200 atau lebih baru. Diabaikan untuk plugin subagents
maxTurns Tidak Jumlah maksimum putaran agentic sebelum subagent berhenti. Ketika subagent mencapai batas, Claude Code mengembalikan output-nya ditandai sebagai parsial, dan Claude dapat melanjutkannya untuk terus. Penandaan parsial memerlukan Claude Code v2.1.246 atau lebih baru
skills Tidak Skills untuk dimuat sebelumnya ke dalam konteks subagent saat startup. Konten skill lengkap disuntikkan, bukan hanya deskripsi. Subagent masih dapat memanggil skill proyek, pengguna, dan plugin yang tidak terdaftar melalui tool Skill
mcpServers Tidak MCP servers yang tersedia untuk subagent ini. Setiap entri adalah nama server yang mereferensikan server yang sudah dikonfigurasi (misalnya, "slack") atau definisi inline dengan nama server sebagai kunci dan MCP server config lengkap sebagai nilai. Diabaikan untuk plugin subagents
hooks Tidak Lifecycle hooks yang cakupannya ke subagent ini. Diabaikan untuk plugin subagents
memory Tidak Persistent memory scope: user, project, atau local. Memungkinkan pembelajaran lintas sesi
background Tidak Atur ke true untuk menjaga subagent ini di latar belakang bahkan ketika Claude meminta untuk menjalankannya di latar depan. Tempat fork mode aktif, Claude Code sudah menjalankan subagent yang Claude hasilkan di latar belakang
omitClaudeMd Tidak Atur ke true untuk meluncurkan subagent ini tanpa file CLAUDE.md pengguna, proyek, dan lokal; managed policy files masih dimuat, kecuali untuk managed subagents. Gunakan untuk subagent yang mengambil semua yang mereka butuhkan dari delegation prompt. Diabaikan ketika agent berjalan sebagai agent sesi utama melalui --agent atau setting agent. Memerlukan Claude Code v2.1.271 atau lebih baru
effort Tidak Tingkat usaha ketika subagent ini aktif. Menimpa tingkat usaha sesi. Default: mewarisi dari sesi. Opsi: low, medium, high, xhigh, max; level yang tersedia tergantung pada model
isolation Tidak Atur ke worktree untuk menjalankan subagent dalam git worktree sementara, memberikannya salinan terisolasi dari repositori yang bercabang secara default dari default branch Anda daripada HEAD sesi induk. Worktree secara otomatis dibersihkan jika subagent tidak membuat perubahan
color Tidak Warna tampilan untuk subagent dalam daftar tugas dan transkrip. Menerima red, blue, green, yellow, purple, orange, pink, atau cyan
initialPrompt Tidak Auto-diajukan sebagai putaran pengguna pertama ketika agent ini berjalan sebagai agent sesi utama (melalui --agent atau setting agent). Commands dan skills diproses. Ditambahkan ke prompt apa pun yang disediakan pengguna. Diabaikan untuk plugin subagents
experimental Tidak Peta opsi eksperimental. Atur kunci cacheTtl-nya ke 5m atau 1h untuk memilih prompt cache lifetime untuk permintaan subagent ini, di tempat frontmatter dalam cache lifetime precedence. Claude Code mengabaikan nilai lain apa pun, mengabaikan 1h saat langganan Claude Anda menggunakan kredit penggunaan, dan membaca field hanya dari file subagent. Memerlukan Claude Code v2.1.248 atau lebih baru

Tulis cacheTtl di dalam peta experimental, bukan di tingkat atas frontmatter.

---
name: repo-auditor
description: Audits a large repository and reports what it finds
experimental:
  cacheTtl: 1h
---

File subagent yang Claude Code lewati

Claude Code melewati file dalam direktori agents 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.
  • name yang dimulai dengan - atau berisi :: Claude Code melewati file dan menulis kesalahan ke debug log. Lihat baris name dalam tabel di atas.
  • name tetapi tidak ada description: 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.

Untuk melihat debug log, jalankan Claude Code dengan --debug.

Plugin subagent yang frontmatter-nya tidak memiliki name atau tidak diuraikan masih dimuat, di bawah nama file-nya.

Periksa direktori `agents` sebelum sesi

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

Field model mengontrol model mana yang digunakan subagent:

  • Model alias: gunakan salah satu alias yang tersedia: sonnet, opus, haiku, atau fable
  • ID model lengkap: gunakan ID model lengkap seperti claude-opus-5-5 atau claude-sonnet-5. Menerima nilai yang sama seperti flag --model
  • inherit: gunakan model yang sama seperti percakapan utama

Ketika Claude memanggil subagent, ia juga dapat melewatkan parameter model untuk invokasi spesifik itu. Claude Code menyelesaikan model subagent dalam urutan ini:

  1. Parameter model per-invokasi
  2. Frontmatter model definisi subagent, di mana inherit memilih model percakapan utama
  3. Variabel lingkungan CLAUDE_CODE_SUBAGENT_MODEL, ketika Anda mengaturnya ke alias model atau ID model
  4. Model percakapan utama

Dalam dua kasus, alias keluarga seperti 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 mengatur ANTHROPIC_DEFAULT_OPUS_MODEL, karena opus kemudian diselesaikan ke model yang Anda atur.

Alias dalam 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.

Dalam sesi interaktif, Claude Code menunjukkan peringatan yang menamai model yang diminta dan model yang dijalankan subagent, untuk substitusi apa pun.

Untuk memeriksa model mana yang dijalankan subagent, jalankan /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.

Misalnya, untuk menjalankan setiap subagent pada Haiku, atur kedua variabel dalam blok env dari settings file:

{
  "env": {
    "CLAUDE_CODE_SUBAGENT_MODEL": "haiku",
    "CLAUDE_CODE_SUBAGENT_MODEL_FORCE": "1"
  }
}

Untuk memeriksa bahwa pengaturan berlaku, jalankan /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:

Ketika Anda hanya mengatur 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 field tools:

  • Agent, ketika subagent berada di depth limit; dalam fork tool tetap terdaftar tetapi mengembalikan kesalahan sebagai gantinya dari spawning
  • AskUserQuestion
  • EndConversation, yang hanya dapat mengakhiri percakapan utama; lihat EndConversation tool behavior
  • EnterPlanMode
  • ExitPlanMode, kecuali permissionMode subagent adalah plan
  • ScheduleWakeup
  • WaitForMcpServers
  • Workflow

Filter kedua berlaku untuk subagent yang berjalan di latar belakang. Terlepas dari 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:

---
name: safe-researcher
description: Research agent with restricted capabilities
tools: Read, Grep, Glob, Bash
---

Contoh ini menggunakan disallowedTools untuk mewarisi pool tool subagent kecuali Write dan Edit. Subagent menyimpan Bash, tool MCP, dan sisa pool-nya:

---
name: no-writes
description: Inherits the available tools except file writes
disallowedTools: Write, Edit
---

Jika keduanya diatur, 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:

---
name: local-only
description: Inherits every tool except those from the github MCP server
disallowedTools: mcp__github
---

Entri 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 dengan claude --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.

---
name: coordinator
description: Coordinates work across specialized agents
tools: Agent(worker, researcher), Read, Bash
---

Ini adalah allowlist: hanya subagent 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:

tools: Agent, Read, Bash

Jika Anda menghilangkan 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 field mcpServers 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.

Setiap entri dalam daftar adalah definisi server inline atau string yang mereferensikan MCP server yang sudah dikonfigurasi dalam sesi Anda:

---
name: browser-tester
description: Tests features in a real browser using Playwright
mcpServers:
  # Inline definition: scoped to this subagent only
  - playwright:
      type: stdio
      command: npx
      args: ["-y", "@playwright/mcp@latest"]
  # Reference by name: reuses an already-configured server
  - github
---

Use the Playwright tools to navigate, screenshot, and interact with pages.

Definisi inline menggunakan skema yang sama seperti entri server .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 -p atau 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>"].hasTrustDialogAccepted yang tepat untuk ~/.claude.json ke 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

Claude Code memuat dua jenis server tanpa memeriksa kepercayaan untuk folder tempat file agent berasal:

  • Nama yang mereferensikan server yang sudah Anda konfigurasi
  • Server inline dalam file agent dari ~/.claude/agents/, dalam satu yang Anda lewatkan dengan --agents atau opsi SDK agents, atau dalam satu yang managed settings sediakan

Pembatasan MCP yang berlaku untuk sesi utama juga mencakup server yang dideklarasikan dalam frontmatter subagent:

Ketika salah satu dari ini memblokir server, Claude Code melewatinya dan menunjukkan peringatan yang menamai server yang diblokir.

Pembatasan managed-settings berlaku untuk setiap subagent terlepas dari cara pendefinisiannya. --strict-mcp-config tidak memfilter server yang Anda lewatkan inline melalui --agents atau opsi SDK agents, karena itu adalah input pengguna eksplisit.

Mode izin

Atur permissionMode 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 mengabaikan permissionMode yang 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, atau plan, subagent berjalan dalam mode izin yang Anda atur, kecuali bypassPermissions. Subagent yang mendeklarasikan bypassPermissions menyimpan mode percakapan utama sebagai gantinya. Pengecualian bypassPermissions memerlukan Claude Code v2.1.267 atau lebih baru.

permissionMode menerima nilai ini, dan manual sebagai alias untuk default:

Mode Perilaku
default Mode manual: meminta izin
acceptEdits Auto-terima edit file dan perintah filesystem umum untuk path dalam direktori kerja atau additionalDirectories
auto Auto mode: classifier latar belakang meninjau perintah dan penulisan direktori terlindungi
dontAsk Auto-tolak prompt izin. Tool yang secara eksplisit diizinkan masih berfungsi; AskUserQuestion, tool MCP yang ditandai requiresUserInteraction, dan tool connector organisasi Anda atur ke ask dalam sesi di mana pengaturan itu mencapai Claude Code ditolak bahkan jika Anda telah mengizinkannya
bypassPermissions Lewati prompt izin. Subagent berjalan dalam mode ini hanya ketika percakapan utama melakukannya
plan Plan mode (eksplorasi read-only)

Muat skills sebelumnya ke dalam subagent

Gunakan field skills untuk menyuntikkan konten skill ke dalam konteks subagent saat startup. Ini memberikan subagent pengetahuan domain tanpa memerlukan untuk menemukan dan memuat skill selama eksekusi.

---
name: api-developer
description: Implement API endpoints following team conventions
skills:
  - api-conventions
  - error-handling-patterns
---

Implement API endpoints. Follow the conventions and patterns from the preloaded skills.

Konten lengkap dari setiap skill yang tercantum disuntikkan ke dalam konteks subagent saat startup. Field ini mengontrol skill mana yang dimuat sebelumnya, bukan skill mana yang dapat diakses subagent: tanpanya, subagent masih dapat menemukan dan memanggil skill proyek, pengguna, dan plugin melalui tool Skill selama eksekusi. Untuk mencegah subagent dari memanggil skill sepenuhnya, hilangkan 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.

Aktifkan persistent memory

Field memory 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.

---
name: code-reviewer
description: Reviews code for quality and best practices
memory: user
---

You are a code reviewer. As you review code, update your agent memory with
patterns, conventions, and recurring issues you discover.

Pilih cakupan berdasarkan seberapa luas memory harus berlaku:

Cakupan Lokasi Gunakan ketika
user ~/.claude/agent-memory/<name-of-agent>/ subagent harus mengingat pembelajaran di seluruh semua proyek
project .claude/agent-memory/<name-of-agent>/ pengetahuan subagent spesifik proyek dan dapat dibagikan melalui version control
local .claude/agent-memory-local/<name-of-agent>/ pengetahuan subagent spesifik proyek tetapi tidak boleh diperiksa ke dalam version control

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.md dalam direktori memory, mana pun yang lebih dulu, dengan instruksi untuk mengkurasi MEMORY.md jika melebihi batas itu.
  • Tool Read, Write, dan Edit secara otomatis diaktifkan sehingga subagent dapat mengelola file memory-nya.
Tips persistent memory
  • project adalah 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:

    Update your agent memory as you discover codepaths, patterns, library
    locations, and key architectural decisions. This builds up institutional
    knowledge across conversations. Write concise notes about what you found
    and where.
    

Aturan bersyarat dengan hooks

Untuk kontrol yang lebih dinamis atas penggunaan tool, gunakan hook PreToolUse 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:

---
name: db-reader
description: Execute read-only database queries
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---

Claude Code melewatkan input hook sebagai JSON melalui stdin ke perintah hook. Skrip validasi membaca JSON ini, mengekstrak perintah Bash, dan keluar dengan kode 2 untuk memblokir operasi penulisan:

#!/bin/bash
# ./scripts/validate-readonly-query.sh

INPUT=$(cat)
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

# Block SQL write operations (case-insensitive)
if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE)\b' > /dev/null; then
  echo "Blocked: Only SELECT queries are allowed" >&2
  exit 2
fi

exit 0

Di macOS dan Linux, buat skrip dapat dieksekusi, atau hook gagal sebagai gantinya dari memblokir apa pun:

chmod +x ./scripts/validate-readonly-query.sh

Untuk menguji aturan, minta subagent untuk menjalankan pernyataan 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 array deny dalam settings Anda. Gunakan format Agent(subagent-name) di mana subagent-name cocok dengan field name subagent.

{
  "permissions": {
    "deny": ["Agent(Explore)", "Agent(my-custom-agent)"]
  }
}

Ini berfungsi untuk subagent bawaan dan kustom. Anda juga dapat menggunakan flag CLI --disallowedTools:

claude --disallowedTools "Agent(Explore)"

Lihat Permissions documentation untuk detail lebih lanjut tentang aturan izin.

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 seperti PreToolUse dan PostToolUse menyala untuk panggilan tool subagent dengan cara yang sama seperti dalam percakapan utama, dan SubagentStart dan SubagentStop menyala ketika subagent dimulai atau selesai

Hook dari file pengaturan, managed policy settings, dan plugins semuanya berlaku di dalam subagent, jadi hook 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.

Untuk membiarkan hook frontmatter subagent tingkat proyek berjalan, terima workspace trust dialog untuk folder yang berisi file agent. Hook dari subagent tingkat pengguna dalam ~/.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:

Peristiwa Input matcher Kapan menyala
PreToolUse Nama tool Sebelum subagent menggunakan tool
PostToolUse Nama tool Setelah subagent menggunakan tool
Stop (tidak ada) Ketika subagent selesai (dikonversi ke SubagentStop saat runtime)

Contoh ini memvalidasi perintah Bash dengan hook PreToolUse dan menjalankan linter setelah edit file dengan PostToolUse:

---
name: code-reviewer
description: Review code changes with automatic linting
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-command.sh $TOOL_INPUT"
  PostToolUse:
    - matcher: "Edit|Write"
      hooks:
        - type: command
          command: "./scripts/run-linter.sh"
---

Ketika agent dipanggil sebagai subagent, hook Stop dalam frontmatter secara otomatis dikonversi ke peristiwa SubagentStop.

Hook tingkat proyek untuk peristiwa subagent

Konfigurasi hooks dalam settings.json yang merespons peristiwa lifecycle subagent dalam sesi utama.

Peristiwa Input matcher Kapan menyala
SubagentStart Nama tipe agent Ketika subagent mulai eksekusi
SubagentStop Nama tipe agent Ketika subagent selesai

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:

{
  "hooks": {
    "SubagentStart": [
      {
        "matcher": "db-agent",
        "hooks": [
          { "type": "command", "command": "./scripts/setup-db-connection.sh" }
        ]
      }
    ],
    "SubagentStop": [
      {
        "hooks": [
          { "type": "command", "command": "./scripts/cleanup-db-connection.sh" }
        ]
      }
    ]
  }
}

Matcher dengan tanda hubung seperti db-agent cocok persis pada Claude Code v2.1.195 atau lebih baru. Pada versi sebelumnya dievaluasi sebagai unanchored regular expression dan juga menyala untuk tipe agent apa pun yang berisinya, seperti prod-db-agent; jangkarnya sebagai ^db-agent$ pada versi itu.

Lihat Hooks untuk format konfigurasi hook lengkap.

Bekerja dengan subagent

Pahami delegasi otomatis

Claude secara otomatis mendelegasikan tugas berdasarkan deskripsi tugas dalam permintaan Anda, bidang description 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 menggunakan prompt sistem subagent, pembatasan alat, dan model melalui flag --agent atau pengaturan agent

Untuk bahasa alami, tidak ada sintaks khusus. Sebutkan subagent dan Claude biasanya mendelegasikan:

Use the test-runner subagent to fix failing tests
Have the code-reviewer subagent look at my recent changes

@-mention subagent. Ketik @ dan pilih subagent dari typeahead, dengan cara yang sama Anda @-mention file. Ini memastikan subagent tertentu berjalan daripada meninggalkan pilihan kepada Claude:

@"code-reviewer (agent)" look at the auth changes

Pesan lengkap Anda masih pergi ke Claude, yang menulis prompt tugas subagent berdasarkan apa yang Anda minta. @-mention mengontrol subagent mana yang Claude panggil, bukan prompt apa yang diterima.

Subagent yang disediakan oleh plugin yang diaktifkan muncul di typeahead dengan nama yang dibatasi, seperti 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 prompt sistem subagent, pembatasan alat, dan model:

claude --agent code-reviewer

Kecuali prompt agen kosong, prompt sistem subagent menggantikan prompt sistem Claude Code default sepenuhnya, dengan cara yang sama --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:

claude --agent security-reviewer

Jika beberapa plugin menyediakan agen dengan nama yang sama, lewatkan nama yang dibatasi untuk membedakan:

claude --agent my-plugin:security-reviewer

Jika plugin menempatkan agen dalam subfolder dari direktori 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:

{
  "agent": "code-reviewer"
}

Flag CLI menimpa pengaturan jika keduanya ada.

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.

Untuk setiap subagent yang Claude hasilkan dengan alat Agent, Claude Code memilih foreground atau background dari kasus pertama yang berlaku:

  • 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 menetapkan run_in_background: true.
  • Jika Anda menetapkan CLAUDE_CODE_DISABLE_BACKGROUND_TASKS ke 1, 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 -p dan dalam Agent SDK kecuali Anda mengaktifkannya. Untuk menjaga subagent tertentu di background bahkan ketika Claude menginginkan hasil, atur bidang frontmatter background ke true.

Untuk skill dengan 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

Claude Code menghapus baris subagent background dari panel subagent di bawah input prompt dengan salah satu dari dua cara, tergantung bagaimana subagent berakhir:

  • Ketika subagent selesai dengan sukses, Claude Code menghapus barisnya segera dan, kecuali dalam mode pembaca layar, menampilkan /tasks to see subagents di footer selama 30 detik. Selama 30 detik itu, jalankan /tasks dan tekan Enter pada 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.

Subagent background yang selesai tetap terdaftar dalam /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 parameter name 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.

Ketika Anda mengonfigurasi rantai model fallback dan subagent mengalami kegagalan yang dicakup rantai, seperti model-nya tidak tersedia, Claude Code beralih subagent ke model pertama dalam rantai yang menerima permintaan. Subagent terus bekerja daripada berakhir pada kesalahan.

Setelah kesalahan API yang mendasar hilang, minta Claude untuk mencoba ulang tugas atau lanjutkan subagent.

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 dengan Human: atau Assistant:, 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 seperti bypassPermissions atau --dangerously-skip-permissions. Penyebutan pengaturan izin mendapatkan baris penanda, tetapi teks itu sendiri tetap seperti yang ditulis.

Pemindaian tidak menilai apakah konten berbahaya, dan itu tidak mengubah apa yang dapat dilakukan instruksi dalam laporan: panggilan alat yang dilaporkan mengarahkan Claude untuk membuat masih melalui pemeriksaan izin sesi dan sandboxing. Ini bukan pengganti untuk membatasi apa yang dapat dijangkau subagent.

Laporan yang kembali ke Claude sebagai hasil subagent juga tiba di bawah header yang menandainya sebagai output subagent. Header menyatakan bahwa instruksi atau klaim persetujuan di dalam laporan adalah kata-kata subagent dan tidak membawa otoritas dari Anda.

Laporan subagent background tiba di dalam notifikasi penyelesaian, yang ditandai sebagai peristiwa otomatis daripada pesan dari Anda.

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.

Use a subagent to run the test suite and report only the failing tests with their error messages

Jalankan penelitian paralel

Untuk investigasi independen, hasilkan beberapa subagent untuk bekerja secara bersamaan:

Research the authentication, database, and API modules in parallel using separate subagents

Setiap subagent mengeksplorasi areanya secara independen, kemudian Claude mensintesis temuan. Ini berfungsi terbaik ketika jalur penelitian tidak saling bergantung.

Untuk pekerjaan yang perlu terus berjalan secara paralel atau tidak akan muat dalam satu jendela konteks, jalankan dalam sesi terpisah dan biarkan Claude meneruskan temuan di antara mereka.

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.

Use the code-reviewer subagent to find performance issues, then use the optimizer subagent to fix them

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

Gunakan subagent ketika:

  • 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

Pertimbangkan Skills sebagai gantinya ketika Anda menginginkan prompt atau alur kerja yang dapat digunakan kembali yang berjalan dalam konteks percakapan utama daripada konteks subagent yang terisolasi.

Untuk pertanyaan tentang sesuatu yang sudah ada dalam percakapan Anda, gunakan /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 alat Agent 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:

{
  "env": {
    "CLAUDE_CODE_MAX_SUBAGENT_SPAWN_DEPTH": "2"
  }
}

Dengan nilai ini, subagent Anda dapat mendelegasikan ke lapisan kedua mereka sendiri, dan lapisan kedua itu tidak dapat mendelegasikan lebih lanjut. Atur 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.

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 dengan Concurrent 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 /subtask menempati 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.

Agen yang fitur lain jalankan, seperti agen workflow dan anggota tim agen, mengikuti batas mereka sendiri sebagai gantinya.

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 file AGENTS.md apa pun yang dimuat sebagai instruksi proyek. Agen Explore dan Plan bawaan melewati ini. Subagent yang definisinya menetapkan omitClaudeMd hanya 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 includeGitInstructions adalah false. Explore dan Plan melewatinya terlepas.
  • Skills yang dimuat sebelumnya: konten lengkap dari skill apa pun yang dinamai dalam bidang skills agen. Agen bawaan tidak memuat skills sebelumnya.
  • Daftar saudara: pengingat sistem yang mencantumkan main dan setiap agen bernama lainnya dalam sesi, masing-masing nilai to yang valid untuk SendMessage. Memerlukan Claude Code v2.1.206 atau lebih baru. Daftar muncul hanya ketika alat subagent mencakup SendMessage dan 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.

Untuk meluncurkan salah satu subagent Anda sendiri tanpa file CLAUDE.md pengguna, proyek, dan lokal, atur 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-purpose atau 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.

Claude menggunakan alat 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:

Use the code-reviewer subagent to review the authentication module
[Agent completes]

Continue that code review and now analyze the authorization logic
[Claude resumes the subagent with full context from previous conversation]

Ketika Claude mengirim pesan subagent yang selesai dengan alat 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, dan CLAUDE_AUTOCOMPACT_PCT_OVERRIDE berlaku untuk subagent juga. Lihat environment variables untuk kapan override berlaku.

Peristiwa pemadatan dicatat dalam file transkrip subagent:

{
  "type": "system",
  "subtype": "compact_boundary",
  "compactMetadata": {
    "trigger": "auto",
    "preTokens": 167189
  }
}

Nilai preTokens menunjukkan berapa banyak token yang digunakan sebelum pemadatan terjadi.

Fork percakapan saat ini

Fork adalah subagent yang mewarisi seluruh percakapan sejauh ini daripada memulai segar. Ini menghilangkan isolasi input yang sebaliknya disediakan subagent: fork melihat prompt sistem yang sama, alat, model, dan riwayat pesan sebagai sesi utama, sehingga Anda dapat menyerahkan tugas sampingan tanpa menjelaskan situasinya lagi. Panggilan alat fork sendiri masih tetap keluar dari percakapan Anda dan hanya hasil akhirnya yang kembali, sehingga jendela konteks utama Anda tetap bersih. Gunakan fork ketika subagent lain mana pun memerlukan terlalu banyak latar belakang untuk berguna, atau ketika Anda ingin mencoba beberapa pendekatan secara paralel dari titik awal yang sama.

Claude memulai fork dengan meminta tipe subagent 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:

/subtask draft unit tests for the parser changes so far

Fork muncul di panel di bawah prompt Anda dan berjalan di latar belakang sementara Anda terus bekerja. Ketika selesai, hasilnya tiba sebagai pesan dalam percakapan utama Anda. Bagian berikutnya mencakup kontrol panel untuk menonton dan mengarahkan fork saat berjalan.

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:

Kunci Tindakan
↑ / ↓ Pindah antar baris
Enter Buka transkrip fork yang dipilih dan kirimkan pesan tindak lanjut
x Hentikan fork yang dipilih jika sedang berjalan, atau tutup barisnya jika tidak lagi berjalan. Pada baris sesi utama, atau pada baris fork yang transkrinya Anda buka dengan Enter, x mengetik ke dalam prompt sebagai gantinya
Esc Kembalikan fokus ke input prompt

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.

Fork Subagent non-fork
Konteks Riwayat percakapan lengkap Konteks segar dengan prompt yang Anda lewatkan
Prompt sistem dan alat Sama dengan sesi utama Dari file definisi subagent, disaring untuk run latar belakang
Model Sama dengan sesi utama Dari bidang model subagent
Izin Prompt muncul di terminal Anda Prompt muncul di sesi utama Anda saat berjalan di latar belakang
Prompt cache Dibagikan dengan sesi utama Cache terpisah

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_background alat Agent, sehingga Claude tidak dapat meminta latar depan.

Atur variabel lingkungan CLAUDE_CODE_FORK_SUBAGENT untuk mengganti default:

  • 1 mengaktifkan mode fork dalam mode non-interaktif dan Agent SDK juga
  • 0 menonaktifkan mode fork dalam setiap jenis sesi

Untuk menjaga mode fork tetap aktif tetapi menghentikan Claude dari menelurkan fork, tolak tipe subagent 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.

---
name: code-reviewer
description: Expert code review specialist. Proactively reviews code for quality, security, and maintainability. Use immediately after writing or modifying code.
tools: Read, Grep, Glob, Bash
model: inherit
---

You are a senior code reviewer ensuring high standards of code quality and security.

When invoked:
1. Run git diff to see recent changes
2. Focus on modified files
3. Begin review immediately

Review checklist:
- Code is clear and readable
- Functions and variables are well-named
- No duplicated code
- Proper error handling
- No exposed secrets or API keys
- Input validation implemented
- Good test coverage
- Performance considerations addressed

Provide feedback organized by priority:
- Critical issues (must fix)
- Warnings (should fix)
- Suggestions (consider improving)

Include specific examples of how to fix issues.

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.

---
name: debugger
description: Debugging specialist for errors, test failures, and unexpected behavior. Use proactively when encountering any issues.
tools: Read, Edit, Bash, Grep, Glob
---

You are an expert debugger specializing in root cause analysis.

When invoked:
1. Capture error message and stack trace
2. Identify reproduction steps
3. Isolate the failure location
4. Implement minimal fix
5. Verify solution works

Debugging process:
- Analyze error messages and logs
- Check recent code changes
- Form and test hypotheses
- Add strategic debug logging
- Inspect variable states

For each issue, provide:
- Root cause explanation
- Evidence supporting the diagnosis
- Specific code fix
- Testing approach
- Prevention recommendations

Focus on fixing the underlying issue, not the symptoms.

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 menetapkan model: sonnet untuk analisis yang lebih mampu.

---
name: data-scientist
description: Data analysis expert for SQL queries, BigQuery operations, and data insights. Use proactively for data analysis tasks and queries.
tools: Bash, Read, Write
model: sonnet
---

You are a data scientist specializing in SQL and BigQuery analysis.

When invoked:
1. Understand the data analysis requirement
2. Write efficient SQL queries
3. Use BigQuery command line tools (bq) when appropriate
4. Analyze and summarize results
5. Present findings clearly

Key practices:
- Write optimized SQL queries with proper filters
- Use appropriate aggregations and joins
- Include comments explaining complex logic
- Format results for readability
- Provide data-driven recommendations

For each analysis:
- Explain the query approach
- Document any assumptions
- Highlight key findings
- Suggest next steps based on data

Always ensure queries are efficient and cost-effective.

Validator kueri database

Subagent yang memungkinkan akses Bash tetapi memvalidasi perintah untuk mengizinkan hanya kueri SQL hanya-baca. Contoh ini menunjukkan cara menggunakan hooks PreToolUse untuk validasi bersyarat ketika Anda memerlukan kontrol lebih halus daripada bidang tools.

---
name: db-reader
description: Execute read-only database queries. Use when analyzing data or generating reports.
tools: Bash
hooks:
  PreToolUse:
    - matcher: "Bash"
      hooks:
        - type: command
          command: "./scripts/validate-readonly-query.sh"
---

You are a database analyst with read-only access. Execute SELECT queries to answer questions about the data.

When asked to analyze data:
1. Identify which tables contain the relevant data
2. Write efficient SELECT queries with appropriate filters
3. Present results clearly with context

You cannot modify data. If asked to INSERT, UPDATE, DELETE, or modify schema, explain that you only have read access.

Claude Code melewatkan input hook sebagai JSON melalui stdin ke perintah hook. Skrip validasi membaca JSON ini, mengekstrak perintah yang sedang dijalankan, dan memeriksanya terhadap daftar operasi penulisan SQL. Jika operasi penulisan terdeteksi, skrip keluar dengan kode 2 untuk memblokir eksekusi dan mengembalikan pesan kesalahan ke Claude melalui stderr.

Buat skrip validasi di mana saja dalam proyek Anda. Jalur harus cocok dengan bidang command dalam konfigurasi hook Anda:

#!/bin/bash
# Blocks SQL write operations, allows SELECT queries

# Read JSON input from stdin
INPUT=$(cat)

# Extract the command field from tool_input using jq
COMMAND=$(echo "$INPUT" | jq -r '.tool_input.command // empty')

if [ -z "$COMMAND" ]; then
  exit 0
fi

# Block write operations (case-insensitive)
if echo "$COMMAND" | grep -iE '\b(INSERT|UPDATE|DELETE|DROP|CREATE|ALTER|TRUNCATE|REPLACE|MERGE)\b' > /dev/null; then
  echo "Blocked: Write operations not allowed. Use SELECT queries only." >&2
  exit 2
fi

exit 0

Di macOS dan Linux, buat skrip dapat dieksekusi:

chmod +x ./scripts/validate-readonly-query.sh

Di Windows, tulis skrip validasi dalam PowerShell dan tambahkan 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: