Recall: Memory ng Claude Code sa VPS
Alamin kung paano i-setup ang Recall 0.4.0 sa VPS: local itong nagla-log at nagbubuod ng Claude Code sessions, walang API tokens o network calls.
Ano ang ginagawa ng Recall para sa memory ng Claude Code
Ang Recall ay isang Claude Code plugin na nagbibigay ng memory sa bawat project 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 estado ng trabaho. Pareho itong ginagawa sa machine na ginagamit mo ng isang lokal na Python summarizer, kaya walang API tokens na nagagastos mismo para sa memory.
Maliit ngunit tuloy-tuloy ang problemang nilulutas nito. Isinasara mo ang isang session sa iyong VPS noong Tuesday. Pagsapit 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 tokens, at mas maraming tokens ang kailangan ng ikalawang paraan.
Ang Recall version 0.4.0 ang kasalukuyang bersyon noong July 2026, at lisensyado ang project sa ilalim ng MIT license. Isa itong plugin. Walang bahagi nito ang gumagawa ng network call.
Ano ang kailangan mo sa VPS
Ang capture hooks ng Recall ay mga Python script na kasama sa plugin. Walang third-party dependencies, kaya interpreter lang ang aktuwal na kailangan.
python3 -VAng Ubuntu 24.04 ay tumutugon ng Python 3.12.3. Sinusuportahan ng Recall ang Python 3.9 at mas bago. Kung minsan, walang interpreter ang minimal container images, kaya tumutugon ang shell ng python3: command not found. Mag-install muna ng interpreter bago magpatuloy.
sudo apt update && sudo apt install -y python3Opsyonal na accelerator ang NumPy para sa isang hakbang ng summarizer. Hindi mo ito kailangan.
python3 -c "import numpy"Katanggap-tanggap dito ang ModuleNotFoundError: No module named 'numpy'. May pure-Python path ang summarizer, at sinusuri ng test suite ng proyekto na pareho ang mga pangungusap 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 session ngayong araw.
I-install ang Recall mula sa plugin marketplace
Dalawang command, na ita-type sa loob ng Claude Code session:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallBinabasa ng ikalawang command ang plugin@marketplace. Parehong recall ang pangalan ng mga ito rito. Mukha itong pagkakamali sa copy-paste, pero hindi ito pagkakamali.
Suriin ang installation sa pamamagitan ng pagpapatakbo ng isa sa sariling command ng plugin:
/recall:showIpinapakita ng /recall:show ang kasalukuyang summary. Sa bagong gawa na project, wala pa itong maipapakita. Kaya ang aktuwal mong sinusuri ay kung umiiral ang command. Kung hindi nakikilala ng Claude Code ang /recall:show, hindi na-load ang plugin at walang hook na tatakbo.
Para magpatakbo mula sa isang 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 iyong project gamit ang claude --plugin-dir ~/recall.
Ano ang isinusulat ng mga hook, at kailan
Nagrerehistro ang Recall ng tatlong Claude Code hook. Ang bawat isa ay nagpapatakbo ng Python script mula sa plugin directory.
SessionStartay tumatakbo sa startup, resume, at clear. Ipinapakita nito angcontext.mdupang makita agad sa session ang iyong summary.Stopay tumatakbo sa tuwing natatapos ni Claude ang isang response. Idinaragdag nito ang turn na iyon sa log.SessionEnday tumatakbo kapag nagsasara ang session, at maaari nitong muling buuin ang summary.
Dalawang file ang nalilikha nito, at parehong nasa loob ng .recall/.
history.mdang append-only record: mga prompt, response, file na binago, at command na pinatakbo.context.mdang nabuong digest: ang goal, summary, mga susunod na hakbang, file na binago, mga 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 na context.md, at iyon ang default na behavior, hindi error. Ang auto_save_context ay off maliban kung itatakda mo ito, kaya isinusulat lamang ang summary kapag hiniling mo:
/recall:savePinapatakbo ng command na iyon ang local summarizer sa history.md at muling isinusulat ang context.md. TF-IDF (term frequency, inverse document frequency) scoring ang algorithm, na sinusundan ng TextRank sentence ranking. Deterministic at extractive ito, kaya pumipili lamang ito ng mga sentence 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 root ng project 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_dirkung saan ilalagay ang dalawang file. Panatilihin ito sa loob ng project. - Ino-on at ino-off ng
capture_historyanghistory.mdlog. - Tumatanggap ang
auto_save_contextngoffoon_end, at ang default nito ayoff. - Tinutukoy ng
summary_sentenceskung ilang sentence ang mananatili sacontext.md. Kapag tinaasan ito, hahaba ang summary at bahagyang lalaki ang load sa pagsisimula ng session. - Inaalis ng
redactang mga karaniwang pattern ng secret bago may maisulat sa disk. - Idinaragdag ng
include_gitang kasalukuyang diff at mga kamakailang commit sa summary. - Nililimitahan ng
max_input_charskung gaano karaming bahagi nghistory.mdang binabasa ng summarizer sa isang pass.
Para sa project na nasa VPS, ang kapaki-pakinabang na pagbabago ay automatic saving, dahil madalas nagtatapos ang session sa server kapag nawawala ang terminal, hindi kapag pinili mong huminto.
{
"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 muling magsimula ang capture.
touch .recall/.capture-pausedGawin 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: ligtas ang secret kapag hindi ito kailanman nakikita ng agent.
Ilang token ang natitipid ng Recall?
Depende ito sa alternatibong ginamit. Mura ang pag-load ng summary sa pagsisimula ng session. Maaaring magastos ang pinapalitan nito, dahil muling natutuklasan ng model na walang memorya ng iyong project ang project sa pamamagitan ng pagbabasa ng mga file.
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 bilang ang mga ito para sa isang mid-size na project, hindi sukat ng iyong project. Nilo-load ang Recall summary sa humigit-kumulang 1,200 token. Tugma ito sa inilathalang pahayag ng project na isa hanggang dalawang libong token para sa resume. Kapag ni-replay ang buong naunang transcript, nilo-load muli ang buong usapan, na nasa humigit-kumulang 85,000 token. Ang pagpapabasa sa model ng mga file upang muli nitong matuklasan ang project ay nasa pagitan ng dalawang ito, malapit sa 30,000 token. Lumalaki ang bilang na ito habang lumalaki ang repository. Nasa row na CLAUDE.md ang paghahambing sa laki: mas mura ito dahil maikli at static ito, at sinasabi nito sa model ang iyong mga permanenteng panuntunan sa halip na ang mga nangyari noong nakaraang gabi.
Sukatin ang sarili mong mga bilang. Ang isang token ay humigit-kumulang apat na character ng English prose, at bahagyang mas kaunti para sa code.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Sa loob ng isang session, ipinapakita ng /context kung ano ang kasalukuyang naka-load sa context window, at iniuulat ng /cost ang kabuuan ng session. Magsimula ng isang session nang walang laman ang context, pagkatapos ay magsimula ng isa pang session na may naka-load nang summary, at paghambingin ang mga resulta. Para sa buong paliwanag kung saan talaga napupunta ang mga token ng isang session, makikita sa kung paano gumagastos ng token ang Claude Code ang detalye.
May isang paalala upang maging tumpak ang pahayag na ito. Nilo-load ang summary sa bawat pagsisimula ng session, kaya ang summary na hindi mo ginagamit ay maliit na dagdag-gastos sa halip na pagtitipid. Panatilihing malapit sa default ang summary_sentences maliban kung mahahaba ang iyong mga session.
Muling buuin ang summary nang walang session
Kung ni-clone mo ang repository, may sarili itong command line entry point ang summarizer. Kapaki-pakinabang ito sa isang VPS kapag natapos ang session kasama ng terminal at kailangan mo pa rin ang digest.
python3 ~/recall/scripts/make_context.py --helpInililista ng help output ang mga flag na tinatanggap nito: --cwd para sa project root, --transcript para sa tahasang transcript file, --quiet para pigilan ang output, at --harness para pumili sa pagitan ng claude at opencode. Ituro ito sa isang project:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiBinabasa 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 para kumpirmahing loaded ang plugin, pagkatapos ay patakbuhin ang python3 -V. Sinusubukan muna ng hook command ang python3 at pagkatapos ang python, kaya walang maisusulat ang isang box na wala sa dalawang ito at hindi rin ito magbibigay ng babala.
Lumalaki ang history.md pero 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 gumawa nito.
Lumilitaw ang mga file sa maling project. Nagsusulat ang Recall nang relative 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/ para malaman kung saan talaga nailagay ang mga file.
Tumigil ang capture at walang nagbabala sa iyo. Tingnan kung may pause marker gamit ang ls -a .recall/. Ang .capture-paused file na ginawa mo noong nakaraang linggo ay patuloy pa ring gumagana.
Kaunti ang laman ng summary pagkatapos ng mahabang session. Nililimitahan ng max_input_chars ang input ng summarizer sa 200000 characters, kaya pinuputol ang napakahabang log. I-rotate ito.
mv .recall/history.md .recall/history-2026-07-30.mdPagkatapos, magpatakbo ng isang maikling session at suriin muli ang ls -la .recall/ para makumpirmang may bagong history.md.
Kung saan nagtatapos ang Recall
Ang Recall ay isang log at summarizer. Mahalagang malinaw kung ano ang hindi nito nasasaklaw.
Extractive ang summarizer. Pinipili ng TextRank ang mga sentence na nasa history.md na, kaya hindi nito sinusuri kung tama ang isang desisyon. Ang maling hakbang na naitala noong Martes ay mababasa nang eksaktong katulad ng magandang desisyon noong Miyerkules. Kapag mataas ang epekto ng desisyon, basahin ang context.md at itama ito nang manual. Markdown file ito, kaya maaari mo itong i-edit.
Walang search. May isang kasalukuyang summary at isang lumalaking log para sa 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 nakakatulong sa loob ng isang session. Ibang problema ang napupuno ang context window habang may session, at may ibang solusyon dito. Ang pamamahala sa context window sa loob ng isang session ang kaugnay na gabay para rito.
Sadyang itinuturing na untrusted input ang summary. Ini-inject ang context.md bilang fenced at may label, at nagtatanong si Claude bago ito gamitin bilang batayan. Ginawa ang disenyo na ito dahil ang isang naka-commit na .recall/ directory ay maaaring sulatan ng text ng sinumang may commit access, at mababasa ito ng iyong agent. Magpasya nang isang beses kung personal o shared ang .recall/: idagdag ito sa .gitignore para sa personal na memory, o i-commit ito at i-review gaya ng iba pang contribution. Kung unattended na tumatakbo ang agent, tinatalakay 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 tulad ng API keys, tokens, PEM blocks at .env assignments. Basahin ang .recall/ bago mo ito i-commit.
Tapat ang version number tungkol sa antas ng maturity nito. Sa 0.4.0 noong July 2026, maaari pa ring magbago ang mga config key at file layout sa pagitan ng mga release, kaya basahin ang changelog bago mag-upgrade ng setup na umaasa ka rito.
FAQ
Ipinapadala ba ng Recall ang aking code o mga transcript sa ibang lugar?
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 sa halip na bumuo ng mga bagong sentence.
Bakit nawawala o luma na ang aking .recall/context.md?
Naka-default ang auto_save_context sa off, kaya muling ginagawa ang summary kapag pinatakbo mo ang /recall:save. Itakda ang "auto_save_context": "on_end" sa recall.config.json upang muling isulat ito sa pagtatapos ng bawat session. Kung nawawala rin ang history.md, hindi tumatakbo ang hooks: tiyaking naka-load ang plugin gamit ang /recall:show, pagkatapos ay tiyaking sumasagot ang python3 -V sa box na iyon dahil Python scripts ang hooks.
Gaano karami ang nai-save 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 iyong repository upang matukoy kung nasaan ito. Mga karaniwang halaga lamang ang mga iyon. Sukatin ang sarili mong halaga gamit ang wc -c .recall/context.md at ang command na /context sa loob ng isang session. Ihambing ang cold start sa isang session na nagpapatuloy mula sa summary.
Kailangan ko pa rin ba ng CLAUDE.md file?
Oo, magkaiba ang trabaho ng dalawang ito. Ang CLAUDE.md ay sinasadya mong isulat: naglalaman ito ng mga nakatakdang rule at build command. Ang context.md ay binubuo mula sa aktuwal na nangyari sa nakaraang session, kaya naglalaman ito ng hindi pa tapos na migration na malamang ay hindi mo maisip na isulat. Panatilihin ang dalawa.
Maaari bang maglaman ang isang VPS ng memory para sa ilang project?
Oo. Pinananatili ng Recall ang memory sa .recall/ sa loob ng bawat project directory, kaya magkahiwalay ang mga log at summary ng dalawang project sa parehong server. Palaging simulan ang Claude Code mula sa project root dahil nakabatay ang mga file sa working directory, hindi sa user account.