3321 WorktreeCreate3321 WorktreeCreate
3322</h3>3322</h3>
3323 3323
3324Berjalan saat worktree sedang dibuat, baik dari `claude --worktree`, dari [subagent yang menggunakan `isolation: "worktree"`](/docs/id/sub-agents#choose-the-subagent-scope), maupun untuk [sesi latar belakang](/docs/id/agent-view#how-file-edits-are-isolated) yang diisolasi Claude Code dalam worktree-nya sendiri. Secara default, Claude Code membuat salinan kerja terisolasi dengan `git worktree`. Mengonfigurasi hook WorktreeCreate akan menggantikan perilaku git default tersebut, sehingga Anda dapat menggunakan sistem kontrol versi lain seperti SVN, Perforce, atau Mercurial.3324Berjalan ketika Claude Code membuat worktree dalam kasus seperti berikut:
3325
3326* Anda memulai sesi dengan `claude --worktree`
3327* Claude membuat worktree selama sesi dan beralih ke dalamnya dengan tool [`EnterWorktree`](/docs/id/tools-reference)
3328* Sebuah [subagent menggunakan `isolation: "worktree"`](/docs/id/sub-agents#choose-the-subagent-scope)
3329* Sebuah [workflow](/docs/id/workflows#migrate-many-files-in-parallel) menjalankan agent di worktree-nya sendiri
3330* Claude Code mengisolasi [sesi latar belakang](/docs/id/agent-view#how-file-edits-are-isolated) di worktree-nya sendiri
3331* [`claude remote-control`](/docs/id/remote-control#start-a-remote-control-session) dalam mode `worktree` memulai sesi di worktree-nya sendiri
3332
3333Ketika Claude menjalankan `git worktree add` melalui tool Bash alih-alih memanggil `EnterWorktree`, hook WorktreeCreate Anda tidak berjalan. Untuk memeriksa atau memblokir perintah tersebut, tambahkan hook [`PreToolUse`](#pretooluse) dengan matcher `Bash`.
3334
3335Secara default, Claude Code membuat salinan kerja terisolasi dengan `git worktree`. Mengonfigurasi hook WorktreeCreate menggantikan perilaku git default tersebut, sehingga Anda dapat menggunakan sistem kontrol versi lain seperti SVN, Perforce, atau Mercurial.
3325 3336
3326Karena hook menggantikan perilaku default sepenuhnya, [`.worktreeinclude`](/docs/id/worktrees#copy-gitignored-files-into-worktrees) tidak diproses. Jika Anda perlu menyalin file konfigurasi lokal seperti `.env` ke worktree baru, lakukan di dalam skrip hook Anda.3337Karena hook menggantikan perilaku default sepenuhnya, [`.worktreeinclude`](/docs/id/worktrees#copy-gitignored-files-into-worktrees) tidak diproses. Jika Anda perlu menyalin file konfigurasi lokal seperti `.env` ke worktree baru, lakukan di dalam skrip hook Anda.
3327 3338
3390* Anda keluar dari [sesi worktree](/docs/id/worktrees#start-claude-in-a-worktree) interaktif dan memilih untuk menghapus worktree saat Claude Code meminta Anda3401* Anda keluar dari [sesi worktree](/docs/id/worktrees#start-claude-in-a-worktree) interaktif dan memilih untuk menghapus worktree saat Claude Code meminta Anda
3391* Anda keluar dari sesi worktree interaktif yang belum Anda [beri nama](/docs/id/sessions#name-your-sessions), Claude Code tidak menemukan file yang berubah atau tidak terlacak, dan menghapus worktree tanpa meminta Anda3402* Anda keluar dari sesi worktree interaktif yang belum Anda [beri nama](/docs/id/sessions#name-your-sessions), Claude Code tidak menemukan file yang berubah atau tidak terlacak, dan menghapus worktree tanpa meminta Anda
3392* Anda menghapus [sesi latar belakang](/docs/id/agent-view#what-deleting-a-session-removes) yang berjalan di worktree tersebut3403* Anda menghapus [sesi latar belakang](/docs/id/agent-view#what-deleting-a-session-removes) yang berjalan di worktree tersebut
3404* Anda meminta Claude untuk keluar dan menghapus worktree selama sesi, dan Claude menghapusnya dengan tool [`ExitWorktree`](/docs/id/tools-reference)
3405* Sesi yang dimulai oleh [`claude remote-control`](/docs/id/remote-control#start-a-remote-control-session) dalam mode `worktree` berakhir tanpa crash, dan Claude Code tidak menemukan file yang berubah atau tidak terlacak serta tidak ada commit baru di worktree-nya
3406* Anda menghentikan `claude remote-control` saat sesi yang dimulainya dalam mode `worktree` masih berjalan, dan Claude Code tidak menemukan file yang berubah atau tidak terlacak serta tidak ada commit baru di worktree-nya
3407
3408Ketika subagent atau agent workflow selesai, Claude Code mempertahankan worktree yang dibuat hook WorktreeCreate Anda untuknya dan tidak menjalankan hook WorktreeRemove Anda. Hapus sendiri worktree tersebut ketika pekerjaan selesai.
3409
3410Claude Code tidak meminta konfirmasi Anda sebelum hook Anda berjalan untuk panggilan `ExitWorktree` atau pembersihan `claude remote-control`. `ExitWorktree` menolak menghapus worktree yang dibuat hook kecuali panggilan tersebut meneruskan [`discard_changes: true`](/docs/id/agent-sdk/typescript#exitworktree), yang menjadikan hook Anda pemeriksaan terakhir pada jalur tersebut.
3393 3411
3394Claude Code menggunakan git untuk mencari file yang berubah atau tidak terlacak, sehingga tidak menemukan apa pun di worktree yang bukan checkout git atau tidak berada di dalamnya, meskipun direktori tersebut berisi pekerjaan yang belum di-commit. Periksa pekerjaan tersebut di hook WorktreeRemove Anda sebelum hook menghapus apa pun.3412Claude Code menggunakan git untuk mencari file yang berubah atau tidak terlacak, sehingga tidak menemukan apa pun di worktree yang bukan checkout git atau tidak berada di dalamnya, meskipun direktori tersebut berisi pekerjaan yang belum di-commit. Periksa pekerjaan tersebut di hook WorktreeRemove Anda sebelum hook menghapus apa pun.
3395 3413
3396Untuk worktree berbasis git, Claude Code menangani pembersihan secara otomatis dengan `git worktree remove`. Jika Anda mengonfigurasi hook WorktreeCreate, pasangkan dengan hook WorktreeRemove untuk mengontrol pembersihan worktree yang dibuatnya:3414Untuk worktree berbasis git, Claude Code menangani pembersihan secara otomatis dengan `git worktree remove`. Jika Anda mengonfigurasi hook WorktreeCreate, pasangkan dengan hook WorktreeRemove untuk mengontrol pembersihan:
3397 3415
3398* **Tanpa hook WorktreeRemove**: saat Claude Code menghapus worktree ketika Anda keluar dari sesi worktree, Claude Code melakukan fallback ke `git worktree remove --force` pada path yang dikembalikan hook WorktreeCreate Anda, sehingga worktree yang dikenali git akan dihapus. Worktree yang tidak dikenali git, misalnya yang dibuat hook Anda dengan sistem kontrol versi non-git, tetap ada di disk. Untuk mengetahui apa yang dilakukan penghapusan [sesi latar belakang](/docs/id/agent-view#what-deleting-a-session-removes) terhadap worktree yang dibuat hook, lihat aturan penghapusan agent view.3416* **Tanpa hook WorktreeRemove**: Claude Code beralih ke git sebagai fallback untuk penghapusan saat keluar atau melalui `ExitWorktree`, dan mempertahankan worktree saat `claude remote-control` melakukan pembersihan:
3417 * **Anda keluar dari sesi worktree, atau Claude memanggil `ExitWorktree`**: Claude Code menghapus path yang dikembalikan hook WorktreeCreate Anda seperti yang dilakukan `git worktree remove --force`, sehingga worktree yang dikenali git akan dihapus. Worktree yang tidak dikenali git, misalnya yang dibuat hook Anda dengan sistem kontrol versi non-git, tetap ada di disk.
3418 * **`claude remote-control` membersihkan worktree sebuah sesi**: worktree tetap ada di disk, dan terminal yang menjalankan `claude remote-control` menampilkan `worktree removal failed, kept: <path>`.
3419 * **Anda menghapus sesi latar belakang**: lihat [Apa yang dihapus saat menghapus sesi](/docs/id/agent-view#what-deleting-a-session-removes).
3399* **Hook keluar dengan 0**: worktree dianggap telah dihapus. Claude Code tidak membaca apa pun lagi dari hook, jadi pastikan hook Anda telah menghapus direktori tersebut.3420* **Hook keluar dengan 0**: worktree dianggap telah dihapus. Claude Code tidak membaca apa pun lagi dari hook, jadi pastikan hook Anda telah menghapus direktori tersebut.
3400* **Hook keluar dengan non-zero**: penghapusan gagal jika direktori di `worktree_path` masih ada setelahnya, dan worktree tetap ada di disk tanpa fallback git. Hook yang telah menghapus direktori sebelum keluar dengan non-zero dianggap telah menghapus. Untuk cara kegagalan dilaporkan, lihat [Input WorktreeRemove](#worktreeremove-input).3421* **Hook keluar dengan non-zero**: penghapusan gagal jika direktori di `worktree_path` masih ada setelahnya, dan worktree tetap ada di disk tanpa fallback git. Hook yang telah menghapus direktori sebelum keluar dengan non-zero dianggap telah menghapus. Untuk cara kegagalan dilaporkan, lihat [Input WorktreeRemove](#worktreeremove-input).
3401 3422
3403 3424
3404Claude Code membuang [kolom output JSON](#json-output) dari hook WorktreeRemove, seperti `systemMessage` dan `continue`.3425Claude Code membuang [kolom output JSON](#json-output) dari hook WorktreeRemove, seperti `systemMessage` dan `continue`.
3405 3426
3406Untuk penghapusan sesi latar belakang, Claude Code memverifikasi path worktree yang tersimpan sebelum menjalankan hook dan menolak path yang merupakan symlink atau melewati symlink di bawah root repositori. Hook berjalan untuk worktree yang masih berisi file hanya jika Anda mengonfirmasi penghapusan di [agent view](/docs/id/agent-view#what-deleting-a-session-removes); untuk worktree seperti itu, [`claude rm`](/docs/id/agent-view#manage-sessions-from-the-shell) justru mempertahankan sesi dan worktree. Sebelum v2.1.216, hook berjalan pada path yang tersimpan tanpa pemeriksaan ini.3427Untuk penghapusan sesi latar belakang, Claude Code memverifikasi path worktree yang tersimpan sebelum menjalankan hook dan menolak path yang merupakan symlink atau melewati symlink di bawah root repositori. Pada jalur tersebut, hook berjalan untuk worktree yang masih berisi file hanya ketika Anda mengonfirmasi penghapusan di [agent view](/docs/id/agent-view#what-deleting-a-session-removes); untuk worktree seperti itu, [`claude rm`](/docs/id/agent-view#manage-sessions-from-the-shell) justru mempertahankan sesi dan worktree. Sebelum v2.1.216, hook berjalan pada path yang tersimpan tanpa pemeriksaan ini.
3407 3428
3408Claude Code meneruskan path yang dikembalikan oleh WorktreeCreate sebagai `worktree_path` dalam input hook. Contoh ini membaca path tersebut dan menghapus direktorinya:3429Claude Code meneruskan path yang dikembalikan oleh WorktreeCreate sebagai `worktree_path` dalam input hook. Contoh ini membaca path tersebut dan menghapus direktorinya:
3409 3430
3444 3465
3445* Worktree tetap ada di disk, dan perintah serta stderr hook dikirim ke [log debug](#debug-hooks).3466* Worktree tetap ada di disk, dan perintah serta stderr hook dikirim ke [log debug](#debug-hooks).
3446* Jika Anda sedang menghapus sesi latar belakang, sesi tersebut juga tetap ada. Pesan penolakan di [agent view](/docs/id/agent-view#what-deleting-a-session-removes) melaporkan bagaimana hook berakhir, seperti `exited 1`, mengutip awal stderr-nya, dan menyatakan apakah menghapus sesi lagi tetap akan menghapus direktori tersebut.3467* Jika Anda sedang menghapus sesi latar belakang, sesi tersebut juga tetap ada. Pesan penolakan di [agent view](/docs/id/agent-view#what-deleting-a-session-removes) melaporkan bagaimana hook berakhir, seperti `exited 1`, mengutip awal stderr-nya, dan menyatakan apakah menghapus sesi lagi tetap akan menghapus direktori tersebut.
3468* Jika `claude remote-control` sedang membersihkan worktree sebuah sesi, terminal yang menjalankannya menampilkan `worktree removal failed, kept: <path>`.
3447 3469
3448<h3 id="precompact">3470<h3 id="precompact">
3449 PreCompact3471 PreCompact