39 poin oleh GN⁺ 2026-03-02 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2026-03-02
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 --incremental untuk me-embed ulang hanya chunk yang berubah. Reindeks penuh untuk 15.800 file memakan waktu 4 menit, sedangkan inkremental harian kurang dari 10 detik
    Dari 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

    • Masalah pada pendekatan OP adalah respons terstruktur dibiarkan tetap utuh, dan saya sedang membuat gateway MCP yang tidak memungkinkan eksekusi sandbox, jadi metode ini terlihat sangat berguna. Hari ini saya berencana mencobanya
    • Saya benar-benar ingin membaca tulisan lanjutan tentang ini. Sepertinya para pencatat teliti di HN akan menyukainya
    • Saya juga ingin melihat lebih detail latar belakang dan implementasi dari pekerjaan pengindeksan Obsidian ini
  • 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

    • Akan bagus jika menambahkan tautan ke postingan Cloudflare Code Mode di artikel blog. Ada di README, tetapi tidak ada di isi artikel
    • Ini sangat menarik dan saya akan mencobanya sendiri. Namun saya memahami bahwa Context Mode tidak benar-benar menangani penggunaan konteks MCP itu sendiri; saya ingin memastikan apakah itu benar. Saya memakai MCP di beberapa lingkungan Claude, jadi hanya CLI terasa terbatas
    • Saya penasaran apakah ini juga bisa dipakai dengan agen lain seperti Zed Agent
    • Saya ingin tahu apakah ada alasan mengapa Codex tidak didukung. Secara struktural tampaknya independen dari agen
    • Saya penasaran apakah pendekatan ini akan merusak cache
  • 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

    • Saya juga setuju. Log atau catatan kegagalan yang muncul saat debugging seharusnya bisa dihapus setelah bug diperbaiki. Di IDE saat ini, melakukan itu secara manual merepotkan. Akan bagus jika agen bisa mengelola konteksnya sendiri, dan hal-hal seperti log dibersihkan otomatis setelah sejumlah kali tertentu. Konteks seharusnya dipandang bukan sebagai stack sederhana, melainkan ruang yang bisa dimanipulasi dengan bebas
    • Percobaan yang gagal pada akhirnya hanyalah noise. Mendeteksi pola retry secara otomatis dan hanya menyisakan versi sukses terakhir seharusnya cukup mungkin untuk diimplementasikan
    • Sekarang terasa seperti akhir 1990-an lagi. Kalau dulu HTML dan SQL, sekarang agen coding. Kita sudah menjadi engineer berpengalaman, jadi saat memakai Claude Code kita secara alami menemukan berbagai optimasi
    • Memanfaatkan subagen juga bisa jadi cara. Saat ada masalah, fork subagen untuk menyelesaikannya lalu ambil hanya hasilnya. Membayangkan model menghapus memorinya sendiri dan kembali ke keadaan lampau juga menarik
    • Saya benar-benar melakukan ini. Setiap pemanggilan tugas dijalankan di subproses terpisah agar tidak mencemari konteks induk. Setelah selesai, saya merangkum dan mengirimkan ke induk dalam 4 bagian: hasil, ringkasan proses, percobaan yang gagal, dan pelajaran yang didapat. Output tool disimpan ke file, lalu LLM hanya membaca bagian yang diperlukan. Misalnya, jika berakhir dengan “Success!”, cukup lihat baris terakhir. Jika gagal, cukup baca pesan error-nya. Saya juga bereksperimen merangkum log dengan model lokal lalu meneruskannya ke model cloud. Mungkin bukan teknologi terbaru, tetapi bekerja baik di lingkungan saya
  • 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/*/*.jsonl untuk menganalisis penggunaan dan biaya per sesi, tool, proyek, dan lini masa, termasuk baca/buat cache
    Jika Context Mode menyelesaikan kompresi output dengan baik, ini berfungsi sebagai lapisan pengukuran untuk memvisualisasikan konsumsi sebelum dan sesudah perubahan

    • Seperti pertanyaan “/context?”, kuncinya adalah memvisualisasikan ke mana token sebenarnya dipakai
  • 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/health yang hanya butuh 200 byte, itu berlebihan
    Jika 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

    • Saya juga setuju, jadi fitur itu sudah saya hapus
  • 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

    • Walaupun cache terlihat seperti gratis, sebenarnya ia tetap menyebabkan penurunan perhatian dan penurunan kecepatan. Bahkan jika prefix panjang dipakai ulang, jumlah komputasinya tetap besar
  • 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

    • Benar juga. Namun kebanyakan orang tidak mengelola server MCP langsung per tugas. Cukup memasang 5–6 server saja, 80 tool sudah dimuat secara default. Context Mode tidak menyelesaikan kelebihan definisi tool itu sendiri. Sebaliknya, ia menangani sisi output yang dibuang setelah eksekusi tool. Misalnya, hanya dari snapshot Playwright atau satu git log saja bisa habis 50 ribu token, dan itu yang diproses di sandbox