SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor · Na-update 2026-08-31

Recall: Memory para sa Claude Code sa VPS

Alamin kung paano i-set up ang fully local na Recall plugin sa VPS, i-log ang bawat Claude Code session, gumawa ng resumable summary, at sukatin ang tipid sa tokens.

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

Ano ang ginagawa ng Recall para sa memory ng Claude Code

Ang Recall ay isang Claude Code plugin na nagbibigay sa bawat project ng memory na nagpapatuloy sa iba’t ibang session. Nagsusulat ito ng dalawang markdown file sa isang .recall/ folder sa loob ng project: isang append-only log ng mga nangyari at isang maikling buod ng huling kalagayan ng trabaho. Pareho itong ginagawa sa machine na ginagamit mo ng isang local Python summarizer, kaya walang API token na ginagamit mismo ng memory.

Maliit ngunit palaging nararanasan ang problemang tinutugunan nito. Isinasara mo ang isang session sa iyong VPS noong Tuesday. Pagdating ng Wednesday, walang alam ang Claude Code tungkol sa nangyari noong Tuesday. Ipinaliliwanag mong muli nang mano-mano ang project, o hinahayaan mong basahin muli ng model ang kalahati ng repository para maunawaan ito. Parehong gumagamit ng token, at mas maraming token ang ginagamit ng pangalawang paraan.

Ang kasalukuyang bersyon ng Recall ay 0.4.0 noong July 2026, at lisensyado ang project sa ilalim ng MIT license. Isa itong plugin. Walang bahagi nito ang gumagawa ng network call.

Mga kailangan mo sa VPS

Ang capture hooks ng Recall ay mga Python script na kasama sa plugin. Wala itong third-party dependencies, kaya interpreter lang ang aktuwal na kailangan.

python3 -V

Sapat na ang Ubuntu 24.04 Python 3.12.3. Sinusuportahan ng Recall ang Python 3.9 at mas bagong bersyon. Kung minsan, walang interpreter ang minimal container images, kaya python3: command not found ang sagot ng shell. Mag-install muna nito bago magpatuloy.

sudo apt update && sudo apt install -y python3

Opsyonal na accelerator ang NumPy para sa isang hakbang ng summarizer. Hindi mo ito kailangan.

python3 -c "import numpy"

ModuleNotFoundError: No module named 'numpy' ay katanggap-tanggap na sagot dito. May pure-Python path ang summarizer, at sinusuri ng test suite ng proyekto na pareho ang mga sentence na pinipili ng dalawang path.

Mas mahalaga ang session memory sa server kaysa sa laptop, dahil dumarating ang server work sa maiikling session na magkakahiwalay sa loob ng ilang araw. Kung nagpapatakbo ka na ng Claude Code sa tmux sa isang VPS, ang Recall ang nagdadala ng session kahapon papunta sa araw na ito.

Mag-install ng Recall mula sa plugin marketplace

Dalawang command, na itina-type sa loob ng Claude Code session:

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

Binabasa ng pangalawang command ang plugin@marketplace. Parehong recall ang dalawang pangalan dito. Mukha itong copy-paste mistake, pero hindi ito mali.

Suriin ang installation sa pamamagitan ng pagpapatakbo ng isa sa mga sariling command ng plugin:

/recall:show

Ipinapakita ng /recall:show ang kasalukuyang summary. Sa bagong gawa pa lamang na project, wala pa itong maipapakita. Kaya ang aktuwal mong sinusuri ay kung umiiral ang command. Kung hindi kinikilala ng Claude Code ang /recall:show, hindi na-load ang plugin at walang hook na tatakbo.

Kung gusto mong magpatakbo mula sa checkout, i-clone muna ang repository at i-validate ito:

git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .

Binabasa ng claude plugin validate . ang manifest sa .claude-plugin/ at iniuulat kung maayos ang pagkakabuo ng plugin. Pagkatapos, simulan ang Claude Code mula sa directory ng project gamit ang claude --plugin-dir ~/recall.

Ano ang isinusulat ng hooks, at kailan

Tatlong Claude Code hooks ang nirerehistro ng Recall. Ang bawat isa ay nagpapatakbo ng Python script mula sa plugin directory.

  • SessionStart ay tumatakbo sa startup, resume, at clear. Ipinapakita nito ang context.md upang magbukas ang session na nakikita ang iyong summary.
  • Stop ay tumatakbo sa bawat pagtatapos ni Claude ng isang response. Idinadagdag nito ang turn na iyon sa log.
  • SessionEnd ay tumatakbo kapag nagsasara ang session, at maaaring bumuo muli ng summary.

