SSD Nodes Learn RAM 8GB — $66/tahun
Panduan Matt ConnorOleh Matt Connor · Dikemas kini 2026-08-01

Recall: Memori Claude Code pada VPS

Recall 0.4.0 menyimpan log dan ringkasan sesi Claude Code secara setempat tanpa token API atau panggilan rangkaian. Pasang pada VPS dan ukur penjimatan.

Verified Every command ran end-to-end on a fresh Ubuntu 24.04 server, July 30, 2026.

Perkara yang dilakukan 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/ dalam projek anda: log yang hanya boleh ditambah tentang perkara yang berlaku, dan ringkasan pendek tentang perkembangan terakhir. Kedua-duanya dihasilkan pada mesin yang anda gunakan oleh peringkas Python setempat. Oleh itu, memori itu sendiri tidak menggunakan token API.

Recall mengisi jurang yang kecil tetapi berterusan. 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 secara manual, atau membiarkan model membaca semula separuh repositori untuk memahaminya. Kedua-duanya menggunakan token, dan pilihan kedua menggunakan token yang banyak.

Recall versi 0.4.0 ialah versi semasa pada Julai 2026, dan projek ini dilesenkan di bawah lesen MIT. Recall ialah pemalam. Tiada apa-apa dalam pemalam ini yang membuat panggilan rangkaian.

Apa yang diperlukan pada VPS

Hook tangkapan Recall ialah skrip Python yang disertakan bersama plugin. Tiada kebergantungan pihak ketiga, jadi satu-satunya keperluan sebenar ialah interpreter.

python3 -V

Ubuntu 24.04 memberikan jawapan Python 3.12.3. Recall menyokong Python 3.9 dan yang lebih baharu. Imej kontena minimum kadangkala tidak mengandungi sebarang interpreter, lalu shell memberikan jawapan python3: command not found. Pasang interpreter sebelum meneruskan.

sudo apt update && sudo apt install -y python3

NumPy ialah pemecut pilihan untuk satu langkah dalam peringkas. Anda tidak memerlukannya.

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' ialah jawapan yang boleh diterima di sini. Peringkas mempunyai laluan Python tulen, dan suite ujian projek menyemak bahawa kedua-dua laluan memilih ayat yang sama.

Memori sesi lebih penting pada pelayan berbanding komputer riba kerana kerja pelayan datang dalam lawatan singkat yang tersebar selama beberapa hari. Jika anda sudah menjalankan Claude Code dalam tmux pada VPS, Recall ialah komponen yang membawa sesi semalam ke sesi hari ini.

Pasang Recall daripada pasaran plugin

Dua arahan, ditaip dalam sesi Claude Code:

/plugin marketplace add raiyanyahya/recall
/plugin install recall@recall

Arahan kedua membaca plugin@marketplace. Kedua-dua nama ialah recall di sini. Ini kelihatan seperti kesilapan salin dan tampal, tetapi sebenarnya bukan.

Semak pemasangan dengan menjalankan salah satu arahan plugin sendiri:

/recall:show

/recall:show memaparkan ringkasan semasa. Dalam projek yang baharu dibuat, belum ada apa-apa untuk dipaparkan. Jadi, perkara yang sebenarnya anda semak ialah kewujudan arahan itu. Jika Claude Code tidak mengenali /recall:show, plugin tidak dimuatkan dan tiada hook akan dijalankan.

Untuk menjalankannya daripada checkout, klon repositori dan sahkannya 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 plugin itu berstruktur dengan betul. Kemudian mulakan Claude Code daripada direktori projek anda dengan claude --plugin-dir ~/recall.

Perkara yang ditulis oleh hooks dan masa pelaksanaannya

Recall mendaftarkan tiga hooks Claude Code. Setiap satunya menjalankan skrip Python daripada direktori plugin.

  • SessionStart dicetuskan semasa permulaan, penyambungan semula dan pengosongan. Ia memaparkan context.md supaya sesi dibuka dengan ringkasan anda dalam paparan.
  • Stop dicetuskan setiap kali Claude selesai memberikan respons. Ia menambahkan pusingan tersebut pada log.
  • SessionEnd dicetuskan apabila sesi ditutup dan boleh menjana semula ringkasan.

