Pelajari cara meminimalkan konteks sensitif di Claude Code dengan template prompt praktis, alur berbagi file, dan langkah redaksi yang tetap memberi bantuan pemrograman berguna.

"Konteks" adalah segala sesuatu yang Anda berikan kepada model untuk dikerjakan: potongan kode, stack trace, file konfigurasi, variabel lingkungan, contoh database, screenshot, dan bahkan pesan sebelumnya di chat yang sama. Lebih banyak konteks bisa mempercepat debugging, tapi juga meningkatkan peluang Anda menempelkan sesuatu yang tidak seharusnya dibagikan.
Oversharing biasanya terjadi di bawah tekanan. Bug menghalangi rilis, autentikasi rusak jelang demo, atau test flakey hanya gagal di CI. Pada saat itu mudah untuk menempelkan seluruh file, lalu seluruh log, lalu seluruh konfigurasi “untuk berjaga-jaga.” Kebiasaan tim bisa mendorong hal yang sama: di review kode dan debugging, visibilitas penuh itu normal, meskipun hanya sebagian kecil yang dibutuhkan.
Risikonya bukanlah sekadar hipotesis. Satu tempelan bisa membocorkan rahasia, data pelanggan, atau detail sistem internal. Contoh umum termasuk:
Tujuannya bukan untuk jadi tertutup. Tujuannya adalah berbagi potongan terkecil yang masih mereproduksi masalah atau menjelaskan keputusan, sehingga Anda mendapat kualitas bantuan yang sama dengan paparan yang lebih kecil.
Model mental sederhana: anggap asisten seperti rekan kerja eksternal yang membantu dan tidak memerlukan seluruh repo Anda. Mulai dengan satu pertanyaan yang tepat ("Mengapa request ini mengembalikan 401?"). Lalu bagikan hanya yang mendukung pertanyaan itu: input yang gagal, keluaran yang diharapkan, keluaran aktual, dan jalur kode sempit yang terlibat.
Jika panggilan login gagal, biasanya Anda tidak perlu seluruh modul autentikasi. Pasangan request/response yang disanitasi, fungsi yang membangun header, dan kunci konfigurasi relevan (dengan nilai diganti) seringkali sudah cukup.
Saat Anda minta bantuan pemrograman, “konteks” bukan hanya kode sumber. Ini apa pun yang bisa membantu seseorang masuk, mengidentifikasi seseorang, atau memetakan sistem Anda. Mulailah dengan mengetahui apa yang toksik untuk ditempel.
Kredensial mengubah potongan bantuan menjadi insiden. Ini termasuk API key dan token, private key, session cookie, signed URL, OAuth client secret, password database, dan token "sementara" yang tercetak di log.
Kejutan umum adalah kebocoran tidak langsung. Pesan error mungkin berisi header request penuh dengan bearer token Authorization, atau dump debug variabel lingkungan.
Data apa pun yang terkait dengan orang bisa sensitif, meskipun terlihat tidak berbahaya sendiri. Waspadai email, nama, nomor telepon, alamat, ID pelanggan, ID karyawan, tiket dukungan dengan percakapan, dan detail pembayaran.
Jika Anda butuh data untuk mereproduksi bug, tukar record asli dengan yang palsu namun realistis. Pertahankan bentuknya (field dan tipe), bukan identitasnya.
Fakta internal yang terlihat “membosankan” sangat berharga bagi penyerang dan pesaing: hostname, IP, nama repo, ID tiket, nama vendor, ketentuan kontrak, dan URL layanan internal.
Bahkan satu stack trace bisa mengungkap path folder dengan username atau nama klien, konvensi penamaan layanan, dan petunjuk akun cloud (nama bucket, string region).
Tidak semua kode sama tingkat sensitifnya. Bagian paling berisiko adalah yang mengenkode cara bisnis Anda bekerja: aturan harga dan diskon, pemeriksaan fraud, logika rekomendasi, template prompt untuk fitur LLM, dan dokumen strategis.
Jika Anda perlu bantuan bug, bagikan fungsi terkecil yang mereproduksi masalah, bukan seluruh modul.
Detail sensitif sering ikut terbawa di tempat yang tidak Anda sadari: komentar dengan nama, pesan commit, TODO yang merujuk pelanggan, dan stack trace yang ditempel "apa adanya." File konfigurasi sangat berisiko karena mencampur pengaturan yang aman dengan rahasia.
Aturan praktis: jika teks itu membantu orang memahami sistem Anda lebih cepat daripada contoh clean-room, anggap itu sensitif dan redaksi atau ganti.
Waktu terbaik untuk mengurangi paparan adalah sebelum Anda membuka editor. Berhenti 30 detik untuk mendefinisikan hasil seringkali memangkas sebagian besar yang akan Anda bagikan.
Mulai dengan menamai hasil yang Anda inginkan dalam satu kalimat. Apakah Anda mencoba menemukan penyebab bug, mendapatkan rencana refaktor yang aman, atau merancang test? Tiap tujuan butuh input berbeda. Pemburuan bug biasanya butuh satu stack trace dan fungsi kecil. Pertanyaan refaktor seringkali hanya perlu antarmuka publik dan contoh singkat penggunaan saat ini.
Lalu pilih satu “artefak minimal” yang membuktikan masalah. Pilih hal terkecil yang masih gagal: satu test yang gagal, potongan terkecil yang memicu error, cuplikan log singkat di sekitar kegagalan, atau contoh konfigurasi yang disederhanakan dengan placeholder.
Saat Anda mendeskripsikan data, utamakan bentuknya ketimbang nilainya. "Objek user memiliki id (UUID), email (string), role (enum), createdAt (timestamp)" hampir selalu cukup. Jika Anda butuh contoh, gunakan yang palsu namun sesuai format, bukan record asli.
Bersikap ketat soal file. Bagikan hanya modul yang Anda ubah plus antarmuka yang disentuhnya. Jika sebuah fungsi memanggil modul lain, seringkali Anda hanya butuh signature dan deskripsi singkat tentang apa yang dikembalikan. Jika bug melibatkan request ke layanan lain, Anda mungkin hanya butuh bentuk request, daftar nama header (bukan nilainya), dan bentuk response yang diharapkan.
Tetapkan batas keras yang tidak pernah meninggalkan mesin Anda: API key, sertifikat privat, token akses, data pelanggan, URL internal, dump repo lengkap, dan log produksi mentah. Jika Anda sedang debugging 401, bagikan alur autentikasi dan pesan error, tapi ganti token dengan TOKEN_REDACTED dan email dengan [email protected].
Redaksi yang baik bukan sekadar menyembunyikan rahasia. Ia mempertahankan struktur masalah sehingga asisten masih dapat menganalisisnya. Menghapus terlalu banyak membuat saran menjadi generik. Menghapus terlalu sedikit berisiko membocorkan data.
Pilih gaya placeholder dan gunakan secara konsisten di seluruh kode, konfigurasi, dan log. Konsistensi memudahkan mengikuti alur.
Jika token yang sama muncul di tiga tempat, jangan ganti jadi tiga placeholder berbeda. Gunakan placeholder seperti API_KEY_1, TOKEN_1, USER_ID_1, CUSTOMER_ID_1, EMAIL_1, dan inkremen bila perlu (TOKEN_2, TOKEN_3).
Legenda singkat membantu tanpa mengungkap nilai nyata:
TOKEN_1: bearer token yang dipakai di header AuthorizationCUSTOMER_ID_1: identifier pelanggan internal yang dipakai di lookup databaseAPI_KEY_1: key yang dipakai untuk memanggil provider pembayaranBeberapa bug bergantung pada panjang dan struktur (parsing, validasi, pengecekan signature, regex). Dalam kasus itu, ganti string unik dengan nilai dummy yang tampak sama.
Contoh:
Ini memungkinkan Anda berkata "token gagal validasi" tanpa mengekspos token asli.
Saat membagikan JSON, pertahankan kunci dan ganti nilai. Kunci menunjukkan apa yang diharapkan sistem; nilai seringkali bagian sensitif.
Daripada:
{"email":"[email protected]","password":"SuperSecret!","mfa_code":"123456","customer_id":"c8b1..."}
Bagikan:
{"email":"EMAIL_1","password":"PASSWORD_1","mfa_code":"MFA_CODE_1","customer_id":"CUSTOMER_ID_1"}
Ide yang sama untuk SQL: pertahankan nama tabel, join, dan kondisi, tapi hapus literal.
WHERE user_id = USER_ID_1 AND created_at > DATE_1Jika sebuah fungsi memuat aturan bisnis atau logika proprietari, deskripsikanlah. Pertahankan apa yang memengaruhi bug: input, output, efek samping, dan penanganan error.
Contoh ringkasan yang masih membantu:
"signRequest(payload) mengambil payload JSON, menambahkan timestamp dan nonce, lalu membuat signature HMAC SHA-256 dari method + path + body. Ia mengembalikan {headers, body}. Error terjadi ketika payload berisi karakter non-ASCII."
Itu biasanya cukup untuk mendiagnosis masalah encoding, canonicalization, dan mismatch signature tanpa mengekspos implementasi penuh.
Di akhir prompt Anda, nyatakan apa yang Anda hapus dan apa yang Anda pertahankan. Ini mencegah bolak-balik dan mengurangi kemungkinan Anda diminta menempel lebih banyak.
Contoh:
"Redacted: tokens, emails, customer data, full request bodies. Kept: endpoint paths, status codes, header names, stack trace frames, and the exact error text."
Perlakukan asisten seperti rekan kerja yang hanya perlu bagian yang sedang Anda kerjakan. Bagikan antarmuka dan kontrak alih-alih seluruh file: signature fungsi, tipe, bentuk request/response, dan teks error yang tepat.
Repro minimal dalam bahasa biasa seringkali cukup: input yang Anda gunakan, apa yang diharapkan, apa yang terjadi, dan beberapa catatan lingkungan (versi runtime, OS, versi framework). Anda tidak perlu riwayat proyek penuh.
Template yang cenderung berhasil:
Blok konfigurasi yang disanitasi adalah jalan tengah yang berguna. Ia menunjukkan kenop apa yang ada tanpa mengekspos rahasia:
# sanitized
DB_HOST: "\u003cset\u003e"
DB_PORT: "5432"
DB_USER: "\u003cset\u003e"
DB_PASSWORD: "\u003credacted\u003e"
JWT_SECRET: "\u003credacted\u003e"
OAUTH_CLIENT_ID: "\u003cset\u003e"
OAUTH_CLIENT_SECRET: "\u003credacted\u003e"
Contoh prompt aman:
"Login gagal dengan 401. Diharapkan 200. Body respon aktual: ‘invalid token’. Lingkungan: Node 20, dev lokal, time sync enabled. Kontrak request: Authorization: Bearer \u003credacted\u003e. Langkah verifikasi: token diterbitkan oleh /auth/login dan dipakai di /me. Apa penyebab teratas (clock skew, audience mismatch, signing secret mismatch), dan pengecekan tunggal apa yang mengonfirmasi masing-masing?"
Kebiasaan yang andal adalah memperlakukan berbagi seperti mengemas reproduksi kecil. Bagikan cukup untuk mendiagnosis masalah, dan tidak lebih.
Satu pendekatan praktis adalah folder “share” sementara yang terpisah dari repo nyata Anda. Salin file ke dalamnya secara manual alih-alih membagikan seluruh proyek. Itu memaksa pilihan yang disengaja.
Sederhanakan alur kerja:
Setelah Anda membuat folder, bacalah seperti orang luar. Jika file tidak membantu debugging masalah spesifik, ia tidak pantas ada di sana.
Saat Anda meredaksi, hindari merusak kode atau log. Ganti nilai dengan placeholder jelas yang mempertahankan tipe dan struktur. Contoh:
DATABASE_URL=postgres://user:[email protected]:5432/app
menjadi:
DATABASE_URL=postgres://user:REDACTED@localhost:5432/app
Jika bug bergantung pada response pihak ketiga, tuliskan bentuk response di README dan sertakan file JSON sintetis yang cocok. Anda bisa mendapat debugging yang bermakna tanpa berbagi traffic nyata.
Gunakan loop yang dapat diulang sehingga Anda tidak mengimprovisasi saat tertekan.
Tulis dua kalimat dulu.
Kumpulkan input minimum. Bawa hanya yang membantu mereproduksi atau menganalisis masalah: potongan kecil di sekitar baris yang gagal, teks error yang tepat, versi relevan, dan 3–5 langkah reproduksi.
Redaksi tanpa meratakan struktur. Ganti rahasia dengan placeholder dan pertahankan bentuk. Hapus identifier yang tidak memengaruhi perilaku (nama proyek, tenant ID, email). Pertahankan placeholder konsisten.
API_KEY=sk_live_...
becomes
API_KEY=\u003cAPI_KEY\u003e
customer-1234-prod-db
becomes
\u003cDB_HOST_PROD\u003e
Ajukan pertanyaan terfokus. Padukan “Apa penyebab paling mungkin?” dengan “Apa yang harus saya ubah?” Jika Anda menginginkan patch, minta perubahan yang terbatas pada potongan yang Anda berikan, dan minta asumsi diberi label.
Verifikasi lokal, lalu tambahkan satu detail baru. Uji saran. Jika gagal, tambahkan hanya satu informasi baru (baris stack trace berikutnya, satu flag konfigurasi, repro yang dipersempit). Jangan langsung menempelkan seluruh file.
Pengungkapan bertahap ini biasanya memberi jawaban nyata sambil menjaga rahasia dan kode yang tidak relevan keluar dari prompt.
Situasi umum: login bekerja di laptop dan staging, tapi gagal di produksi. Anda butuh bantuan cepat, tapi tidak boleh menempel token nyata, email pengguna, hostname internal, atau middleware auth penuh.
Mulai dari apa yang bisa Anda amati: bentuk request dan response, status code, dan stack trace singkat. Jika terkait JWT, Anda juga bisa membagikan detail header yang tidak sensitif (seperti algoritma yang diharapkan) dan detail waktu (seperti drift waktu server). Pertahankan sisanya sebagai placeholder.
Bundel aman sering kali meliputi:
Lalu ajukan pertanyaan yang terfokus. Kegagalan auth hanya di produksi sering disebabkan oleh clock skew, issuer/audience salah, key signing berbeda, rotasi kunci hilang, atau perbedaan proxy/header.
Pola prompt:
I have a production-only login/auth failure. Locally it passes.
Observed behavior:
- Endpoint: POST /api/login
- Production response: 401 with message "invalid token" (generic)
- Staging/local: 200
Sanitized request/response:
- Authorization: Bearer \u003cJWT_REDACTED\u003e
- Expected claims: iss=\u003cISSUER_PLACEHOLDER\u003e, aud=\u003cAUDIENCE_PLACEHOLDER\u003e
- Token validation library: \u003cLIB_NAME_AND_VERSION\u003e
Sanitized log snippet:
\u003cPASTE 5-10 LINES WITH TOKENS/EMAILS/HOSTS REDACTED\u003e
Question:
Given this, what are the top causes of JWT validation failing only in production, especially clock skew or claim mismatch? What specific checks and log lines should I add to confirm which one it is?
Setelah Anda mendapat hipotesis, verifikasi dengan perubahan yang aman. Tambahkan logging sementara yang hanya mencetak fakta non-sensitif (exp, iat, now, dan kode alasan kegagalan). Tulis test kecil yang memberi token fixture aman (atau token yang di-generate lokal) dan asert perilaku validator untuk edge case.
Rencana sederhana:
Cara tercepat menghilangkan manfaat privasi adalah membagikan “satu hal kecil” yang diam-diam berisi segalanya. Menempelkan .env penuh atau file konfigurasi adalah contoh klasik. Bahkan jika Anda menghapus rahasia yang jelas, file-file itu sering memasukkan hostname internal, nama layanan, feature flag, dan petunjuk lingkungan yang memetakan sistem Anda.
Stack trace penuh adalah kebocoran lain yang sering terjadi. Mereka bisa memasukkan username, nama mesin, nama repo, dan path absolut seperti /Users/alex/company-payments/.... Terkadang mereka juga memasukkan query string, header HTTP, atau objek error dengan token. Jika Anda butuh trace, salin hanya frame relevan dan ganti path dengan placeholder konsisten.
Payload pelanggan nyata berisiko walau kecil. Satu body JSON bisa berisi email, alamat, ID order, atau catatan teks bebas. Langkah lebih aman adalah membuat payload palsu dengan bentuk dan edge case yang sama (field hilang, string panjang, karakter aneh), tanpa nilai nyata.
Placeholder yang tidak konsisten juga menyusahkan. Jika USER_ID berarti “customer id” di satu tempat dan “internal account id” di tempat lain, Anda akan mendapat diagnosis yang salah. Pilih skema dan gunakan.
Jika pesan Anda akan membantu orang asing login, menemukan server Anda, atau mengidentifikasi pelanggan, lakukan satu putaran lagi redaksi.
Saat Anda berusaha hati-hati, kecepatan adalah musuh. Rutinitas singkat membantu Anda mendapat jawaban yang berguna sambil menjaga data sensitif keluar dari prompt.
Lakukan satu putaran untuk rahasia, lalu putaran kedua untuk identifier yang tetap mengekspos sistem Anda:
Setelah Anda meredaksi, pertahankan bentuk. Tinggalkan tipe, skema, nama field, status code, dan struktur payload contoh, tapi tukar nilai nyata dengan placeholder.
Untuk menjaga konsistensi (terutama saat tertekan), tuliskan seperangkat aturan redaksi kecil dan gunakan ulang. Untuk tim, ubah menjadi template bersama dengan dua blok: “what I’m sharing” (file, fungsi, endpoint) dan “what I’m not sharing” (rahasia, data produksi, domain internal).
Jika Anda ingin lapisan keamanan tambahan, lakukan eksperimen di lingkungan terisolasi dan jaga agar perubahan dapat dibalik. Di Koder.ai (koder.ai), planning mode dapat membantu Anda merancang perubahan terkecil yang diperlukan untuk menguji hipotesis, dan snapshot plus rollback memudahkan mencoba perbaikan tanpa menyeret konteks sensitif ke dalam prompt.
Mulailah dengan potongan terkecil yang bisa menjawab pertanyaan Anda: input yang gagal, keluaran yang diharapkan vs aktual, dan jalur kode sempit yang terlibat.
Bundel default yang baik biasanya:
Jangan paste:
.env penuh/konfigurasi lengkap atau log produksi mentahJika itu akan membantu orang asing untuk login, mengidentifikasi seseorang, atau memetakan sistem Anda, lakukan redaksi atau ringkasan.
Gunakan placeholder yang konsisten sehingga alur tetap terbaca.
Contoh skema:
TOKEN_1, TOKEN_2API_KEY_1USER_ID_1, Pertahankan format ketika bug bergantung pada parsing atau validasi.
Kasus umum:
8-4-4-4-12Ini membuat perilaku tetap realistis tanpa mengekspos nilai asli.
Tunjukkan kunci dan struktur, ganti nilai.
Untuk JSON:
Untuk SQL:
Contoh:
Ringkas dalam istilah input, output, dan aturan spesifik yang memengaruhi bug.
Ringkasan praktis mencakup:
Seringkali ini memberi nilai debugging yang sama tanpa mengungkapkan implementasi Anda.
Template aman sederhana terlihat seperti:
Sertakan juga catatan redaksi seperti:
“Redacted: tokens, emails, customer data, internal hostnames. Kept: endpoint paths, status codes, header names, exact error text.”
Karena mereka sering mengandung segalanya sekaligus:
Alternatif yang lebih aman adalah template konfigurasi:
Gunakan pengungkapan bertahap:
Ini menjaga cakupan kecil dan mencegah kebocoran yang tidak disengaja saat tertekan.
Bundel praktis adalah:
Lalu tanyakan:
CUSTOMER_ID_1EMAIL_1Tambahkan legenda singkat bila perlu:
TOKEN_1: bearer token Authorization yang dipakai di /meCUSTOMER_ID_1: identifier yang dipakai di lookup databaseWHERE user_id = USER_ID_1 AND created_at > DATE_1\u003cset\u003e atau \u003credacted\u003e