Dalawang file ang nalilikha nito, at parehong nasa loob ng .recall/.

  • history.md ang append-only record: mga prompt, response, file na nabago, at command na pinatakbo.
  • context.md ang nabuong digest: layunin, summary, susunod na hakbang, file na nabago, command na pinatakbo, at git context.

Pagkatapos ng isang aktuwal na session, tingnan ang directory.

ls -la .recall/

Dapat mong makita ang history.md na may laman. Maaaring wala kang makita ni isang context.md, at default na behavior ito, hindi isang fault. Ang auto_save_context ay off maliban kung ise-set mo ito, kaya isinusulat lamang ang summary kapag hiniling mo:

/recall:save

Pinapatakbo ng command na iyon ang local summarizer sa history.md at muling isinusulat ang context.md. Ang algorithm ay TF-IDF (term frequency, inverse document frequency) scoring na ipinapasa sa TextRank sentence ranking. Deterministic at extractive ito, ibig sabihin, pumipili ito ng mga pangungusap na nasa log na. Walang model na tinatawag, kaya libre ang hakbang na ito at gumagana kahit offline ang machine.

I-configure ang Recall para sa isang project

Nasa isang recall.config.json file sa project root ang configuration. Ito ang mga default na kasama sa release:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • Tinutukoy ng output_dir kung saan ilalagay ang dalawang file. Panatilihin ang mga ito sa loob ng project.
  • Ino-on at ino-off ng capture_history ang history.md log.
  • Tumatanggap ang auto_save_context ng off o on_end, at ang default nito ay off.
  • Tinutukoy ng summary_sentences kung ilang sentence ang mananatili sa context.md. Kapag tinaasan ito, hahaba ang summary at bahagyang lalaki ang load sa pagsisimula ng session.
  • Tinatanggal ng redact ang mga karaniwang pattern ng secret bago maisulat ang anuman sa disk.
  • Idinaragdag ng include_git ang kasalukuyang diff at mga kamakailang commit sa summary.
  • Nililimitahan ng max_input_chars kung gaano karaming history.md ang babasahin ng summarizer sa isang pass.

Para sa project sa isang VPS, ang kapaki-pakinabang na pagbabago ay awtomatikong pag-save. Madalas nagtatapos ang session sa server kapag naputol ang terminal, hindi kapag pinili mong ihinto ito.

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

Para pansamantalang ihinto ang pag-capture nang hindi binabago ang config, gumawa ng pause marker. Tanggalin ito upang muling magsimula ang pag-capture.

touch .recall/.capture-paused

Gawin ito bago ang session kung saan hahawakan mo ang production credentials, dahil filter lamang ang redaction at hindi ito garantiya. Ito rin ang dahilan kung bakit mahalagang ilayo ang mga secret sa AI agents sa pangkalahatan: ang ligtas na secret ay ang secret na hindi kailanman nakikita ng agent.

Magkano ang natitipid ng Recall sa tokens?

Depende ito sa alternatibong paraan. Mura ang pag-load ng summary sa simula ng session. Maaaring magastos ang pinapalitan nito, dahil muling hinahanap ng model na walang memorya tungkol sa iyong project ang mga detalye nito sa pamamagitan ng pagbabasa ng mga file.

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"
  }
]

Karaniwang halaga ang mga ito para sa isang mid-size na project, hindi aktuwal na sukat mula sa iyo. Naglo-load ang Recall summary ng humigit-kumulang 1,200 tokens, na tugma sa inilathalang pahayag ng project na one to two thousand tokens para sa resume. Kapag ni-replay ang buong naunang transcript, nilo-load muli ang buong conversation, na nasa humigit-kumulang 85,000 tokens. Kapag hinayaang tuklasin muli ng model ang project sa pamamagitan ng pagbabasa ng mga file, nasa pagitan ito ng dalawa, malapit sa 30,000 tokens, at lumalaki ang halagang iyon kasabay ng repository. Nariyan ang CLAUDE.md row bilang panukat ng scale: mas mura ito dahil maikli at static ito, at sinasabi nito sa model ang iyong permanenteng rules sa halip na ang mga nangyari kagabi.

Sukatin ang sarili mong mga halaga. Ang isang token ay humigit-kumulang apat na character ng English prose, at bahagyang mas kaunti para sa code. Kung ipinapasa mo rin ang summary sa isang local model sa parehong VPS, tingnan muna kung saang window ito napupunta bago mo pagtiwalaan ang resume, dahil pinuputol ng Ollama ang mahahabang prompt sa maliit na default context length sa halip na sabihin sa iyo na inalis nito ang dulo.

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