Dua fail terhasil daripadanya, kedua-duanya dalam .recall/.

  • history.md ialah rekod yang hanya boleh ditambah: gesaan, respons, fail yang disentuh dan arahan yang dijalankan.
  • context.md ialah ringkasan 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/

Anda sepatutnya melihat history.md dengan kandungan di dalamnya. Anda mungkin tidak melihat context.md langsung, dan itu ialah tingkah laku lalai, bukannya kegagalan. auto_save_context ialah off melainkan anda menetapkannya, jadi ringkasan hanya ditulis apabila anda memintanya:

/recall:save

Arahan tersebut menjalankan peringkas setempat pada history.md dan menulis semula context.md. Algoritmanya ialah pemarkahan TF-IDF (kekerapan istilah, kekerapan dokumen songsang) yang membekalkan pemeringkatan ayat TextRank. Proses ini deterministik dan ekstraktif, iaitu memilih ayat yang sememangnya terdapat dalam log anda. Tiada model dipanggil, jadi langkah ini percuma dan berfungsi tanpa sambungan ke mesin.

Konfigurasikan Recall untuk satu projek

Konfigurasi disimpan dalam fail recall.config.json di akar projek. Berikut ialah lalai yang disertakan:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • output_dir menetapkan lokasi dua fail tersebut. Simpan fail itu di dalam projek.
  • capture_history menghidupkan atau mematikan log history.md.
  • auto_save_context menerima off atau on_end, dan lalai kepada off.
  • summary_sentences menetapkan bilangan ayat yang dikekalkan dalam context.md. Nilai yang lebih tinggi menghasilkan ringkasan yang lebih panjang dan beban yang sedikit lebih besar semasa permulaan sesi.
  • redact membuang corak rahsia yang biasa sebelum apa-apa ditulis ke cakera.
  • include_git menambahkan diff semasa dan commit terkini ke dalam ringkasan.
  • max_input_chars mengehadkan jumlah history.md yang dibaca oleh peringkas dalam satu proses.

Untuk projek pada VPS, perubahan yang berguna ialah penyimpanan automatik, kerana sesi pada server sering berakhir apabila terminal terputus, bukan apabila anda memutuskan untuk berhenti.

{
  "auto_save_context": "on_end",
  "summary_sentences": 12
}

Untuk menghentikan tangkapan buat sementara waktu tanpa mengubah konfigurasi, cipta penanda jeda. Padamkan penanda itu untuk mula menangkap semula.

touch .recall/.capture-paused

Lakukan ini sebelum sesi yang melibatkan kelayakan production, kerana penyahmaksiatan ialah penapis dan bukan jaminan. Pertimbangan yang sama mendorong amalan menjauhkan rahsia daripada agent AI secara umum: rahsia yang selamat ialah rahsia yang tidak pernah dilihat oleh agent.

Berapa banyak token yang dijimatkan oleh Recall?

Ia bergantung pada alternatif yang digunakan. Memuatkan ringkasan pada permulaan sesi adalah murah. Perkara yang digantikannya boleh menjadi mahal kerana model yang tidak mempunyai memori tentang projek anda perlu menemui semula projek itu dengan membaca fail.

ChartTypical cost of resuming work, per session
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 ialah angka lazim untuk projek bersaiz sederhana, bukan ukuran untuk projek anda. Ringkasan Recall dimuatkan dengan kira-kira 1,200 token. Angka ini selaras dengan tuntutan yang diterbitkan oleh projek itu, iaitu seribu hingga dua ribu token untuk resume. Memainkan semula transkrip terdahulu yang lengkap memuatkan semula seluruh perbualan, sekitar 85,000 token. Membiarkan model menemui semula projek dengan membaca fail berada di antara kedua-duanya, iaitu hampir 30,000 token, dan angka itu meningkat mengikut saiz repositori. Baris CLAUDE.md disertakan sebagai perbandingan skala: baris ini lebih murah kerana pendek dan statik, serta memberitahu model peraturan tetap anda, bukannya perkara yang berlaku malam tadi.

Ukur angka anda sendiri. Satu token bersamaan kira-kira empat aksara dalam prosa bahasa Inggeris, dan sedikit kurang untuk kod.

wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))

