SSD Nodes Learn Hosting plans →
Mga Gabay Matt ConnorNi Matt Connor

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 loob ng folder na .recall/ sa iyong project: isang append-only log ng mga nangyari, at isang maikling buod ng huling pinagpatungan mo. Ginagawa ang dalawang ito sa machine na ginagamit mo, sa pamamagitan ng isang lokal na Python summarizer, kaya walang API token na ginagamit mismo ng memory.

Maliit ngunit palaging naroroon ang problemang tinutugunan nito. Isinasara mo ang session sa iyong VPS noong Tuesday. Pagsapit ng Wednesday, hindi awtomatikong nilo-load ng bagong session ang conversation noong Tuesday, kahit maaaring magpanatili ng notes sa iba’t ibang session ang built-in auto memory ng Claude Code. Kung hindi saklaw ng mga note na iyon kung saan ka tumigil, kailangan mong ipaliwanag muli nang mano-mano ang project, o hayaan ang model na basahin muli ang kalahati ng repository para malaman ito. Parehong gumagamit ng tokens ang mga paraang ito, at mas marami ang nagagamit ng ikalawa.

Ang Recall version 0.4.0, na inilabas noong 18 July 2026, ang pinakabagong release pa rin hanggang October 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 kung kailan

May tatlong Claude Code hooks na nire-register ang 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 mabuksan ang session na nakikita agad ang iyong summary.
  • Stop ay tumatakbo sa bawat pagtatapos ng response ni Claude. Idinadagdag nito ang turn na iyon sa log.
  • SessionEnd ay tumatakbo kapag nagsasara ang session, at maaari nitong muling buuin ang summary.

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

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

Pagkatapos ng isang aktuwal na session, tingnan ang directory.

ls -la .recall/

Kapag naka-enable ang capture, walang pause marker, at available ang transcript, dapat makita mong may laman ang history.md. Maaaring wala ka talagang makita na context.md, at default behavior ito, hindi error. Ang auto_save_context ay off maliban kung itatakda mo ito, kaya isinusulat lamang ang summary kapag hihilingin mo ito:

/recall:save

Pinapatakbo ng command na iyon ang local summarizer sa history.md at nire-rewrite ang context.md. TF-IDF (term frequency, inverse document frequency) scoring ang algorithm, na sinusundan ng TextRank sentence ranking. Deterministic at extractive ito, ibig sabihin, pumipili lamang ito ng mga sentence na mayroon na sa log. 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 package:

{
  "output_dir": ".recall",
  "capture_history": true,
  "summary_sentences": 8,
  "redact": true,
  "include_git": true,
  "max_input_chars": 200000
}
  • Itinatakda ng output_dir kung saan ilalagay ang dalawang file. Panatilihin 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 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.
  • Idinadagdag ng include_git sa summary ang kasalukuyang diff statistics at mga kamakailang commit.
  • Nililimitahan ng max_input_chars kung gaano karaming bahagi ng history.md ang babasahin ng summarizer sa bawat pass.

Para sa project sa isang VPS, ang kapaki-pakinabang na pagbabago ay automatic saving. Madalas nagtatapos ang session sa server kapag nawala ang terminal, hindi kapag pinili mong ihinto ito.

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

Para pansamantalang ihinto ang capture nang hindi binabago ang config, gawin ang pause marker. Tanggalin ito para magsimulang muli ang 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 na tokens ng Recall?

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

