2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.3> Use this file to discover all available pages before exploring further.
4 4
5# Praktik Terbaik untuk Claude Code5# Praktik terbaik untuk Claude Code
6 6
7> Tips dan pola untuk memaksimalkan Claude Code, dari mengonfigurasi lingkungan Anda hingga menskalakan di seluruh sesi paralel.7> Dapatkan lebih banyak dari Claude Code: beri tahu Claude apa yang tidak dapat dilihatnya, berikan pemeriksaan untuk dijalankan, dan tegakkan aturan yang tidak boleh memiliki pengecualian.
8 8
9Claude Code adalah lingkungan pengkodean yang bersifat agentic. Tidak seperti chatbot yang menjawab pertanyaan dan menunggu, Claude Code dapat membaca file Anda, menjalankan perintah, membuat perubahan, dan bekerja secara mandiri melalui masalah sambil Anda menonton, mengarahkan, atau sepenuhnya menjauh.9Claude Code dibangun sedemikian rupa sehingga, dalam sebagian besar kasus, prompt sederhana pertama Anda di sesi baru sudah melakukan hal yang benar, tanpa setup apa pun dari pihak Anda.
10 10
11Ini mengubah cara Anda bekerja. Alih-alih menulis kode sendiri dan meminta Claude untuk meninjau, Anda menjelaskan apa yang Anda inginkan dan Claude mengetahui cara membangunnya. Claude mengeksplorasi, merencanakan, dan mengimplementasikan.11Sebagai contoh:
12 12
13Namun otonomi ini masih datang dengan kurva pembelajaran. Claude bekerja dalam batasan tertentu yang perlu Anda pahami.13* Agar perintah dapat berjalan dengan aman tanpa Anda menyetujui masing-masing, sesi terminal dan VS Code baru dimulai dalam [auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode), di mana pengklasifikasi meninjau apa pun yang berisiko sebelum dijalankan.
14* Agar percakapan utama Anda tetap fokus sementara pekerjaan independen berlangsung secara paralel, Claude mendelegasikan ke subagent dan hanya melapor kepada Anda ketika memang perlu.
15* Agar sesi panjang tetap berjalan tanpa Anda kelola, percakapan Anda menjalani compaction secara otomatis sebelum context window penuh.
14 16
15Panduan ini mencakup pola yang telah terbukti efektif di seluruh tim internal Anthropic dan untuk insinyur yang menggunakan Claude Code di berbagai basis kode, bahasa, dan lingkungan. Untuk cara loop agentic bekerja, lihat [Cara Claude Code Bekerja](https://code.claude.com/docs/id/how-claude-code-works.md).17Halaman ini membahas apa yang harus dilakukan ketika default tidak cukup. Hal itu biasanya terjadi ketika proyek Anda memiliki pengetahuan, aturan, atau batasan yang tidak dapat dilihat Claude dari kode saja:
16 18
17***19* Proses deploy yang hanya ada di kepala seseorang
20* File yang tidak boleh dibaca sama sekali
21* Pemeriksaan yang harus lulus sebelum apa pun dianggap selesai
22* Anggaran yang tidak boleh Anda lampaui
18 23
19Sebagian besar praktik terbaik didasarkan pada satu batasan: jendela konteks Claude terisi dengan cepat, dan kinerja menurun saat terisi.24Tidak ada default yang dapat mengetahui hal-hal tersebut tentang proyek Anda, jadi di sinilah sedikit setup dari pihak Anda akan sangat bermanfaat.
20 25
21Jendela konteks Claude menyimpan seluruh percakapan Anda, termasuk setiap pesan, setiap file yang dibaca Claude, dan setiap output perintah. Namun, ini dapat terisi dengan cepat. Sesi debugging tunggal atau eksplorasi basis kode mungkin menghasilkan dan mengonsumsi puluhan ribu token.26Ketika sebuah sesi tidak berjalan seperti yang Anda harapkan, penyebabnya hampir selalu salah satu dari ini:
22 27
23Ini penting karena kinerja LLM menurun saat konteks terisi. Ketika jendela konteks hampir penuh, Claude mungkin mulai "lupa" instruksi sebelumnya atau membuat lebih banyak kesalahan. Jendela konteks adalah sumber daya paling penting untuk dikelola. Untuk melihat bagaimana sesi terisi dalam praktik, [tonton panduan interaktif](https://code.claude.com/docs/id/context-window.md) tentang apa yang dimuat saat startup dan berapa biaya setiap pembacaan file. Lacak penggunaan konteks secara berkelanjutan dengan [baris status khusus](https://code.claude.com/docs/id/statusline.md), dan lihat [Kurangi penggunaan token](https://code.claude.com/docs/id/costs.md#reduce-token-usage) untuk strategi mengurangi penggunaan token.28* Claude membangun sesuatu yang berbeda dari yang Anda bayangkan, atau harus menemukan kembali fakta yang sama di awal setiap sesi. Claude kekurangan informasi yang tidak dapat diperolehnya dengan membaca repo. Lihat [Beri tahu Claude apa yang tidak dapat dilihatnya](#tell-claude-what-it-cant-see).
29* Claude mengatakan sudah selesai padahal belum sepenuhnya, biasanya karena tidak memiliki cara untuk memeriksa pekerjaannya sendiri. Lihat [Berikan Claude pemeriksaan untuk dijalankan](#give-claude-a-check-to-run).
30* Claude melakukan sesuatu yang tidak boleh terjadi di repo ini, atau melewatkan langkah yang harus selalu terjadi. Prompt saja tidak dapat menjamin keduanya. Lihat [Tegakkan aturan yang tidak boleh memiliki pengecualian](#enforce-the-rules-that-cant-have-exceptions).
31* Claude melakukannya dengan benar, tetapi menghabiskan lebih banyak waktu, token, atau permintaan izin daripada yang sepadan dengan tugasnya. Lihat [Ubah default](#change-a-default).
24 32
25***33[Biarkan Claude berjalan tanpa Anda](#let-claude-run-without-you) menerapkan empat poin yang sama pada run tanpa pengawasan, dan [Apa yang dapat Anda hentikan](#what-you-can-stop-doing) mencantumkan saran yang sudah tidak diperlukan lagi berkat model saat ini.
26 34
27## Berikan Claude cara untuk memverifikasi pekerjaannya35> [!NOTE]
28
29> [!TIP]
30>36>
31> Berikan Claude sesuatu yang dapat dijalankannya: tes, build, tangkapan layar untuk dibandingkan. Ini adalah perbedaan antara sesi yang Anda saksikan dan sesi yang dapat Anda tinggalkan.37> Setup untuk seluruh tim ada di halaman terpisah: [Siapkan Claude Code untuk organisasi Anda](https://code.claude.com/docs/id/admin-setup.md).
32 38
33Claude berhenti ketika pekerjaan terlihat selesai. Tanpa pemeriksaan yang dapat dijalankannya, "terlihat selesai" adalah satu-satunya sinyal yang tersedia, dan Anda menjadi loop verifikasi: setiap kesalahan menunggu Anda untuk menyadarinya. Berikan Claude sesuatu yang menghasilkan lulus atau gagal, dan loop akan menutup dengan sendirinya. Claude melakukan pekerjaan, menjalankan pemeriksaan, membaca hasilnya, dan melakukan iterasi hingga pemeriksaan lulus.39## Instruksi deterministik dan non-deterministik
34 40
35Pemeriksaan adalah apa pun yang mengembalikan sinyal yang dapat dibaca Claude dalam percakapan: rangkaian tes, kode keluar build, linter, skrip yang membedakan output terhadap fixture, atau [tangkapan layar browser](https://code.claude.com/docs/id/chrome.md) dibandingkan dengan desain. Jalankan [`/verify`](https://code.claude.com/docs/id/skills#run-and-verify-your-app) sendiri setelah pemeriksaan Claude lulus untuk mengonfirmasi perubahan terhadap aplikasi yang berjalan.41Setiap instruksi yang Anda berikan kepada Claude Code termasuk salah satu dari ini:
36 42
37| Strategi | Sebelum | Sesudah |431. Non-deterministik: Anda menulis instruksi, dan Claude (model) membacanya. Ini bisa berupa prompt Anda, `CLAUDE.md`, atau skill. Model kemudian memutuskan apa yang harus dilakukan dengan informasi ini. Model biasanya mengikuti perintah Anda, dan model saat ini pandai memahami maksud Anda tanpa banyak konteks, tetapi tidak ada *jaminan* bahwa model akan mengikuti instruksi Anda. Model tetap dapat memutuskan untuk tidak melakukan sesuatu, atau melakukan hal lain.
38| - | - | - |442. Deterministik: Anda mengonfigurasi instruksi, dan Claude Code (harness) *harus* menjalankannya. Ini bisa berupa hook, aturan deny, atau pengaturan terkelola. Claude Code menerapkannya setiap saat, apa pun yang diputuskan model.
39| **Sediakan kriteria verifikasi** | *"implementasikan fungsi yang memvalidasi alamat email"* | *"tulis fungsi validateEmail. contoh kasus uji: [user@example.com](mailto:user@example.com) adalah true, invalid adalah false, [user@.com](mailto:user@.com) adalah false. jalankan tes setelah mengimplementasikan"* |
40| **Verifikasi perubahan UI secara visual** | *"buat dashboard terlihat lebih baik"* | *"\[tempel tangkapan layar] implementasikan desain ini. ambil tangkapan layar hasilnya dan bandingkan dengan yang asli. daftar perbedaan dan perbaiki"* |
41| **Tangani penyebab akar, bukan gejala** | *"build gagal"* | *"build gagal dengan kesalahan ini: \[tempel kesalahan]. perbaiki dan verifikasi build berhasil. tangani penyebab akar, jangan tekan kesalahan"* |
42 45
43Setelah pemeriksaan ada, putuskan seberapa ketat pemeriksaan tersebut membatasi penghentian:46Sebagian besar hal di Claude Code hadir dalam kedua bentuk:
44 47
45* **Dalam satu prompt**: minta Claude menjalankan pemeriksaan dan melakukan iterasi dalam pesan yang sama, seperti dalam tabel di atas.48| | Non-deterministik (Claude memutuskan) | Deterministik (Claude Code menegakkan) |
46* **Sepanjang sesi**: atur pemeriksaan sebagai [kondisi `/goal`](https://code.claude.com/docs/id/goal). Evaluator terpisah memeriksa ulang setelah setiap giliran dan Claude terus bekerja sampai goal terpenuhi. Jika Claude terhenti, Claude Code pada akhirnya menghentikan run dengan goal masih ditetapkan — lihat [bagaimana evaluasi /goal bekerja](https://code.claude.com/docs/id/goal.md#how-evaluation-works).49| :- | :- | :- |
47* **Sebagai gerbang deterministik**: [hook Stop](https://code.claude.com/docs/id/hooks.md#stop) menjalankan pemeriksaan Anda sebagai skrip dan memblokir giliran dari berakhir sampai lulus. [Stop input](https://code.claude.com/docs/id/hooks.md#stop-input) mencakup batas pada blok berturut-turut.50| Apa yang dilakukan | Prompt Anda, `CLAUDE.md`, skill yang digunakan Claude atas inisiatifnya sendiri | Hook, dan skill mana yang hanya dapat Anda mulai |
48* **Dengan pendapat kedua**: [subagent verifikasi](https://code.claude.com/docs/id/sub-agents.md) atau [alur kerja dinamis](https://code.claude.com/docs/id/workflows.md) yang memeriksa temuannya sendiri memiliki model segar yang mencoba menyangkal hasil, sehingga agen yang melakukan pekerjaan bukan yang menilainya.51| Apa yang dapat disentuhnya | Pengklasifikasi auto mode | Aturan deny, sandbox dalam [mode strict](https://code.claude.com/docs/id/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode), pengaturan terkelola |
52| Kapan selesai | Permintaan bukti, `/goal`, `/code-review` | Tes, typecheck, hook `Stop`, CI |
53| Berapa banyak yang dihabiskannya | Tingkat effort, laju Claude sendiri | `--max-turns` atau [`--max-budget-usd`](https://code.claude.com/docs/id/cli-reference) dengan `-p`, [batas pengeluaran](https://code.claude.com/docs/id/costs.md) yang telah Anda tetapkan |
54| Siapa yang memiliki keputusan akhir | Ringkasan Claude tentang apa yang telah dilakukannya | Proteksi branch, orang yang menyetujui merge |
49 55
50Setiap langkah menukar setup untuk perhatian. Versi prompt berfungsi pada tugas apa pun hari ini. Versi `/goal` dan Stop hook adalah yang memungkinkan run tanpa pengawasan selesai dengan benar tanpa Anda.56Sebagian besar waktu, Anda ingin Claude yang memutuskan. Hampir setiap pedoman memiliki pengecualian, dan model saat ini pandai membaca kode di hadapannya dan menilai apakah suatu pedoman cocok dengan situasinya. Dengan kode yang sebenarnya di hadapannya, Claude biasanya berada dalam posisi yang lebih baik untuk membuat keputusan itu daripada aturan yang Anda tulis sebelumnya.
51 57
52Biarkan Claude menunjukkan bukti daripada menegaskan kesuksesan: output tes, perintah yang dijalankannya dan apa yang dikembalikannya, atau tangkapan layar hasilnya. Meninjau bukti lebih cepat daripada menjalankan kembali verifikasi sendiri, dan ini berfungsi untuk sesi yang tidak Anda saksikan.58Jenis deterministik adalah untuk saat Anda ingin memastikan hal-hal tertentu *selalu* terjadi (atau tidak pernah terjadi), apa pun yang diputuskan model. Ini tidak harus sesuatu yang dramatis. Auto mode sudah [memblokir hal-hal yang dramatis](https://code.claude.com/docs/id/permission-modes.md#what-the-classifier-blocks-by-default), seperti deploy produksi atau force push yang menimpa pekerjaan orang lain. Biasanya ini adalah sesuatu yang spesifik untuk proyek *Anda*, dan bisa sespesifik yang Anda inginkan:
53 59
54***60* Jangan pernah mengedit client yang dihasilkan di `src/gen/`
61* Selalu jalankan skrip license-header setelah membuat file
55 62
56## Jelajahi terlebih dahulu, kemudian rencanakan, kemudian kode63Anda bisa saja menulis salah satu dari ini sebagai baris di `CLAUDE.md` atau di prompt Anda, dan Claude akan mengikutinya hampir setiap saat. Tetapi sekuat apa pun Anda merumuskannya, apakah Claude mengikuti baris itu pada giliran tertentu tetap merupakan keputusan Claude.
57 64
58> [!TIP]65> [!TIP]
59>66>
60> Pisahkan penelitian dan perencanaan dari implementasi untuk menghindari menyelesaikan masalah yang salah.67> Jika Anda terus menambahkan penekanan pada baris `CLAUDE.md` dan Claude tetap melewatkannya, itu tanda bahwa baris tersebut seharusnya menjadi hook. Sebaliknya juga berlaku: jika Anda memiliki hook untuk hal-hal yang hanya berupa preferensi, hapus hook tersebut dan biarkan Claude yang memutuskan.
61 68
62Membiarkan Claude langsung melompat ke pengkodean dapat menghasilkan kode yang menyelesaikan masalah yang salah. Gunakan [plan mode](https://code.claude.com/docs/id/permission-modes.md#analyze-before-you-edit-with-plan-mode) untuk memisahkan eksplorasi dari eksekusi.69## Beri tahu Claude apa yang tidak dapat dilihatnya
63 70
64Alur kerja yang direkomendasikan memiliki empat fase:71> [!TIP]
72>
73> Tuliskan hanya apa yang tidak dapat ditemukan Claude dengan membaca repo, atau apa yang jika tidak akan menghabiskan waktunya untuk ditemukan kembali di setiap sesi.
65 74
66**1. Jelajahi**75Claude memulai setiap tugas dengan membaca kode Anda, dan model saat ini *sangat* pandai dalam hal ini. Model akan menemukan tata letak file Anda, konvensi Anda, framework tes Anda, dan cara komponen yang ada dibangun, biasanya lebih cepat daripada Anda dapat menjelaskannya. Artinya Claude sudah mengetahui sebagian besar hal yang mungkin ingin Anda tuliskan untuknya.
67 76
68Masukkan plan mode dengan menekan `Shift+Tab` hingga bilah status menunjukkan `⏸ plan mode on`, atau mulai sesi dengan `claude --permission-mode plan`. Claude membaca file dan menjawab pertanyaan tanpa membuat perubahan.77Yang tidak dapat ditemukannya adalah informasi yang tidak pernah ada di repo:
69 78
70```txt title="claude (plan mode)" wrap theme={null}79* Keputusan yang dibuat tim Anda dalam rapat
71read /src/auth and understand how we handle sessions and login.80* Proses deploy yang hanya ada di kepala satu orang
72also look at how we manage environment variables for secrets.81* Environment variable yang dibutuhkan tes integrasi Anda
73```
74 82
75**2. Rencanakan**83Ada juga informasi yang *memang* ada di repo tetapi butuh beberapa menit penggalian untuk ditemukan, dan Claude harus mengulang penggalian itu di awal setiap sesi.
76 84
77Minta Claude untuk membuat rencana implementasi terperinci.85Uji yang baik sebelum Anda menuliskan apa pun untuk Claude:
78 86
79```txt title="claude (plan mode)" wrap theme={null}871. Apakah Claude dapat menemukan ini dengan membaca kode?
80I want to add Google OAuth. What files need to change?882. Apakah Claude benar-benar akan mencarinya?
81What's the session flow? Create a plan.
82```
83 89
84Tekan `Ctrl+G` untuk membuka rencana di editor teks Anda untuk pengeditan langsung sebelum Claude melanjutkan.90Jika keduanya ya, jangan tuliskan.
85 91
86**3. Implementasikan**92### Tulis prompt yang spesifik
87 93
88Beralih keluar dari plan mode dengan menyetujui rencana atau menekan `Shift+Tab`, kemudian biarkan Claude kode, memverifikasi terhadap rencananya.94Prompt yang spesifik membantu untuk alasan yang sama, karena memberikan Claude informasi yang belum dimilikinya. Jika Anda menyebutkan file, menjelaskan gejala, dan mengatakan seperti apa kondisi "diperbaiki" sejak awal, Anda biasanya menghemat satu putaran koreksi nanti.
89 95
90```txt title="claude" wrap theme={null}96Hal yang sama berlaku untuk preferensi di antara dua pendekatan yang sama-sama masuk akal: Claude tidak dapat membacanya dari kode, jadi jika Anda peduli mana yang dipilihnya, katakan sejak awal.
91implement the OAuth flow from your plan. write tests for the
92callback handler, run the test suite and fix any failures.
93```
94 97
95**4. Komit**98| Alih-alih | Coba |
99| :- | :- |
100| *"perbaiki bug login"* | *"pengguna melaporkan login gagal setelah sesi timeout. periksa penyegaran token di src/auth/, tulis tes gagal yang mereproduksinya, lalu perbaiki"* |
101| *"tambahkan widget kalender"* | *"ikuti pola di HotDogWidget.php dan bangun widget kalender yang memungkinkan Anda memilih bulan dan berpindah halaman antar tahun. tanpa library baru"* |
96 102
97Minta Claude untuk melakukan komit dengan pesan deskriptif dan membuat PR.103Jika Anda sudah memiliki hal yang dibutuhkan Claude, serahkan saja alih-alih menjelaskannya:
98 104
99```txt title="claude" wrap theme={null}105* File: ketik `@` dan path-nya untuk [menyertakan isi file](https://code.claude.com/docs/id/common-workflows.md#reference-files-and-directories) dalam pesan Anda.
100commit with a descriptive message and open a PR106* Gambar: tempel tangkapan layar desain atau error ke dalam prompt.
101```107* Output perintah: salurkan dari shell Anda dengan `cat error.log | claude -p "what's going on here"`.
102 108
103Plan mode berguna, tetapi juga menambah overhead.109Frasa seperti `think step by step` atau `be thorough` adalah teks prompt biasa, bukan kata kunci. Kontrol utama untuk seberapa keras Claude berpikir adalah [tingkat effort](https://code.claude.com/docs/id/model-config.md#adjust-effort-level), yang dibahas di [Ubah model dan effort](#change-the-model-and-effort). Kata-kata seperti itu masih dapat sedikit mendorong Claude dalam batas pengaturan effort-nya, tetapi tidak akan mengangkatnya melampaui pengaturan tersebut.
104 110
105Untuk tugas di mana cakupannya jelas dan perbaikannya kecil (seperti memperbaiki typo, menambahkan baris log, atau mengganti nama variabel) minta Claude untuk melakukannya secara langsung.111Satu frasa yang masih membantu adalah `be ambitious`. Claude cenderung membaca permintaan secara konservatif dan membangun hal terkecil yang memenuhinya, karena tidak dapat melihat seberapa banyak yang Anda harapkan. Ketika Anda menginginkan versi yang lebih lengkap, dengan kasus tepi ditangani dan kelanjutan alaminya disertakan, katakan saja:
106 112
107Perencanaan paling berguna ketika Anda tidak yakin tentang pendekatannya, ketika perubahan memodifikasi beberapa file, atau ketika Anda tidak terbiasa dengan kode yang dimodifikasi. Jika Anda dapat menjelaskan diff dalam satu kalimat, lewati rencana.113```text theme={null}
114build the settings page from the mockup. be ambitious: empty and error states, the save flow wired up, keyboard navigation, not just the layout
115```
108 116
109***117Itu memberi tahu Claude tentang cakupan, yang hanya Anda ketahui, bukan tentang seberapa keras harus berpikir.
110 118
111## Berikan konteks spesifik dalam prompt Anda119Dan ketika Anda sedang mengeksplorasi alih-alih memperbaiki sesuatu yang spesifik, prompt samar seperti `what would you improve in this file?` sama sekali tidak masalah. Anda akan sedikit lebih banyak mengoreksi seiring berjalannya waktu, dan itulah konsekuensinya.
112 120
113> [!TIP]121### Lakukan brainstorming dengan Claude terlebih dahulu
114>
115> Semakin tepat instruksi Anda, semakin sedikit koreksi yang Anda butuhkan.
116 122
117Claude dapat menyimpulkan niat, tetapi tidak dapat membaca pikiran Anda. Referensikan file spesifik, sebutkan batasan, dan tunjukkan pola contoh.123Ketika Anda belum tahu persis apa yang Anda inginkan, Anda tidak harus memikirkan semuanya sebelum menulis prompt. Minta Claude untuk mewawancarai Anda saja:
118 124
119| Strategi | Sebelum | Sesudah |125```text theme={null}
120| - | - | - |126I want to add rate limiting to the public API but haven't thought it through yet. Interview me until you could write the spec, then write it to SPEC.md.
121| **Batasi tugas.** Tentukan file mana, skenario apa, dan preferensi pengujian. | *"tambahkan tes untuk foo.py"* | *"tulis tes untuk foo.py yang mencakup kasus tepi di mana pengguna logout. hindari mock."* |127```
122| **Tunjukkan sumber.** Arahkan Claude ke sumber yang dapat menjawab pertanyaan. | *"mengapa ExecutionFactory memiliki api yang aneh?"* | *"lihat melalui riwayat git ExecutionFactory dan ringkas bagaimana api-nya menjadi seperti ini"* |
123| **Referensikan pola yang ada.** Tunjukkan Claude pola dalam basis kode Anda. | *"tambahkan widget kalender"* | *"lihat bagaimana widget yang ada diimplementasikan di halaman beranda untuk memahami pola. HotDogWidget.php adalah contoh yang baik. ikuti pola untuk mengimplementasikan widget kalender baru yang memungkinkan pengguna memilih bulan dan paginate maju/mundur untuk memilih tahun. bangun dari awal tanpa perpustakaan selain yang sudah digunakan dalam basis kode."* |
124| **Jelaskan gejala.** Berikan gejala, lokasi yang mungkin, dan apa "diperbaiki" terlihat seperti. | *"perbaiki bug login"* | *"pengguna melaporkan bahwa login gagal setelah timeout sesi. periksa alur auth di src/auth/, terutama penyegaran token. tulis tes yang gagal yang mereproduksi masalah, kemudian perbaiki"* |
125 128
126Prompt yang samar dapat berguna ketika Anda mengeksplorasi dan dapat mengubah arah. Prompt seperti `"apa yang akan Anda tingkatkan dalam file ini?"` dapat mengungkap hal-hal yang tidak akan Anda pikirkan untuk ditanyakan.129Claude kembali dengan pertanyaan pilihan ganda tentang bagian-bagian yang belum Anda tetapkan: batas per pengguna versus per kunci, apa yang terjadi pada permintaan yang melebihi batas, apa yang berada di luar cakupan. Claude terus bertanya sampai jawaban-jawabannya membentuk sebuah spesifikasi.
127 130
128### Berikan konten kaya131Setelah `SPEC.md` ada, mulai sesi baru untuk membangun berdasarkan file tersebut, sehingga pembangunan dimulai dengan konteks bersih dan definisi selesai yang tertulis. File ini juga yang akan Anda tunjukkan kepada peninjau nanti, di [Berikan Claude pemeriksaan untuk dijalankan](#give-claude-a-check-to-run).
129 132
130> [!TIP]133### Jaga CLAUDE.md tetap singkat
131>
132> Gunakan `@` untuk mereferensikan file, tempel tangkapan layar/gambar, atau pipa data secara langsung.
133 134
134Anda dapat memberikan data kaya kepada Claude dalam beberapa cara:135Claude Code memuat [`CLAUDE.md`](https://code.claude.com/docs/id/memory) ke setiap sesi, yang berarti setiap baris di dalamnya mengambil sedikit perhatian Claude pada *setiap* tugas, relevan atau tidak. Itulah sebabnya file ini paling efektif ketika hanya berisi apa yang tidak dapat diketahui Claude dari kode itu sendiri:
135 136
136* **Referensikan file dengan `@`** alih-alih menjelaskan di mana kode berada. Claude membaca file sebelum merespons.137* Cara mengonfirmasi pekerjaan di repo ini: perintah tes, typecheck, dan lint yang tepat, serta cara menjalankan satu file tes
137* **Tempel gambar secara langsung**. Salin/tempel atau seret dan lepas gambar ke dalam prompt.138* Tempat-tempat di mana kode menyesatkan: pola lama yang ada di mana-mana tetapi tidak boleh ditiru oleh kode baru, atau direktori yang terlihat tidak digunakan padahal digunakan
138* **Berikan URL** untuk dokumentasi dan referensi API. Gunakan `/permissions` untuk allowlist domain yang sering digunakan.139* Keputusan yang tidak ada di repo: helper error mana yang dipilih tim, bagaimana deploy bekerja, apa yang memerlukan review migrasi
139* **Pipa data** dengan menjalankan `cat error.log | claude -p "explain this error"` untuk mengirim konten file secara langsung.140* Apa pun yang sudah harus Anda koreksi dua kali
140* **Biarkan Claude mengambil apa yang dibutuhkan**. Beri tahu Claude untuk menarik konteks sendiri menggunakan perintah Bash, alat MCP, atau dengan membaca file.
141 141
142***142`CLAUDE.md` yang lulus uji itu akan tetap singkat:
143 143
144## Konfigurasi lingkungan Anda144```markdown CLAUDE.md theme={null}
145# Commands
146- Install: pnpm install
147- Run one test file: pnpm vitest run path/to/file.test.ts
148- Typecheck: pnpm tsc --noEmit
145 149
146Beberapa langkah setup membuat Claude Code jauh lebih efektif di semua sesi Anda. Untuk gambaran lengkap fitur ekstensi dan kapan menggunakan masing-masing, lihat [Perluas Claude Code](https://code.claude.com/docs/id/features-overview.md).150# Conventions
151- Use the error helpers in src/lib/errors.ts, never throw raw strings
152- src/legacy/ is still live but don't copy its patterns into new code
147 153
148### Tulis CLAUDE.md yang efektif154# Gotchas
155- Integration tests need DATABASE_URL set, see .env.example
156```
149 157
150> [!TIP]158Dalam sesi, jalankan `/context` untuk mengonfirmasi bahwa Claude memuat file tersebut.
151>
152> Jalankan `/init` untuk menghasilkan file CLAUDE.md pemula berdasarkan struktur proyek Anda saat ini, kemudian perbaiki seiring waktu.
153 159
154CLAUDE.md adalah file khusus yang dibaca Claude di awal setiap percakapan. Sertakan perintah Bash, gaya kode, dan aturan alur kerja. Ini memberikan Claude konteks persisten yang tidak dapat disimpulkan dari kode saja.160Perhatikan bahwa baris typecheck hanya berisi perintahnya. Claude perlu mengetahui perintah tersebut agar dapat memeriksa pekerjaannya sendiri sambil berjalan. Jika Anda juga ingin Claude Code *menegakkan* typecheck yang lulus sebelum Claude selesai, itu tugas untuk [hook `Stop`](#enforce-the-check-with-a-stop-hook). Baris seperti `Always typecheck before you finish` di file ini berhasil hampir sepanjang waktu, tetapi tidak setiap saat.
155 161
156Tidak ada format yang diperlukan untuk file CLAUDE.md, tetapi tetap singkat dan mudah dibaca manusia. Sebagai contoh:162Anda tidak harus menulis file ini dari awal:
157 163
158```markdown CLAUDE.md theme={null}164* `/init` menghasilkan versi awal dari codebase Anda. Dari sana, pekerjaannya sebagian besar adalah menghapus baris. [Panduan memori](https://code.claude.com/docs/id/memory.md#write-effective-instructions) merekomendasikan agar tetap di bawah 200 baris.
159# Code style165* `/doctor` menyarankan pemotongan untuk apa pun yang [sudah dapat diketahui Claude dari kode](https://code.claude.com/docs/id/memory.md#my-claude-md-is-too-large).
160- Use ES modules (import/export) syntax, not CommonJS (require)166* `/doctor prompt-audit` menandai instruksi yang ditulis untuk model lama, yang menunjuk ke file yang sudah tidak ada, atau yang [saling bertentangan](https://code.claude.com/docs/id/memory.md#audit-your-instruction-files).
161- Destructure imports when possible (eg. import { foo } from 'bar')
162 167
163# Workflow168Preferensi pribadi Anda ditaruh di `CLAUDE.local.md` alih-alih `CLAUDE.md`, dan Anda menambahkan file tersebut ke `.gitignore` agar tidak masuk ke repo.
164- Be sure to typecheck when you're done making a series of code changes
165- Prefer running single tests, and not the whole test suite, for performance
166```
167 169
168Jalankan `/context` untuk mengonfirmasi Claude memuat file. CLAUDE.md dimuat setiap sesi, jadi hanya sertakan hal-hal yang berlaku secara luas. Untuk pengetahuan domain atau alur kerja yang hanya relevan kadang-kadang, gunakan [skills](https://code.claude.com/docs/id/skills.md) sebagai gantinya. Claude memuat mereka sesuai permintaan tanpa membengkak setiap percakapan.170> [!NOTE]
171>
172> Jika Claude terus mengabaikan baris yang *memang* ada di `CLAUDE.md`, menambahkan IMPORTANT mungkin tidak akan memperbaikinya. Entah file tersebut sudah cukup panjang sehingga baris itu tenggelam, atau baris itu adalah aturan yang tidak boleh memiliki pengecualian, dan dalam hal ini tempatnya adalah di [hook](#enforce-the-rules-that-cant-have-exceptions).
169 173
170Tetap ringkas. Untuk setiap baris, tanyakan: *"Apakah menghapus ini akan menyebabkan Claude membuat kesalahan?"* Jika tidak, potong. File CLAUDE.md yang membengkak menyebabkan Claude mengabaikan instruksi aktual Anda!174### Batasi aturan ke satu bagian codebase
171 175
172| ✅ Sertakan | ❌ Kecualikan |176Jika suatu aturan hanya penting di satu bagian codebase, letakkan di [`.claude/rules/`](https://code.claude.com/docs/id/memory#path-specific-rules) dengan filter `paths:` sehingga aturan itu hanya dimuat ketika Claude benar-benar bekerja di sana. Sebagai contoh, `.claude/rules/api.md` ini dimuat untuk file TypeScript di bawah `src/api/`:
173| - | - |
174| Perintah Bash yang tidak dapat ditebak Claude | Apa pun yang dapat diketahui Claude dengan membaca kode |
175| Aturan gaya kode yang berbeda dari default | Konvensi bahasa standar yang sudah diketahui Claude |
176| Instruksi pengujian dan test runner pilihan | Dokumentasi API terperinci (tautkan ke dokumen sebagai gantinya) |
177| Etiket repositori (penamaan cabang, konvensi PR) | Informasi yang berubah sering |
178| Keputusan arsitektur khusus untuk proyek Anda | Penjelasan panjang atau tutorial |
179| Keanehan lingkungan pengembang (variabel env yang diperlukan) | Praktik yang jelas sendiri seperti "tulis kode yang bersih" |
180| Gotcha umum atau perilaku yang tidak jelas | Praktik yang jelas sendiri seperti "tulis kode yang bersih" |
181 177
182Jika Claude terus melakukan sesuatu yang tidak Anda inginkan meskipun memiliki aturan melawannya, file mungkin terlalu panjang dan aturan hilang. Jika Claude mengajukan pertanyaan yang dijawab di CLAUDE.md, frasenya mungkin ambigu. Perlakukan CLAUDE.md seperti kode: tinjau saat ada yang salah, pangkas secara teratur, dan uji perubahan dengan mengamati apakah perilaku Claude benar-benar bergeser. Untuk CLAUDE.md yang diperiksa, jalankan [`/doctor`](https://code.claude.com/docs/id/commands#all-commands) dan Claude mengusulkan pemotongan untuk konten yang dapat diturunkan dari basis kode.178```markdown .claude/rules/api.md theme={null}
179---
180paths:
181 - "src/api/**/*.ts"
182---
183- Validate request bodies with the zod schemas in src/api/schemas/, don't hand-roll checks
184- Every new endpoint needs an entry in openapi.yaml, CI fails without it
185```
183 186
184Jika Claude terus melewatkan satu instruksi, tambahkan penekanan seperti "PENTING" ke baris itu saja. Jika Anda menekankan banyak baris, tidak ada yang menonjol. Periksa CLAUDE.md ke dalam git sehingga tim Anda dapat berkontribusi. File ini meningkat nilainya seiring waktu.187### Letakkan prosedur tim dalam skill
185 188
186File CLAUDE.md dapat mengimpor file tambahan menggunakan sintaks `@path/to/import`. Untuk aturan impor dan di mana file CLAUDE.md dapat berada, lihat [file CLAUDE.md](https://code.claude.com/docs/id/memory.md#claude-md-files).189Model yang lebih mampu mengetahui lebih banyak tentang rekayasa perangkat lunak, tetapi tidak tahu bagaimana tim *Anda* melakukan rilis, apa isi runbook insiden Anda, atau bagaimana Anda ingin dokumentasi API ditulis. Pengetahuan semacam itu ditaruh di [skill](https://code.claude.com/docs/id/skills.md): prosedur atau bagian pengetahuan tim yang disimpan di `.claude/skills/<name>/SKILL.md`.
187 190
188### Konfigurasi izin191Skill juga lebih ringan terhadap konteks daripada `CLAUDE.md` untuk hal semacam ini. Untuk skill yang dapat dimulai Claude sendiri, Claude melihat nama dan deskripsinya di setiap sesi, tetapi hanya [membaca file lengkapnya](https://code.claude.com/docs/id/skills.md#skill-content-lifecycle) ketika tugas membutuhkannya. Prosedur rilis yang panjang di dalam skill tidak membebani perbaikan bug Anda yang tidak terkait seperti yang akan terjadi jika ada di `CLAUDE.md`.
189 192
190> [!TIP]193> [!NOTE]
191>194>
192> Untuk mendapatkan lebih sedikit prompt tanpa mengorbankan kontrol, pra-setujui alat yang Anda percayai dengan `/permissions` dan biarkan perintah sandboxed berjalan tanpa bertanya dengan `/sandbox`. Beralih ke mode Manual ketika Anda ingin menyetujui pengeditan dan perintah sendiri.195> Aturan `CLAUDE.md` juga berlaku untuk skill: tuliskan hanya apa yang tidak dapat ditemukan Claude sendiri.
193 196
194Dengan Claude Code v2.1.283 atau lebih baru, auto mode adalah [mode izin awal bawaan](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) untuk sesi terminal interaktif dan VS Code: model classifier terpisah meninjau sebagian besar tindakan alih-alih Anda dan hanya memblokir apa yang terlihat berisiko, seperti eskalasi cakupan, infrastruktur yang tidak dikenal, atau tindakan yang didorong konten bermusuhan. Pada versi sebelumnya, auto mode adalah mode izin awal bawaan hanya pada paket Pro, Max, dan Team.197Untuk alur kerja dengan efek samping, seperti benar-benar membuat rilis tersebut, tambahkan `disable-model-invocation: true`. Claude kemudian [tidak dapat memulai skill tersebut sendiri](https://code.claude.com/docs/id/skills.md#control-who-invokes-a-skill), dan skill hanya berjalan ketika Anda sendiri mengetik `/release`. Jika disimpan sebagai `.claude/skills/release/SKILL.md`, tampilannya bisa seperti ini:
195 198
196Dalam mode Manual, Claude Code meminta sebelum tindakan yang mungkin memodifikasi sistem Anda: penulisan file, perintah Bash, alat MCP. Itu aman tetapi membosankan. Setelah persetujuan kesepuluh Anda mengklik saja daripada meninjau. Dua alat mengurangi gangguan tersebut dalam mode Manual dan berlaku dalam mode auto juga:199```markdown .claude/skills/release/SKILL.md theme={null}
200---
201name: release
202description: Cut a new release. Bumps the version, writes the changelog entry, tags it and pushes the tag so CI can publish.
203disable-model-invocation: true
204---
2051. Make sure you're on main with a clean tree. If not, stop and ask.
2062. Run `pnpm changeset version` and commit the result.
2073. Summarize the PRs merged since the last tag into CHANGELOG.md, one line each, user-facing changes only.
2084. Tag `v<new version>` and push the tag. CI publishes from there, never publish from your machine.
209```
197 210
198* **Allowlist izin**: izinkan alat spesifik yang Anda tahu aman, seperti `npm run lint` atau `git commit`211### Hubungkan tool yang dibutuhkan Claude
199* **Sandboxing**: aktifkan isolasi tingkat OS yang membatasi akses sistem file dan jaringan, memungkinkan Claude bekerja lebih bebas dalam batas yang ditentukan
200 212
201Baca lebih lanjut tentang [permission modes](https://code.claude.com/docs/id/permission-modes.md), [permission rules](https://code.claude.com/docs/id/permissions.md), dan [sandboxing](https://code.claude.com/docs/id/sandboxing.md).213Sebagian hal yang tidak dapat dilihat Claude berada di sistem lain sepenuhnya, seperti issue tracker atau dashboard error Anda. Jika sistem tersebut memiliki CLI, biasanya itulah jalan termudah. Dengan `gh` terinstal dan sudah masuk, misalnya, Claude akan membuka pull request dan membaca komentar review tanpa penjelasan apa pun dari Anda. Untuk CLI yang belum pernah dilihatnya, cukup arahkan ke `--help`.
202 214
203### Gunakan alat CLI215Untuk sistem tanpa CLI, ada [MCP](https://code.claude.com/docs/id/mcp.md). Anda menambahkan server dari shell Anda:
204 216
205> [!TIP]217```bash theme={null}
206>218claude mcp add --transport http notion https://mcp.notion.com/mcp
207> Beri tahu Claude Code untuk menggunakan alat CLI seperti `gh`, `aws`, `gcloud`, dan `sentry-cli` saat berinteraksi dengan layanan eksternal.219```
220
221Server tersebut kemudian muncul di bawah `/mcp` di dalam sesi. Server yang terhubung menambahkan nama tool dan instruksinya ke konteks bahkan ketika Anda tidak menggunakannya, jadi sebaiknya [matikan server yang tidak Anda butuhkan](https://code.claude.com/docs/id/mcp.md#disable-a-server-without-removing-it) di sana.
222
223Dan jika Anda bekerja dengan bahasa bertipe, [plugin code intelligence](https://code.claude.com/docs/id/plugins/code-intelligence.md) memungkinkan Claude langsung melompat ke definisi alih-alih membaca banyak file untuk menemukannya.
208 224
209Alat CLI adalah cara paling efisien konteks untuk berinteraksi dengan layanan eksternal. Jika Anda menggunakan GitHub, instal CLI `gh`. Claude tahu cara menggunakannya untuk membuat masalah, membuka pull request, dan membaca komentar. Tanpa `gh`, Claude masih dapat menggunakan GitHub API, tetapi permintaan yang tidak diautentikasi sering kali mencapai batas laju.225## Berikan Claude pemeriksaan untuk dijalankan
210 226
211Claude juga efektif dalam mempelajari alat CLI yang tidak diketahuinya. Coba prompt seperti `Use 'foo-cli-tool --help' to learn about foo tool, then use it to solve A, B, C.`227Claude berhenti ketika pekerjaan terlihat selesai. Jika Claude tidak memiliki apa pun untuk dijalankan yang memberi tahu apakah pekerjaan itu benar-benar *sudah* selesai, "terlihat selesai" adalah satu-satunya pegangannya. Dalam praktiknya, itu menjadikan Anda sebagai rangkaian tesnya, dan setiap kesalahan tetap di sana sampai Anda kebetulan menyadarinya.
212 228
213### Hubungkan server MCP229Jika Anda memberinya sesuatu yang menghasilkan lulus atau gagal, Claude dapat menutup loop itu sendiri. Claude membuat perubahan, menjalankan pemeriksaan, dan jika ada yang rusak, Claude membaca output-nya dan memperbaikinya sebelum menjalankan pemeriksaan lagi.
214 230
215> [!TIP]231> [!TIP]
216>232>
217> Jalankan `claude mcp add` dengan nama server dan URL atau perintah untuk menghubungkan alat eksternal seperti Notion, Figma, atau database Anda. Sebagai contoh: `claude mcp add --transport http notion https://mcp.notion.com/mcp`.233> Berikan Claude sesuatu yang dapat dijalankannya yang menghasilkan lulus atau gagal. Setelah memilikinya, Claude dapat terus bekerja sendiri dan Anda tidak perlu mengawasinya.
218 234
219Dengan [server MCP](https://code.claude.com/docs/id/mcp.md), Anda dapat meminta Claude untuk mengimplementasikan fitur dari pelacak masalah, query database, menganalisis data pemantauan, mengintegrasikan desain dari Figma, dan mengotomatisasi alur kerja.235Pemeriksaan bisa berupa hampir apa saja, selama Claude dapat membaca hasilnya:
220 236
221### Atur hooks237* File tes
238* Exit code sebuah build
239* Linter
240* Skrip yang membandingkan output dengan fixture melalui diff
241* [Tangkapan layar browser](https://code.claude.com/docs/id/chrome.md) di samping mockup
222 242
223> [!TIP]243Jika repo Anda sudah memiliki salah satu dari ini, baris paling berguna di `CLAUDE.md` Anda adalah perintah yang menjalankannya.
224>
225> Gunakan hooks untuk tindakan yang harus terjadi setiap kali tanpa pengecualian.
226 244
227[Hooks](https://code.claude.com/docs/id/hooks-guide.md) menjalankan skrip secara otomatis pada titik tertentu dalam alur kerja Claude. Tidak seperti instruksi CLAUDE.md yang bersifat penasihat, hooks bersifat deterministik dan menjamin tindakan terjadi.245Seberapa ketat pemeriksaan tersebut terserah Anda. Pilihannya berkisar dari Claude yang memutuskan sendiri hingga Claude Code yang menegakkannya:
228 246
229Claude dapat menulis hooks untuk Anda. Coba prompt seperti *"Tulis hook yang menjalankan eslint setelah setiap pengeditan file"* atau *"Tulis hook yang memblokir penulisan ke folder migrasi."* Edit `.claude/settings.json` secara langsung untuk mengonfigurasi hooks dengan tangan, dan jalankan `/hooks` untuk menjelajahi apa yang dikonfigurasi.247* Dalam prompt: `run the auth tests after, and keep going until they pass`. Claude memutuskan sendiri kapan ia puas. Ini berfungsi untuk tugas apa pun, saat ini juga, tanpa setup.
248* Sebagai goal: [`/goal all tests in tests/auth pass and lint is clean`](https://code.claude.com/docs/id/goal) menetapkan kondisi yang diperiksa oleh model terpisah terhadap percakapan setelah setiap giliran, dan Claude terus bekerja sampai kondisi itu terpenuhi. Anda jarang membutuhkan ini sendiri di dalam sesi. Ini penting untuk run latar belakang yang panjang, di mana Claude terkadang mengakhiri giliran dengan ringkasan kemajuan sementara masih ada item yang belum selesai, dan goal mengirimnya kembali bekerja.
249* Sebagai hook Stop: [hook `Stop`](https://code.claude.com/docs/id/hooks#stop) menjalankan skrip Anda setiap kali Claude mencoba mengakhiri gilirannya, dan mengirim Claude kembali bekerja jika skrip keluar dengan kode 2. Yang ini ditegakkan oleh Claude Code (harness), sehingga giliran tidak berakhir sampai typecheck lulus atau [batas blok](https://code.claude.com/docs/id/hooks.md#stop-input) tercapai. Ada [contohnya di bawah](#enforce-the-check-with-a-stop-hook).
250* Oleh seseorang yang tidak menulis kodenya: di terminal, [`/code-review`](https://code.claude.com/docs/id/code-review-local) meninjau diff dalam subagent baru yang tidak pernah melihat percakapan Anda. Subagent tersebut tidak terpengaruh oleh penalaran yang menghasilkan kode tersebut.
230 251
231### Buat skills252Pilihan mana pun yang Anda gunakan, mintalah *bukti* dari Claude: perintah yang dijalankannya beserta output-nya, atau tangkapan layarnya. "Semua tes lulus" saja hanya memberi tahu Anda sangat sedikit, dan membaca output lebih cepat daripada menjalankan ulang pemeriksaan sendiri. Untuk sesi yang tidak Anda awasi, itu juga satu-satunya bukti yang Anda miliki.
232 253
233> [!TIP]254> [!TIP]
234>255>
235> Buat file `SKILL.md` di `.claude/skills/` untuk memberikan Claude pengetahuan domain dan alur kerja yang dapat digunakan kembali.256> Setelah Claude mengatakan sudah selesai, Anda juga dapat menjalankan [`/verify`](https://code.claude.com/docs/id/skills#run-and-verify-your-app) di sesi, yang membuat Claude mem-build dan menjalankan aplikasi serta melihat hasilnya. Ini menangkap jenis masalah yang terlewat oleh tes dan typecheck.
236 257
237[Skills](https://code.claude.com/docs/id/skills.md) memperluas pengetahuan Claude dengan informasi khusus untuk proyek, tim, atau domain Anda. Claude menerapkannya secara otomatis saat relevan, atau Anda dapat menginvokannya secara langsung dengan `/skill-name`.258### Tinjau terhadap spesifikasi Anda
238 259
239Buat skill dengan menambahkan direktori dengan `SKILL.md` ke `.claude/skills/`:260Jika Anda lebih suka review memeriksa pekerjaan terhadap rencana Anda daripada mencari bug secara umum, tulis prompt review sendiri:
240 261
241```markdown .claude/skills/api-conventions/SKILL.md theme={null}262```text theme={null}
242name: api-conventions263use a subagent to review the rate limiter diff against SPEC.md, check every requirement is implemented and the listed edge cases have tests, report gaps that affect correctness and skip style
243description: REST API design conventions for our services
244# API Conventions
245- Use kebab-case for URL paths
246- Use camelCase for JSON properties
247- Always include pagination for list endpoints
248- Version APIs in the URL path (/v1/, /v2/)
249```264```
250 265
251Skills juga dapat mendefinisikan alur kerja yang dapat digunakan kembali yang Anda panggil secara langsung:266> [!NOTE]
252 267>
253```markdown .claude/skills/fix-issue/SKILL.md theme={null}268> Jangan hapus bagian `skip style` dari prompt tersebut. Peninjau yang diminta menemukan masalah akan selalu menemukan *sesuatu*. Jika Anda memperbaiki setiap temuan, Anda akan berakhir dengan lapisan abstraksi tambahan dan tes untuk kasus yang tidak mungkin terjadi.
254name: fix-issue269
255description: Fix a GitHub issue270### Tegakkan pemeriksaan dengan hook Stop
256disable-model-invocation: true271
257Analyze and fix the GitHub issue: $ARGUMENTS.272Versi hook `Stop` dari aturan typecheck hanyalah beberapa baris di `.claude/settings.json`. Exit code 2 adalah yang memblokir penghentian. Apa pun yang dicetak perintah ke stderr dikirim kembali ke Claude sebagai alasan mengapa ia belum boleh selesai, itulah sebabnya output compiler dialihkan ke sana:
258 273
2591. Use `gh issue view` to get the issue details274```json .claude/settings.json theme={null}
2602. Understand the problem described in the issue275{
2613. Search the codebase for relevant files276 "hooks": {
2624. Implement the necessary changes to fix the issue277 "Stop": [
2635. Write and run tests to verify the fix278 {
2646. Ensure code passes linting and type checking279 "hooks": [
2657. Create a descriptive commit message280 { "type": "command", "command": "pnpm tsc --noEmit 1>&2 || exit 2" }
2668. Push and create a PR281 ]
282 }
283 ]
284 }
285}
267```286```
268 287
269Jalankan `/fix-issue 1234` untuk menginvokannya. Gunakan `disable-model-invocation: true` untuk alur kerja dengan efek samping yang ingin Anda picu secara manual.288Untuk melihatnya bekerja, minta Claude membuat perubahan yang merusak sebuah tipe: alih-alih selesai, Claude mendapatkan error compiler kembali dan terus bekerja sampai `tsc` lulus. Jika hook memblokir [delapan penghentian berturut-turut](https://code.claude.com/docs/id/hooks.md#stop-input) tanpa panggilan tool di antaranya, Claude Code menimpa blok berikutnya dan mengakhiri giliran. Untuk menaikkan batas tersebut, atur [`CLAUDE_CODE_STOP_HOOK_BLOCK_CAP`](https://code.claude.com/docs/id/env-vars).
270 289
271### Buat subagent khusus290## Tegakkan aturan yang tidak boleh memiliki pengecualian
272 291
273> [!TIP]292> [!TIP]
274>293>
275> Tentukan asisten khusus di `.claude/agents/` yang dapat didelegasikan Claude untuk tugas terisolasi.294> Jika sesuatu harus terjadi setiap saat, jadikan itu hook, aturan deny, atau pengaturan terkelola. `CLAUDE.md` adalah untuk pedoman, dan Claude diperbolehkan memutuskan bahwa suatu pedoman tidak berlaku.
276 295
277[Subagents](https://code.claude.com/docs/id/sub-agents.md) berjalan dalam konteks mereka sendiri dengan set alat yang diizinkan mereka sendiri. Mereka berguna untuk tugas yang membaca banyak file atau memerlukan fokus khusus tanpa mengacaukan percakapan utama Anda.296Ambil tiga aturan yang mungkin Anda miliki di `CLAUDE.md` saat ini: `Never read .env`, `Always run the formatter after editing`, `Don't touch the migrations folder`. Claude akan mengikutinya hampir setiap saat. Untuk sedikit aturan di mana "hampir" tidak cukup baik, pindahkan dari `CLAUDE.md` ke konfigurasi yang diterapkan sendiri oleh Claude Code (harness). Sejak saat itu, hasilnya tidak bergantung pada apa yang diingat atau diputuskan model.
278 297
279```markdown .claude/agents/security-reviewer.md theme={null}298### Tegakkan langkah dengan hook
280name: security-reviewer299
281description: Reviews code for security vulnerabilities300[Hooks](https://code.claude.com/docs/id/hooks-guide.md) menjalankan sesuatu milik Anda pada titik-titik tetap dalam loop Claude: sebelum atau sesudah panggilan tool, ketika Claude mencoba berhenti, ketika sesi dimulai, dan seterusnya. Sesuatu itu bisa berupa:
282tools: Read, Grep, Glob, Bash301
283model: opus302* Perintah shell (kasus yang biasa)
284You are a senior security engineer. Review code for:303* POST ke endpoint HTTP
285- Injection vulnerabilities (SQL, XSS, command injection)304* Panggilan tool pada salah satu server MCP Anda
286- Authentication and authorization flaws305* [Hook `prompt` atau `agent`](https://code.claude.com/docs/id/hooks#hook-handler-fields), yang membiarkan sebuah model memutuskan
287- Secrets or credentials in code306
288- Insecure data handling307Hook `prompt` atau `agent` meminta *model lain* untuk memutuskan, sehingga juga tidak deterministik. Untuk penegakan yang sesungguhnya, gunakan hook `command` atau `http`, dan tambahkan [`onFailure: "block"`](https://code.claude.com/docs/id/hooks#block-the-action-when-a-hook-fails) jika tindakan juga harus dihentikan ketika hook itu sendiri crash atau timeout. Untuk hook yang memindai commit untuk mencari secret, misalnya, Anda lebih suka memblokir commit daripada membiarkannya lolos tanpa dipindai saat pemindai sedang tidak berfungsi.
308
309Berikut aturan formatter sebagai hook `PostToolUse`. Hook ini berjalan setelah setiap `Edit` atau `Write`, dan apakah Claude mengingat aturan tersebut tidak lagi penting, karena bukan Claude yang menjalankannya:
289 310
290Provide specific line references and suggested fixes.311```json .claude/settings.json theme={null}
312{
313 "hooks": {
314 "PostToolUse": [
315 {
316 "matcher": "Edit|Write",
317 "hooks": [
318 { "type": "command", "command": "npx prettier --write --ignore-unknown \"$(jq -r '.tool_input.file_path')\"" }
319 ]
320 }
321 ]
322 }
323}
291```324```
292 325
293Beri tahu Claude untuk menggunakan subagent secara eksplisit: *"Gunakan subagent untuk meninjau kode ini untuk masalah keamanan."*326Untuk memeriksa hook tersebut, minta Claude menambahkan baris dengan indentasi buruk ke file yang diformat Prettier. File yang disimpan kembali dengan indentasi yang sudah diperbaiki.
294 327
295### Instal plugins328Aturan migrasi menjadi [hook `PreToolUse`](https://code.claude.com/docs/id/hooks-guide#block-edits-to-protected-files) yang keluar dengan kode 2 untuk path apa pun di bawah `migrations/`. Anda tidak harus menulisnya sendiri: `write a hook that blocks edits to the migrations folder` berfungsi sebagai prompt, dan `/hooks` menampilkan hasilnya. Namun jangan berlebihan: hook adalah untuk aturan dengan *nol* pengecualian, dan `Prefer named exports` memiliki banyak pengecualian, jadi aturan itu tetap di `CLAUDE.md`.
296 329
297> [!TIP]330### Batasi akses dengan aturan izin dan sandbox
298>
299> Jalankan `/plugin` untuk menjelajahi marketplace. Plugins menambahkan skills, alat, dan integrasi tanpa konfigurasi.
300 331
301[Plugins](https://code.claude.com/docs/id/plugins/overview.md) menggabungkan skills, hooks, subagents, dan server MCP menjadi satu unit yang dapat diinstal dari komunitas dan Anthropic. Jika Anda bekerja dengan bahasa yang diketik, instal [plugin code intelligence](https://code.claude.com/docs/id/plugins/code-intelligence.md) untuk memberikan Claude navigasi simbol presisi dan deteksi kesalahan otomatis setelah pengeditan.332[Aturan izin](https://code.claude.com/docs/id/permissions.md) menentukan apa yang boleh dijalankan, dibaca, dan diambil oleh Claude. Aturan `deny` berlaku di setiap mode izin, termasuk auto dan `bypassPermissions`, itulah tepatnya mengapa aturan `.env` ditaruh di sana:
302 333
303Untuk panduan memilih antara skills, subagents, hooks, dan MCP, lihat [Perluas Claude Code](https://code.claude.com/docs/id/features-overview.md#match-features-to-your-goal).334```json .claude/settings.json theme={null}
335{
336 "permissions": {
337 "allow": ["Bash(pnpm tsc --noEmit)"],
338 "ask": ["Bash(git push *)"],
339 "deny": ["Read(./.env)", "Read(./.env.local)", "Read(./secrets/**)"]
340 }
341}
342```
304 343
305***344Setelah ini disimpan, menanyakan Claude apa isi `.env` akan gagal, baik melalui tool `Read` maupun melalui `cat .env`.
306 345
307## Berkomunikasi secara efektif346Aturan mencocokkan panggilan tool, bukan niat, jadi ada baiknya mengetahui di mana batas-batasnya:
308 347
309Tanyakan kepada Claude pertanyaan yang akan Anda tanyakan kepada insinyur lain, dan untuk fitur yang lebih besar, biarkan Claude mewawancarai Anda dan menulis spesifikasi sebelum Anda mulai mengimplementasikan.348* Aturan `Read` *memang* menangkap `cat .env`, karena Claude Code mengenali [perintah pembacaan file yang umum](https://code.claude.com/docs/id/permissions.md#read-and-edit).
349* Aturan itu tidak akan menangkap skrip yang membuka file tersebut.
350* Aturan deny `WebFetch` untuk sebuah domain tidak berpengaruh apa pun terhadap `curl` ke domain yang sama, kecuali sandbox aktif.
310 351
311### Tanyakan pertanyaan basis kode352Untuk batasan tingkat OS pada akses sistem file atau jaringan, aktifkan [sandbox](https://code.claude.com/docs/id/sandboxing.md) dengan `/sandbox` di dalam sesi. Sandbox membatasi perintah shell Claude di macOS, Linux, dan WSL2 serta [menerapkan aturan deny `Read` dan aturan `WebFetch(domain:...)` Anda](https://code.claude.com/docs/id/sandboxing#permission-rules) juga, jadi untuk apa pun yang terkait keamanan Anda menginginkan keduanya.
312 353
313> [!TIP]354Secara default Claude masih dapat meminta untuk mencoba ulang perintah yang diblokir di luar sandbox, dan permintaan itu melewati alur izin normal. [Mode sandbox strict](https://code.claude.com/docs/id/sandboxing.md#turn-off-the-retry-with-strict-sandbox-mode), di tab **Overrides** pada `/sandbox`, mematikan retry tersebut.
355
356> [!WARNING]
314>357>
315> Tanyakan Claude pertanyaan yang akan Anda tanyakan kepada insinyur senior.358> Auto mode adalah model pengklasifikasi yang menilai setiap tindakan, bukan aturan yang keras. Model ini pandai melakukannya, tetapi seperti penilaian apa pun, bisa saja salah. Anda juga dapat menyesuaikan apa yang dianggapnya berisiko, dan organisasi Anda dapat mematikannya sepenuhnya, jadi aturan "jangan pernah" Anda harus ditaruh di aturan deny atau hook.
359
360### Pilih kepada siapa aturan berlaku
316 361
317Saat onboarding ke basis kode baru, gunakan Claude Code untuk pembelajaran dan eksplorasi. Anda dapat mengajukan Claude pertanyaan yang sama seperti yang Anda tanyakan kepada insinyur lain:362Di mana sebuah aturan berada menentukan kepada siapa aturan itu berlaku:
318 363
319* Bagaimana cara logging bekerja?364* `.claude/settings.local.json` dan `~/.claude/settings.json` hanya milik Anda. Ketika Anda memilih **Yes, and don't ask again** untuk sebuah perintah, Claude Code menyimpan aturan tersebut ke file lokal.
320* Bagaimana cara membuat endpoint API baru?365* `.claude/settings.json` dan hook di dalamnya milik repo. Setelah Anda meng-commit-nya, semuanya berlaku untuk semua orang yang bekerja di repo tersebut. Aturan deny-nya langsung berlaku. Aturan `allow`-nya menunggu sampai setiap orang menerima [dialog trust](https://code.claude.com/docs/id/permissions.md#what-runs-before-you-trust-a-folder) untuk folder tersebut, dan [workspace trust](https://code.claude.com/docs/id/hooks.md#workspace-trust) juga menentukan kapan hook-nya mulai berjalan di mesin mereka.
321* Apa yang dilakukan `async move { ... }` pada baris 134 dari `foo.rs`?366* [Pengaturan terkelola](https://code.claude.com/docs/id/managed-settings.md) milik organisasi. Pengaturan ini berasal dari konsol admin, MDM, atau file `managed-settings.json`, dan tidak ada file pengaturan pribadi yang dapat menimpanya, yang menjadikannya satu-satunya tempat untuk kebijakan tim keamanan. Jika Anda orang yang menetapkannya, lihat [Siapkan Claude Code untuk organisasi Anda](https://code.claude.com/docs/id/admin-setup.md).
322* Kasus tepi apa yang ditangani `CustomerOnboardingFlowImpl`?
323* Mengapa kode ini memanggil `foo()` alih-alih `bar()` pada baris 333?
324 367
325Menggunakan Claude Code dengan cara ini adalah alur kerja onboarding yang efektif, meningkatkan waktu ramp-up dan mengurangi beban pada insinyur lain. Tidak ada prompt khusus yang diperlukan: tanyakan pertanyaan secara langsung.368Apa pun cakupannya, jaga agar kumpulan yang ditegakkan tetap kecil. Setiap hook dan aturan deny sesekali akan terpicu ketika seharusnya tidak, dan seseorang harus memelihara masing-masing. Jika Anda suatu saat mendapati diri Anda memiliki empat puluh aturan, sebagian besar mungkin adalah preferensi yang sebenarnya bisa dipertimbangkan Claude sendiri.
326 369
327### Biarkan Claude mewawancarai Anda370## Ubah default
328 371
329> [!TIP]372> [!TIP]
330>373>
331> Untuk fitur yang lebih besar, biarkan Claude mewawancarai Anda terlebih dahulu. Mulai dengan prompt minimal dan minta Claude untuk mewawancarai Anda menggunakan alat `AskUserQuestion`.374> Default sudah cukup baik untuk dibiarkan sampai suatu tugas menghabiskan lebih banyak waktu, token, atau gangguan daripada yang seharusnya. Ketika itu terjadi, jalankan `/usage` di sesi untuk melihat ke mana semuanya terpakai.
332 375
333Claude menanyakan tentang hal-hal yang mungkin belum Anda pertimbangkan, termasuk implementasi teknis, UI/UX, kasus tepi, dan trade-off. Ganti `[brief description]` dengan fitur Anda sebelum mengirim prompt.376Sesi baru sudah membuat beberapa keputusan untuk Anda:
334 377
335```text wrap theme={null}378* Sesi terminal interaktif dan VS Code dimulai dalam auto mode.
336I want to build [brief description]. Interview me in detail using the AskUserQuestion tool.379* Sesi menjalankan [Claude Opus 5.5 dengan effort medium](https://code.claude.com/docs/id/model-config.md#default-model-setting) pada sebagian besar paket dan penyedia.
380* Sesi mendelegasikan pekerjaan ke subagent ketika melihat alasan untuk melakukannya.
381* Sesi menjalankan compaction pada percakapan seiring bertambah panjangnya.
337 382
338Ask about technical implementation, UI/UX, edge cases, concerns, and tradeoffs. Don't ask obvious questions, dig into the hard parts I might not have considered.383Sebagian besar waktu Anda tidak pernah memikirkan hal-hal ini. Ketika suatu tugas memang menghabiskan lebih dari yang seharusnya, salah satu dari keempat hal ini biasanya penyebabnya.
339 384
340Keep interviewing until we've covered everything, then write a complete spec to SPEC.md.385### Ubah mode izin
341```
342 386
343Setelah spesifikasi selesai, mulai sesi segar untuk menjalankannya. Sesi baru memiliki konteks bersih yang fokus sepenuhnya pada implementasi, dan Anda memiliki spesifikasi tertulis untuk direferensikan.387Kedua ujung rentang izin memiliki biaya:
344 388
345Spesifikasi yang paling berguna adalah mandiri: mereka menamai file dan antarmuka yang terlibat, menyatakan apa yang berada di luar cakupan, dan diakhiri dengan langkah verifikasi end-to-end yang membuktikan fitur berfungsi. Waktu yang dihabiskan untuk membuat spesifikasi presisi memberikan hasil lebih banyak daripada waktu yang dihabiskan untuk menonton implementasi.389* **Mode Manual**: Anda sendiri menyetujui setiap edit dan setiap perintah yang tidak read-only. Aman, tetapi setelah permintaan izin kesepuluh Anda mulai menyetujui tanpa membaca, dan tidak ada yang berjalan saat Anda jauh dari keyboard.
390* **`bypassPermissions`**: menyetujui semua hal yang tidak dicakup oleh aturan deny dan ask Anda, yang hanya masuk akal di container sekali pakai.
346 391
347***392[Auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode) berada di antara keduanya, dan itulah mode [awal](https://code.claude.com/docs/id/permission-modes.md#which-mode-a-session-starts-in) untuk sesi terminal interaktif dan VS Code. Claude bekerja tanpa berhenti untuk persetujuan rutin, dan model pengklasifikasi terpisah memeriksa tindakan dalam [urutan tetap](https://code.claude.com/docs/id/permission-modes.md#how-the-classifier-evaluates-actions) sebelum dijalankan. Pengklasifikasi berkonsentrasi pada [hal-hal yang Anda ingin dihentikan oleh seseorang](https://code.claude.com/docs/id/permission-modes.md#what-the-classifier-blocks-by-default):
348 393
349## Kelola sesi Anda394* `curl | bash`
395* Deploy dan migrasi produksi
396* Force push yang menimpa pekerjaan orang lain
397* Data sensitif yang dikirim ke endpoint eksternal
398* Tindakan yang tampak didorong oleh konten yang dibaca Claude, bukan oleh Anda
350 399
351Percakapan bersifat persisten dan dapat dibalik. Gunakan ini untuk keuntungan Anda!400Ketika pengklasifikasi memblokir sesuatu, Anda mendapat notifikasi dan tindakan tersebut muncul di bawah **Recently denied** di `/permissions`, di mana Anda dapat mencobanya ulang dengan persetujuan manual. Setelah [tiga blok berturut-turut](https://code.claude.com/docs/id/permission-modes.md#when-auto-mode-falls-back) (atau dua puluh secara total), auto mode berhenti sejenak dan kembali meminta persetujuan Anda.
352 401
353### Perbaiki arah dengan cepat dan sering402Semua ini tidak menggantikan kontrol deterministik Anda, karena berjalan *setelah* kontrol tersebut. Aturan deny dan ask serta hook `PreToolUse` berlaku sebelum pengklasifikasi melihat apa pun, sehingga aturan deny memblokir dalam auto mode persis seperti di tempat lain. Sandbox tetap membatasi [perintah shell yang dibungkusnya](https://code.claude.com/docs/id/sandboxing.md#what-runs-outside-the-sandbox).
354 403
355> [!TIP]404> [!NOTE]
356>405>
357> Perbaiki Claude segera setelah Anda melihatnya keluar jalur.406> Anda juga dapat mengatakan `don't push until I've reviewed` dalam percakapan, dan pengklasifikasi [memperlakukannya sebagai sinyal blok](https://code.claude.com/docs/id/permission-modes.md#boundaries-you-state-in-conversation). Ini tetap merupakan model yang membaca transkrip, dan kalimat tersebut bisa hilang ketika percakapan menjalani compaction, jadi apa pun yang penting harus ditaruh di aturan deny.
407
408Masalah sebaliknya adalah pengklasifikasi berulang kali menghentikan sesuatu yang rutin dalam setup Anda. Alih-alih menyetujuinya secara manual setiap kali, tambahkan ke `autoMode.allow` atau jelaskan infrastruktur tepercaya Anda dalam [konfigurasi auto mode](https://code.claude.com/docs/id/auto-mode-config.md). Konfigurasinya berupa bahasa Inggris biasa, bukan pola, dan [`/auto-mode-setup`](https://code.claude.com/docs/id/auto-mode-config#generate-environment-entries) dapat menyusun draf bagian `environment` untuk Anda dari proyek dan sesi terbaru Anda:
409
410```json ~/.claude/settings.json theme={null}
411{
412 "autoMode": {
413 "environment": [
414 "$defaults",
415 "Source control: github.com/example-org and every repo under it",
416 "Trusted internal domains: *.internal.example.com"
417 ],
418 "allow": [
419 "$defaults",
420 "Deploying to the staging namespace is fine, it's isolated from production and resets nightly"
421 ]
422 }
423}
424```
358 425
359Hasil terbaik datang dari loop umpan balik yang ketat. Meskipun Claude kadang-kadang menyelesaikan masalah dengan sempurna pada upaya pertama, memperbaikinya dengan cepat umumnya menghasilkan solusi yang lebih baik lebih cepat.426> [!WARNING]
427>
428> Pertahankan `"$defaults"` di setiap daftar yang Anda atur, karena tanpanya entri Anda akan *menggantikan* aturan bawaan daftar tersebut alih-alih menambahkannya. Untuk `environment` dan `allow` Anda akan kehilangan konteks dan pengecualian bawaan, dan daftar `soft_deny` tanpanya akan menghilangkan blok bawaan terhadap force push dan deploy produksi.
429>
430> Blok `autoMode` juga harus berada di `~/.claude/settings.json`, bukan di proyek, karena pengklasifikasi mengabaikan `autoMode` di pengaturan proyek.
360 431
361* **`Esc`**: hentikan Claude di tengah-tindakan dengan tombol `Esc`. Konteks dipertahankan, jadi Anda dapat mengarahkan kembali.432Jika Anda lebih suka melihat setiap edit dan perintah sebelum terjadi, `Shift+Tab` di sesi berpindah di antara mode-mode izin, termasuk Manual, atau mulai dengan `claude --permission-mode manual` dari shell Anda. Dan jika Manual kemudian terlalu sering meminta persetujuan, `/fewer-permission-prompts` memindai transkrip terbaru Anda untuk panggilan Bash dan MCP read-only yang umum dan menambahkannya ke allowlist di `.claude/settings.json`.
362* **`Esc + Esc` atau `/rewind`**: tekan `Esc` dua kali atau jalankan `/rewind` untuk membuka menu rewind dan mengembalikan percakapan dan status kode sebelumnya, atau ringkas dari pesan yang dipilih.
363* **`"Undo that"`**: biarkan Claude mengembalikan perubahannya.
364* **`/clear`**: atur ulang konteks antara tugas yang tidak terkait. Sesi panjang dengan konteks yang tidak relevan dapat mengurangi kinerja.
365 433
366Jika Anda telah memperbaiki Claude lebih dari dua kali pada masalah yang sama dalam satu sesi, konteks penuh dengan pendekatan yang gagal. Jalankan `/clear` dan mulai segar dengan prompt yang lebih spesifik yang menggabungkan apa yang Anda pelajari. Sesi bersih dengan prompt yang lebih baik hampir selalu mengungguli sesi panjang dengan koreksi terakumulasi.434### Ubah model dan effort
367 435
368### Kelola konteks secara agresif436[Effort](https://code.claude.com/docs/id/model-config.md#adjust-effort-level) adalah kontrol utama untuk berapa lama Claude berpikir, dan menggantikan sebagian besar hal yang dulu dilakukan orang dengan kata-kata dalam prompt. Claude Opus 5.5, Sonnet 5.5, dan Haiku 5.5 secara default menggunakan `medium`, yang sudah lebih dari cukup untuk pekerjaan fitur sehari-hari dengan cakupan yang jelas. Saat-saat Anda akan mengubahnya, dengan `/effort` di sesi:
369 437
370> [!TIP]438* Naikkan dengan `/effort high` atau `/effort xhigh` ketika keberhasilan bergantung pada kasus-kasus yang mudah terlewat. Bayangkan bug di kode yang tidak Anda tulis, tes yang flaky, atau perubahan skema di mana Claude harus menemukan setiap pembaca bentuk lama. Claude kemudian memeriksa lebih banyak kasus tepi dan memverifikasi lebih banyak pekerjaannya sebelum menjawab, dan di situlah waktu serta token tambahan terpakai.
371>439* Turunkan dengan `/effort low` ketika Anda bolak-balik dengan cepat dan tetap meninjau setiap hasil: brainstorming, sketsa pertama, penggantian nama di beberapa file. Claude memberi Anda titik awal lebih cepat, dan karena Anda mengarahkan setiap langkah, pertimbangan tambahan tidak akan banyak mengubah apa pun selain waktu tunggu.
372> Jalankan `/clear` antara tugas yang tidak terkait untuk mengatur ulang konteks.440* Simpan `max` untuk masalah sulit yang ingin Anda selesaikan oleh Claude tanpa Anda, seperti mencari kerentanan keamanan. Pada tugas biasa, `max` cenderung berpikir berlebihan, sehingga Anda membayar lebih untuk jawaban yang mungkin tidak lebih baik daripada yang akan diberikan `high`.
441* Ketika hanya pesan berikutnya yang membutuhkannya, seperti satu pertanyaan rumit di tengah pekerjaan yang selebihnya rutin, masukkan [`ultrathink`](https://code.claude.com/docs/id/model-config#use-ultrathink-for-one-off-deep-reasoning) ke dalam prompt tersebut alih-alih mengubah pengaturan.
373 442
374Claude Code secara otomatis mengompaksi riwayat percakapan saat Anda mendekati batas konteks, yang mempertahankan kode dan keputusan penting sambil membebaskan ruang.443Untuk modelnya sendiri, Opus 5.5 default menangani sebagian besar pekerjaan coding dengan baik dan Sonnet lebih murah untuk pekerjaan rutin. [Claude Fable 5.1](https://code.claude.com/docs/id/model-config.md#work-with-fable) tersedia ketika Anda memilihnya secara eksplisit dengan `/model fable`, dan Haiku cocok untuk subagent yang mengerjakan tugas sederhana. [Konfigurasi model](https://code.claude.com/docs/id/model-config.md) berisi daftar lengkap per paket dan penyedia.
375 444
376Selama sesi panjang, jendela konteks Claude dapat terisi dengan percakapan yang tidak relevan, konten file, dan perintah. Ini dapat mengurangi kinerja dan kadang-kadang mengalihkan Claude.445### Ketahui biaya subagent
377 446
378* Gunakan `/clear` sering antara tugas untuk mengatur ulang jendela konteks sepenuhnya447Claude mendelegasikan ke [subagent](https://code.claude.com/docs/id/sub-agents.md) atas inisiatifnya sendiri:
379* Ketika auto compaction dipicu, Claude meringkas apa yang paling penting, termasuk pola kode, status file, dan keputusan kunci
380* Untuk kontrol lebih, jalankan `/compact <instructions>`, seperti `/compact Focus on the API changes`
381* Untuk mengompaksi hanya bagian dari percakapan, gunakan `Esc + Esc` atau `/rewind`, pilih checkpoint pesan, dan pilih **Summarize from here** atau **Summarize up to here**. Yang pertama mengondensasi pesan dari titik itu maju sambil menjaga konteks awal tetap utuh; yang kedua mengondensasi pesan awal sambil menjaga pesan terbaru tetap lengkap. Lihat [menu rewind's summarize options](https://code.claude.com/docs/id/checkpointing.md#rewind-and-summarize).
382* Sesuaikan perilaku compaction di CLAUDE.md dengan instruksi seperti `"When compacting, always preserve the full list of modified files and any test commands"` untuk memastikan konteks kritis bertahan dari ringkasan
383* Untuk pertanyaan yang tidak perlu tetap dalam konteks, gunakan [`/btw`](https://code.claude.com/docs/id/interactive-mode#side-questions-with-%2Fbtw). Jawabannya tidak pernah memasuki riwayat percakapan, jadi Anda dapat memeriksa detail tanpa menumbuhkan konteks.
384 448
385### Gunakan subagents untuk investigasi449* Pencarian codebase yang luas diserahkan ke agent Explore bawaan.
450* Tugas sampingan di-[fork](https://code.claude.com/docs/id/sub-agents.md#fork-the-current-conversation) selama mode fork aktif (default).
451* Subagent yang dimulainya berjalan di latar belakang secara default, sehingga percakapan utama Anda tetap berjalan.
386 452
387> [!TIP]453Anda jarang perlu meminta semua ini, tetapi ada baiknya mengetahui apa yang Anda dapatkan dan berapa biayanya.
388>
389> Delegasikan penelitian dengan `"use subagents to investigate X"`. Mereka mengeksplorasi dalam konteks terpisah, menjaga percakapan utama Anda bersih untuk implementasi.
390 454
391Karena konteks adalah batasan fundamental Anda, gunakan subagents untuk menjaga penelitian di luar konteks. Ketika Claude meneliti basis kode, ia membaca banyak file, semuanya mengonsumsi konteks Anda. Subagents berjalan dalam jendela konteks terpisah dan melaporkan kembali ringkasan:455Subagent bermanfaat dalam situasi berikut:
392 456
393```text wrap theme={null}457* Menjalankan bagian-bagian pekerjaan independen pada saat yang sama, sehingga seluruh tugas selesai lebih cepat
394Use subagents to investigate how our authentication system handles token458* Menjaga output panjang, seperti run tes lengkap atau pencarian yang luas, di luar percakapan utama Anda, di mana output tersebut jika tidak akan terbawa sepanjang sisa sesi
395refresh, and whether we have any existing OAuth utilities I should reuse.459* Mendapatkan peninjau yang belum melihat bagaimana kode ditulis
396```460* Memberikan tugas lebih sedikit tool daripada yang dimiliki sesi utama, seperti peninjau yang dapat membaca tetapi tidak dapat mengedit
397 461
398Anda juga dapat menggunakan subagents untuk verifikasi setelah Claude mengimplementasikan sesuatu. Lihat [Add an adversarial review step](#add-an-adversarial-review-step).462Biaya yang Anda tanggung sebagian besar berupa token, karena setiap subagent mengirim permintaannya sendiri dan semuanya dihitung terhadap penggunaan yang sama dengan percakapan utama Anda. Terkadang biayanya juga waktu: subagent baru harus terlebih dahulu mengumpulkan konteks yang sudah dimiliki percakapan Anda, sehingga bisa saja menjadi *lebih lambat* daripada mengerjakan tugas di tempat Anda berada.
399 463
400### Rewind dengan checkpoints464Dan secara default, ini adalah model yang sama (atau yang lebih kecil) pada tugas yang sama. Anda mendapatkan paralelisme atau sudut pandang segar darinya, tetapi bukan jawaban yang lebih cerdas.
401 465
402> [!TIP]466Untuk menghemat biaya subagent:
403>
404> Setiap prompt yang Anda kirim yang memulai giliran membuat checkpoint. Anda dapat mengembalikan percakapan, kode, atau keduanya ke checkpoint sebelumnya.
405 467
406Claude secara otomatis membuat snapshot file sebelum setiap perubahan sehingga checkpoint dapat mengembalikannya. Tekan Escape dua kali atau jalankan `/rewind` untuk membuka menu rewind. Anda dapat mengembalikan percakapan saja, mengembalikan kode saja, mengembalikan keduanya, atau meringkas dari pesan yang dipilih. Lihat [Checkpointing](https://code.claude.com/docs/id/checkpointing.md) untuk detail.468* Atur [`model: haiku`](https://code.claude.com/docs/id/sub-agents#choose-a-model) di definisi subagent jika pekerjaannya sederhana, seperti mengumpulkan file yang mengimpor sebuah modul atau memeriksa tautan di dokumentasi. Pekerjaan semacam itu tidak membutuhkan model yang lebih besar, dan Haiku jauh lebih murah per permintaan.
469* Minta ringkasan singkat sebagai balasan, agar dua puluh hasil tidak tetap memenuhi konteks Anda.
470* Periksa `/usage` untuk melihat porsi penggunaan Anda yang diambil setiap jenis subagent, sehingga Anda dapat mengetahui mana yang sepadan dengan biayanya.
471* Berikan subagent kustom di `.claude/agents/` hanya `tools: Read, Grep, Glob`. Sekarang subagent itu menjadi peninjau yang tidak dapat mengedit apa pun, dan batasan itu ditegakkan oleh Claude Code, bukan diminta dalam prompt.
407 472
408Alih-alih merencanakan setiap langkah dengan hati-hati, Anda dapat memberi tahu Claude untuk mencoba sesuatu yang berisiko. Jika tidak berhasil, rewind dan coba pendekatan berbeda. Checkpoints bertahan di seluruh sesi, jadi Anda dapat menutup terminal dan masih rewind nanti.473Peninjau tersebut hanya satu file pendek, `.claude/agents/reviewer.md`:
409 474
410> [!WARNING]475```markdown .claude/agents/reviewer.md theme={null}
411>476---
412> Checkpoints hanya melacak perubahan yang dibuat melalui alat pengeditan file Claude. Perubahan yang dibuat melalui perintah Bash atau proses eksternal tidak ditangkap. Ini bukan pengganti git.477name: reviewer
478description: Reviews changed files against the spec they were built from. Use after implementing a feature, before opening the PR.
479tools: Read, Grep, Glob
480---
481You're reviewing code you didn't write. Compare the changed files against the spec you're given,
482check that every requirement is implemented and the listed edge cases have tests,
483and report only the gaps that affect correctness. Skip style.
484```
413 485
414### Lanjutkan percakapan486Minta Claude untuk `have the reviewer compare the rate limiter against SPEC.md` dan kekurangan-kekurangannya kembali ke sesi Anda, di mana Claude dapat memperbaikinya.
415 487
416> [!TIP]488### Tekan biaya dan konteks
417>
418> Beri nama sesi dengan `/rename` dan perlakukan mereka seperti cabang: setiap alur kerja mendapatkan konteks persisten sendiri.
419 489
420Claude Code menyimpan percakapan secara lokal, jadi ketika tugas mencakup beberapa sesi Anda tidak harus menjelaskan ulang konteksnya. Jalankan [`claude --continue`](https://code.claude.com/docs/id/sessions#resume-a-session) untuk melanjutkan dari sesi terbaru, atau `claude --resume` untuk memilih dari daftar. Berikan sesi nama deskriptif seperti `oauth-migration` sehingga Anda dapat menemukannya nanti. Lihat [Manage sessions](https://code.claude.com/docs/id/sessions.md) untuk set lengkap kontrol resume, branch, dan naming.490Dengan window 1M token pada sebagian besar model saat ini dan compaction di dekat batas atasnya, Anda jarang akan kehabisan konteks. Namun, Anda tetap dapat *membayar* untuk konteks yang tidak Anda butuhkan. Setiap permintaan mengirim seluruh percakapan, sehingga sesi yang telah mengumpulkan tiga tugas yang tidak terkait akan membaca ulang ketiganya pada setiap giliran tugas keempat. Biaya itu [didiskon selama cache masih hangat](https://code.claude.com/docs/id/costs.md#why-usage-climbs-in-a-long-session) dan dikenakan harga penuh setelah cache kedaluwarsa.
421 491
422***492[`/usage`](https://code.claude.com/docs/id/costs) adalah tempat pertama untuk melihat. Pada Pro, Max, Team, dan Enterprise, perintah ini merinci penggunaan Anda berdasarkan skill, subagent, plugin, dan server MCP. Perintah ini juga menandai pola seperti konteks panjang atau cache miss yang sering setelah salah satunya melewati 10% penggunaan Anda. Dari sana, perbaikan yang biasa:
423 493
424## Otomatisasi dan skalakan494* `/clear` di antara tugas yang tidak terkait. Tidak ada biayanya, dan artinya tugas berikutnya tidak terus membayar riwayat tugas sebelumnya. `/clear oauth-migration` memberi nama sesi yang Anda tinggalkan, sehingga Anda dapat kembali ke sesi itu nanti.
495* `/compact` dengan fokus, seperti `/compact keep the API changes and the test commands`. Pada sesi panjang, `/compact` sendiri merupakan permintaan besar, karena membaca seluruh percakapan untuk meringkasnya, terlebih lagi setelah cache kedaluwarsa.
496* Awasi pekerjaan latar belakang: `/loop`, pemeriksaan goal setelah setiap giliran, dan subagent milik Claude sendiri semuanya terus mengirim permintaan saat Anda tidak mengetik.
425 497
426Setelah Anda efektif dengan satu Claude, kalikan output Anda dengan sesi paralel, mode non-interaktif, dan pola fan-out.498> [!NOTE]
499>
500> [Prompt cache](https://code.claude.com/docs/id/prompt-caching.md) bertahan sekitar satu jam pada langganan dan lima menit pada kunci API, penyedia cloud, atau kredit penggunaan. Subagent mendapat lima menit kecuali Anda mengubahnya.
501>
502> Pada cache satu jam, sesi yang melewati sekitar 200K token dan dibiarkan menganggur akan menjalani compaction sesaat sebelum cache kedaluwarsa, sehingga setelah makan siang Anda melanjutkan dari sebuah ringkasan. Jika Anda sama sekali tidak membutuhkan riwayatnya, sesi baru tetap lebih murah.
427 503
428### Jalankan mode non-interaktif504## Arahkan sesi
429 505
430> [!TIP]506> [!TIP]
431>507>
432> Gunakan `claude -p "prompt"` di CI, pre-commit hooks, atau skrip. Tambahkan `--output-format stream-json --verbose` untuk output JSON streaming.508> Awasi menit pertama, tekan `Esc` begitu Claude menyimpang, dan setelah dua koreksi yang gagal jalankan `/clear` dan tulis prompt yang lebih baik alih-alih koreksi ketiga.
433 509
434Dengan `claude -p "your prompt"`, Anda dapat menjalankan Claude secara non-interaktif, tanpa prompt interaktif. Jalankan masih membuat sesi yang dapat dilanjutkan kecuali Anda melewatkan `--no-session-persistence`. [Mode non-interaktif](https://code.claude.com/docs/id/headless.md) adalah cara Anda mengintegrasikan Claude ke dalam pipeline CI, pre-commit hooks, atau alur kerja otomatis apa pun. Format output memungkinkan Anda mengurai hasil secara terprogram: teks biasa, JSON, atau JSON streaming.510Sebanyak apa pun konfigurasi tidak menggantikan mengawasi menit pertama dan turun tangan ketika Claude menuju ke arah yang tidak Anda maksudkan. Hanya ada beberapa kontrol untuk itu, dan semuanya layak dihafal:
435 511
436```bash theme={null}512* `Esc` menghentikan Claude di tengah tindakan dan mempertahankan semuanya hingga titik itu, sehingga Anda dapat mengarahkan ulang tanpa kehilangan pekerjaan.
437# One-off queries513* `/rewind`, atau `Esc` dua kali pada prompt kosong, membuka [menu rewind](https://code.claude.com/docs/id/checkpointing.md#rewind-and-summarize), di mana Anda mengembalikan kode, percakapan, atau keduanya ke prompt sebelumnya. Hal itu membuat mencoba pendekatan yang lebih berani terlebih dahulu menjadi berisiko rendah, lalu melakukan rewind jika tidak berhasil. Menu yang sama juga dapat meringkas bagian percakapan yang sudah basi.
438claude -p "Explain what this project does"514* `/clear` memulai dari awal. Jika Anda sudah mengoreksi hal yang sama dua kali dan masih salah, koreksi ketiga sebagian besar hanya menambah percakapan yang sudah berisi dua upaya gagal yang terus dibaca ulang oleh Claude. `/clear` ditambah satu prompt baru yang menggabungkan apa yang Anda pelajari hampir selalu lebih berhasil.
439
440# Structured output for scripts
441claude -p "List all API endpoints" --output-format json
442 515
443# Streaming for real-time processing516> [!WARNING]
444claude -p "Analyze this log file" --output-format stream-json --verbose517>
445```518> Checkpoint mencakup file yang diedit Claude dengan tool file miliknya sendiri di percakapan utama Anda, sehingga file yang hanya disentuh oleh perintah Bash [tidak dipulihkan](https://code.claude.com/docs/id/checkpointing.md#bash-command-changes-not-tracked). Checkpoint bekerja berdampingan dengan git, bukan menggantikannya.
446 519
447Perintah pertama mencetak teks biasa. Format `json` mengembalikan satu objek JSON dengan bidang `result`. Format `stream-json` mencetak satu objek JSON per baris, dimulai dengan acara init.520Dua kontrol yang lebih kecil: [`/btw`](https://code.claude.com/docs/id/interactive-mode#side-questions-with-%2Fbtw) menjawab pertanyaan singkat tanpa menambahkan apa pun ke riwayat. Dan untuk pekerjaan yang berlangsung beberapa hari, `/rename oauth-migration` di sesi memberinya nama, sehingga [`claude --resume oauth-migration`](https://code.claude.com/docs/id/sessions#resume-by-session-id-or-name) dari shell Anda dapat melanjutkannya nanti, termasuk checkpoint-nya. `claude --continue` melanjutkan sesi terbaru.
448 521
449### Jalankan beberapa sesi Claude522## Biarkan Claude berjalan tanpa Anda
450 523
451> [!TIP]524> [!TIP]
452>525>
453> Jalankan beberapa sesi Claude secara paralel untuk mempercepat pengembangan, menjalankan eksperimen terisolasi, atau memulai alur kerja kompleks.526> Sebelum sebuah run berjalan tanpa pengawasan, pastikan run tersebut tahu seperti apa kondisi selesai, dapat memeriksa pekerjaannya sendiri, dan hanya dapat menyentuh apa yang seharusnya. Berikan batas giliran atau pengeluaran, dan minta seseorang menyetujui hasilnya di akhir.
454
455Pilih pendekatan paralel yang sesuai dengan seberapa banyak koordinasi yang ingin Anda lakukan sendiri, dan tambahkan pesan ketika sesi perlu melewatkan temuan satu sama lain:
456 527
457* [Worktrees](https://code.claude.com/docs/id/worktrees.md): jalankan sesi CLI terpisah dalam checkout git terisolasi sehingga edit tidak bertabrakan528Semua yang ada di halaman ini menjadi sedikit lebih penting ketika Anda tidak ada untuk menangkap kesalahan. Saat Anda mengawasi, Claude yang melewatkan sebagian konteks bukan masalah besar: Anda menyadarinya dalam satu atau dua pesan dan memberitahunya. Dalam run yang Anda mulai sebelum tidur, tidak ada yang memberitahunya, dan Anda baru mengetahui keesokan paginya bahwa Claude menghabiskan semalaman membangun di atas asumsi yang salah.
458* [Cross-session messaging](https://code.claude.com/docs/id/cross-session-messaging.md): biarkan sesi yang Anda jalankan sendiri melewatkan temuan satu sama lain
459* [Aplikasi desktop](https://code.claude.com/docs/id/desktop.md#work-in-parallel-with-sessions): kelola beberapa sesi lokal secara visual, masing-masing dalam worktree-nya sendiri
460* [Claude Code di web](https://code.claude.com/docs/id/claude-code-on-the-web.md): jalankan sesi di cloud, pada infrastruktur yang dikelola Anthropic secara default
461* [Agent view](https://code.claude.com/docs/id/agent-view.md): pratinjau penelitian. Jalankan `claude agents` untuk mengirim sesi yang terus berjalan di latar belakang dan tonton dari satu layar
462* [Agent teams](https://code.claude.com/docs/id/agent-teams.md): eksperimental dan dinonaktifkan secara default. Koordinasi otomatis dari beberapa sesi dengan tugas bersama, pesan, dan pemimpin tim
463 529
464Selain paralelisasi pekerjaan, beberapa sesi memungkinkan alur kerja yang berfokus pada kualitas. Konteks segar meningkatkan tinjauan kode karena Claude tidak akan bias terhadap kode yang baru saja ditulisnya.530Sebelum Anda membiarkan sebuah tugas berjalan sendiri, ada baiknya menelusuri lima pertanyaan ini dengan memikirkan tugas spesifik tersebut:
465 531
466Sebagai contoh, gunakan pola Writer/Reviewer:5321. Apakah run tahu seperti apa kondisi selesai? Kondisi goal, file spesifikasi, atau tes gagal yang harus dibuatnya lulus.
5332. Dapatkah run memeriksa pekerjaannya sendiri? Rangkaian tes, hook `Stop`, semacam langkah review.
5343. Apa yang boleh disentuhnya? Aturan izin, `dontAsk`, sandbox, worktree, satu-satunya branch yang boleh di-push.
5354. Apa yang menghentikannya? `--max-turns`, `--max-budget-usd`, batas pengeluaran.
5365. Ke mana hasilnya pergi, dan siapa yang menyetujuinya? PR, komentar, atau ringkasan, lalu seseorang yang menyetujui merge, deploy, atau apa pun yang tidak dapat dibatalkan.
467 537
468| Sesi A (Penulis) | Sesi B (Peninjau) |538Setelah berjalan, Claude akan menyelesaikan tugas panjang sendiri. Bagian yang tetap menjadi tanggung jawab Anda adalah memulainya, memutuskan apa arti "selesai" kali ini, dan menyetujui merge di akhir.
469| - | - |
470| `Implementasikan rate limiter untuk endpoint API kami` | |
471| | `Tinjau implementasi rate limiter di @src/middleware/rateLimiter.ts. Cari kasus tepi, kondisi race, dan konsistensi dengan pola middleware yang ada.` |
472| `Berikut adalah umpan balik tinjauan: [output Sesi B]. Tangani masalah ini.` | |
473 539
474Anda dapat melakukan sesuatu yang serupa dengan tes: biarkan satu Claude menulis tes, kemudian yang lain menulis kode untuk lulus.540### Jalankan Claude dari skrip
475 541
476### Fan out di seluruh file542[`claude -p "prompt"`](https://code.claude.com/docs/id/headless) berjalan sekali lalu keluar, dan begitulah Claude Code akhirnya berada di job CI, git hook, dan loop shell.
477
478> [!TIP]
479>
480> Loop melalui tugas memanggil `claude -p` untuk masing-masing. Gunakan `--allowedTools` untuk menyetujui tool terlebih dahulu untuk operasi batch.
481 543
482Untuk migrasi besar atau analisis, Anda dapat mendistribusikan pekerjaan di seluruh banyak invokasi Claude paralel. Jalankan [`/batch <instruction>`](https://code.claude.com/docs/id/commands#all-commands) untuk membuat Claude membagi perubahan di seluruh 5 hingga 30 subagent. Setiap subagent bekerja dalam worktree-nya sendiri. Untuk menjalankan fan-out dari skrip Anda sendiri, loop melalui `claude -p`:544Dalam skrip, Anda hampir selalu menginginkan beberapa flag tambahan:
483 545
484**1. Hasilkan daftar tugas**546* [`--bare`](https://code.claude.com/docs/id/headless#start-faster-with-bare-mode) melewati hook, skill, plugin, server MCP, dan file `CLAUDE.md`, baik milik repo maupun milik mesin, sehingga run melakukan hal yang sama di mana pun dijalankan. Flag ini juga tidak pernah menyentuh login claude.ai Anda: autentikasi berasal dari `ANTHROPIC_API_KEY`, `apiKeyHelper` di file yang Anda berikan dengan `--settings`, atau kredensial penyedia cloud Anda.
547* `--append-system-prompt`, `--mcp-config`, dan `--settings` memasukkan apa pun yang *memang* dibutuhkan run, secara eksplisit.
548* `--allowedTools` menyetujui tool-nya terlebih dahulu, dan [`--permission-mode dontAsk`](https://code.claude.com/docs/id/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) menolak apa pun lainnya yang seharusnya memunculkan permintaan izin.
549* `--output-format json` memberi Anda satu objek hasil untuk di-parse, dan `stream-json` dengan `--verbose` mengalirkan event saat terjadi.
485 550
486Biarkan Claude menulis daftar file yang perlu dimigrasikan ke file, sehingga loop di langkah berikutnya dapat membacanya, dengan prompt seperti `list all 2,000 Python files that need migrating and save the list to files.txt`551Jika digabungkan, tampilannya seperti ini:
487
488**2. Tulis skrip untuk loop melalui daftar**
489 552
490```bash theme={null}553```bash theme={null}
491for file in $(cat files.txt); do554for file in $(cat files.txt); do
492 claude -p "Migrate $file from Python 2 to Python 3. Return OK or FAIL." \555 claude --bare -p "Migrate $file to the new logger API and commit. Reply OK or FAIL." \
493 --allowedTools "Edit,Bash(git commit *)" \556 --allowedTools "Read,Edit,Bash(git add *),Bash(git commit *)" \
494 --permission-mode dontAsk557 --permission-mode dontAsk \
558 --max-turns 20
495done559done
496```560```
497 561
498**3. Uji pada beberapa file, kemudian jalankan pada semua file**562Ketika sebuah run selesai, Claude membalas `OK` atau `FAIL`, dan run yang mencapai batas giliran keluar dengan error sebagai gantinya. Coba pada tiga file terlebih dahulu, lihat apa yang salah, perbaiki prompt-nya, lalu jalankan sisanya.
499
500Perbaiki prompt Anda berdasarkan apa yang salah dengan 2-3 file pertama, kemudian jalankan pada set lengkap. Flag `--allowedTools` menyetujui terlebih dahulu tool yang dibutuhkan migrasi. [`--permission-mode dontAsk`](https://code.claude.com/docs/id/permission-modes#allow-only-pre-approved-tools-with-dontask-mode) menolak apa pun lainnya yang memerlukan persetujuan, yang penting ketika Anda menjalankan tanpa pengawasan, meskipun [mod](https://code.claude.com/docs/id/plugins/mods/overview.md) yang Anda instal masih dapat menyetujui sebagian dari panggilan tersebut.
501 563
502Anda juga dapat mengintegrasikan Claude ke dalam pipeline pemrosesan/data yang ada:564Auto mode juga berfungsi dengan `-p` jika Anda memberikan `--permission-mode auto`. Dalam run non-interaktif, blok pengklasifikasi menolak tindakan tersebut dan Claude melanjutkan, dan blok berulang tidak menjeda run seperti yang terjadi di terminal. Baca [bagaimana ambang batas berlaku di sana](https://code.claude.com/docs/id/permission-modes.md#repeated-block-thresholds) sebelum Anda mengandalkannya.
503 565
504```bash theme={null}566### Mulai run berdasarkan jadwal atau event
505claude -p "<your prompt>" --output-format json | your_command
506```
507 567
508### Jalankan secara otonom dengan auto mode568Setelah sebuah run berjalan, Claude dapat menangani sisanya sendiri. Satu-satunya hal yang tidak dapat dilakukannya adalah memutuskan untuk *memulai*, jadi harus ada sesuatu yang memulainya: Anda, timer, atau event seperti pemeriksaan CI yang gagal atau PR baru.
509 569
510Untuk eksekusi tanpa gangguan dengan pemeriksaan keamanan latar belakang, gunakan [auto mode](https://code.claude.com/docs/id/permission-modes.md#eliminate-prompts-with-auto-mode). Model classifier meninjau perintah sebelum dijalankan, memblokir eskalasi cakupan, infrastruktur yang tidak dikenal, dan tindakan yang didorong konten bermusuhan sambil membiarkan pekerjaan rutin berjalan tanpa prompt.570Di dalam sesi yang terbuka, itulah [`/loop`](https://code.claude.com/docs/id/scheduled-tasks#run-a-prompt-repeatedly-with-%2Floop), yang mengulang sebuah prompt pada interval tertentu:
511 571
512```bash theme={null}572```text theme={null}
513claude --permission-mode auto -p "fix all lint errors"573/loop 15m check CI on this branch, and if it's red pull the failing job's log, fix it and push
514```574```
515 575
516Ketika classifier secara berulang memblokir tindakan dalam run non-interaktif dengan bendera `-p`, Claude Code tidak menghentikan run. Lihat [kapan auto mode kembali](https://code.claude.com/docs/id/permission-modes.md#when-auto-mode-falls-back) untuk apa yang terjadi sebagai gantinya dan untuk ambang batas.576Setiap run adalah giliran lain di sesi yang sama, jadi jangan biarkan satu berjalan di percakapan yang panjang. Untuk apa pun yang harus terjadi saat laptop Anda tertutup, [`/schedule`](https://code.claude.com/docs/id/routines#create-from-the-cli) menyiapkan [tugas terjadwal cloud](https://code.claude.com/docs/id/routines.md) yang berjalan berdasarkan timer. Ini membutuhkan login claude.ai, bukan kunci API. Anda dapat menambahkan trigger event GitHub dengan meminta Claude, atau trigger API di [claude.ai/code/routines](https://claude.ai/code/routines).
517
518### Tambahkan langkah tinjauan adversarial
519 577
520> [!TIP]578> [!WARNING]
521>579>
522> Sebelum menganggap tugas selesai, biarkan subagent meninjau diff dalam konteks segar dan melaporkan kesenjangan.580> Sebelum Anda membiarkan tugas terjadwal cloud berjalan, lindungi `main` dengan [aturan branch GitHub yang tidak dapat dilewati oleh tugas tersebut](https://code.claude.com/docs/id/routines.md#repositories-and-branch-permissions). Dan awasi beberapa run pertama dari apa pun yang baru sebelum memercayainya berjalan tanpa pengawasan.
523
524Semakin lama Claude bekerja tanpa pengawasan, semakin penting pemeriksaan independen sebelum Anda menghitung pekerjaan sebagai selesai. Peninjau yang berjalan dalam konteks [subagent](https://code.claude.com/docs/id/sub-agents.md) segar hanya melihat diff dan kriteria yang Anda berikan, bukan penalaran yang menghasilkan perubahan, sehingga mengevaluasi hasil berdasarkan istilahnya sendiri.
525 581
526Untuk pemeriksaan kebenaran, jalankan skill [`/code-review`](https://code.claude.com/docs/id/commands) yang disertakan, yang meninjau diff saat ini untuk bug dalam subagent segar dan mengembalikan temuan ke sesi. Untuk memeriksa diff terhadap rencana Anda, tulis prompt tinjauan sendiri. Beri nama pekerjaan untuk diperiksa, rencana untuk memeriksanya, dan apa yang dihitung sebagai temuan:582### Jalankan sesi secara paralel
527 583
528```text wrap theme={null}584Ketika Anda memiliki beberapa pekerjaan terpisah yang berjalan bersamaan, berikan masing-masing checkout-nya sendiri agar edit tidak bertabrakan. [`claude -w feature-auth`](https://code.claude.com/docs/id/worktrees#start-claude-in-a-worktree) memulai sesi di worktree baru, [aplikasi desktop](https://code.claude.com/docs/id/desktop.md#work-in-parallel-with-sessions) menjalankan beberapa di antaranya berdampingan, dan [sesi cloud](https://code.claude.com/docs/id/claude-code-on-the-web.md) menjalankannya di cloud alih-alih di mesin Anda.
529Gunakan subagent untuk meninjau diff rate limiter terhadap PLAN.md. Periksa bahwa
530setiap persyaratan diimplementasikan, kasus tepi yang terdaftar memiliki tes, dan
531tidak ada yang di luar cakupan tugas yang berubah. Laporkan kesenjangan, bukan preferensi gaya.
532```
533 585
534Karena peninjau berjalan sebagai subagent, sesi implementasi menerima kesenjangan secara langsung dan dapat memperbaikinya dan meninjau ulang tanpa Anda menyalin temuan antar jendela.586Worktree adalah checkout baru, yang berarti file yang di-gitignore seperti `.env` tidak ada di sana dan dependensi belum terinstal. Untuk yang pertama, cantumkan file yang di-gitignore yang Anda butuhkan di [`.worktreeinclude`](https://code.claude.com/docs/id/worktrees#copy-gitignored-files-into-worktrees) di root repo (sintaksnya sama dengan `.gitignore`) dan Claude Code menyalinnya ke setiap worktree yang dibuatnya:
535 587
536Peninjau yang diminta untuk menemukan kesenjangan biasanya akan melaporkan beberapa, bahkan ketika pekerjaan itu solid, karena itulah yang diminta untuk dilakukan. Mengejar setiap temuan menyebabkan over-engineering: lapisan abstraksi ekstra, kode defensif, dan tes untuk kasus yang tidak dapat terjadi. Beri tahu peninjau untuk menandai hanya kesenjangan yang mempengaruhi kebenaran atau persyaratan yang dinyatakan, dan perlakukan sisanya sebagai opsional.588```text .worktreeinclude theme={null}
589.env
590.env.local
591config/dev-credentials.json
592```
537 593
538***594Batasi pada file kecil: file disalin, bukan ditautkan, sehingga `node_modules` di sana berarti salinan penuh per worktree. Untuk direktori besar ada pengaturan [`worktree.symlinkDirectories`](https://code.claude.com/docs/id/settings-reference#worktree-symlinkdirectories), atau simpan perintah instalasi di `CLAUDE.md` agar Claude menjalankannya setiap kali memulai di checkout baru.
539 595
540## Hindari pola kegagalan umum596Anda jarang harus membersihkan semua ini sendiri:
541 597
542Ini adalah kesalahan umum. Mengenalinya lebih awal menghemat waktu:598* Ketika Anda keluar dari sesi worktree tanpa nama, Claude Code [menghapus worktree](https://code.claude.com/docs/id/worktrees.md#clean-up-worktrees) jika tidak ada apa pun di dalamnya. Untuk sesi bernama, atau sesi dengan perubahan, Claude Code menanyakan apa yang harus dilakukan.
599* Worktree subagent menghilang ketika subagent selesai tanpa perubahan.
600* Worktree subagent dan sesi latar belakang yang tertinggal akan dibersihkan setelah usianya melebihi `cleanupPeriodDays` dan tidak berisi pekerjaan.
543 601
544* **Sesi kitchen sink.** Anda mulai dengan satu tugas, kemudian meminta Claude sesuatu yang tidak terkait, kemudian kembali ke tugas pertama. Konteks penuh dengan informasi yang tidak relevan.602> [!NOTE]
545 > **Perbaikan**: `/clear` antara tugas yang tidak terkait.603>
546* **Mengoreksi berulang kali.** Claude melakukan sesuatu yang salah, Anda memperbaikinya, masih salah, Anda memperbaiki lagi. Konteks tercemar dengan pendekatan yang gagal.604> Run `claude -p --worktree` adalah run yang harus Anda bersihkan sendiri, karena keluar tanpa bertanya. Hapus dengan `git worktree remove <path>`, dan jika git menolak karena worktree terkunci, jalankan `git worktree unlock <path>` terlebih dahulu.
547 > **Perbaikan**: Setelah dua koreksi yang gagal, `/clear` dan tulis prompt awal yang lebih baik menggabungkan apa yang Anda pelajari.
548* **CLAUDE.md yang terlalu spesifik.** Jika CLAUDE.md Anda terlalu panjang, Claude mengabaikan setengahnya karena aturan penting hilang dalam kebisingan.
549 > **Perbaikan**: Pangkas tanpa ampun. Jika Claude sudah melakukan sesuatu dengan benar tanpa instruksi, hapus atau ubah menjadi hook.
550* **Kesenjangan kepercayaan-kemudian-verifikasi.** Claude menghasilkan implementasi yang terlihat masuk akal tetapi tidak menangani kasus tepi.
551 > **Perbaikan**: Selalu berikan verifikasi (tes, skrip, tangkapan layar). Jika Anda tidak dapat memverifikasinya, jangan kirimkan.
552* **Eksplorasi tak terbatas.** Anda meminta Claude untuk "menyelidiki" sesuatu tanpa membatasinya. Claude membaca ratusan file, mengisi konteks.
553 > **Perbaikan**: Batasi investigasi secara sempit atau gunakan subagents sehingga eksplorasi tidak mengonsumsi konteks utama Anda.
554 605
555***606Untuk satu perubahan mekanis besar di banyak file, [`/batch migrate every handler to the v2 response helpers`](https://code.claude.com/docs/id/commands) membagi pekerjaan menjadi 5 hingga 30 unit dan menunjukkan rencananya kepada Anda. Kemudian perintah ini menjalankan setiap unit di worktree-nya sendiri dan membuka PR untuknya. Dari shell Anda, [`claude agents`](https://code.claude.com/docs/id/agent-view) (masih research preview) memberi Anda satu layar untuk semua yang berjalan di latar belakang di mesin Anda.
556 607
557## Kembangkan intuisi Anda608Sesi kedua juga merupakan peninjau independen termudah yang bisa Anda dapatkan. Satu sesi menulis rate limiter, sesi lain meninjau `@src/middleware/rateLimiter.ts` tanpa menyaksikan proses penulisannya, dan Anda menempelkan temuannya kembali ke sesi pertama. Idenya sama dengan `/code-review`, hanya saja Anda yang membawa pesannya.
558 609
559Pola dalam panduan ini bukan batu loncatan. Mereka adalah titik awal yang bekerja dengan baik secara umum, tetapi mungkin tidak optimal untuk setiap situasi.610## Apa yang dapat Anda hentikan
560 611
561Kadang-kadang Anda *harus* membiarkan konteks terakumulasi karena Anda mendalam dalam satu masalah kompleks dan riwayat berharga. Kadang-kadang Anda harus melewati perencanaan dan membiarkan Claude mengetahuinya karena tugas bersifat eksplorasi. Kadang-kadang prompt yang samar adalah tepat karena Anda ingin melihat bagaimana Claude menafsirkan masalah sebelum membatasinya.612Setiap saran ini adalah saran yang baik pada saat ditulis. Sebagian besar adalah solusi sementara untuk sesuatu yang belum dapat dilakukan model dengan andal, dan model sejak itu sudah mengejar ketertinggalannya. Jika beberapa masih menjadi kebiasaan, berikut alasan mengapa aman untuk meninggalkannya.
562 613
563Perhatikan apa yang berhasil. Ketika Claude menghasilkan output yang hebat, perhatikan apa yang Anda lakukan: struktur prompt, konteks yang Anda berikan, mode yang Anda gunakan. Ketika Claude berjuang, tanyakan mengapa. Apakah konteksnya terlalu bising? Prompt terlalu samar? Tugas terlalu besar untuk satu pass?614| Saran lama | Mengapa sudah tidak berlaku |
615| :- | :- |
616| Context window adalah batasan utama Anda, kelola secara agresif | Sebagian besar model saat ini memiliki window 1M token dan compaction terjadi dengan sendirinya, sehingga kehabisan konteks jarang terjadi. `/clear` di antara tugas masih layak dilakukan, karena konteks yang terfokus memberi Anda jawaban yang lebih baik dan lebih murah. |
617| Tambahkan IMPORTANT atau HURUF KAPITAL SEMUA pada instruksi yang terus dilewatkan Claude | Model lama terkadang membutuhkan penekanan. Model saat ini mengikuti baris yang dirumuskan dengan lugas, dan menumpuk penekanan sebagian besar justru membuat Claude menerapkan aturan secara berlebihan. Jika itu aturan yang tidak boleh dilanggar, jadikan hook atau aturan deny. Jika baris tersebut tenggelam dalam file yang panjang, file tersebut perlu dipersingkat. |
618| Gunakan subagent untuk melindungi context window Anda | Kehabisan konteks jarang menjadi masalah lagi. Subagent masih sangat baik untuk pekerjaan paralel, menjauhkan output yang ramai dari Anda, dan review independen, tetapi masing-masing menambah biaya token. |
619| Delegasikan ke subagent untuk jawaban yang lebih baik | Menyerahkan tugas yang sama ke subagent tidak membuat jawabannya lebih baik. Peninjau baru memang membantu, karena belum melihat penalaran Anda, tetapi itu hal yang berbeda dari mendelegasikan. |
620| `think hard`, `think harder`, `be thorough` dalam prompt | Effort adalah kontrol untuk itu. Frasa-frasa tersebut adalah teks prompt biasa yang sedikit mendorong Claude dalam batas pengaturan effort-nya, bukan kata kunci yang menaikkannya. `ultrathink` masih berfungsi: ini meminta penalaran yang lebih dalam untuk satu giliran itu saja tanpa menyentuh pengaturan effort Anda. |
621| Suruh Claude terus bekerja, loop sampai selesai, jangan malas | Model saat ini biasanya menuntaskan tugas yang telah disepakati tanpa perlu disuruh, dan baris seperti itu lebih mungkin menyebabkan kerja berlebihan daripada memperbaiki kemacetan. Memberi Claude pemeriksaan untuk diluluskan adalah hal yang berbeda, dan masih layak dilakukan. Jika sebuah run memang berhenti terlalu cepat, katakan `continue`, dan untuk run yang tidak diawasi siapa pun, `/goal` atau hook `Stop` akan menegakkannya. |
622| Jelaskan arsitektur dan tata letak file Anda di `CLAUDE.md` | Claude membaca repo sendiri. Tuliskan hanya apa yang tidak ada di sana. |
564 623
565Seiring waktu, Anda akan mengembangkan intuisi yang tidak dapat ditangkap oleh panduan apa pun. Anda akan tahu kapan harus spesifik dan kapan harus terbuka, kapan harus merencanakan dan kapan harus mengeksplorasi, kapan harus menghapus konteks dan kapan harus membiarkannya terakumulasi.624Jika saran lain di halaman ini suatu saat mulai terasa seperti pekerjaan sia-sia, itu mungkin tanda bahwa saran tersebut juga pantas masuk ke tabel ini.
566 625
567## Sumber daya terkait626## Sumber daya terkait
568 627
569* [Cara Claude Code Bekerja](https://code.claude.com/docs/id/how-claude-code-works.md): loop agentic, alat, dan manajemen konteks628* [Cara Claude Code bekerja](https://code.claude.com/docs/id/how-claude-code-works.md): loop, tool, dan apa yang dimuat saat startup
570* [Perluas Claude Code](https://code.claude.com/docs/id/features-overview.md): skills, hooks, MCP, subagents, dan plugins629* [Jelajahi context window](https://code.claude.com/docs/id/context-window.md): apa yang menggunakan ruang dalam sesi dan kapan dimuat
571* [Alur kerja umum](https://code.claude.com/docs/id/common-workflows.md): resep langkah demi langkah untuk debugging, pengujian, PR, dan lainnya630* [Perluas Claude Code](https://code.claude.com/docs/id/features-overview.md): pilihan antara skill, hook, MCP, subagent, dan plugin
572* [CLAUDE.md](https://code.claude.com/docs/id/memory.md): simpan konvensi proyek dan konteks persisten631* [Pilih mode izin](https://code.claude.com/docs/id/permission-modes.md) dan [Konfigurasi izin](https://code.claude.com/docs/id/permissions.md)
632* [Kelola biaya secara efektif](https://code.claude.com/docs/id/costs.md)
633* [Jalankan Claude Code secara terprogram](https://code.claude.com/docs/id/headless.md) dan [Otomatiskan pekerjaan dengan tugas terjadwal cloud](https://code.claude.com/docs/id/routines.md)
634* Untuk pemimpin tim dan admin: [Siapkan Claude Code untuk organisasi Anda](https://code.claude.com/docs/id/admin-setup.md)