Dalam sesi, /context menunjukkan perkara yang dimuatkan ke dalam tetingkap konteks pada masa ini, manakala /cost melaporkan jumlah keseluruhan sesi. Mulakan satu sesi tanpa konteks terdahulu, mulakan sesi seterusnya dengan ringkasan yang tersedia, kemudian bandingkan hasilnya. Untuk gambaran penuh tentang penggunaan token sebenar dalam sesi, cara Claude Code menggunakan token menyediakan pecahannya.

Satu peringatan menjadikan dakwaan ini lebih tepat. Ringkasan dimuatkan pada setiap permulaan sesi. Oleh itu, ringkasan yang tidak pernah digunakan ialah kos kecil, bukannya penjimatan. Kekalkan summary_sentences hampir dengan nilai lalai, kecuali jika sesi anda berlangsung lama.

Bina semula ringkasan tanpa sesi

Jika anda mengklon repositori, peringkas mempunyai titik masuk baris perintahnya sendiri. Ini berguna pada VPS apabila sesi terhenti bersama terminal dan anda masih memerlukan ringkasan.

python3 ~/recall/scripts/make_context.py --help

Output bantuan menyenaraikan flag yang diterimanya: --cwd untuk akar projek, --transcript untuk fail transkrip yang ditentukan secara eksplisit, --quiet untuk menyekat output, dan --harness untuk memilih antara claude dengan opencode. Halakan peringkas kepada projek:

python3 ~/recall/scripts/make_context.py --cwd /srv/projects/api

Peringkas membaca transkrip sesi dan history.md, kemudian menulis context.md di bawah direktori yang anda berikan. Jika anda memasangnya melalui marketplace, plugin tersebut berada dalam direktori yang diurus oleh Claude Code, dan /recall:save ialah cara yang disokong untuk melakukan tugas yang sama.

Sebab tiada apa-apa ditulis

Tiada direktori .recall/ selepas sesi penuh. Hook tidak pernah dijalankan. Taip /recall:show untuk mengesahkan bahawa plugin telah dimuatkan, kemudian jalankan python3 -V. Perintah hook mencuba python3 terlebih dahulu dan python kemudian. Oleh itu, hos yang tidak mempunyai kedua-duanya tidak menulis apa-apa dan tidak memaparkan amaran.

history.md bertambah tetapi context.md tidak pernah berubah. auto_save_context ialah 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 menggunakan laluan relatif kepada direktori tempat Claude Code dimulakan. Oleh itu, memulakan sesi dari direktori rumah menyebabkan memori disimpan di situ. Mulakan dari akar projek, dan gunakan ls -la .recall/ untuk mencari lokasi sebenar fail tersebut.

Pengumpulan terhenti dan tiada amaran dipaparkan. Semak penanda jeda dengan ls -a .recall/. Fail .capture-paused yang anda cipta minggu lalu masih berfungsi.

Ringkasan terlalu ringkas selepas sesi yang panjang. max_input_chars mengehadkan input peringkas kepada 200000 aksara, jadi log yang sangat panjang akan dipotong. Putarkan log tersebut.

mv .recall/history.md .recall/history-2026-07-30.md

Jalankan satu sesi pendek selepas itu dan semak ls -la .recall/ sekali lagi untuk mengesahkan bahawa history.md baharu telah muncul.

Di mana Recall berhenti

Recall ialah log bersama peringkas, dan anda perlu memahami dengan jelas perkara yang tidak diliputinya.

Peringkas ini bersifat ekstraktif. TextRank memilih ayat yang sudah terdapat dalam history.md, jadi ia tidak pernah menilai sama ada sesuatu keputusan itu betul. Tindakan yang salah dan direkodkan pada hari Selasa akan kelihatan sama seperti keputusan yang baik pada hari Rabu. Apabila kesannya penting, baca context.md dan betulkan secara manual. Fail ini ialah fail markdown, dan anda boleh mengeditnya.

Tiada fungsi carian. Anda mendapat satu ringkasan semasa dan satu log yang terus berkembang bagi setiap projek, bukan memori yang boleh dibuat pertanyaan merentas projek. Jika persoalannya ialah perkara yang anda putuskan tentang pangkalan data tiga minggu lalu, anda perlu menjalankan grep pada history.md.

