Claude Code di Monorepo: CLAUDE.md Bertingkat dan Skill

Beberapa. Simpan berkas root yang pendek untuk hal yang benar di mana-mana — repo ini apa, cara membangunnya, aturan kerasnya — dan taruh konvensi khusus paket di berkas memori di sebelah tiap paket. Berkas memori bersifat komposabel, jadi agen mengambil konvensi area yang sedang ia kerjakan.
Cukup pendek sehingga Anda rela membayarnya di setiap sesi, karena memang begitu: ia dimuat di awal sesi apa pun yang Anda kerjakan. Panduan resminya menyarankan di bawah sekitar dua ratus baris dan memindahkan instruksi alur kerja yang detail ke skill yang hanya dimuat saat dipanggil.
Bersikaplah spesifik dalam permintaan, pasang code intelligence untuk bahasa bertipe agar lompat-ke-definisi menggantikan pembacaan berkas spekulatif, delegasikan pencarian luas ke subagent yang konteksnya menyerap tumpahan berkas, dan beri tiap paket ikhtisar satu paragraf agar agen tidak perlu menyimpulkannya sendiri.
Sepadan untuk dua atau tiga tugas bersamaan, dengan satu catatan: tiap worktree butuh dependensi terpasang sendiri dan keluaran build sendiri, jadi pemakaian disk dan waktu instalasi berlipat. Lebih dari sekitar tiga, biaya penyiapannya melampaui manfaat paralelismenya. Jangan pernah mengarahkan dua agen ke paket yang sama di worktree berbeda.
Kalau mesin bisa memeriksanya, mesinlah yang harus. Format, urutan impor, dan aturan dependensi antar paket adalah milik formatter, linter, dan pemeriksaan build. Berkas memori sebaiknya memuat hal yang hanya bisa diberitahukan manusia: kenapa sebuah paket ada, apa yang tidak boleh ia lakukan, dan keputusan mana yang sudah final.

Ringkasan Utama
Monorepo mematahkan satu CLAUDE.md tunggal karena tidak ada satu himpunan konvensi yang benar di mana-mana. Struktur yang berhasil adalah berkas memori root yang pendek, berkas tingkat paket di sebelah tiap aplikasi, prosedur yang dipindahkan ke skill, dan git worktree terpisah agar agen paralel tidak pernah menyunting working tree yang sama.
Nasihat tentang agentic coding kebanyakan ditulis untuk repositori satu layanan, di mana satu berkas memori masuk akal menggambarkan seluruh proyek. Monorepo langsung mematahkan asumsi itu: front end dan API berbeda pendapat soal pengujian, dua paket punya aturan lint berbeda, dan proses rilis hanya berlaku untuk satu dari dua belas paket.
Menuliskan semuanya ke dalam satu berkas root menghasilkan dokumen yang tak seorang pun rawat dan dibayar setiap sesi. Alternatifnya adalah mendistribusikan pengetahuan dengan cara yang sama seperti kode didistribusikan.
Tiga masalah terpisah muncul begitu sebuah repositori punya lebih dari beberapa paket independen.
Panduan resminya menyarankan menjaga berkas memori yang selalu dimuat tetap berisi hal esensial saja — kira-kira dua ratus baris — dan memindahkan instruksi khusus ke skill yang dimuat sesuai kebutuhan. Di monorepo, nasihat itu bukan opsional, itu satu-satunya yang bisa berskala.
Berkas memori bersifat komposabel: Claude Code membaca lapisan enterprise, user, dan project, dan berkas di dalam subdirektori berlaku ketika pekerjaan terjadi di sana. Itu persis bentuk yang dibutuhkan monorepo.
monorepo/
CLAUDE.md # short: what the repo is, how to build, hard rules
apps/
web/CLAUDE.md # Next.js conventions, only loaded for web work
api/CLAUDE.md # NestJS conventions, module layout, test command
packages/
ui/CLAUDE.md # component rules, story requirements
domain/CLAUDE.md # invariants that must never be broken
.claude/
skills/
release/SKILL.md # the release runbook, invoked on demand
migration/SKILL.md # how to write and verify a DB migration
# Root CLAUDE.md stays under a couple of hundred lines. Everything that
# is only true inside one package lives next to that package, and
# everything procedural becomes a skill that loads when it is needed.Aturan yang saya pakai untuk memutuskan tempat sesuatu: kalau benar di mana-mana, taruh di root; kalau benar di dalam satu paket, taruh di sebelah paket itu; kalau berupa prosedur berlangkah, jadikan skill. Apa pun yang tidak cocok dengan ketiganya biasanya konvensi yang seharusnya ditegakkan linter alih-alih dijelaskan dalam prosa.

