CLAUDE.md Adalah: Contoh File, Lapisan, dan Urutan Memuatnya
CLAUDE.md adalah file instruksi Claude Code. Pelajari lapisan managed, user, project, dan local, cara kerja @import, serta kapan aturan pindah ke skill.
Oleh Matthews WongDitinjau pada Dicek dengan Claude Code v2.1.296
Poin utama
CLAUDE.md adalah file Markdown berisi instruksi yang dimuat Claude Code di setiap sesi. File dari empat cakupan, yaitu managed, user, project, dan local, digabung berurutan tanpa saling menimpa, dimulai dari yang paling luas; file di subfolder baru dimuat saat Claude bekerja di sana. Buat tetap ringkas, pindahkan prosedur ke skill, dan dukung setiap aturan keras dengan hook, permission, atau test.
Setelah pelajaran ini, Anda bisa
- Menaruh instruksi di lapisan CLAUDE.md yang tepat dan memperkirakan urutan Claude membacanya.
- Memutuskan apakah sebuah aturan masuk ke CLAUDE.md, path-scoped rule, skill, atau hook.
- Memastikan lewat /context apa yang benar-benar termuat, bukan sekadar mengira-ngira.
Ikuti diagramnya langkah demi langkah
Tekan Putar, atau melangkah dengan panah. Setiap langkah juga ditulis di bawah diagram.
Bagaimana file CLAUDE.md dimuat ke konteks Claude
File instruksi dari empat cakupan masuk ke konteks secara berurutan setelah system prompt, import ikut dimuat di awal, file di subfolder menunggu sampai ada file yang dibaca, dan hanya pengecekan di luar CLAUDE.md yang bisa menegakkan aturan.
Ditinjau pada 13 Oktober 2026 · Claude Code v2.1.296
Tombol: ← → langkah · Home / End · K putar atau jeda
Claude Code membaca file CLAUDE.md dari empat cakupan: organisasi Anda, Anda di semua proyek, tim Anda di repo ini, dan Anda sendiri di repo ini.
Saat sesi dimulai, keempat file digabung dengan urutan itu, dari yang paling luas, setelah system prompt. Tidak ada yang menimpa; jika dua file bertentangan, Claude bisa mengikuti yang mana saja.
Baris @path ikut memuat file lain saat sesi dimulai, bersama CLAUDE.md yang menyebutnya. Import merapikan file yang panjang, tetapi memakan konteks yang sama persis.
- git workflow @docs/git.mdTebak langkah berikutnya Claude kini membaca src/api/app.ts. Apa yang terjadi pada src/api/CLAUDE.md? (Masuk ke konteks saat itu juga · Tidak ada: sudah dimuat sejak awal · Menggantikan CLAUDE.md di root)CLAUDE.md di dalam subfolder menunggu. File itu baru masuk ke konteks saat Claude pertama kali membaca, menulis, atau mengedit file di folder tersebut.
Dokumentasi menyarankan di bawah 200 baris per file. Milik repo ini lebih dari 500 baris, jadi prosedur blog yang panjang lebih tepat dipindah ke skill yang dimuat hanya saat perlu.
.claude/skills/publishing-blog-posts/SKILL.mdTebak langkah berikutnya Apakah aturan di CLAUDE.md mencegah Claude melanggarnya? (Ya, asalkan ditulis di file project · Tidak, hanya pengecekan yang bisa gagal)CLAUDE.md adalah permintaan, bukan jaminan. Repo ini memasangkan aturan kerasnya dengan pengecekan yang bisa gagal, seperti cek paritas yang menghentikan build.
`assertBlogParity()` fails the build otherwise.Jalankan /context dan baca daftar Memory files. Jika sebuah file tidak ada di sana, Claude tidak melihat satu kata pun darinya.
/context
Di mana file CLAUDE.md disimpan, dan bagaimana urutan memuatnya?
CLAUDE.md bisa berada di empat tempat. File managed yang dipasang tim IT berlaku untuk semua orang di mesin itu dan tidak bisa dikecualikan. File user di ~/.claude/CLAUDE.md berlaku untuk Anda di semua proyek. File project, ./CLAUDE.md atau ./.claude/CLAUDE.md, di-commit agar seluruh tim memakainya. CLAUDE.local.md menyimpan catatan pribadi Anda untuk satu proyek dan sebaiknya masuk .gitignore.
Baca selengkapnya (2)Tutup
Claude Code tidak memilih salah satunya. Semua file di direktori kerja dan direktori di atasnya dimuat lalu digabung, dimulai dari cakupan yang paling luas, sehingga instruksi project dibaca setelah instruksi user. Di setiap direktori, CLAUDE.local.md dibaca setelah CLAUDE.md. CLAUDE.md di subfolder di bawah tempat Anda memulai sesi baru dimuat belakangan, yaitu saat Claude pertama kali membaca, menulis, atau mengedit file di folder itu.
Karena tidak ada yang saling menimpa, instruksi yang bertentangan adalah bug. Jika file user Anda bilang npm dan file project bilang pnpm, dokumentasi memperingatkan bahwa Claude bisa memilih salah satunya secara acak. Di repo ini, file project hanya berisi fakta tentang situs ini; preferensi yang berlaku di semua proyek ada di file user milik penulis, yang tidak pernah di-commit.
Bagaimana cara kerja @import di CLAUDE.md?
Tulis @path/ke/file di bagian mana pun dalam CLAUDE.md, dan Claude Code memuat file itu ke konteks saat sesi dimulai, bersama file yang merujuknya. Path relatif dihitung dari file yang mengimpor, bukan dari folder tempat Anda menjalankan Claude, dan import bisa bersarang sampai empat tingkat. Path di dalam backtick atau code block tidak diimpor, jadi Anda bisa menyebut sebuah file tanpa memuatnya.
Baca selengkapnya (1)Tutup
Import itu untuk merapikan, bukan untuk berhemat. File yang diimpor dimuat di awal persis seperti teks biasa, jadi memecah file 600 baris menjadi lima import tetap memakan konteks yang sama. Untuk menunda instruksi sampai benar-benar dibutuhkan, pakai path-scoped rule di .claude/rules/ atau skill. Saat sebuah proyek pertama kali mengimpor file dari luar direktori kerja, Claude Code meminta persetujuan Anda.
Apa yang masuk ke CLAUDE.md, dan apa yang lebih tepat di skill atau hook?
CLAUDE.md untuk fakta yang Claude butuhkan di setiap sesi dan tidak bisa ditebak: perintah build dan test, konvensi yang berbeda dari kebiasaan umum, dan jebakan khas proyek. Dokumentasi menyarankan satu pertanyaan untuk tiap baris: "Kalau baris ini dihapus, apakah Claude akan membuat kesalahan?" Tur file satu per satu, tutorial, dan hal yang bisa Claude pahami dari membaca kode tidak perlu ditulis di sana.
Baca selengkapnya (2)Tutup
Prosedur bertahap, atau aturan yang hanya relevan untuk sebagian codebase, lebih baik ditaruh di tempat lain. Skill dimuat saat dibutuhkan, yaitu saat Anda memanggilnya atau saat Claude menilai skill itu relevan. Rule di .claude/rules/ dengan frontmatter paths hanya dimuat saat Claude menyentuh file yang cocok. Karena itulah pipeline publikasi blog di repo ini ada di skill publishing-blog-posts.
Apa pun yang wajib terjadi setiap kali sebaiknya jadi hook atau aturan permission. CLAUDE.md sampai ke Claude sebagai user message setelah system prompt, jadi ia membentuk perilaku tanpa memaksanya. Setiap aturan keras di repo ini punya pengaman yang gagal dengan sendirinya: assertBlogParity() menggagalkan build, merge script menolak JSON blog yang salah, dan sebuah test gagal jika gambar kembali muncul di post yang seharusnya tanpa gambar.
Seberapa panjang file CLAUDE.md yang ideal?
Dokumentasi menargetkan di bawah 200 baris per file. File yang lebih panjang memakan lebih banyak konteks dan menurunkan kepatuhan, dan Claude Code menampilkan peringatan saat start serta di /status jika sebuah file melewati panjang yang disarankan. Kalau Claude terus mengabaikan aturan yang sudah Anda tulis, kemungkinan besar filenya terlalu panjang dan aturan itu tenggelam.
Baca selengkapnya (1)Tutup
Tiga kebiasaan sederhana membantu. Komentar HTML level blok dibuang sebelum file sampai ke Claude, jadi catatan tentang alasan sebuah aturan tidak memakan konteks. Penekanan hanya efektif kalau jarang: tandai banyak baris dengan IMPORTANT dan tidak ada yang menonjol. Untuk file yang di-commit, /doctor mengusulkan bagian yang bisa dipangkas karena bisa disimpulkan dari kode, sedangkan /doctor prompt-audit mencari instruksi yang usang atau saling bertentangan.
Konfigurasi nyata di balik pelajaran ini
Kutipan dari repositori yang membangun dan men-deploy situs ini, apa adanya.
## Hard rules — build breaks if violated
1. **`messages/en.json` and `messages/id.json` must have the exact same key tree.** Missing key in either file → runtime error.
2. **No `{`, `}`, or `<` in blog `content.*` JSON values.** The merge script rejects them. Put markup in JSX; put ICU interpolation only in non-blog UI strings.
3. **Every slug in `BLOG_POSTS_STATIC` must have an entry in `BLOG_META` (and vice versa).** `assertBlogParity()` fails the build otherwise.
4. **Every component key read in a blog component must exist in the translation fragment.** The merge script validates this.
5. **Always import `Link`, `useRouter`, `usePathname` from `@/i18n/navigation`, not from `next/link` or `next/navigation`.** Bare Next.js navigation loses the locale prefix.Lima aturan, masing-masing satu baris, dan tiap aturan menyebut apa yang rusak kalau dilanggar. Inilah saran dokumentasi dalam praktik: cukup konkret untuk dicek, cukup pendek untuk dibaca di setiap sesi. Aturan 2 sampai 4 juga menyebut pengamannya, yaitu merge script atau assertBlogParity(), jadi aturan tetap berlaku walaupun suatu hari Claude salah membacanya.
npm run dev # Turbopack dev server → http://localhost:3000
npm run deck # regenerate public/Matthews-Wong-Profile.pdf (the 16:9 profile deck)
cd video && npm run film:intro # re-render the home page's parallax intro film (see video/README.md)
npm run build # Production build — runs assertBlogParity(), typecheck implicit
npm run lint # ESLint
npm run posts:stale # which posts are going stale, flagship topics first
npx tsc --noEmit # Explicit typecheck without buildingBlok Commands: bagian pertama setelah tabel stack. Isinya perintah yang tidak bisa ditebak Claude, misalnya render deck dan film milik repo ini, dan setiap komentar menjelaskan kegunaannya, sehingga Claude bisa memilih perintah yang tepat tanpa membaca package.json lebih dulu.
`npm run build` runs a `prebuild` step that fails if `lib/blog-sources.json` is
stale — regenerate with `npm run sources:build` after editing any sources block.Satu jebakan yang cukup ditulis sekali. Tanpa dua baris ini, Claude akan melihat build gagal setelah mengedit sebuah sources block dan harus mencari sendiri bahwa lib/blog-sources.json adalah file hasil generate. Baris ini memberi tahu penyebab sekaligus perbaikannya.
Kesalahan yang benar-benar membuang waktu
Menganggap CLAUDE.md sebagai mesin kebijakan
Baris seperti "jangan pernah mengedit .env" di CLAUDE.md hanyalah permintaan. Claude biasanya menurut, tetapi tidak ada yang menghentikan panggilannya. Apa pun yang wajib berlaku setiap kali butuh aturan deny di permission atau hook PreToolUse; pelajaran berikutnya membahas aturan itu.
Dua lapisan yang saling bertentangan
File digabung, bukan diperingkat, jadi "pakai npm" di file user dan "pakai pnpm" di file project membuat Claude harus memilih sendiri. Hapus pertentangannya, jangan berharap urutan pemuatan yang menyelesaikannya.
Memecah ke import demi menghemat konteks
Setiap @import dimuat saat sesi dimulai, jadi file panjang yang dipecah lima tetap memakan konteks yang sama. Pindahkan aturan untuk satu folder ke .claude/rules/ dengan frontmatter paths, dan prosedur ke skill.
Yang akan saya ubah di sini: panjangnya
CLAUDE.md di repo ini lebih dari 500 baris, jauh di atas target 200 baris. Sekitar 135 baris di bagian "Adding a blog post" mengulang prosedur yang sudah ada di skill publishing-blog-posts dan drawing-blog-diagrams. Memindahkannya akan menyisakan fakta dan aturan keras saja di file yang selalu dimuat.
| CLAUDE.md | Path-scoped rule | Skill | Hook | |
|---|---|---|---|---|
| Kapan dimuat | Setiap sesi, saat mulai | Saat Claude menyentuh file yang cocok | Saat dipanggil, atau saat Claude menilainya relevan | Jalan saat event-nya terjadi; tidak menambah konteks kecuali mengembalikan output |
| Paling cocok untuk | Perintah, konvensi, jebakan proyek | Aturan untuk satu folder atau jenis file | Prosedur dan materi referensi | Pengecekan yang wajib jalan setiap kali |
| Ditegakkan? | Tidak: hanya konteks | Tidak: hanya konteks | Tidak: Claude yang menerapkan | Ya: selalu terpicu |
Lakukan di komputer Anda sendiri
Anda hanya butuh Claude Code dan satu repositori git untuk bereksperimen. Sepuluh menit, tanpa instalasi tambahan.
Jalankan /init di repo latihan. Jika CLAUDE.md sudah ada, /init mengusulkan perbaikan, bukan menimpanya. Lalu hapus setiap baris yang bisa Claude simpulkan sendiri dari membaca kode.
/initTulis ulang aturan yang samar menjadi aturan yang bisa dicek, dan tinggalkan catatan untuk manusia dalam komentar HTML. Komentar dibuang sebelum Claude membaca file.
- Run `npm test` before committing - API handlers live in `src/api/handlers/` <!-- why: the API tests need a local Redis -->Pindahkan aturan yang hanya relevan untuk satu folder ke path-scoped rule. Rule itu hanya dimuat saat Claude membaca atau mengedit file yang cocok.
mkdir -p .claude/rules cat > .claude/rules/api.md <<'EOF' --- paths: - "src/api/**/*.ts" --- - All API endpoints must include input validation EOFBuat CLAUDE.md di subfolder lewat shell, bukan lewat Claude, supaya Anda bisa melihatnya dimuat nanti.
mkdir -p src/api && touch src/api/app.ts echo '- Use the shared error format in src/api/errors.ts' > src/api/CLAUDE.mdMulai sesi baru dan jalankan /context. CLAUDE.md di root ada di bawah Memory files, sedangkan src/api/CLAUDE.md belum. Minta Claude membaca src/api/app.ts dan perhatikan baris Loaded yang muncul.
/context
Tiga pertanyaan sebelum lanjut
Pilih jawaban untuk melihat kenapa benar atau salah. Tidak ada yang disimpan atau dinilai, jadi tebak saja dengan bebas.
Jawab dalam hati, lalu cek
1.~/.claude/CLAUDE.md Anda bilang "pakai npm" dan CLAUDE.md proyek bilang "pakai pnpm". Mana yang menang?Lihat jawabannya
Jawaban:Tidak ada yang menimpa. Keduanya digabung, file project dibaca belakangan, dan dokumentasi memperingatkan bahwa Claude bisa memilih yang mana saja. Hapus pertentangannya, jangan mengandalkan urutan.
2.Anda memecah CLAUDE.md 600 baris menjadi lima @import. Apakah konteksnya jadi lebih hemat?Lihat jawabannya
Jawaban:Tidak. File yang diimpor dimuat di awal sesi, sama seperti teks biasa. Untuk menunda pemuatan, pakai path-scoped rule atau skill.
3.Sebuah instruksi seolah hilang setelah /compact. Kemungkinan instruksi itu ada di mana?Lihat jawabannya
Jawaban:Instruksi itu hanya disampaikan lewat percakapan, atau ada di CLAUDE.md subfolder atau path-scoped rule yang belum dimuat ulang. CLAUDE.md di root proyek dibaca ulang dari disk setelah compaction.
4.Claude tidak boleh mengedit .env sama sekali. Cukupkah satu baris di CLAUDE.md?Lihat jawabannya
Jawaban:Tidak. CLAUDE.md adalah konteks, bukan penegak aturan. Pakai aturan deny di permission atau hook PreToolUse, yang diterapkan Claude Code apa pun keputusan Claude.
Bahasan mendalam terkait di situs ini
Sumber
Sumber primer yang diperiksa pada tanggal riset. Ikuti tautannya untuk versi terbaru.
- Dokumentasi Claude Code: memilih lokasi file CLAUDE.md
- Dokumentasi Claude Code: cara file CLAUDE.md dimuat
- Dokumentasi Claude Code: mengimpor file tambahan
- Dokumentasi Claude Code: rule khusus path
- Dokumentasi Claude Code: CLAUDE.md terlalu besar
- Dokumentasi Claude Code: menulis CLAUDE.md yang efektif
- Dokumentasi Claude Code: CLAUDE.md, skill, dan hook
- Dokumentasi Claude Code berbahasa Indonesia: cara Claude mengingat proyek Anda