Cara Pasang Recall untuk Memori Claude Code pada VPS
Gunakan pemalam Recall untuk menyimpan sesi Claude Code secara tempatan. Elakkan pembaziran token dengan merujuk ringkasan sesi terdahulu yang disimpan dalam folder .recall.
Fungsi Recall untuk memori Claude Code
Recall ialah pemalam Claude Code yang memberikan setiap projek memori merentas sesi. Ia menulis dua fail markdown ke dalam folder .recall/ di dalam projek anda: log tambah-sahaja tentang perkara yang telah berlaku, dan ringkasan pendek tentang tempat anda berhenti. Kedua-duanya dihasilkan pada mesin yang anda gunakan oleh penyimpul Python tempatan, jadi memori itu sendiri tidak menggunakan token API.
Jurang yang diisinya adalah kecil dan malar. Anda menutup sesi pada VPS anda pada hari Selasa. Pada hari Rabu, Claude Code tidak mengetahui apa-apa tentang hari Selasa. Anda menerangkan semula projek itu secara manual, atau anda membiarkan model membaca separuh daripada repositori sekali lagi untuk memahaminya. Kedua-duanya menggunakan token, dan yang kedua menggunakan jumlah token yang banyak.
Recall versi 0.4.0 adalah versi semasa setakat Julai 2026, dan projek ini dilesenkan di bawah MIT. Ia merupakan satu pemalam. Tiada apa-apa di dalamnya yang membuat panggilan rangkaian.
Keperluan pada VPS
Hook tangkapan Recall ialah skrip Python yang disertakan bersama pemalam tersebut. Tiada dependency pihak ketiga, jadi satu-satunya keperluan sebenar ialah penterjemah (interpreter).
python3 -VUbuntu 24.04 menjawab Python 3.12.3. Recall menyokong Python 3.9 dan versi lebih baharu. Imej kontena minimum kadangkala tidak menyertakan penterjemah langsung, dan dalam keadaan itu shell menjawab python3: command not found. Pasang satu penterjemah sebelum anda meneruskan.
sudo apt update && sudo apt install -y python3NumPy ialah pemecut pilihan untuk satu langkah dalam summarizer. Anda tidak memerlukannya.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' ialah jawapan yang boleh diterima di sini. Summarizer mempunyai laluan Python tulen, dan suite ujian projek tersebut mengesahkan bahawa kedua-dua laluan memilih ayat yang sama.
Memori sesi lebih penting pada pelayan berbanding komputer riba, kerana kerja pelayan tiba dalam lawatan singkat yang tersebar sepanjang hari. Jika anda sudah mempunyai Claude Code yang berjalan dalam tmux pada VPS, Recall ialah komponen yang membawa sesi semalam ke hari ini.
Memasang Recall daripada pasaran pemalam
Dua arahan, ditaip di dalam sesi Claude Code:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallArahan kedua membaca plugin@marketplace. Kedua-dua nama adalah recall di sini, yang kelihatan seperti kesilapan salin-tampal namun sebenarnya bukan.
Semak pemasangan dengan menjalankan salah satu arahan pemalam itu sendiri:
/recall:show/recall:show mencetak ringkasan semasa. Pada projek yang baharu, belum ada apa-apa untuk dicetak, jadi perkara yang anda sebenarnya semak ialah sama ada arahan tersebut wujud. Jika Claude Code tidak mengecam /recall:show, pemalam tersebut tidak dimuatkan dan tiada cangkuk (hook) akan dicetuskan.
Untuk menjalankan daripada checkout sebaliknya, klon repositori dan sahkan ia terlebih dahulu:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . membaca manifes dalam .claude-plugin/ dan melaporkan sama ada pemalam tersebut dibentuk dengan betul. Kemudian, mulakan Claude Code daripada direktori projek anda dengan claude --plugin-dir ~/recall.
Apa yang ditulis oleh cangkuk (hooks), dan bila
Recall mendaftarkan tiga cangkuk Claude Code. Setiap satunya menjalankan skrip Python daripada direktori pemalam.
SessionStartdicetuskan semasa permulaan, penyambungan semula, dan pembersihan. Ia memaparkancontext.mdsupaya sesi dibuka dengan ringkasan anda kelihatan.Stopdicetuskan setiap kali Claude selesai memberikan respons. Ia menambah giliran tersebut ke dalam log.SessionEnddicetuskan apabila sesi ditutup, dan boleh menjana semula ringkasan.
Dua fail dihasilkan daripada proses ini, kedua-duanya berada di dalam .recall/.
history.mdialah rekod yang hanya boleh ditambah (append-only): prompt, respons, fail yang disentuh, dan arahan yang dijalankan.context.mdialah ringkasan yang dijana: matlamat, rumusan, langkah seterusnya, fail yang disentuh, arahan yang dijalankan, dan konteks git.
Selepas satu sesi sebenar, lihat direktori tersebut.
ls -la .recall/Anda sepatutnya melihat history.md dengan kandungan di dalamnya. Anda mungkin tidak melihat context.md langsung, dan itu adalah tingkah laku lalai dan bukannya satu ralat. auto_save_context adalah off melainkan anda menetapkannya, jadi ringkasan hanya ditulis apabila anda memintanya:
/recall:saveArahan tersebut menjalankan penjana ringkasan tempatan ke atas history.md dan menulis semula context.md. Algoritma yang digunakan ialah TF-IDF (term frequency, inverse document frequency) yang menyuap kepada penarafan ayat TextRank. Ia bersifat deterministik dan ekstraktif, yang bermaksud ia memilih ayat yang sedia ada dalam log anda. Tiada model dipanggil, jadi langkah ini adalah percuma dan berfungsi dengan mesin di luar talian (offline).
Konfigurasi Recall untuk satu projek
Konfigurasi disimpan dalam fail recall.config.json di direktori akar projek. Berikut adalah tetapan lalai yang dibekalkan:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirmenetapkan lokasi kedua-dua fail tersebut. Pastikan ia berada di dalam projek.capture_historymenghidupkan atau mematikan loghistory.md.auto_save_contextmenerimaoffatauon_end, dengan nilai lalaioff.summary_sentencesmenentukan bilangan ayat yang dikekalkan ke dalamcontext.md. Meningkatkan nilai ini memberikan ringkasan yang lebih panjang dan beban yang sedikit lebih besar semasa permulaan sesi.redactmembuang corak rahsia biasa sebelum sebarang data ditulis ke cakera.include_gitmenambah diff semasa dan commit terkini ke dalam ringkasan.max_input_charsmengehadkan jumlahhistory.mdyang dibaca oleh summarizer dalam satu laluan.
Bagi projek pada VPS, perubahan yang berguna ialah penyimpanan automatik, kerana sesi pada pelayan sering berakhir apabila terminal ditutup dan bukannya apabila anda memutuskan untuk berhenti.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Untuk menghentikan penangkapan data buat sementara waktu tanpa mengubah konfigurasi, cipta penanda jeda (pause marker). Padamkannya untuk memulakan penangkapan semula.
touch .recall/.capture-pausedLakukan ini sebelum sesi di mana anda mengendalikan kelayakan pengeluaran (production credentials), kerana penyuntingan (redaction) hanyalah penapis dan bukan jaminan. Alasan yang sama mendorong menjauhkan rahsia daripada ejen AI secara umum: rahsia yang selamat ialah rahsia yang tidak pernah dilihat oleh ejen tersebut.
Berapakah penjimatan token melalui Recall?
Ia bergantung kepada apakah alternatifnya. Memuatkan ringkasan pada permulaan sesi adalah murah. Apa yang digantikannya boleh menjadi mahal, kerana model yang tidak mempunyai memori tentang projek anda akan menemuinya semula dengan membaca fail.
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"
}
]Ini adalah angka tipikal untuk projek bersaiz sederhana, bukan ukuran projek anda. Ringkasan Recall dimuatkan pada kira-kira 1,200 token, yang selari dengan tuntutan projek yang diterbitkan iaitu satu hingga dua ribu token untuk penyambungan semula. Memainkan semula transkrip penuh sebelum ini memuatkan semula keseluruhan perbualan, dalam lingkungan 85,000 token. Membiarkan model menemui semula projek dengan membaca fail berada di antara kedua-duanya, hampir 30,000 token, dan angka itu meningkat mengikut saiz repositori. Baris CLAUDE.md disediakan sebagai skala: ia lebih murah kerana ia pendek dan statik, serta ia memberitahu model tentang peraturan tetap anda dan bukannya apa yang berlaku malam tadi.
Ukur angka anda sendiri. Satu token adalah kira-kira empat aksara prosa Inggeris, dan sedikit kurang untuk kod. Jika anda juga menyuapkan ringkasan tersebut kepada model tempatan pada VPS yang sama, periksa tetingkap yang digunakan sebelum anda mempercayai penyambungan semula tersebut, kerana Ollama memotong prompt panjang pada panjang konteks lalai yang kecil dan bukannya memberitahu anda bahawa ia telah menggugurkan bahagian akhir.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Di dalam sesi, /context menunjukkan perkara yang dimuatkan ke dalam tetingkap konteks sekarang, dan /cost melaporkan jumlah sesi. Mulakan satu sesi secara sejuk, mulakan sesi seterusnya dengan ringkasan yang sedia ada, dan buat perbandingan. Untuk gambaran penuh ke mana token sesi sebenarnya pergi, bagaimana Claude Code membelanjakan token mempunyai perinciannya.
Satu peringatan memastikan tuntutan ini jujur. Ringkasan dimuatkan pada setiap permulaan sesi, jadi ringkasan yang tidak pernah anda gunakan adalah cukai kecil dan bukannya penjimatan. Kekalkan summary_sentences berhampiran nilai lalai melainkan sesi anda berjalan lama. Sesi yang lebih tenang membantu di bahagian lain lejar, kerana ejen yang didorong ke arah perubahan terkecil yang berfungsi meninggalkan log yang lebih pendek untuk dinilai oleh penyimpul.
Membina semula ringkasan tanpa sesi
Jika anda telah melakukan clone pada repositori tersebut, summarizer mempunyai titik masuk baris perintahnya sendiri. Ini berguna pada VPS apabila sesi terputus bersama terminal dan anda masih mahukan ringkasan tersebut.
python3 ~/recall/scripts/make_context.py --helpOutput bantuan menyenaraikan flag yang diterima: --cwd untuk root projek, --transcript untuk fail transkrip eksplisit, --quiet untuk menyekat output, dan --harness untuk memilih antara claude dan opencode. Halakan ia ke sesuatu projek:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiIa membaca transkrip sesi dan history.md, kemudian menulis context.md di bawah direktori yang anda berikan. Jika anda memasang melalui marketplace, plugin tersebut berada dalam direktori yang diuruskan oleh Claude Code, dan /recall:save merupakan cara yang disokong untuk melakukan tugas yang sama.
Mengapa tiada apa-apa yang ditulis
Tiada direktori .recall/ selepas sesi penuh. Hook tersebut tidak pernah dijalankan. Taip /recall:show untuk mengesahkan pemalam dimuatkan, kemudian jalankan python3 -V. Perintah hook mencuba python3 dahulu dan python kedua, jadi sistem yang tidak mempunyai kedua-duanya tidak akan menulis apa-apa dan kekal senyap mengenainya.
history.md membesar tetapi context.md tidak pernah berubah. auto_save_context ditetapkan kepada off secara lalai. Jalankan /recall:save, atau tetapkan kunci kepada on_end dan biarkan hook SessionEnd melakukannya.
Fail muncul di bawah projek yang salah. Recall menulis secara relatif kepada direktori tempat Claude Code dimulakan, jadi memulakan sesi dari direktori rumah anda akan meletakkan memori di sana. Mulakan dari root projek, dan gunakan ls -la .recall/ untuk mencari di mana fail tersebut sebenarnya disimpan.
Rakaman terhenti dan tiada amaran diberikan kepada anda. Semak penanda jeda dengan ls -a .recall/. Fail .capture-paused yang anda cipta minggu lepas masih menjalankan tugasnya.
Ringkasan menjadi nipis selepas sesi yang panjang. max_input_chars mengehadkan input summarizer pada 200000 aksara, jadi log yang sangat panjang akan dipotong. Lakukan putaran (rotate) pada log tersebut.
mv .recall/history.md .recall/history-2026-07-30.mdJalankan satu sesi pendek selepas itu dan semak ls -la .recall/ sekali lagi untuk mengesahkan history.md yang baharu telah muncul.
Had Recall berhenti
Recall ialah log berserta alat ringkasan, dan adalah penting untuk menjelaskan perkara yang tidak disertakan olehnya.
Alat ringkasan ini bersifat ekstraktif. TextRank memilih ayat yang sudah sedia ada dalam history.md, jadi ia tidak menilai sama ada sesuatu keputusan itu betul atau tidak. Langkah yang salah yang direkodkan pada hari Selasa akan dibaca sama seperti keputusan yang baik pada hari Rabu. Apabila taruhannya tinggi, baca context.md dan betulkan secara manual. Ia adalah fail markdown dan tiada apa yang menghalang anda daripada menyuntingnya.
Tiada fungsi carian. Anda mendapat satu ringkasan semasa dan satu log yang semakin berkembang bagi setiap projek, bukan memori yang boleh disoal merentas projek. Jika soalannya adalah tentang apa yang anda putuskan mengenai pangkalan data tiga minggu lalu, anda perlu menggunakan grep pada history.md. Ia juga tidak membawa apa-apa secara sisi: dua sesi yang dibuka pada VPS yang sama serentak tidak dapat melihat log antara satu sama lain, jadi apabila satu sesi perlu tahu apa yang dilakukan oleh sesi yang lain, sesi boleh menghantar teks antara satu sama lain secara terus semasa ia berjalan.
Ia tidak membantu di dalam sesuatu sesi. Tetingkap konteks yang penuh di pertengahan sesi adalah masalah berbeza dengan penyelesaian berbeza, dan mengurus tetingkap konteks di dalam satu sesi adalah panduan pelengkap kepada panduan ini.
Ringkasan dianggap sebagai input yang tidak dipercayai mengikut reka bentuknya. context.md disuntik dengan tanda pagar dan dilabelkan, dan Claude akan bertanya sebelum bergantung kepadanya. Reka bentuk itu wujud kerana direktori .recall/ yang telah di-commit adalah tempat di mana sesiapa sahaja yang mempunyai akses commit boleh menulis teks yang akan dibaca oleh ejen anda. Sejauh mana ejen berhenti untuk bertanya tentang apa yang dibacanya ditetapkan oleh mod kebenaran semasa sesi bermula, dan mod auto menjadi lalai bagi Claude Code pada 14 Ogos 2026. Tentukan sekali sama ada .recall/ bersifat peribadi atau dikongsi: tambahkannya ke dalam .gitignore untuk memori peribadi, atau commit fail tersebut dan semak ia seperti sumbangan lain. Jika ejen berjalan tanpa pengawasan, menjalankan Claude Code dengan selamat pada VPS merangkumi sempadan yang lebih luas.
Redaksi adalah usaha terbaik. Ia menyasarkan corak biasa seperti API keys, token, blok PEM dan tugasan .env. Baca .recall/ sebelum anda melakukan commit.
Nombor versi adalah jujur mengenai tahap kematangannya. Pada 0.4.0 dalam bulan Julai 2026, kunci konfigurasi dan susun atur fail masih boleh berubah antara release, jadi baca changelog sebelum anda menaik taraf persediaan yang anda harapkan.
FAQ
Adakah Recall menghantar kod atau transkrip saya ke mana-mana?
Tidak. Hook tangkapan dan summarizer adalah skrip Python yang berjalan pada mesin anda sendiri, pemalam ini tidak menyimpan sebarang API key, dan ia tidak membuat sebarang panggilan rangkaian. Proses meringkaskan menggunakan TF-IDF dan TextRank dan bukannya model, jadi langkah ini tidak memerlukan kos dan berfungsi semasa mesin di luar talian. Pertukarannya ialah ringkasan tersebut bersifat ekstraktif: ia memilih ayat daripada log anda dan bukannya menulis ayat baharu.
Mengapa .recall/context.md saya hilang atau tidak dikemas kini?
auto_save_context ditetapkan secara lalai kepada off, jadi ringkasan hanya dijana semula apabila anda menjalankan /recall:save. Tetapkan "auto_save_context": "on_end" dalam recall.config.json untuk membolehkan ia ditulis semula apabila setiap sesi berakhir. Jika history.md juga hilang, hook tersebut tidak berjalan langsung: sahkan pemalam dimuatkan dengan /recall:show, kemudian sahkan python3 -V menjawab pada kotak tersebut, kerana hook tersebut adalah skrip Python.
Berapa banyak yang dijimatkan oleh Recall bagi setiap sesi?
Memuatkan ringkasan menelan kos sekitar 1,200 token berbanding 30,000 token yang lazim bagi model yang perlu membaca repositori anda semula untuk menentukan kedudukannya. Itu adalah angka lazim. Ukur angka anda sendiri dengan wc -c .recall/context.md dan arahan /context di dalam sesi, dengan membandingkan permulaan sejuk (cold start) dengan sesi yang disambung semula daripada ringkasan.
Adakah saya masih memerlukan fail CLAUDE.md?
Ya, dan kedua-duanya mempunyai tugas yang berbeza. CLAUDE.md ialah perkara yang anda tulis dengan sengaja: peraturan tetap dan arahan binaan. context.md dijana daripada perkara yang sebenarnya berlaku pada sesi lepas, jadi ia menyimpan migrasi yang belum selesai yang anda mungkin tidak terfikir untuk mencatatnya. Simpan kedua-duanya.
Bolehkah satu VPS menyimpan memori untuk beberapa projek?
Ya. Recall menyimpan memori dalam .recall/ di dalam setiap direktori projek, jadi dua projek pada pelayan yang sama menyimpan log dan ringkasan yang berasingan. Mulakan Claude Code dari root projek setiap kali, kerana fail tersebut mengikut direktori kerja dan bukannya akaun pengguna.