TsartTypical cost of resuming work, per session
Ang datos sa likod ng tsart na ito
[
  {
    "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 bilang ang mga ito para sa mid-size na project, hindi aktuwal na sukat mula sa iyo. Naglo-load ang Recall summary ng humigit-kumulang 1,200 tokens. Tugma ito sa inilathalang claim ng project na one to two thousand tokens para sa resume. Kapag nireplay ang buong dating transcript, nilo-load muli ang buong conversation, na nasa humigit-kumulang 85,000 tokens. Nasa pagitan ng dalawang ito ang muling pagtuklas ng model sa project sa pamamagitan ng pagbabasa ng mga file, na nasa humigit-kumulang 30,000 tokens. Tumataas ang bilang na ito habang lumalaki ang repository. Nariyan ang CLAUDE.md row bilang panukat sa scale. Mas mura ito dahil maikli at static ito, at sinasabi nito sa model ang mga patakaran mong laging sinusunod sa halip na ang nangyari kagabi.

Sukatin ang sarili mong mga bilang. Humigit-kumulang four characters ng English prose ang katumbas ng isang token, 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 ka umasa sa resume, dahil nakadepende ang default context length ng Ollama sa available na VRAM.

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 bilang para sa session. Magsimula ng isang session nang walang laman, pagkatapos ay magsimula ng isa pa na may nakalagay nang summary, at ihambing ang mga ito. Para sa kumpletong paliwanag kung saan talaga napupunta ang tokens ng isang session, tingnan ang kung paano ginagamit ng Claude Code ang tokens.

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 dagdag na gastos sa halip na matitipid. Panatilihing malapit sa default ang summary_sentences maliban kung mahahaba ang mga session mo. Nakakatulong ang mas tahimik na session sa kabilang panig ng kalkulasyon, dahil nag-iiwan ng mas maikling log ang agent na itinutulak na gawin ang pinakamaliit na gumaganang pagbabago, na siyang ira-rank 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. Suriin kung naka-disable ang capture, sa ibang lugar naka-configure ang output directory, o walang nahanap na transcript bago ipalagay na 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 pangalawa ang python, kaya mabibigo ang isang box na walang alinman sa mga ito, kasama ang stderr at exit status 127. Nagpapakita ang Claude Code ng non-blocking hook error notice na naglalaman ng unang linya ng stderr.

Lumalaki 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 hayaan ang SessionEnd hook ang gumawa nito.

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

Huminto ang capture at walang nagbigay ng babala. Suriin kung may pause marker gamit ang ls -a .recall/. Patuloy pa ring gumagana 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 character ang input ng summarizer, kaya pinuputol ang napakahabang log. I-rotate ito.

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

Magsagawa pagkatapos ng isang maikling session at suriin muli ang ls -la .recall/ upang makumpirma na may bagong history.md na nalikha.

Saan humihinto ang Recall

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

Extractive ang summarizer. Pinipili ng TextRank ang mga pangungusap na nasa history.md na, kaya hindi nito hinuhusgahan kung tama ang isang desisyon. Ang maling hakbang na naitala noong Martes ay mababasa nito na katulad ng isang mabuting desisyon noong Miyerkules. Kapag mahalaga ang epekto, basahin ang context.md at itama ito nang mano-mano. Markdown file ito, kaya maaari mo itong i-edit.

Walang search. May isang kasalukuyang summary at isang lumalaking log bawat project, hindi isang memory na maaaring i-query sa lahat ng project. Kung ang tanong ay kung ano ang napagdesisyunan mo tungkol sa database tatlong linggo na ang nakalipas, mag-grep ka sa history.md. Hindi ito nagbibigay ng live coordination: magkasalo ang dalawang session sa iisang project sa log file, pero hindi ipinapadala ng Recall ang mga bagong log entry sa context ng kabilang session. Kaya kapag kailangang malaman ng isa kung ano ang ginagawa ng isa pa, maaaring direktang magpasa ng text ang mga session sa isa’t isa 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 sa artikulong ito.

Itinuturing na untrusted input ang summary ayon sa disenyo. Ini-inject ang context.md na naka-fence at may label, at nagtatanong si Claude bago ito pagbatayan. Ginawa ang disenyong ito dahil ang isang naka-commit 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 na ginagamit sa pagsisimula ng session. Sa Claude Code v2.1.283 o mas bago, ang auto mode na ang built-in na starting mode para sa interactive terminal at VS Code sessions sa lahat ng plan at provider, kaya classifier ang sumusuri sa karamihan ng mga action sa halip na ikaw; ang mga organization na may HIPAA configuration ay nagsisimula pa rin sa Manual mode. Magpasya kung personal o shared ang .recall/: idagdag ito sa .gitignore para sa personal memory, o i-commit ito at suriin gaya ng iba pang contribution. Kung unattended na tumatakbo ang agent, saklaw 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 .env assignments. Basahin ang .recall/ bago mo ito i-commit.

Tapat ang version number tungkol sa maturity nito. Sa 0.4.0, na siyang pinakabagong release pa rin noong October 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 inaasahan mo.

FAQ

Nagpapadala ba ang Recall ng code o mga transcript saanman?

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 bayad ang prosesong 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 gumawa ng mga bagong sentence.

Bakit nawawala o luma na ang .recall/context.md ko?

Naka-default ang auto_save_context sa off, kaya nire-regenerate lang ang summary kapag pinatakbo mo ang /recall:save. Itakda ang "auto_save_context": "on_end" sa recall.config.json para maisulat itong muli kapag nagtatapos ang bawat session. Kung nawawala rin ang history.md, tingnan ang capture_history, ang .capture-paused marker, at kung available ang session transcript: hindi nagsusulat ng history ang mga tumatakbong hook sa mga sitwasyong iyon. Tiyaking naka-load ang plugin gamit ang /recall:show, pagkatapos ay tiyaking nakakasagot ang python3 -V sa machine na iyon, dahil Python script ang mga hook.

Gaano karami ang natitipid ng Recall sa bawat session?

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

Kailangan ko pa rin ba ng CLAUDE.md file?

Oo, magkaiba ang gamit ng dalawang ito. Ang CLAUDE.md ay sadyang isinusulat mo: naglalaman ito ng mga permanenteng rule at build command. Ang context.md ay binubuo mula sa aktuwal na nangyari sa nakaraang session, kaya naglalaman ito ng migration na hindi pa tapos at malamang na hindi mo maiisip isulat nang mano-mano. Panatilihin ang dalawa.

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

Oo. Iniimbak ng Recall ang memory sa .recall/ sa loob ng directory ng bawat project, kaya magkahiwalay ang logs at summaries ng dalawang project sa iisang server. Palaging simulan ang Claude Code mula sa project root, dahil sumusunod ang mga file sa working directory at hindi sa user account.

Nakatulong ba ang artikulong ito?