Ia tidak membantu dalam sesi yang sedang berlangsung. Tetingkap konteks yang penuh di tengah-tengah sesi ialah masalah yang berbeza dan mempunyai penyelesaian yang berbeza. mengurus tetingkap konteks dalam satu sesi ialah artikel pelengkap kepada panduan ini.

Ringkasan ini sengaja dianggap sebagai input yang tidak dipercayai. context.md disuntik dalam blok fenced dan dilabelkan, kemudian Claude bertanya sebelum bergantung padanya. Reka bentuk ini diperlukan kerana direktori .recall/ yang telah dilakukan commit ialah tempat sesiapa yang mempunyai akses commit boleh menulis teks yang akan dibaca oleh ejen anda. Tentukan sekali sahaja sama ada .recall/ bersifat peribadi atau dikongsi: tambahkannya pada .gitignore untuk memori peribadi, atau lakukan commit dan semak seperti sumbangan lain. Jika ejen berjalan tanpa pengawasan, menjalankan Claude Code dengan selamat pada VPS merangkumi sempadan yang lebih luas.

Redaksi ialah usaha terbaik. Ia menyasarkan corak umum seperti kunci API, token, blok PEM dan tugasan .env. Baca .recall/ sebelum anda melakukan commit terhadapnya.

Nombor versi ini menggambarkan tahap kematangan dengan tepat. Pada 0.4.0 pada Julai 2026, kunci konfigurasi dan susun atur fail masih boleh berubah antara keluaran. Oleh itu, baca changelog sebelum anda menaik taraf persediaan yang anda bergantung padanya.

FAQ

Adakah Recall menghantar kod atau transkrip saya ke mana-mana?

Tidak. Cangkuk tangkapan dan peringkas ialah skrip Python yang berjalan pada mesin anda sendiri. Pemalam tidak menyimpan kunci API dan tidak membuat panggilan rangkaian. Peringkasan menggunakan TF-IDF dan TextRank, bukannya model. Oleh itu, proses ini tidak memerlukan kos dan boleh dijalankan apabila mesin berada di luar talian. Kekurangannya ialah ringkasan itu bersifat ekstraktif: ringkasan memilih ayat daripada log anda dan bukannya menulis ayat baharu.

Mengapa .recall/context.md saya tiada atau tidak terkini?

auto_save_context ditetapkan kepada off secara lalai. Oleh itu, ringkasan hanya dijana semula apabila anda menjalankan /recall:save. Tetapkan "auto_save_context": "on_end" dalam recall.config.json supaya ringkasan ditulis semula apabila setiap sesi tamat. Jika history.md juga tiada, cangkuk tidak berjalan langsung. Sahkan bahawa pemalam telah dimuatkan dengan /recall:show. Kemudian sahkan bahawa python3 -V memberikan respons pada mesin itu kerana cangkuk tersebut ialah skrip Python.

Berapa banyak yang dijimatkan oleh Recall bagi setiap sesi?

Memuatkan ringkasan menggunakan kira-kira 1,200 token berbanding kira-kira 30,000 token yang diperlukan oleh model untuk membaca semula repositori anda bagi menentukan kedudukannya. Angka ini ialah anggaran biasa. Ukur penggunaan anda sendiri dengan wc -c .recall/context.md dan perintah /context dalam sesi. Bandingkan permulaan baharu dengan sesi yang disambung semula daripada ringkasan.

Adakah saya masih memerlukan fail CLAUDE.md?

Ya, kedua-duanya mempunyai fungsi yang berbeza. CLAUDE.md ialah kandungan yang anda tulis dengan sengaja: peraturan tetap dan perintah binaan. context.md dijana berdasarkan perkara yang benar-benar berlaku dalam sesi terakhir. Oleh itu, fail ini mengandungi migrasi yang belum selesai dan mungkin tidak pernah terlintas untuk anda catatkan. Simpan kedua-duanya.

Bolehkah satu VPS menyimpan memori untuk beberapa projek?

Ya. Recall menyimpan memori dalam .recall/ di dalam setiap direktori projek. Oleh itu, dua projek pada pelayan yang sama mempunyai log dan ringkasan yang berasingan. Mulakan Claude Code dari akar projek setiap kali kerana fail tersebut mengikut direktori kerja, bukan akaun pengguna.