Panduan Lengkap Menulis System Prompt Agent โ Pelajaran dari Reverse-Engineering Kode Claude
Saya men-decompile *system prompt* Claude Code, mempelajari *source code* DeepAgents, dan membangun AI agent sendiri dari nol. Kebanyakan panduan prompt di luar sana cuma modal *vibes*.

Saat ini, ada salah kaprah massal yang terjadi di dunia AI.
Setiap tutorial menyuruhmu menulis system prompt seolah-olah kamu sedang merapal mantra โ cukup temukan mantra yang pas dan modelnya akan patuh. "Kamu adalah seorang senior engineer yang SANGAT BERBAKAT dengan pengalaman 20 tahun..." Terdengar familier?
Beberapa bulan terakhir, saya sibuk membangun VibeCom, sebuah AI startup advisor yang melakukan riset pasar mendalam dan menghasilkan analisis sekelas VC. Sepanjang proses itu, saya melakukan reverse-engineering pada system prompt Claude Code, membaca source code middleware DeepAgents, dan membakar lebih banyak kredit API daripada yang berani saya akui. Pelajaran terbesarnya? Sebagian besar hal yang orang pikir penting soal system prompt, ternyata tidak. Dan hal-hal yang sebenarnya penting, hampir tidak pernah dibicarakan orang.
Artikel ini adalah playbook lengkapnya โ bukan sekadar ringkasan 5 menit, melainkan semua hal yang saya harap ada yang memberi tahu saya sebelum saya memulai. Siapkan kopimu.
1. Filosofi Desain: Percayalah pada Modelnya
"An agent is a model. Not a framework. Not a prompt chain." โ shareAI-lab/learn-claude-code
Gagasan ini mengubah segalanya bagi saya. LLM sudah tahu cara menalar, merencanakan, dan mengeksekusi. System prompt kamu tidak bertugas mengajarinya cara berpikir โ melainkan menyiapkan lingkungan kerja untuknya.
Anggap saja seperti merekrut seorang senior engineer. Kamu tidak memberinya daftar periksa berisi 20 langkah untuk setiap tugas. Kamu memberitahunya: ini identitas kita, ini batasannya, dan ini standar hasil yang bagus. Setelah itu, biarkan dia bekerja.
System prompt kamu hanya punya empat tugas utama:
- Beri tahu siapa dia โ peran dan identitas
- Beri tahu di mana batasannya โ batasan keamanan (safety constraints)
- Beri tahu seperti apa hasil yang bagus itu โ standar kualitas
- Beri dia tools โ kapabilitas dan pengetahuan
Itu saja. Sisanya cuma noise.
Mindset "Harness" (Lingkungan Kerja)
Harness = Tools + Knowledge + Observation + Action Interfaces + Permissions
System prompt kamu adalah buku panduan operasional untuk harness ini. Kamu tidak sedang merancang pipeline yang kaku โ kamu sedang merancang sebuah lingkungan di mana model bisa memberikan hasil kerja terbaiknya secara otonom.
Jangan menulis system prompt seperti flowchart. Model akan memutuskan sendiri urutan eksekusinya.
2. Struktur Prompt dan Urutan Bagian
Layout yang Direkomendasikan (Hasil Reverse-Engineering dari Claude Code v2.0.14)
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ 1. Identity โ โ Read first, anchors behavior
โ 2. Security & Safety โ โ IMPORTANT markers, non-negotiable
โ 3. Tone & Style โ โ Controls output format
โ 4. Core Workflow โ โ How to do the work
โ 5. Tool Usage Policy โ โ Tool selection priorities
โ 6. Domain Knowledge โ โ On-demand, not pre-loaded
โ 7. Environment Info โ โ Runtime context, dynamically injected
โ 8. Reminders โ โ Re-state critical rules
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ [Tool Definitions โ system-injected] โ โ Not editable, usually very long
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ [User Message] โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Kenapa Urutan Ini Penting
LLM memiliki kurva atensi berbentuk U โ mereka memberikan perhatian paling besar pada bagian awal dan akhir prompt kamu, dan mulai kehilangan fokus di bagian tengah. Ini adalah efek "Lost in the Middle", dan sudah terdokumentasi dengan baik.
- Identitas + Keamanan di paling atas: Model menetapkan peran dan batasan terlebih dahulu (efek primasi)
- Alur Kerja Utama di tengah-atas: Bagian paling penting โ bagaimana agent melakukan pekerjaannya
- Definisi Tool disuntikkan oleh sistem setelah prompt kamu: Definisi tool Claude Code memakan ~11.438 token. Ini berarti konten kustom kamu sebenarnya berada lebih dekat ke awal daripada yang kamu kira โ yang mana membantu tingkat kepatuhan model
- Pengingat di paling bawah: Memanfaatkan recency bias (bias kebaruan) untuk memperkuat aturan-aturan kritis
3. Menulis Setiap Bagian
3.1 Identitas โ Siapa Agent Ini?
Tujuan: Menjangkarkan (anchor) peran model dalam 1-3 kalimat.
You are Claude Code, Anthropic's official CLI for Claude.
You are an interactive agent that helps users with software engineering tasks.
Panduan:
- Tetap ringkas โ maksimal 1-3 kalimat
- Sebutkan perannya secara eksplisit (membantu model membedakan konteks)
- Nyatakan tanggung jawab utamanya ("membantu dalam hal X"), bukan sekadar "kamu adalah asisten yang membantu"
- Sebutkan SDK/platform jika relevan ("dibangun di atas Anthropic's Claude Agent SDK")
Anti-pattern:
- "Kamu adalah asisten AI yang membantu, tidak berbahaya, dan jujur" โ terlalu generik, tidak ada jangkar peran
- Satu paragraf penuh berisi latar belakang dan cerita (lore) โ membuang-buang token, model tidak butuh character development
3.2 Keamanan & Keselamatan โ Batasan Tegas
Tujuan: Menetapkan batasan perilaku yang tidak boleh dilanggar.
IMPORTANT: Assist with defensive security tasks only.
Refuse to create, modify, or improve code that may be used maliciously.
IMPORTANT: You must NEVER generate or guess URLs for the user.
Panduan:
- Gunakan awalan
IMPORTANT:โ hierarki instruksi dalam pelatihan Claude memberikan bobot ekstra pada kata ini - Gunakan bahasa absolut:
NEVER,MUST NOT,Refuse to - Nyatakan apa yang diizinkan DAN apa yang dilarang (batasan dua arah jauh lebih jelas)
- Letakkan di posisi paling atas, jangan dikubur di tengah-tengah
- Ulangi aturan keamanan yang kritis di bagian akhir โ Claude Code melakukan hal ini persis
Kenapa diulang? Efek primasi (awal) + Efek resensi (akhir) = penguatan ganda. Deklarasi keamanan Claude Code muncul di awal dan di akhir prompt. Bukan karena engineer-nya pelupa โ tapi karena mereka memahami kurva atensi berbentuk U.
3.3 Nada & Gaya Bahasa โ Mengontrol Output
Tujuan: Mengontrol format output dan gaya bahasa.
## Tone and style
- Your responses should be short and concise.
- Only use emojis if the user explicitly requests it.
- Use Github-flavored markdown for formatting.
- NEVER create files unless absolutely necessary.
Panduan:
- Buat daftar perilaku spesifik, bukan sekadar "bersikap profesional" yang ambigu
- Setiap aturan harus bisa diuji benar/salahnya ("singkat dan padat" vs. "usahakan untuk ringkas")
- Sertakan persyaratan format output (markdown? JSON? plain text?)
- Sertakan apa yang TIDAK boleh dilakukan โ banyak masalah gaya bahasa sebenarnya tentang melarang suatu perilaku
Permata dari Claude Code โ Objektivitas Profesional:
Prioritize technical accuracy and truthfulness over validating the user's beliefs.
Focus on facts and problem-solving, providing direct, objective technical info
without any unnecessary superlatives, praise, or emotional validation.
Paragraf ini sangat krusial: ini memblokir kecenderungan model untuk selalu setuju/menjilat (sycophancy). Jika agent kamu perlu memberikan penilaian objektif (code review, evaluasi ide, keputusan arsitektur), kamu mutlak membutuhkan klausul serupa.
3.4 Alur Kerja Utama โ Bagian Paling Penting
Tujuan: Mengajari model cara bekerja โ metodologi, bukan prosedur kaku.
Ini adalah bagian yang paling sulit ditulis dengan baik, dan memberikan dampak terbesar jika kamu melakukannya dengan benar.
Prinsip utamanya: berikan prinsip, bukan prosedur.
Beri tahu LLM seperti apa output yang bagus itu dan mengapa itu bagus โ biarkan dia mencari tahu cara mencapainya. Hindari mendikte jumlah field yang pasti, urutan langkah, atau format, kecuali output-nya akan dikonsumsi oleh mesin di proses selanjutnya.
Pendekatan Claude Code:
## Doing tasks
The user will primarily request software engineering tasks.
For these tasks the following steps are recommended:
- Use the TodoWrite tool to plan the task if required
Perhatikan kata "direkomendasikan" (recommended) โ bukan "kamu harus mengikuti langkah-langkah ini secara persis." Pilihan satu kata itu memberi model ruang untuk beradaptasi.
Definisi alur kerja yang baik:
1. Understand first โ read existing code before modifying it
2. Plan first โ break complex tasks into steps before executing
3. Minimal changes โ only change what's necessary, don't "refactor while you're in there"
4. Verify โ confirm your changes work (run tests, lint, etc.)
Setiap aturan memiliki alasan "mengapa" yang tersirat โ model dapat memahami maksudnya dan menggeneralisasinya ke skenario baru.
Anti-pattern:
- Prosedur 20 langkah yang kaku โ model akan mengeksekusi secara mekanis dan freeze saat menerima input yang tidak terduga
- "Pertama lakukan A, lalu lakukan B, lalu lakukan C" โ itu namanya prompt chain, bukan agent prompt
- Terlalu banyak memandu hal-hal yang sebenarnya sudah dikuasai LLM โ membuang-buang token
Saya belajar hal ini dari pengalaman pahit di VibeCom. Versi awal memiliki alur kerja riset 10 langkah. Model dengan patuh mengeksekusi ke-10 langkah tersebut bahkan ketika langkah ke-3 sebenarnya sudah menjawab pertanyaan user. Ketika saya beralih ke prinsip ("lakukan riset sampai kamu punya bukti yang cukup, lalu sintesiskan"), kualitasnya naik dan biaya tokennya turun.
Pengecualian: Ketika output dikonsumsi oleh mesin di tahap selanjutnya (komunikasi antar-agent, format response API), kamu harus mendefinisikan format yang ketat. Prinsip adalah untuk perilaku; skema adalah untuk interface.
3.5 Kebijakan Penggunaan Tool โ Mengatasi Ambiguitas
Tujuan: Ketika ada beberapa tool yang bisa melakukan hal yang sama, beri tahu model mana yang harus diprioritaskan.
## Tool usage policy
- Use specialized tools instead of bash commands:
- Read for reading files instead of cat/head/tail
- Edit for editing instead of sed/awk
- Grep for searching instead of grep/rg
- You can call multiple tools in a single response. If independent, call in parallel.
- Use the Task tool for file search to reduce context usage.
Panduan:
- Gunakan "alih-alih" (instead of) untuk menyatakan prioritas (A alih-alih B)
- Jelaskan mengapa harus memilih tool tertentu ("memberikan user experience yang lebih baik", "mengurangi penggunaan konteks")
- Definisikan strategi paralelisme (independen โ paralel, dependen โ sekuensial)
- Buat daftar batasan keamanan untuk penggunaan tool (validasi path, pengecekan permission)
Hubungan krusial antara tool dan prompt:
Definisi tool biasanya disuntikkan oleh sistem dan kamu tidak bisa mengeditnya secara langsung. Definisi tool Claude Code memakan ~11.438 token. Ini berarti:
- Jangan mengulang informasi yang sudah ada di definisi tool
- Gunakan system prompt untuk panduan strategis: kapan menggunakan setiap tool, mengapa lebih memilih satu daripada yang lain, urutan prioritas
- Kualitas definisi tool berdampak langsung pada efektivitas agent โ jika kamu membangun agent sendiri, investasikan waktu untuk menulis deskripsi tool yang sangat baik
3.6 Pengetahuan Domain โ Load Saat Dibutuhkan, Bukan di Awal
Tujuan: Menyediakan pengetahuan khusus yang mungkin tidak ada dalam data pelatihan model.
Prinsip kuncinya: progressive disclosure (pengungkapan bertahap), bukan knowledge dump (menumpuk informasi).
โ Paste all 200 API endpoints into the system prompt โ token explosion
โ
Give the model a tool to look things up โ "Load knowledge when you need it"
Strategi ini digunakan oleh sistem Skills milik Claude Code dan middleware Progressive Disclosure milik DeepAgents. Keduanya memuat pengetahuan saat dibutuhkan (on-demand) melalui pemanggilan tool alih-alih memuat semuanya di awal.
Pendekatan implementasi:
- Letakkan petunjuk di system prompt: "Gunakan tool get_api_docs untuk mengambil dokumentasi saat dibutuhkan"
- Gunakan CLAUDE.md / AGENTS.md untuk konteks proyek โ di-load saat runtime, bukan di-hardcode
- Gunakan Skills / SKILL.md untuk penemuan kapabilitas โ model melihat menu skill yang tersedia, lalu mengambil spesifikasi lengkapnya saat dibutuhkan
3.7 Info Lingkungan โ Konteks Runtime
Tujuan: Memberikan model kesadaran tentang lingkungan eksekusinya.
<env>
Working directory: /Users/fengliu/Desktop/tfm/vibecom
Is directory a git repo: true
Platform: darwin
Today's date: 2026-03-21
</env>
You are powered by the model named Claude Opus 4.6.
Panduan:
- Generate secara dinamis, jangan pernah di-hardcode
- Sertakan: working directory, platform, tanggal, nama model, status git
- Gunakan format terstruktur (tag XML atau code block) agar mudah di-parsing
- Tanggal itu penting โ model perlu tahu "kapan saat ini" untuk menilai kebaruan informasi
3.8 Pengingat โ Penguatan Terakhir
Tujuan: Menyatakan kembali aturan-aturan paling kritis di akhir prompt.
Claude Code mengulang batasan keamanan dan persyaratan TodoWrite di bagian bawah:
IMPORTANT: Assist with defensive security tasks only. [repeated]
IMPORTANT: Always use the TodoWrite tool to plan and track tasks. [repeated]
Panduan:
- Hanya ulangi 2-3 aturan yang paling kritis โ jangan menduplikasi semuanya
- Manfaatkan recency bias โ model mengingat konten terbaru dengan lebih kuat
- Kandidat terbaik: batasan keamanan, aturan yang paling sering dilanggar, pengingat alur kerja utama
4. Anggaran Token dan Manajemen Konteks
Referensi Alokasi Anggaran
| Bagian | Rekomendasi Token | Catatan |
|---|---|---|
| Identitas + Keamanan | 200-500 | Ringkas tapi tidak bisa ditawar |
| Nada & Gaya Bahasa | 300-800 | Aturan harus spesifik, tapi jangan bertele-tele |
| Alur Kerja Utama | 500-2.000 | Bagian terpenting, sepadan dengan investasinya |
| Kebijakan Penggunaan Tool | 300-1.000 | Tergantung jumlah tool |
| Pengetahuan Domain | 0-1.000 | Lebih baik di-load saat dibutuhkan |
| Info Lingkungan | 100-300 | Di-generate secara dinamis |
| Pengingat | 100-300 | Hanya ulangi yang esensial |
| Total bagianmu | 1.500-6.000 | |
| Definisi Tool (sistem) | 5.000-15.000 | Di luar kendalimu |
Kurva Degradasi Konteks
Pengujian komunitas (Reddit u/CodeMonkey_) telah memetakan degradasi kepatuhan di dunia nyata:
- < 80K token: Kepatuhan terhadap prompt tetap stabil
- 80K - 120K token: Kemampuan mengikuti instruksi mulai menurun
- > 120K token: Degradasi signifikan โ model "lupa" instruksi awal
- > 180K token: Degradasi parah
Context window 200K kamu โ 200K konteks yang efektif. Rencanakan dengan matang.
Strategi mitigasi:
- Jaga agar system prompt kamu tetap ramping (< 6.000 token untuk bagianmu)
- Gunakan peringkasan (summarization) untuk mengompresi riwayat percakapan (DeepAgents memicunya di ~80K karakter)
- Letakkan aturan kritis di kedua ujung prompt (atensi berbentuk U)
- Suntikkan tag
<system-reminder>di tengah percakapan (lebih lanjut di bagian 8)
5. Prinsip Penulisan
5.1 Berikan Prinsip, Bukan Prosedur
โ "Step 1: Read the file. Step 2: Find the bug. Step 3: Fix it. Step 4: Run tests."
โ
"Always understand existing code before modifying it. Verify your changes work."
Prinsip bisa digeneralisasi. Prosedur hanya bisa diikuti secara mekanis. Ketika model menghadapi situasi yang tidak kamu antisipasi, prinsip akan memandu keputusan yang tepat. Prosedur tidak.
Pengecualian: Ketika output dikonsumsi oleh mesin (komunikasi antar-agent, format API), definisikan skema yang ketat.
5.2 Gunakan Bahasa Absolut untuk Batasan Tegas
| Kekuatan | Bahasa | Gunakan Untuk |
|---|---|---|
| Larangan mutlak | NEVER, MUST NOT | Keamanan, operasi ireversibel |
| Persyaratan kuat | ALWAYS, MUST | Aturan alur kerja utama |
| Rekomendasi | recommended, prefer | Best practice dengan pengecualian |
| Saran | consider, you may | Optimasi opsional |
Contoh Claude Code:
NEVER update the git configโ larangan mutlakALWAYS prefer editing an existing fileโ kuat, tapi ada pengecualianThe following steps are recommendedโ alur kerja yang disarankan
5.3 Gunakan Contoh Alih-alih Penjelasan
## Code References
When referencing specific functions or pieces of code include
the pattern `file_path:line_number`.
<example>
user: Where are errors from the client handled?
assistant: Clients are marked as failed in the `connectToServer`
function in src/services/process.ts:712.
</example>
Satu contoh mengajarkan lebih banyak daripada 100 kata penjelasan:
- Model mempelajari pola dari contoh dengan lebih andal daripada dari deskripsi abstrak
- Bungkus dengan tag
<example>untuk memisahkannya dari aturan - Berikan contoh positif ("lakukan ini") dan negatif ("jangan lakukan ini")
- Gunakan contoh yang nyata dan spesifik โ bukan placeholder "foo/bar"
5.4 Batasan Dua Arah (Bidirectional Constraints)
โ
"Use dedicated tools: Read for reading files, Edit for editing files."
โ
"Do NOT use bash for file operations (cat, head, tail, sed, awk)."
Hanya mengatakan "lakukan ini" โ model tidak tahu kapan TIDAK boleh melakukannya. Hanya mengatakan "jangan lakukan ini" โ model tidak tahu alternatifnya. Dua arah โ jelas dan tidak ambigu.
5.5 Jelaskan Mengapa, Bukan Hanya Apa
โ "Don't use git commit --amend."
โ
"Avoid git commit --amend. ONLY use --amend when either
(1) user explicitly requested amend OR
(2) adding edits from pre-commit hook.
Reason: amending may overwrite others' commits."
Menjelaskan mengapa memungkinkan model membuat penilaian yang benar di kasus-kasus edge case. Protokol keamanan git Claude Code adalah sebuah masterclass โ setiap aturan menyiratkan alasannya.
5.6 Struktur Lebih Baik daripada Prosa
- Header Markdown (
##,###) โ model mengenali hierarki - Bullet list lebih baik dari paragraf โ setiap aturan dapat diuji secara independen
- Tag XML untuk konten khusus:
<example>,<env>,<system-reminder> - Tabel untuk perbandingan dan pemetaan
- Jangan pernah membuang teks tidak terstruktur โ prompt terstruktur secara konsisten mengungguli prosa bahasa natural dalam pengujian kepatuhan
6. Anti-Pattern yang Membuang-buang Tokenmu
Prompt Chain yang Menyamar Sebagai Agent
"First call tool A to get data.
Then call tool B with the result.
Then format the output as JSON.
Then save to file."
Ini bukan agent prompt โ ini adalah skrip pipeline. Model akan mengeksekusi secara mekanis dan kehilangan kemampuan perencanaan otonomnya.
Solusinya: Beri tahu model tujuan dan batasannya. Biarkan dia yang memutuskan langkah-langkahnya.
Flattery Engineering (Rekayasa Pujian)
"You are an EXTREMELY TALENTED and INCREDIBLY EXPERIENCED
senior software engineer with 20 years of experience..."
Pujian dan kata sifat superlatif tidak meningkatkan kualitas output. Model tidak punya ego untuk didongkrak. Simpan 15 token itu untuk aturan yang sebenarnya.
Knowledge Dump (Menumpuk Informasi)
"Here is the complete API documentation for our 200 endpoints..."
Ini melahap context window kamu dan mempercepat pembusukan konteks (context rot). Ganti dengan pemuatan on-demand:
"Use the get_api_docs tool to retrieve API documentation when needed."
Mengulang Deskripsi Tool
Jika definisi tool sudah mengatakan "Tool Read membaca file dari filesystem," jangan katakan lagi di system prompt kamu. Hanya tambahkan panduan strategis yang tidak dicakup oleh definisi tool โ kapan menggunakannya, mengapa lebih memilihnya, urutan prioritas.
Tidak Ada Penanganan Kegagalan (Failure Handling)
Tanpa panduan eksplisit, model akan mencoba ulang pemanggilan tool yang gagal dalam infinite loop. Selalu sertakan:
"If a tool call is denied, do not re-attempt the exact same call.
Think about why it was denied and adjust your approach."
Mengabaikan Pembusukan Context Window
Context window 200K โ 200K konteks yang efektif. Pengujian dunia nyata menunjukkan degradasi dimulai pada 80K. Kamu butuh strategi peringkasan (summarization).
7. Titik Injeksi dan Prioritas
Tiga Metode Kustomisasi Claude Code
| Metode | Menggantikan | Penempatan | Terbaik Untuk |
|---|---|---|---|
| Output Styles | Bagian "Tone and style" + "Doing tasks" | Tepat sebelum definisi tool | Mengubah gaya interaksi |
| --append-system-prompt | Tidak ada (bersifat aditif) | Setelah output style, sebelum definisi tool | Menambahkan perilaku spesifik |
| --system-prompt | Seluruh system prompt | Mempertahankan definisi tool + satu baris identitas | Kustomisasi penuh (opsi nuklir) |
Jika kamu menggunakan beberapa sekaligus: Output Style โ Append Prompt โ Tool Definitions
Hierarki Instruksi
Claude secara khusus dilatih dengan hierarki instruksi:
1. User's explicit instructions (CLAUDE.md, direct requests) โ Highest priority
2. Custom system prompt additions โ High
3. Default system prompt โ Medium
4. Tool definitions โ Reference level
Ini berarti:
- Aturan CLAUDE.md menimpa perilaku default system prompt
- Permintaan langsung dari user menimpa segalanya
- Prompt kustom kamu menimpa default prompt
Mekanisme Injeksi Dinamis
<system-reminder>โ disuntikkan ke pesan apa pun di tengah percakapan untuk mengingatkan model tentang aturan kritis- CLAUDE.md / AGENTS.md โ di-load saat runtime dari file, ditambahkan ke system prompt
- Skills / SKILL.md โ di-load saat dibutuhkan via pemanggilan tool, nol jejak di system prompt
8. Injeksi di Tengah Percakapan โ Senjata Rahasia
System prompt hanya muncul sekali, di bagian paling awal dari array pesan. Tapi LLM menerima seluruh array pesan (bergantian antara user / assistant / tool) sebagai input, dan kamu bisa menyuntikkan prompt ke dalam pesan user dan hasil tool juga. Claude Code sangat sering menggunakan teknik ini di production.
Kenapa Ini Diperlukan
Melawan pembusukan konteks (context rot). Seiring bertambah panjangnya percakapan, kepatuhan model terhadap instruksi system prompt menurun (terlihat jelas di 80K+ token). Menyuntikkan pengingat di tengah percakapan = menyegarkan kembali aturan melalui recency bias.
Model mentalnya:
- System prompt = konstitusi (ditetapkan sekali, otoritas jangka panjang)
- Pengingat di pesan user = memo (dikirim berkala, menjaga penegakan aturan)
Tiga Titik Injeksi dalam Array Pesan
Messages Array:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ System Prompt โ โ Appears once, primacy effect
โ (identity, safety, workflow...) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ User Message 1 โ
โ Assistant Message 1 โ
โ User Message 2 + <system-reminder> โ โ Mid-conversation injection
โ Assistant Message 2 โ
โ Tool Result + <system-reminder> โ โ Can inject into tool results too
โ ... โ
โ User Message N + <system-reminder> โ โ Latest message, strongest recency
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
| Lokasi | Keuntungan | Kerugian |
|---|---|---|
| System prompt | Efek primasi, dibaca pertama | Muncul sekali, "dilupakan" di percakapan panjang |
| Injeksi pesan user | Recency bias, refresh berkala | Setiap injeksi memakan biaya token |
| Injeksi hasil tool | Titik injeksi paling natural | Hanya berfungsi saat tool dipanggil |
Bagaimana Claude Code Sebenarnya Menggunakannya
Prasyarat โ deklarasikan tag di system prompt:
Tool results and user messages may include <system-reminder> tags.
<system-reminder> tags contain useful information and reminders.
They are automatically added by the system, and bear no direct
relation to the specific tool results or user messages in which they appear.
Langkah ini sangat kritis: ini memberi tahu model bahwa tag ini disuntikkan oleh sistem, bukan ucapan user.
Penggunaan 1: Pengingat Perilaku (refresh aturan berkala)
<system-reminder>
The task tools haven't been used recently. If you're working on tasks
that would benefit from tracking progress, consider using TaskCreate...
</system-reminder>
Claude Code menggunakan ini untuk mengingatkan model agar merencanakan dengan TodoWrite โ karena model cenderung "lupa" merencanakan dan langsung mulai coding.
Penggunaan 2: Pergantian Mode (Plan Mode)
<system-reminder>
Plan mode is active. The user indicated that they do not want you to
execute yet -- you MUST NOT make any edits, run any non-readonly tools,
or otherwise make any changes to the system.
</system-reminder>
Plan mode tidak diimplementasikan di system prompt. Itu adalah tag yang disuntikkan ke pesan user berikutnya. Ini memungkinkanmu mengganti mode secara dinamis tanpa memodifikasi system prompt. Brilian.
Penggunaan 3: Notifikasi Perubahan File
<system-reminder>
Note: /path/to/file.ts was modified, either by the user or by a linter.
This change was intentional, so make sure to take it into account.
</system-reminder>
Ketika proses eksternal (linter, formatter, editan manual) memodifikasi sebuah file, sistem memberi tahu model via pengingat โ mencegah keputusan yang didasarkan pada isi file yang sudah usang.
Penggunaan 4: Konteks Dinamis (tanggal, aturan proyek)
<system-reminder>
Today's date is 2026-03-21.
Current branch: dev
claudeMd: [CLAUDE.md content injected here]
</system-reminder>
Konteks runtime (tanggal, status git, aturan proyek) disuntikkan melalui pesan user, bukan di-hardcode di system prompt.
Panduan Menulis Pengingat
- Bungkus dalam tag XML (
<system-reminder>) โ model bisa membedakan injeksi sistem dari ucapan user - Deklarasikan tag di awal dalam system prompt โ jika tidak, model mungkin mencoba merespons pengingat tersebut
- Jangan menyuntikkan di setiap pesan โ setiap injeksi memakan biaya token, suntikkan hanya saat dibutuhkan
- Tetap singkat โ pengingat bukanlah system prompt kedua, cukup 1-2 aturan kritis
- Jangan bertentangan dengan system prompt โ pengingat melengkapi dan memperkuat, bukan menimpa
- Gunakan untuk toggling dinamis โ plan mode, readonly mode, feature flags
Kapan Menggunakan System Prompt vs. Pengingat Pesan User
| Skenario | System Prompt | Pengingat Pesan User |
|---|---|---|
| Definisi peran | โ | โ |
| Batasan keamanan | โ Deklarasi awal | โ Pengulangan berkala |
| Metodologi alur kerja | โ | โ |
| Pergantian mode (plan mode) | โ | โ |
| Notifikasi perubahan file | โ | โ |
| Tanggal / info lingkungan | โ Nilai awal | โ Nilai terbaru |
| Koreksi perilaku | โ | โ |
| Pengingat penggunaan tool | โ Definisi aturan | โ Dorongan eksekusi |
9. Prompt Cache โ Hemat 90% untuk Token yang Berulang
Fitur prompt caching dari Anthropic memungkinkanmu men-cache awalan statis (static prefix) dari array pesanmu. Ketika request berikutnya memiliki awalan yang sama, mereka akan mengenai cache (cache hit) โ menghemat uang dan mengurangi latensi.
Untuk agent, ini sangat penting: kamu mengirim ulang system prompt + definisi tool pada setiap pemanggilan LLM dalam sebuah percakapan.
Angka-angka Penting
| Metrik | Nilai |
|---|---|
| Biaya cache hit | 10% dari harga normal (hemat 90%) |
| Biaya cache write | 125% dari harga normal (premi 25% pada penulisan pertama) |
| Cache TTL | 5 menit (kedaluwarsa jika tidak ada request) |
| Panjang minimum cache | 1.024 token (Claude 3.5+) |
| Granularitas cache | Prefix matching โ dari awal hingga breakpoint yang ditandai |
| Maksimum breakpoint | 4 |
Bagaimana Ini Mengubah Desain Prompt
Prinsip utama: konten statis di awal, konten dinamis di akhir.
โ
Cache-friendly layout:
System prompt (static) โ Cache breakpoint 1
Tool definitions (static) โ Cache breakpoint 2
CLAUDE.md / project rules โ Cache breakpoint 3 (changes occasionally)
Conversation history โ Breakpoint 4 for rolling window
โ Cache-destroying layout:
System prompt
DYNAMIC TIMESTAMP โ Changes every request, everything after = cache miss
Tool definitions
Conversation history
Jebakan yang tidak pernah diperingatkan siapa pun: Jika kamu meletakkan timestamp dinamis di tengah system prompt kamu, semua yang ada setelahnya akan menjadi cache miss. Setiap. Satu. Request. Satu timestamp di tempat yang salah dan kamu harus membayar harga penuh untuk ribuan token.
Penggunaan API
const response = await anthropic.messages.create({
model: "claude-sonnet-4-6",
system: [
{
type: "text",
text: "You are a startup advisor...",
cache_control: { type: "ephemeral" } // โ marks a cache breakpoint
}
],
messages: [...]
});
Strategi Multi-Breakpoint
Breakpoint 1: System prompt โ Almost never changes
Breakpoint 2: Tool definitions โ Almost never changes
Breakpoint 3: Project rules / CLAUDE.md โ Changes occasionally
Breakpoint 4: First N history messages โ Rolling window cache
Bahkan ketika riwayat percakapan berubah, 3 breakpoint pertama masih akan hit. Percakapan 10 giliran (turns) menghemat sekitar 40-60% biaya token input.
Rekomendasi Desain
- Tidak ada nilai dinamis berfrekuensi tinggi di system prompt โ tanggal tidak masalah (berubah harian), tapi timestamp yang presisi jangan
- Letakkan konteks dinamis (status git, dll.) di injeksi pesan user โ bukan di system prompt, atau kamu akan menghancurkan cache
- Jaga agar definisi tool tetap stabil โ jangan menambah/menghapus tool secara dinamis saat runtime
- Gunakan rolling window untuk riwayat percakapan โ cache N pesan pertama, hanya pesan terbaru yang menjadi cache miss
10. Checklist
Setelah menulis system prompt kamu, tinjau kembali dengan checklist ini:
Struktur
- Identitas ada di paling atas?
- Batasan keamanan ditandai dengan IMPORTANT dan diulang di akhir?
- Pemisahan bagian yang jelas dengan header?
- Contoh dibungkus dalam tag
<example>?
Anggaran Token
- Bagianmu < 6.000 token?
- Tidak mengulang informasi yang sudah ada di definisi tool?
- Pengetahuan domain di-load saat dibutuhkan, bukan di awal?
- Tidak ada cerita latar belakang karakter atau lore yang bertele-tele?
Kualitas Aturan
- Setiap aturan bisa diuji benar/salahnya?
- Batasan tegas menggunakan bahasa absolut (NEVER/MUST)?
- Saran yang lebih lunak menggunakan bahasa rekomendasi (recommended/prefer)?
- Aturan kritis menjelaskan mengapa, bukan hanya apa?
- Batasan dua arah (lakukan ini + jangan lakukan itu)?
Perilaku Agent
- Memberikan prinsip, bukan prosedur langkah-demi-langkah yang kaku?
- Menangani skenario "pemanggilan tool ditolak"?
- Menangani strategi "menghadapi rintangan" (jangan brute-force retry)?
- Strategi manajemen konteks sudah disiapkan (ambang batas peringkasan)?
Apa yang TIDAK Boleh Dilakukan
- Tidak ada pujian atau kata sifat superlatif?
- Tidak ada deklarasi redundan "kamu adalah AI yang membantu"?
- Tidak ditulis sebagai prompt chain?
- Tidak over-engineering (fitur yang tidak diminta siapa pun)?
Jika Saya Memulainya Hari Ini
Inilah tepatnya yang akan saya lakukan:
-
Mulai dengan identitas + keamanan di 3 baris pertama. Dua kalimat untuk siapa agent itu. Batasan tegas dengan NEVER/MUST. Ulangi aturan keamanan di akhir.
-
Tulis alur kerja utamamu sebagai prinsip, bukan langkah-langkah. Maksimal 4-5 bullet point. Gunakan "recommended" dan "prefer" untuk aturan lunak, "NEVER" dan "MUST" untuk aturan tegas.
-
Anggarkan 1.500-6.000 token untuk bagianmu. Definisi tool akan menambah 5.000-15.000 lagi. Jika kamu melebihi 6K, kamu mungkin menumpuk pengetahuan yang seharusnya di-load saat dibutuhkan.
-
Strukturkan semuanya. Header Markdown, bullet list, tag XML untuk contoh. Prompt terstruktur selalu mengungguli prosa bahasa natural setiap saat.
-
Bangun pengingat di tengah percakapan sejak hari pertama. Deklarasikan
<system-reminder>di system prompt kamu. Suntikkan pengingat untuk aturan kritis, pergantian mode, dan pembaruan konteks. -
Desain untuk cache. Konten statis di awal, konten dinamis di akhir. Jangan pernah meletakkan nilai yang berubah-ubah di dalam body system prompt kamu.
Ironi dari semua pekerjaan ini? System prompt terbaik adalah yang pendek. Instruksi kustom Claude Code (di luar definisi tool) secara mengejutkan sangat ringkas. Setiap baris benar-benar berguna.
Dulu saya pikir prompt engineering itu tentang mencari trik-trik pintar. Sekarang saya sadar ini tentang kedisiplinan โ berbicara lebih sedikit, menyampaikannya dengan presisi, dan memercayai model untuk memikirkan sisanya. Model itu lebih pintar dari prompt kamu. Rancanglah lingkungannya, bukan perilakunya.
Referensi
| Sumber | Insight Utama |
|---|---|
| Claude Code v2.0.14 System Prompt | Referensi struktur agent prompt level production secara penuh |
| Reddit: Understanding Claude Code's 3 System Prompt Methods | Deep dive Output Styles / --append / --system-prompt, data nyata context rot |
| shareAI-lab/learn-claude-code | Filosofi "Model adalah agent", metodologi harness engineering |
| Anthropic Prompt Engineering Docs | Best practice prompt resmi |
| DeepAgents Framework | Middleware peringkasan, progressive disclosure untuk skills |
Bagikan ini

Ditulis oleh Feng Liu
shenjian8628@gmail.com