Sa loob ng session, ipinapakita ng /context kung ano ang kasalukuyang naka-load sa context window, at iniuulat ng /cost ang kabuuang halaga para sa session. Magsimula ng isang session nang walang laman, pagkatapos ay magsimula ng isa pa na may nakalagay nang summary, at paghambingin ang mga resulta. Para sa kumpletong larawan kung saan talaga napupunta ang tokens ng isang session, nasa kung paano ginagamit ng Claude Code ang tokens ang breakdown.

May isang limitasyon na kailangang isaalang-alang. Nilo-load ang summary sa simula ng bawat session, kaya ang summary na hindi mo naman ginagamit ay maliit na dagdag-gastos, hindi tipid. Panatilihin ang summary_sentences malapit sa default maliban kung mahahaba ang iyong mga session. Nakakatulong ang mas tahimik na session sa kabilang panig ng kalkulasyon, dahil ang agent na itinutulak na gumawa ng pinakamaliit na gumaganang pagbabago ay nag-iiwan ng mas maikling log para suriin ng summarizer.

Muling buuin ang buod nang walang session

Kung nag-clone ka ng repository, may sarili itong command line entry point ang summarizer. Kapaki-pakinabang ito sa isang VPS kapag natapos ang session kasabay ng terminal at kailangan mo pa rin ang digest.

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

Inililista ng help output ang mga tinatanggap nitong flag: --cwd para sa project root, --transcript para sa partikular na transcript file, --quiet upang hindi maglabas ng output, at --harness upang pumili sa pagitan ng claude at opencode. Ituro ito sa isang project:

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

Binabasa nito ang session transcript at history.md, pagkatapos ay isinusulat ang context.md sa ilalim ng directory na ipinasa mo. Kung nag-install ka sa pamamagitan ng marketplace, nasa directory na pinamamahalaan ng Claude Code ang plugin, at ang /recall:save ang suportadong paraan para gawin ang parehong gawain.

Bakit walang naisusulat

Walang .recall/ directory pagkatapos ng buong session. Hindi kailanman tumakbo ang hooks. I-type ang /recall:show upang kumpirmahing naka-load ang plugin, pagkatapos ay patakbuhin ang python3 -V. Sinusubukan muna ng hook command ang python3 at pagkatapos ang python, kaya walang maisusulat ang system na walang alinman sa dalawang ito at hindi rin ito magbibigay ng babala.

Lumalago ang history.md ngunit hindi nagbabago ang context.md. Ang auto_save_context ay off bilang default. Patakbuhin ang /recall:save, o itakda ang key sa on_end at hayaang ang SessionEnd hook ang magsagawa nito.

Lumilitaw ang mga file sa maling project. Nagsusulat ang Recall batay sa directory kung saan sinimulan ang Claude Code, kaya kapag mula sa home directory sinimulan ang session, doon mapupunta ang memory. Magsimula sa project root, at gamitin ang ls -la .recall/ upang makita kung saan talaga napunta ang mga file.

Huminto ang capture at walang nagbigay ng babala. Suriin ang pause marker gamit ang ls -a .recall/. Gumagana pa rin ang .capture-paused file na ginawa mo noong nakaraang linggo.

Kaunti ang laman ng summary pagkatapos ng mahabang session. Nililimitahan ng max_input_chars sa 200000 characters ang input ng summarizer, kaya napuputol ang napakahabang log. I-rotate ito.

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

Pagkatapos, magpatakbo ng isang maikling session at suriin muli ang ls -la .recall/ upang makumpirmang may bagong history.md na lumitaw.

Kung saan tumitigil ang Recall

Ang Recall ay isang log at summarizer, kaya mahalagang malinaw kung ano ang hindi nito saklaw.

Extractive ang summarizer. Pinipili ng TextRank ang mga sentence na nasa history.md na, kaya hindi nito sinusuri kung tama ang isang desisyon. Parehong mababasa ang maling direksiyong naitala noong Martes at ang magandang desisyong ginawa noong Miyerkules. Kapag mahalaga ang epekto, basahin ang context.md at iwasto ito nang mano-mano. Markdown file ito, at walang pumipigil sa iyong i-edit ito.

