Cara Mengorganisasi Direktori agar Agen AI Tidak Mengubah Kode yang Salah dalam Monolit yang Membesar
Ketika Anda menghubungkan Claude Code atau Aider ke repositori tunggal berukuran ratusan ribu baris, agen tersebut akan mulai membaca dari berkas yang salah. Jendela konteks model terbatas, namun saat mengumpulkan berkas yang tidak relevan, model akan menghabiskan batas token dan memodifikasi kode yang salah.
Masalah ini tidak dapat diselesaikan hanya dengan menulis prompt yang panjang. Anda harus memperkecil radius fisik kode yang dijelajahi oleh agen dan menanamkan aturan verifikasi mekanis secara lokal.
1. Memisahkan Direktori yang Menyebabkan Referensi Melingkar (Circular Dependency)
Titik di mana agen terjebak dalam penjelajahan tak terbatas pada repositori monolit biasanya ada di tiga tempat: folder utilitas umum tempat fungsi pembantu serabutan berkumpul (src/utils/), lapisan layanan tempat logika bisnis saling terikat (src/services/), dan direktori model global (src/models/). Ketika ketiga folder ini mulai saling merujuk, agen harus membaca puluhan berkas hanya untuk memperbaiki satu baris kode.
Dengan mengelompokkan folder yang dibagi berdasarkan lapisan teknis ke dalam unit domain untuk diisolasi, rentang penjelajahan akan berkurang.
| Kategori |
Struktur Berpusat Lapisan |
Struktur Pemisahan Domain |
Perubahan Perilaku Agen |
| Kriteria Folder |
Pemisahan lapisan teknis (/controllers, /services) |
Pemisahan domain (/domains/order) |
Hanya mencari berkas yang diperlukan dalam satu folder |
| Koneksi Dependensi |
Impor entitas global secara langsung |
Berkomunikasi melalui batas antarmuka domain |
Mencegah fenomena pemuatan berantai hingga ke berkas yang tidak relevan |
| Logika Umum |
Fungsi tercampur dalam satu src/utils/ |
Dipisahkan menjadi utilitas khusus domain dan paket umum |
Mencegah kontaminasi konteks global yang tidak perlu |
Urutan untuk memindahkan direktori tanpa menghentikan layanan yang sedang berjalan adalah sebagai berikut:
- Periksa hubungan dependensi yang dipanggil secara berlebihan oleh agen untuk menentukan domain yang akan dipisahkan.
- Buat antarmuka batas layanan untuk memutus referensi langsung antar-domain.
- Pindahkan logika bisnis terkait ke folder
src/domains/{nama_domain}/ dan perbarui alias jalur di tsconfig.json.
- Masukkan berkas konfigurasi khusus domain tersebut (
CLAUDE.md) di dalam subdirektori yang telah dipisahkan.
2. Mengubah Aturan Bahasa Alami yang Ambigu menjadi Batasan Numerik
Konvensi penulisan kode yang ditulis panjang lebar dalam bahasa alami sering kali dilewatkan begitu saja oleh agen. Anda harus menempatkan angka yang jelas dan hal-hal yang dilarang di bagian atas berkas konfigurasi agar instruksi dipatuhi secara akurat.
`markdown
Batasan Proyek (Ditempatkan di bagian atas CLAUDE.md)
- Keamanan dan Penanganan Pengecualian
- NEVER allow raw SQL string concatenation. ALWAYS use parameterized queries with ORM.
- NEVER throw generic Exception or Error. ALWAYS throw domain-specific exceptions inheriting from BaseDomainException.
- ALWAYS enforce tenant_id filtering in all database queries under src/domains/.
- Batasan Numerik Struktur Kode
- Functions MUST NOT exceed 40 lines of code.
- Cyclomatic complexity MUST be kept under 8 per function.
- ALWAYS return Result<T, E> pattern for business layer operations instead of null.
`
Jika berkas konfigurasi melebihi 200 baris, instruksi di bagian belakang sering kali terlewat.
- Di
CLAUDE.md pada direktori root, pertahankan perintah build dan aturan commit global di bawah 200 baris.
- Aturan folder subdirektori seperti
src/domains/order/ disebar ke berkas aturan khusus di dalam direktori tersebut.
- Tulis pengaturan pribadi pengembang di
CLAUDE.local.md dan daftarkan ke .gitignore untuk mencegah konflik.
3. Memverifikasi Kode Modifikasi Agen Secara Otomatis dengan Hook Lokal
Kesalahan sintaks atau bug regresi dari kode yang dibuat oleh agen harus ditangkap secara otomatis pada tahap commit. Menggunakan Lefthook yang beroperasi dengan biner tunggal Go memungkinkan Anda menjalankan pemeriksaan paralel yang lebih ringan daripada alat berbasis Node.js.
Letakkan lefthook.yml di root untuk memisahkan pemeriksaan statis yang ringan dan tahap pengujian yang berat.
`yaml
pre-commit:
parallel: true
commands:
linter:
glob: ".{ts,tsx}"
run: npx eslint --fix {staged_files}
stage_fixed: true
formatter:
glob: ".{ts,tsx,json,md}"
run: npx prettier --write {staged_files}
stage_fixed: true
security-scan:
run: gitleaks git --staged --no-banner
pre-push:
parallel: false
commands:
typecheck:
run: npx tsc --noEmit
unit-tests:
run: npm run test:unit -- --passWithNoTests
`
pre-commit pada tahap commit hanya memeriksa berkas yang di-stage dalam waktu 10 detik, sementara pemeriksaan tipe keseluruhan dan pengujian unit dialihkan ke tahap push yaitu pre-push.
Daftarkan interseptor .claude/hooks/block-no-verify.mjs agar agen tidak dapat melewati hook dengan menggunakan opsi --no-verify.
`javascript
import fs from 'fs';
const input = fs.readFileSync(0, 'utf8');
const parsed = JSON.parse(input);
if (parsed.tool_input?.command?.includes('--no-verify')) {
console.error("Policy Violation: `--no-verify` flag is strictly prohibited.");
process.exit(1);
}
process.exit(0);
`
Jika hook gagal, output error konsol akan masuk ke prompt berikutnya sehingga agen dapat memperbaiki kodenya sendiri.
4. Mencegah Pemborosan Token dengan Membatasi Cakupan Penjelajahan
Jika agen mulai membaca hasil build atau berkas lock, token akan cepat terkuras. Anda dapat mencegah timbulnya biaya yang tidak disengaja dengan menutup rentang penjelajahan berkas.
Buat .ignore atau .aiderignore di root proyek dan daftarkan artefak berukuran besar.
`text
node_modules/
dist/
build/
coverage/
*.min.js
*.svg
*.lock
package-lock.json
public/assets/
db/migrations/
`
Saat menjalankan perintah di terminal, tentukan direktori kerja untuk memblokir pemindaian global.
`bash
aider "Refactor Order validation logic" --path=src/domains/order/ --exclude=src/domains/order/tests/
`
Sebelum memodifikasi kode, pastikan untuk memeriksa perubahan dalam mode perencanaan (plan mode), menulis pengujian unit yang gagal terlebih dahulu, lalu membuat kode yang lolos pengujian tersebut agar radius kerja agen tetap aman.