- Menyelesaikan masalah data mentah dalam jumlah besar yang cepat menghabiskan jendela konteks saat memanggil alat eksternal
- Berada di antara Claude Code dan output alat untuk mengompresi serta memfilter data, mengurangi 315KB menjadi 5.4KB (hemat 98%)
- Melalui arsitektur sandbox, setiap eksekusi diisolasi dan hanya stdout yang dimasukkan ke konteks, sehingga mencegah kebocoran data mentah seperti log dan snapshot
- Dengan knowledge base berbasis SQLite FTS5, konten Markdown diindeks dan peringkat BM25 serta Porter stemming diterapkan untuk mendukung pencarian code block yang akurat
- Pada batas yang sama yaitu 200K token, durasi sesi bertambah dari 30 menit menjadi 3 jam, memungkinkan manajemen konteks AI agent yang lebih efisien
Masalah
- Pemanggilan alat MCP di Claude Code langsung membuang data mentah ke jendela konteks 200K pada setiap panggilan
- Snapshot Playwright 56KB, 20 issue GitHub 59KB, access log 45KB, dan lain-lain
- Dalam sekitar 30 menit penggunaan, 40% dari seluruh konteks sudah habis
- MCP telah menjadi standar untuk penggunaan alat eksternal, tetapi ada batasan struktural karena definisi input dan data output sama-sama memenuhi konteks
- Dengan lebih dari 81 alat aktif, bahkan sebelum pesan pertama, 72% (143K token) sudah terpakai
Arsitektur Context Mode
- Sebuah server MCP yang berada di antara Claude Code dan output alat, mengirimkan data dalam bentuk yang diminimalkan
- Output 315KB dipangkas menjadi 5.4KB (turun 98%)
- Setiap pemanggilan
execute berjalan di subproses terisolasi, sehingga dieksekusi secara independen tanpa berbagi memori maupun state
- Hanya stdout yang dimasukkan ke konteks, sedangkan log, respons API, snapshot, dan lainnya tetap berada di dalam sandbox
- Mendukung 10 runtime bahasa: JavaScript, TypeScript, Python, Shell, Ruby, Go, Rust, PHP, Perl, R
- Deteksi otomatis Bun meningkatkan kecepatan eksekusi JS/TS hingga 3~5 kali
- CLI terautentikasi (
gh, aws, gcloud, kubectl, docker) meneruskan kredensial dengan aman melalui pewarisan environment variable
Knowledge base
- Alat
index membagi Markdown berdasarkan heading dan menyimpannya ke tabel virtual SQLite FTS5 sambil mempertahankan code block apa adanya
- Saat pencarian, algoritme peringkat BM25 digunakan untuk menghitung relevansi berdasarkan frekuensi kata, inverse document frequency, dan normalisasi panjang dokumen
- Dengan Porter stemming, “running”, “runs”, dan “ran” dicocokkan sebagai akar kata yang sama
- Saat
search dipanggil, yang dikembalikan bukan ringkasan melainkan code block yang akurat dan hierarki heading
fetch_and_index mengambil URL, mengubah HTML menjadi Markdown lalu mengindeksnya, dan halaman asli tidak dimasukkan ke konteks
Angka performa
- Dalam 11 skenario nyata (test triage, diagnosis error TypeScript, peninjauan git diff, dll.), semua output dijaga di bawah 1KB
- Snapshot Playwright: 56KB → 299B
- Issue GitHub (20): 59KB → 1.1KB
- Access log (500 entri): 45KB → 155B
- Analisis CSV (500 baris): 85KB → 222B
- Log git (153 commit): 11.6KB → 107B
- Investigasi repositori (subagent): 986KB → 62KB (5 panggilan vs 37)
- Berdasarkan seluruh sesi, 315KB → 5.4KB, sehingga durasi sesi 30 menit → 3 jam
- Sisa konteks setelah 45 menit: sebelumnya 60% → 99%
Instalasi dan penggunaan
- Mendukung hook auto-routing dan slash command melalui Plugin Marketplace
- Bisa juga diinstal khusus untuk MCP
- Dapat langsung digunakan setelah me-restart Claude Code
Perubahan nyata
- Tanpa mengubah cara penggunaan, hook PreToolUse otomatis merutekan output
- Subagent menggunakan
batch_execute sebagai alat default
- Subagent Bash ditingkatkan menjadi
general-purpose sehingga dapat mengakses alat MCP
- Hasilnya, jendela konteks tidak lagi cepat penuh, sehingga sesi bisa dipertahankan lebih lama dengan token yang sama
Latar belakang pengembangan
- Saat mengelola MCP Directory & Hub, ditemukan pola umum bahwa semua server MCP membuang data mentah ke konteks
- Terinspirasi dari Code Mode milik Cloudflare yang mengompresi definisi alat, lalu diperluas ke arah kompresi data output
- Setelah dipastikan dapat bekerja 6 kali lebih lama dalam sesi Claude Code, proyek ini dirilis sebagai open source dengan lisensi MIT
- GitHub: mksglu/claude-context-mode
1 komentar
Komentar Hacker News
Pendekatan indeks FTS5 yang diusulkan di sini memang benar, tetapi menurut saya perlu dibawa satu langkah lebih jauh
Output tool mencampurkan data terstruktur (JSON, tabel, konfigurasi) dan bahasa alami (komentar, pesan error, docstring), jadi BM25 murni performanya menurun
Untuk menyelesaikan masalah serupa, saya membuat retriever hibrida yang menggabungkan Model2Vec + sqlite-vec + FTS5. Hasil dari dua pencarian digabungkan dengan Reciprocal Rank Fusion (RRF), sehingga kita bisa mendapatkan pencocokan kata kunci presisi dari BM25 sekaligus pencocokan berbasis makna dari pencarian vektor
Pengindeksan inkremental juga penting. Pengindeks saya memakai flag
--incrementaluntuk me-embed ulang hanya chunk yang berubah. Reindeks penuh untuk 15.800 file memakan waktu 4 menit, sedangkan inkremental harian kurang dari 10 detikDari sisi caching, pendekatan ini juga menguntungkan. Untuk query yang sama, output terkompresi bersifat deterministik, sehingga cache prompt bekerja stabil
Hal lain yang akan saya tambahkan ke arsitektur Context Mode adalah menjalankan retriever yang sama sebagai hook PostToolUse agar output dikompresi sebelum masuk ke percakapan
Saya penulis postingannya. Beberapa hari lalu saya membagikan repositori GitHub dan menerima umpan balik yang bagus. Tulisan ini adalah penjelasan arsitekturnya
Ide intinya adalah, alih-alih memasukkan data mentah yang dibuang oleh pemanggilan tool MCP ke jendela konteks 200K, Context Mode membuat subproses terisolasi dan hanya meneruskan stdout ke konteks. Ini murni berbasis algoritme tanpa pemanggilan LLM, menggunakan SQLite FTS5 + BM25 + Porter stemming
Belakangan saya sudah mendapat 228 bintang dan data penggunaan nyata, dan saya menyadari betapa pentingnya routing subagen. Jika subagen Bash otomatis di-upgrade menjadi tipe umum untuk memakai batch_execute, konteks tidak perlu dipenuhi output mentah
Saya tidak paham kenapa tidak memakai mode mcp-cli. Saya sudah membuat versi kloning dengan wener-mcp-cli
Kerja yang keren. Menurut saya masih ada banyak ruang untuk perbaikan dalam manajemen context window. Misalnya, jika model menemukan jawaban setelah beberapa kali mencoba, pendekatan backtracking untuk menghapus percobaan yang gagal dari konteks tampaknya berguna
Setelah membaca ini saya sadar bahwa saya sama sekali tidak tahu penggunaan token Claude Code, jadi pagi ini saya membuat CLI bernama claude-trace
Ini mem-parsing
~/.claude/projects/*/*.jsonluntuk menganalisis penggunaan dan biaya per sesi, tool, proyek, dan lini masa, termasuk baca/buat cacheJika Context Mode menyelesaikan kompresi output dengan baik, ini berfungsi sebagai lapisan pengukuran untuk memvisualisasikan konsumsi sebelum dan sesudah perubahan
Banyak penggunaan token bisa dikurangi dengan memakai aplikasi CLI alih-alih MCP. Misalnya, GitHub CLI dapat melakukan hal yang sama dengan token jauh lebih sedikit dibanding MCP
Hook ini terasa terlalu agresif. Memblokir semua curl/wget/WebFetch dan membuat snapshot sandbox 56KB memang bagus, tetapi untuk kasus sederhana seperti
curl api.example.com/healthyang hanya butuh 200 byte, itu berlebihanJika 153 commit git dikompresi menjadi 107 byte, model harus menulis skrip ekstraksi yang sempurna agar bisa melihat datanya. Jika memakai perintah yang salah, informasi yang dibutuhkan bisa hilang
Benchmark mengasumsikan model selalu menulis kode ringkasan yang benar, tetapi kenyataannya tidak begitu
Tidak buruk, tetapi ada kehilangan akurasi dan risiko halusinasi. Karena data tidak lengkap atau logika ekstraksi yang salah, Claude bisa menarik kesimpulan yang keliru. Ada asumsi bahwa MCP cukup pintar untuk menulis skrip ekstraksi dan query pencarian yang bagus. Menurut saya, pelestarian informasi adalah masalah besar di dunia nyata
Rasio kompresinya mengesankan, tetapi saya penasaran apakah dengan konteks terkompresi model masih menghasilkan output dengan kualitas yang sama. Memperpanjang sesi dari 30 menit menjadi 3 jam hanya bermakna jika kualitas penalaran pada jam ke-2 tetap terjaga
Ekonomi cache yang disebut esafak juga penting. Jika prompt caching bekerja baik, konteks yang panjang pada dasarnya bisa terasa gratis. Tetapi jika kompresi memutus kontinuitas cache, justru biayanya bisa naik
Masalah yang lebih mendasar adalah kebanyakan tool MCP mengambil semua data dengan SELECT *. Ini adalah masalah desain protokol: harus mendukung ringkasan dan drill-down
Saya ragu perlu memasukkan lebih dari 80 tool ke dalam konteks. Konteks itu seperti emas; makin banyak hal yang tidak relevan dimasukkan, makin buruk hasilnya. Dibanding kompresi data, pemisahan subagen tampaknya pendekatan yang lebih baik