Cara Pasang Recall untuk Memori Claude Code di VPS
Gunakan Recall versi 0.4.0 untuk menyimpan sesi Claude Code secara setempat. Plugin ini menjimatkan penggunaan token dengan meringkaskan tugasan dalam folder .recall/ anda.
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 penganalisis ringkasan 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, sesi baharu tidak memuatkan perbualan hari Selasa secara automatik, walaupun memori auto terbina dalam Claude Code boleh menyimpan nota merentas sesi. Jika nota tersebut tidak merangkumi tempat anda berhenti, anda perlu menerangkan semula projek itu secara manual, atau anda membiarkan model membaca separuh daripada repositori sekali lagi untuk memahaminya. Kedua-duanya menggunakan token, dan cara kedua menggunakan jumlah token yang banyak.
Recall versi 0.4.0, yang dikeluarkan pada 18 Julai 2026, masih merupakan keluaran terkini setakat Oktober 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 satu 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 terhasil daripada proses ini, kedua-duanya di dalam .recall/.
history.mdialah rekod yang hanya boleh ditambah: gesaan (prompts), respons, fail yang disentuh, dan arahan yang dijalankan.context.mdialah intisari yang dijana: matlamat, ringkasan, langkah seterusnya, fail yang disentuh, arahan yang dijalankan, dan konteks git.
Selepas satu sesi sebenar, lihat direktori tersebut.
ls -la .recall/Dengan tangkapan didayakan, tiada penanda jeda, dan transkrip yang tersedia, 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 ialah 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 menyalurkan data kepada pemeringkatan 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 walaupun mesin berada di luar talian.
Konfigurasi Recall untuk satu projek
Konfigurasi disimpan dalam fail recall.config.json di direktori akar projek. Berikut adalah tetapan lalai yang disertakan:
{
"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 tetapan 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 statistik diff semasa dan komit terkini ke dalam ringkasan.max_input_charsmengehadkan jumlahhistory.mdyang dibaca oleh peringkas 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. Padamkannya untuk memulakan semula penangkapan data.
touch .recall/.capture-pausedLakukan ini sebelum sesi di mana anda mengendalikan kelayakan pengeluaran (production credentials), kerana penyuntingan (redaction) hanyalah penapis dan bukan jaminan. Pemikiran 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 oleh 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 menemui semula projek tersebut dengan membaca fail.
Data di sebalik carta ini
[
{
"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 untuk 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 sebelumnya 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 bahasa 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 panjang konteks lalai Ollama bergantung pada VRAM yang tersedia.
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 tersedia, 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. Pastikan summary_sentences hampir dengan 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. Semak sama ada tangkapan dilumpuhkan, direktori output dikonfigurasikan di tempat lain, atau tiada transkrip ditemui sebelum membuat kesimpulan bahawa cangkuk (hooks) tidak pernah dijalankan. Taip /recall:show untuk mengesahkan pemalam dimuatkan, kemudian jalankan python3 -V. Perintah cangkuk mencuba python3 dahulu dan python kedua, jadi kotak yang tidak mempunyai kedua-duanya akan gagal dengan stderr dan status keluar 127. Claude Code memaparkan notis ralat cangkuk tidak menyekat yang membawa baris pertama stderr.
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 cangkuk 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 meletakkan memori di sana. Mulakan dari akar projek, dan gunakan ls -la .recall/ untuk mencari di mana fail tersebut sebenarnya mendarat.
Tangkapan berhenti 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 terlalu nipis selepas sesi yang panjang. max_input_chars mengehadkan input penyimpul (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 di mana Recall berhenti
Recall ialah log berserta alat ringkasan, dan adalah penting untuk memahami perkara yang tidak diliputi 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 melibatkan perkara penting, 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 dicari merentasi projek. Jika soalannya ialah apa yang anda putuskan tentang pangkalan data tiga minggu lalu, anda perlu menggunakan grep pada history.md. Ia tidak menyediakan penyelarasan secara langsung: dua sesi dalam projek yang sama berkongsi fail log yang sama, tetapi Recall tidak menolak entri log baharu ke dalam konteks sesi yang lain. Oleh itu, apabila satu sesi perlu mengetahui 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 yang berbeza, dan mengurus tetingkap konteks dalam satu sesi merupakan pelengkap kepada panduan ini.
Ringkasan dianggap sebagai input yang tidak dipercayai mengikut reka bentuknya. context.md disuntik dengan tanda pagar dan label, dan Claude akan bertanya sebelum bergantung kepadanya. Reka bentuk itu wujud kerana direktori .recall/ yang dikomit adalah tempat di mana sesiapa sahaja yang mempunyai akses komit 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 dimulakan. Dengan Claude Code v2.1.283 atau lebih baharu, mod auto sudah menjadi mod permulaan terbina dalam untuk sesi terminal interaktif dan VS Code pada setiap pelan dan pembekal, jadi pengelas dan bukannya anda yang menyemak kebanyakan tindakan; organisasi dengan konfigurasi HIPAA masih bermula dalam mod Manual. Tentukan sekali sama ada .recall/ bersifat peribadi atau dikongsi: tambahkannya ke .gitignore untuk memori peribadi, atau komit dan semaknya seperti sumbangan lain. Jika ejen berjalan tanpa pengawasan, menjalankan Claude Code dengan selamat pada VPS meliputi sempadan yang lebih luas.
Penyuntingan (redaction) adalah usaha terbaik. Ia menyasarkan corak biasa seperti kunci API, token, blok PEM dan tugasan .env. Baca .recall/ sebelum anda mengomitkannya.
Nombor versi adalah jujur tentang tahap kematangan. Pada 0.4.0, yang masih merupakan keluaran terkini pada Oktober 2026, kunci konfigurasi dan susun atur fail masih boleh berubah antara keluaran, jadi baca log perubahan sebelum anda menaik taraf persediaan yang anda gunakan.
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 meringkas menggunakan TF-IDF dan TextRank dan bukannya model, jadi langkah ini tidak memerlukan kos dan berfungsi walaupun mesin berada di luar talian. Pertukarannya ialah ringkasan tersebut bersifat ekstraktif: ia memilih ayat daripada log anda dan bukannya menulis ayat baharu.
Mengapakah .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 supaya ia ditulis semula apabila setiap sesi berakhir. Jika history.md juga hilang, semak capture_history, penanda .capture-paused dan sama ada transkrip sesi tersedia: hook yang berjalan akan melangkau penulisan sejarah dalam kes tersebut. Sahkan pemalam dimuatkan dengan /recall:show, kemudian sahkan python3 -V menjawab pada kotak tersebut, kerana hook tersebut adalah skrip Python.
Berapakah jumlah yang dijimatkan oleh Recall bagi setiap sesi?
Memuatkan ringkasan menelan kos sekitar 1,200 token berbanding 30,000 token bagi model yang perlu membaca repositori anda semula untuk menentukan kedudukannya. Itu adalah angka tipikal. 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 terakhir, jadi ia menyimpan migrasi yang belum selesai yang mungkin tidak terfikir oleh anda untuk dicatatkan. 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 daripada root projek setiap kali, kerana fail tersebut mengikut direktori kerja dan bukannya akaun pengguna.