Recall: Memori Claude Code di VPS
Recall mencatat tiap sesi Claude Code ke log lokal, lalu merangkumnya agar dapat dilanjutkan. Pelajari pemasangan di VPS dan ukur penghematan token API.
Fungsi Recall untuk memori Claude Code
Recall adalah plugin Claude Code yang memberikan memori lintas sesi untuk setiap proyek. Plugin ini menulis dua file markdown ke dalam folder .recall/ di proyek Anda: log append-only yang mencatat hal-hal yang terjadi dan ringkasan singkat tentang posisi terakhir Anda. Keduanya dibuat di mesin yang sedang Anda gunakan oleh summarizer Python lokal, sehingga memori itu sendiri tidak menggunakan token API sama sekali.
Recall mengatasi masalah yang kecil tetapi terus terjadi. Anda menutup sesi di VPS pada hari Selasa. Pada hari Rabu, Claude Code tidak mengetahui apa pun tentang hari Selasa. Anda menjelaskan ulang proyek tersebut secara manual, atau membiarkan model membaca kembali separuh repositori untuk memahaminya. Keduanya menggunakan token, dan opsi kedua menggunakan jauh lebih banyak token.
Recall versi 0.4.0 adalah versi terbaru per Juli 2026, dan proyek ini berlisensi MIT. Recall adalah sebuah plugin. Tidak ada bagian di dalamnya yang melakukan network call.
Yang diperlukan pada VPS
Hook capture Recall adalah skrip Python yang disertakan bersama plugin. Tidak ada dependensi pihak ketiga, sehingga satu-satunya persyaratan utama adalah interpreter.
python3 -VUbuntu 24.04 menjawab Python 3.12.3. Recall mendukung Python 3.9 dan yang lebih baru. Image container minimal terkadang tidak menyertakan interpreter sama sekali; dalam kondisi tersebut, shell menjawab python3: command not found. Instal interpreter sebelum melanjutkan.
sudo apt update && sudo apt install -y python3NumPy adalah akselerator opsional untuk salah satu tahap summarizer. Anda tidak membutuhkannya.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' merupakan jawaban yang dapat diterima di sini. Summarizer memiliki jalur pure-Python, dan test suite proyek memeriksa bahwa kedua jalur memilih kalimat yang sama.
Memori sesi lebih penting pada server daripada pada laptop karena pekerjaan di server biasanya dilakukan dalam kunjungan singkat yang tersebar selama beberapa hari. Jika Anda sudah menjalankan Claude Code dalam tmux pada VPS, Recall adalah komponen yang membawa sesi kemarin ke sesi hari ini.
Instal Recall dari marketplace plugin
Dua perintah, yang dijalankan di dalam sesi Claude Code:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallPerintah kedua membaca plugin@marketplace. Kedua nama tersebut adalah recall di sini. Hal ini tampak seperti kesalahan salin-tempel, tetapi sebenarnya tidak.
Periksa instalasi dengan menjalankan salah satu perintah milik plugin:
/recall:show/recall:show menampilkan ringkasan saat ini. Pada project yang benar-benar baru, belum ada yang dapat ditampilkan. Jadi, yang sebenarnya diperiksa adalah apakah perintah tersebut tersedia. Jika Claude Code tidak mengenali /recall:show, plugin belum dimuat dan tidak ada hook yang akan dijalankan.
Untuk menjalankannya dari checkout, clone repository lalu validasi terlebih dahulu:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . membaca manifest di .claude-plugin/ dan melaporkan apakah plugin tersebut memiliki struktur yang valid. Kemudian, mulai Claude Code dari direktori project dengan claude --plugin-dir ~/recall.
Yang ditulis oleh hook dan waktunya
Recall mendaftarkan tiga hook Claude Code. Masing-masing menjalankan skrip Python dari direktori plugin.
SessionStartberjalan saat startup, resume, dan clear. Hook ini menampilkancontext.mdagar sesi dibuka dengan ringkasan Anda.Stopberjalan setiap kali Claude menyelesaikan respons. Hook ini menambahkan giliran tersebut ke log.SessionEndberjalan saat sesi ditutup dan dapat membuat ulang ringkasan.
Dua file dihasilkan, dan keduanya berada di dalam .recall/.
history.mdadalah catatan append-only: prompt, respons, file yang diubah, dan perintah yang dijalankan.context.mdadalah ringkasan yang dibuat secara otomatis: tujuan, ringkasan, langkah berikutnya, file yang diubah, perintah yang dijalankan, dan konteks git.
Setelah satu sesi nyata, lihat direktori tersebut.
ls -la .recall/Anda akan melihat history.md berisi data. Anda mungkin tidak melihat context.md sama sekali. Itu adalah perilaku default, bukan kesalahan. auto_save_context bernilai off kecuali Anda menetapkannya. Karena itu, ringkasan hanya ditulis saat Anda memintanya:
/recall:savePerintah tersebut menjalankan peringkas lokal pada history.md dan menulis ulang context.md. Algoritmanya menggunakan penilaian TF-IDF (term frequency, inverse document frequency) yang diteruskan ke pemeringkatan kalimat TextRank. Algoritma ini deterministik dan ekstraktif. Artinya, algoritma memilih kalimat yang sudah ada di dalam log Anda. Tidak ada model yang dipanggil, sehingga langkah ini gratis dan dapat berjalan saat mesin offline.
Konfigurasikan Recall untuk satu proyek
Konfigurasi disimpan dalam file recall.config.json di root proyek. Berikut adalah default yang disertakan:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirmenentukan lokasi kedua file tersebut. Simpan di dalam proyek.capture_historymengaktifkan dan menonaktifkan loghistory.md.auto_save_contextmenerimaoffatauon_end, dan default-nya adalahoff.summary_sentencesmenentukan jumlah kalimat yang dipertahankan ke dalamcontext.md. Nilai yang lebih tinggi menghasilkan ringkasan yang lebih panjang dan beban yang sedikit lebih besar saat sesi dimulai.redactmenghapus pola rahasia umum sebelum apa pun ditulis ke disk.include_gitmenambahkan diff saat ini dan commit terbaru ke ringkasan.max_input_charsmembatasi jumlahhistory.mdyang dibaca summarizer dalam satu proses.
Untuk proyek pada VPS, perubahan yang berguna adalah mengaktifkan penyimpanan otomatis, karena sesi pada server sering berakhir saat terminal terputus, bukan saat Anda memutuskan untuk menghentikannya.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Untuk menghentikan capture sementara tanpa mengubah konfigurasi, buat marker jeda. Hapus marker tersebut untuk mulai melakukan capture lagi.
touch .recall/.capture-pausedLakukan ini sebelum sesi ketika Anda menangani kredensial produksi, karena redaction adalah filter dan bukan jaminan. Alasan yang sama juga mendasari menjauhkan rahasia dari AI agent secara umum: rahasia yang aman adalah rahasia yang tidak pernah dilihat agent.
Berapa banyak token yang dihemat Recall?
Hal ini bergantung pada alternatifnya. Memuat ringkasan saat sesi dimulai membutuhkan sedikit token. Namun, hal yang digantikannya dapat membutuhkan banyak token, karena model yang tidak memiliki memori tentang proyek Anda harus menemukannya kembali dengan membaca file.
The data behind this chart
[
{
"label": "Recall context.md",
"char_count": "4,800",
"est_tokens": "1,200"
},
{
"label": "Hand-written CLAUDE.md",
"char_count": "3,200",
"est_tokens": "800"
},
{
"label": "Re-reading the repo",
"char_count": "120,000",
"est_tokens": "30,000"
},
{
"label": "Full transcript replay",
"char_count": "340,000",
"est_tokens": "85,000"
}
]Berikut adalah angka umum untuk proyek berukuran menengah, bukan hasil pengukuran proyek Anda. Ringkasan Recall dimuat dengan sekitar 1,200 token. Angka ini sesuai dengan klaim yang dipublikasikan proyek, yaitu seribu hingga dua ribu token untuk melanjutkan sesi. Memutar ulang transkrip sebelumnya secara lengkap memuat seluruh percakapan, sekitar 85,000 token. Membiarkan model menemukan kembali proyek dengan membaca file berada di antara keduanya, sekitar 30,000 token. Angka tersebut bertambah seiring ukuran repository. Baris CLAUDE.md disertakan sebagai pembanding skala: baris itu lebih hemat karena pendek dan statis, serta memberi tahu model aturan tetap Anda, bukan apa yang terjadi tadi malam.
Ukur angka Anda sendiri. Satu token kira-kira setara dengan empat karakter dalam prosa bahasa Inggris, dan sedikit lebih sedikit untuk kode. Jika Anda juga memberikan ringkasan kepada model lokal pada VPS yang sama, periksa context window yang digunakan sebelum mengandalkan fitur melanjutkan sesi. Ollama memotong prompt yang panjang pada panjang konteks default yang kecil tanpa memberi tahu bahwa bagian akhir telah dihapus.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Di dalam sesi, /context menampilkan apa yang saat ini dimuat ke dalam context window, sedangkan /cost melaporkan total sesi. Mulai satu sesi tanpa konteks sebelumnya, lalu mulai sesi berikutnya dengan ringkasan yang sudah tersedia dan bandingkan hasilnya. Untuk gambaran lengkap tentang penggunaan token dalam sesi, lihat cara Claude Code menggunakan token.
Ada satu catatan agar klaim ini tetap akurat. Ringkasan dimuat pada setiap awal sesi. Jadi, ringkasan yang tidak pernah Anda gunakan menjadi biaya kecil, bukan penghematan. Pertahankan summary_sentences di dekat nilai default, kecuali sesi Anda berlangsung lama. Sesi yang lebih tenang membantu dari sisi lain, karena agent yang diarahkan untuk membuat perubahan sekecil mungkin yang berfungsi menghasilkan log yang lebih singkat untuk diprioritaskan oleh summarizer.
Buat ulang ringkasan tanpa sesi
Jika Anda meng-clone repository, summarizer memiliki entry point command line sendiri. Ini berguna pada VPS ketika sesi berakhir bersama terminal, tetapi Anda tetap memerlukan digest.
python3 ~/recall/scripts/make_context.py --helpOutput bantuan mencantumkan flag yang diterima: --cwd untuk root proyek, --transcript untuk file transkrip tertentu, --quiet untuk menyembunyikan output, dan --harness untuk memilih antara claude dan opencode. Arahkan ke sebuah proyek:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiSummarizer membaca transkrip sesi dan history.md, lalu menulis context.md di bawah direktori yang Anda berikan. Jika Anda menginstalnya melalui marketplace, plugin berada di direktori yang dikelola Claude Code, dan /recall:save adalah cara yang didukung untuk melakukan tugas yang sama.
Mengapa tidak ada data yang ditulis
Tidak ada direktori .recall/ setelah sesi selesai sepenuhnya. Hook tidak pernah dijalankan. Ketik /recall:show untuk memastikan plugin dimuat, lalu jalankan python3 -V. Perintah hook mencoba python3 terlebih dahulu dan python berikutnya. Karena itu, kotak tanpa keduanya tidak menulis apa pun dan tidak menampilkan peringatan.
history.md bertambah, tetapi context.md tidak pernah berubah. Secara default, auto_save_context adalah off. Jalankan /recall:save, atau tetapkan kunci tersebut ke on_end dan biarkan hook SessionEnd menjalankannya.
File muncul di project yang salah. Recall menulis secara relatif terhadap direktori tempat Claude Code dijalankan. Jadi, jika sesi dimulai dari direktori home, memori akan disimpan di sana. Mulai dari root project, lalu gunakan ls -la .recall/ untuk menemukan lokasi file sebenarnya.
Pengambilan data berhenti dan tidak ada peringatan. Periksa marker jeda dengan ls -a .recall/. File .capture-paused yang Anda buat minggu lalu masih menjalankan fungsinya.
Ringkasan terlalu singkat setelah sesi yang panjang. max_input_chars membatasi input summarizer hingga 200000 karakter, sehingga log yang sangat panjang akan terpotong. Rotasikan log tersebut.
mv .recall/history.md .recall/history-2026-07-30.mdSetelah itu, jalankan satu sesi singkat dan periksa kembali ls -la .recall/ untuk memastikan history.md baru telah muncul.
Batas Recall
Recall adalah log dan peringkas. Penting untuk memahami hal-hal yang tidak dicakupnya.
Peringkasnya bersifat ekstraktif. TextRank memilih kalimat yang sudah ada di history.md, sehingga tidak pernah menilai apakah suatu keputusan benar. Keputusan yang keliru dan dicatat pada hari Selasa akan terbaca sama persis seperti keputusan yang baik pada hari Rabu. Jika dampaknya penting, baca context.md dan perbaiki secara manual. Itu adalah file markdown, dan tidak ada yang menghalangi Anda untuk mengeditnya.
Tidak ada fitur pencarian. Anda mendapatkan satu ringkasan saat ini dan satu log yang terus bertambah untuk setiap project, bukan memori yang dapat dikueri di seluruh project. Jika pertanyaannya adalah keputusan Anda tentang database tiga minggu lalu, Anda harus melakukan grep pada history.md. Recall juga tidak meneruskan informasi antarsesi: dua sesi yang terbuka pada VPS yang sama secara bersamaan tidak dapat melihat log satu sama lain. Jika salah satunya perlu mengetahui apa yang sedang dilakukan sesi lain, sesi dapat meneruskan teks secara langsung satu sama lain selama keduanya berjalan.
Recall tidak membantu di dalam satu sesi. Context window yang penuh di tengah sesi adalah masalah berbeda dengan solusi yang berbeda, dan mengelola context window di dalam satu sesi adalah bagian pendamping panduan ini.
Ringkasan diperlakukan sebagai input yang tidak tepercaya secara sengaja. context.md disisipkan di dalam fenced block dan diberi label, lalu Claude meminta konfirmasi sebelum mengandalkannya. Rancangan ini diperlukan karena direktori .recall/ yang di-commit adalah tempat siapa pun yang memiliki akses commit dapat menulis teks yang akan dibaca agent Anda. Seberapa sering agent berhenti untuk menanyakan isi yang dibacanya ditentukan oleh mode izin saat sesi dimulai, dan auto mode menjadi default Claude Code pada 14 August 2026. Tentukan sekali apakah .recall/ bersifat pribadi atau bersama: tambahkan ke .gitignore untuk memori pribadi, atau commit dan tinjau seperti kontribusi lainnya. Jika agent berjalan tanpa pengawasan, menjalankan Claude Code dengan aman pada VPS membahas batasan yang lebih luas.
Redaksi hanya dilakukan dengan upaya terbaik. Fitur ini menargetkan pola umum seperti API key, token, blok PEM, dan assignment .env. Baca .recall/ sebelum melakukan commit.
Nomor versi mencerminkan tingkat kematangannya. Pada 0.4.0 di July 2026, key konfigurasi dan tata letak file masih dapat berubah antar-rilis. Karena itu, baca changelog sebelum meng-upgrade setup yang Anda andalkan.
FAQ
Apakah Recall mengirim kode atau transkrip saya ke tempat lain?
Tidak. Hook capture dan summarizer adalah skrip Python yang berjalan di mesin Anda sendiri, plugin tidak menyimpan kunci API, dan plugin tidak melakukan panggilan jaringan. Proses peringkasan menggunakan TF-IDF dan TextRank, bukan model, sehingga tidak memerlukan biaya dan dapat berjalan saat mesin offline. Konsekuensinya, ringkasan bersifat ekstraktif: ringkasan memilih kalimat dari log Anda, bukan menulis kalimat baru.
Mengapa .recall/context.md saya hilang atau sudah tidak terbaru?
auto_save_context secara default menggunakan off, sehingga ringkasan hanya dibuat ulang saat Anda menjalankan /recall:save. Tetapkan "auto_save_context": "on_end" di recall.config.json agar ringkasan ditulis ulang setiap sesi berakhir. Jika history.md juga hilang, hook sama sekali tidak berjalan: pastikan plugin dimuat dengan /recall:show, lalu pastikan python3 -V memberikan respons pada mesin tersebut karena hook adalah skrip Python.
Berapa banyak token yang dihemat Recall dalam setiap sesi?
Memuat ringkasan memerlukan sekitar 1,200 token, dibandingkan biasanya 30,000 token untuk model yang harus membaca ulang repositori Anda untuk mengetahui posisi kerjanya. Angka tersebut adalah perkiraan umum. Ukur penggunaan Anda sendiri dengan wc -c .recall/context.md dan perintah /context di dalam sesi, lalu bandingkan start baru dengan sesi yang dilanjutkan dari ringkasan.
Apakah saya masih memerlukan file CLAUDE.md?
Ya, keduanya memiliki fungsi yang berbeda. CLAUDE.md adalah hal yang Anda tulis dengan sengaja: aturan yang berlaku terus-menerus dan perintah build. context.md dibuat dari hal-hal yang benar-benar terjadi pada sesi sebelumnya, sehingga memuat migrasi yang belum selesai dan tidak akan terpikir oleh Anda untuk ditulis. Simpan keduanya.
Dapatkah satu VPS menyimpan memori untuk beberapa proyek?
Ya. Recall menyimpan memori di .recall/ dalam setiap direktori proyek, sehingga dua proyek pada server yang sama memiliki log dan ringkasan yang terpisah. Selalu jalankan Claude Code dari root proyek karena file mengikuti direktori kerja, bukan akun pengguna.