Di repositori besar, kegagalan bawaannya adalah biaya eksplorasi — agen mem-grep, membuka lima berkas kandidat, dan separuh konteks Anda habis sebelum ada kode yang ditulis. Empat hal memperbaiki sebagian besarnya.
Bersama-sama, keempatnya mengubah bentuk sebuah sesi: lebih sedikit membaca, lebih cepat menyunting, dan context window yang masih lapang saat keputusan menarik akhirnya tiba.
Tuliskan perintah build dan tes tiap paket ke berkas memori paket itu, persis seperti yang Anda ketik. Sebagian besar giliran terbuang di monorepo adalah agen menebak filter workspace atau mantra task runner mana yang berlaku di sini.
Menjalankan dua agen dalam satu working tree adalah race condition dengan antarmuka yang manis. Git worktree memberi tiap tugas checkout-nya sendiri dari repositori yang sama, dan itu isolasi termurah yang mungkin.
# One worktree per task keeps two agents from editing the same file.
git worktree add ../repo-invoices -b feature/invoice-pdf
git worktree add ../repo-flaky -b fix/flaky-order-test
# Each directory is a normal checkout with its own node_modules and its
# own Claude Code session. Nothing is shared except the object store.
cd ../repo-invoices && claude
cd ../repo-flaky && claude
# When the branch lands, remove the worktree rather than deleting the folder.
git worktree remove ../repo-flakyDi monorepo ada satu catatan yang layak direncanakan: tiap worktree butuh dependensi terpasang sendiri dan keluaran build sendiri, jadi ruang disk dan waktu instalasi berlipat. Dua atau tiga worktree bersamaan biasanya titik manisnya; lebih dari itu biaya penyiapannya melampaui manfaat paralelismenya.
Jangan mengarahkan dua agen ke paket yang sama di worktree berbeda. Keduanya akan menghasilkan dua refactor yang sama-sama masuk akal atas berkas yang sama, dan hasil merge-nya lebih buruk daripada salah satunya. Pisahkan berdasarkan paket atau berdasarkan urusan, jangan berdasarkan ambisi.

Instruksi berbentuk prosa adalah alat yang lemah untuk aturan yang bisa diperiksa mesin. Di monorepo rasionya makin penting, karena aturannya lebih banyak dan tempat melanggarnya juga lebih banyak.
Berkas memorinya lalu menyusut menjadi hal yang hanya bisa diberitahukan manusia: kenapa paket ini ada, apa yang tidak boleh ia lakukan, dan keputusan mana yang sudah final.
Anda tidak butuh migrasi besar. Urutan ini memberi manfaat pada sore hari pertama.
Langkah terakhir itulah yang berbunga. Isi terbaik untuk berkas-berkas ini tidak ditulis di muka; ia adalah koreksi yang Anda dapati sendiri mengetiknya untuk kedua kali.
Monorepo tidak butuh berkas instruksi yang lebih besar, ia butuh distribusi pengetahuan yang sama seperti yang sudah dimiliki kodenya. Root yang pendek, paket ber-scope, prosedur sebagai skill, isolasi lewat worktree, dan aturan mekanis yang ditegakkan perkakas — dengan itu semua di tempatnya, agen berperilaku seperti developer yang tahu ia sedang berdiri di bagian mana dari repositori.