Walang search. Mayroon kang isang kasalukuyang summary at isang patuloy na lumalaking log para sa bawat project, hindi queryable memory na sumasaklaw sa lahat ng project. Kung ang tanong ay kung ano ang napagpasyahan mo tungkol sa database tatlong linggo na ang nakalipas, ikaw mismo ang mag-grep sa history.md. Wala rin itong sideways sharing: hindi nakikita ng dalawang session na sabay na bukas sa iisang VPS ang log ng isa't isa. Kaya kapag kailangang malaman ng isa kung ano ang ginagawa ng isa pa, direktang nagpapalitan ng text ang mga session habang tumatakbo ang mga ito.

Hindi ito nakatutulong sa loob ng isang session. Ibang problema ang napupuno ang context window sa kalagitnaan ng session, at iba rin ang mga solusyon dito. Ang pamamahala sa context window sa loob ng isang session ang kaugnay na gabay para rito.

Itinuturing na untrusted input ang summary ayon sa disenyo. Ini-inject ang context.md na may fence at label, at nagtatanong si Claude bago ito gamitin. Ginawa ang disenyong ito dahil ang isang committed na .recall/ directory ay lugar kung saan maaaring magsulat ng text ang sinumang may commit access na babasahin ng iyong agent. Ang dalas ng pagtatanong ng agent tungkol sa binabasa nito ay nakadepende sa permission mode kung saan nagsimula ang session, at magiging default ng Claude Code ang auto mode sa 14 August 2026. Magpasya nang isang beses kung personal o shared ang .recall/: idagdag ito sa .gitignore para sa personal memory, o i-commit ito at i-review gaya ng iba pang contribution. Kung unattended na tumatakbo ang agent, sinasaklaw ng ligtas na pagpapatakbo ng Claude Code sa isang VPS ang mas malawak na boundary.

Best effort ang redaction. Tinutukoy nito ang mga karaniwang pattern gaya ng API keys, tokens, PEM blocks, at mga assignment sa .env. Basahin ang .recall/ bago mo ito i-commit.

Tapat sa maturity nito ang version number. Sa 0.4.0 noong July 2026, maaari pa ring magbago ang config keys at file layout sa pagitan ng mga release, kaya basahin ang changelog bago mag-upgrade ng setup na umaasa ka.

FAQ

Ipinapadala ba ng Recall ang code o mga transcript ko sa iba?

Hindi. Ang capture hooks at summarizer ay mga Python script na tumatakbo sa sarili mong machine, walang API key ang plugin, at wala itong ginagawang network call. Gumagamit ang summarization ng TF-IDF at TextRank sa halip na isang model, kaya walang gastos ang hakbang na ito at gumagana ito kahit offline ang machine. Ang kapalit nito ay extractive ang summary: pumipili ito ng mga sentence mula sa log mo sa halip na magsulat ng mga bago.

Bakit wala o luma na ang aking .recall/context.md?

Naka-default ang auto_save_context sa off, kaya nire-regenerate lamang ang summary kapag pinatakbo mo ang /recall:save. Itakda ang "auto_save_context": "on_end" sa recall.config.json upang maisulat itong muli sa pagtatapos ng bawat session. Kung wala rin ang history.md, hindi talaga tumatakbo ang hooks: kumpirmahing naka-load ang plugin gamit ang /recall:show, pagkatapos ay kumpirmahing sumasagot ang python3 -V sa machine na iyon, dahil Python scripts ang hooks.

Gaano karaming natitipid ng Recall sa bawat session?

Ang pag-load ng summary ay kumokonsumo ng humigit-kumulang 1,200 tokens, kumpara sa karaniwang 30,000 tokens para sa isang model na kailangang basahin muli ang repository upang matukoy kung nasaan na ito. Mga karaniwang bilang lamang ang mga iyon. Sukatin ang sarili mong gamit ang wc -c .recall/context.md at ang command na /context sa loob ng isang session, at ikumpara ang cold start sa session na nag-resume mula sa summary.

Kailangan ko pa ba ng CLAUDE.md file?

Oo, at magkaiba ang gamit ng mga ito. Ang CLAUDE.md ay sinasadya mong isulat: naglalaman ito ng mga permanenteng panuntunan at build command. Ang context.md ay ginagawa mula sa aktuwal na nangyari sa nakaraang session, kaya nilalaman nito ang hindi pa tapos na migration na hindi mo maiisip na isulat nang hiwalay. Panatilihin ang dalawa.

Maaari bang maglaman ang isang VPS ng memory para sa ilang project?

Oo. Pinapanatili ng Recall ang memory sa .recall/ sa loob ng directory ng bawat project, kaya magkahiwalay ang mga log at summary ng dalawang project kahit nasa parehong server ang mga ito. Palaging simulan ang Claude Code mula sa project root, dahil sinusunod ng mga file ang working directory at hindi ang user account.