Claude Code geheugen toevoegen met Recall op een VPS
Voorkom tokenverlies bij het herstarten van Claude Code sessies op uw VPS. Recall slaat lokaal samenvattingen op in een .recall map, waardoor het model direct weer up-to-date is.
Wat Recall doet voor het geheugen van Claude Code
Recall is een plugin voor Claude Code die elk project een geheugen geeft dat sessies overbrugt. Het schrijft twee markdown-bestanden naar een .recall/-map binnen uw project: een logboek waaraan alleen gegevens worden toegevoegd en een korte samenvatting van waar u bent gebleven. Beide worden op de machine waar u aan werkt gegenereerd door een lokale Python-summarizer, waardoor het geheugen zelf geen API-tokens kost.
Het gat dat het opvult is klein en constant. U sluit op dinsdag een sessie op uw VPS af. Op woensdag weet Claude Code niets meer van dinsdag. U legt het project handmatig opnieuw uit, of u laat het model de helft van de repository opnieuw lezen om het te begrijpen. Beide kosten tokens, en de tweede optie kost er erg veel.
Recall versie 0.4.0 is actueel per juli 2026 en het project is MIT-gelicentieerd. Het is een plugin. Niets in de plugin maakt een netwerkverbinding.
Wat u nodig heeft op de VPS
De capture hooks van Recall zijn Python-scripts die bij de plugin worden geleverd. Er zijn geen externe afhankelijkheden, dus de enige echte vereiste is een interpreter.
python3 -VUbuntu 24.04 beantwoordt Python 3.12.3. Recall ondersteunt Python 3.9 en nieuwer. Minimale container-images bevatten soms helemaal geen interpreter, en in dat geval beantwoordt de shell python3: command not found. Installeer er een voordat u verdergaat.
sudo apt update && sudo apt install -y python3NumPy is een optionele versneller voor één stap van de summarizer. U heeft deze niet nodig.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' is hier een acceptabel antwoord. De summarizer heeft een pure-Python-pad en de testsuite van het project controleert of beide paden dezelfde zinnen selecteren.
Sessiegeheugen is op een server belangrijker dan op een laptop, omdat serverwerk binnenkomt in korte bezoeken verspreid over meerdere dagen. Als u al Claude Code in tmux op een VPS heeft draaien, dan is Recall het onderdeel dat de sessie van gisteren naar vandaag overbrengt.
Recall installeren vanuit de plugin marketplace
Twee commando's, ingevoerd binnen een Claude Code sessie:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallHet tweede commando luidt plugin@marketplace. Beide namen zijn hier recall, wat lijkt op een kopieerfout, maar dat is het niet.
Controleer de installatie door een van de eigen commando's van de plugin uit te voeren:
/recall:show/recall:show drukt de huidige samenvatting af. In een gloednieuw project is er nog niets om af te drukken, dus u controleert in feite of het commando überhaupt bestaat. Als Claude Code /recall:show niet herkent, is de plugin niet geladen en zal er geen hook worden geactiveerd.
Om in plaats daarvan vanuit een checkout te draaien, kloont u eerst de repository en valideert u deze:
git clone https://github.com/raiyanyahya/recall ~/recall
cd ~/recall && claude plugin validate .claude plugin validate . leest het manifest in .claude-plugin/ en rapporteert of de plugin correct is opgebouwd. Start daarna Claude Code vanuit uw projectmap met claude --plugin-dir ~/recall.
Wat de hooks schrijven, en wanneer
Recall registreert drie Claude Code hooks. Elke hook voert een Python-script uit vanuit de plugin-directory.
SessionStartwordt geactiveerd bij het opstarten, hervatten en wissen. Het toontcontext.mdzodat de sessie opent met uw samenvatting in beeld.Stopwordt geactiveerd telkens wanneer Claude een antwoord voltooit. Het voegt die beurt toe aan het logbestand.SessionEndwordt geactiveerd wanneer de sessie wordt gesloten en kan de samenvatting opnieuw genereren.
Hieruit komen twee bestanden voort, beide binnen .recall/.
history.mdis het record waaraan alleen wordt toegevoegd: prompts, antwoorden, aangeraakte bestanden en uitgevoerde commando's.context.mdis het gegenereerde overzicht: het doel, een samenvatting, volgende stappen, aangeraakte bestanden, uitgevoerde commando's en git-context.
Bekijk na één echte sessie de directory.
ls -la .recall/U zou history.md met inhoud moeten zien. Het is mogelijk dat u helemaal geen context.md ziet; dit is het standaardgedrag en geen fout. auto_save_context is off tenzij u dit instelt, waardoor de samenvatting alleen wordt geschreven wanneer u daarom vraagt:
/recall:saveDat commando voert de lokale summarizer uit over history.md en herschrijft context.md. Het algoritme is TF-IDF (term frequency, inverse document frequency) scoring die een TextRank-zinsrangschikking voedt. Het is deterministisch en extractief, wat betekent dat het zinnen selecteert die al in uw logbestand staan. Er wordt geen model aangeroepen, dus de stap is gratis en werkt terwijl de machine offline is.
Recall configureren voor één project
De configuratie bevindt zich in een recall.config.json-bestand in de hoofdmap van het project. Dit zijn de standaardinstellingen:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirbepaalt waar de twee bestanden worden opgeslagen. Houd deze binnen het project.capture_historyschakelt hethistory.md-logboek in of uit.auto_save_contextaccepteertoffofon_end, en de standaardwaarde isoff.summary_sentencesbepaalt hoeveel zinnen worden bewaard incontext.md. Een hogere waarde resulteert in een langere samenvatting en een iets hogere belasting bij het starten van de sessie.redactverwijdert algemene patronen van geheimen voordat er iets naar de schijf wordt geschreven.include_gitvoegt de huidige diff en recente commits toe aan de samenvatting.max_input_charsbeperkt hoeveel vanhistory.mdde samenvatter in één keer leest.
Voor een project op een VPS is automatische opslag een nuttige wijziging, omdat een sessie op een server vaak eindigt wanneer de terminal wordt afgesloten in plaats van wanneer u besluit te stoppen.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Om de opname tijdelijk te stoppen zonder de configuratie aan te passen, maakt u het pauzemarkeringsbestand aan. Verwijder dit bestand om de opname te hervatten.
touch .recall/.capture-pausedDoe dit voorafgaand aan een sessie waarin u productie-inloggegevens verwerkt, aangezien redactie een filter is en geen garantie. Dezelfde redenering ligt ten grondslag aan het buiten AI-agents houden van geheimen in het algemeen: het veiligste geheim is het geheim dat de agent nooit te zien krijgt.
Hoeveel tokens bespaart Recall?
Dit hangt af van wat het alternatief was. Het laden van een samenvatting bij de start van een sessie is goedkoop. Wat het vervangt kan duur zijn, omdat een model zonder geheugen van uw project dit opnieuw moet ontdekken door bestanden te lezen.
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"
}
]Dit zijn typische cijfers voor een middelgroot project, geen meting van uw specifieke situatie. Een Recall-samenvatting laadt ongeveer 1,200 tokens, wat overeenkomt met de gepubliceerde claim van het project van één tot tweeduizend tokens voor een hervatting. Het opnieuw afspelen van een volledig voorgaand transcript laadt het hele gesprek opnieuw, in de regio van 85,000 tokens. Het model het project laten herontdekken door bestanden te lezen ligt tussen deze twee in, nabij 30,000 tokens, en dat aantal groeit naarmate de repository groter wordt. De CLAUDE.md-rij is toegevoegd voor de schaal: deze is goedkoper omdat hij kort en statisch is, en het vertelt het model uw vaste regels in plaats van wat er gisteravond is gebeurd.
Meet uw eigen cijfers. Eén token is ongeveer vier tekens aan Engelse tekst, en iets minder voor code. Als u de samenvatting ook aan een lokaal model op dezelfde VPS voert, controleer dan het venster waarin deze terechtkomt voordat u de hervatting vertrouwt, omdat Ollama kapt lange prompts af op een kleine standaard contextlengte in plaats van u te melden dat het einde is weggelaten.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Binnen een sessie toont /context wat er op dit moment in het contextvenster is geladen, en /cost rapporteert de sessietotalen. Start één sessie koud, start de volgende met een samenvatting en vergelijk deze. Voor het volledige beeld van waar de tokens van een sessie daadwerkelijk naartoe gaan, bevat hoe Claude Code tokens besteedt het overzicht.
Eén kanttekening houdt deze claim eerlijk. De samenvatting wordt bij elke sessiestart geladen, dus een samenvatting waar u nooit actie op onderneemt is een kleine belasting in plaats van een besparing. Houd summary_sentences dicht bij de standaardwaarde, tenzij uw sessies lang duren. Een rustigere sessie helpt aan de andere kant van de balans, omdat een agent die wordt gestuurd naar de kleinste wijziging die werkt een korter logboek achterlaat dat de samenvatter kan rangschikken.
De samenvatting opnieuw opbouwen zonder sessie
Als u de repository heeft gekloond, beschikt de summarizer over een eigen entry point voor de opdrachtregel. Dit is nuttig op een VPS wanneer een sessie is beëindigd met de terminal en u alsnog de samenvatting wilt genereren.
python3 ~/recall/scripts/make_context.py --helpDe help-output toont de geaccepteerde vlaggen: --cwd voor de project root, --transcript voor een expliciet transcriptbestand, --quiet om output te onderdrukken, en --harness om te kiezen tussen claude en opencode. Wijs het naar een project:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiHet leest het sessietranscript en history.md, en schrijft vervolgens context.md in de map die u heeft opgegeven. Als u via de marketplace heeft geïnstalleerd, bevindt de plugin zich in een map die door Claude Code wordt beheerd, en is /recall:save de ondersteunde manier om hetzelfde uit te voeren.
Waarom er niets wordt geschreven
Geen .recall/-directory na een volledige sessie. De hooks zijn niet uitgevoerd. Typ /recall:show om te bevestigen dat de plugin is geladen en voer vervolgens python3 -V uit. Het hook-commando probeert eerst python3 en daarna python; een systeem dat over geen van beide beschikt, schrijft niets en geeft hierover geen melding.
history.md groeit, maar context.md verandert nooit. auto_save_context staat standaard op off. Voer /recall:save uit, of stel de sleutel in op on_end en laat de SessionEnd-hook het werk doen.
De bestanden verschijnen onder het verkeerde project. Recall schrijft relatief aan de directory waarin Claude Code is gestart; een sessie starten vanuit uw home-directory plaatst het geheugen daar. Start vanuit de project-root en gebruik ls -la .recall/ om te achterhalen waar de bestanden daadwerkelijk zijn terechtgekomen.
De opname is gestopt zonder waarschuwing. Controleer op de pauze-marker met ls -a .recall/. Een .capture-paused-bestand dat u vorige week heeft aangemaakt, voert nog steeds zijn taak uit.
De samenvatting is summier na een lange sessie. max_input_chars beperkt de invoer voor de samenvatter tot 200000 tekens, waardoor een zeer lang logbestand wordt afgekapt. Roteer het logbestand.
mv .recall/history.md .recall/history-2026-07-30.mdVoer daarna een korte sessie uit en controleer ls -la .recall/ opnieuw om te bevestigen dat er een nieuw history.md-bestand is verschenen.
Waar Recall stopt
Recall is een logboek plus een samenvatter. Het is belangrijk om duidelijk te zijn over wat hierbij buiten beschouwing wordt gelaten.
De samenvatter is extractief. TextRank kiest zinnen die al in history.md staan, dus het beoordeelt nooit of een beslissing correct was. Een verkeerde afslag die op dinsdag is vastgelegd, leest precies hetzelfde als een goede beslissing op woensdag. Wanneer de belangen groot zijn, lees dan context.md en corrigeer dit handmatig. Het is een markdown-bestand en niets houdt u tegen om het te bewerken.
Er is geen zoekfunctie. U krijgt één actuele samenvatting en één groeiend logboek per project, geen doorzoekbaar geheugen over projecten heen. Als de vraag is wat u drie weken geleden over de database heeft besloten, dan doorzoekt u history.md met grep. Het deelt ook geen informatie zijwaarts: twee sessies die tegelijkertijd op dezelfde VPS openstaan, kunnen elkaars logboeken niet zien. Wanneer de een moet weten wat de ander doet, kunnen sessies direct tekst tussen elkaar uitwisselen terwijl ze draaien.
Het biedt geen hulp binnen een sessie. Een contextvenster dat halverwege een sessie volloopt is een ander probleem met andere oplossingen, en het beheren van het contextvenster binnen één sessie is het bijbehorende onderdeel van deze handleiding.
De samenvatting wordt volgens het ontwerp als niet-vertrouwde invoer behandeld. context.md wordt ingevoegd in een codeblok en gelabeld, en Claude vraagt om bevestiging voordat het erop vertrouwt. Dat ontwerp bestaat omdat een gecommitteerde .recall/-directory een plek is waar iedereen met commit-toegang tekst kan schrijven die uw agent zal lezen. In hoeverre de agent stopt om vragen te stellen over wat hij leest, wordt bepaald door de permissiemodus waarin de sessie start, en auto mode wordt de standaard voor Claude Code op 14 augustus 2026. Bepaal eenmalig of .recall/ persoonlijk of gedeeld is: voeg het toe aan .gitignore voor persoonlijk geheugen, of commit het en beoordeel het zoals elke andere bijdrage. Als de agent onbeheerd draait, behandelt veilig draaien van Claude Code op een VPS de bredere grenzen.
Redactie is een inspanningsverplichting. Het richt zich op algemene patronen zoals API-keys, tokens, PEM-blokken en .env-toewijzingen. Lees .recall/ voordat u het commit.
Het versienummer is eerlijk over de volwassenheid. Bij 0.4.0 in juli 2026 kunnen de configuratiesleutels en de bestandsindeling nog veranderen tussen releases, dus lees de changelog voordat u een setup upgradet waar u afhankelijk van bent.
FAQ
Verstuurt Recall mijn code of transcripten naar een externe locatie?
Nee. De capture hooks en de summarizer zijn Python-scripts die op uw eigen machine draaien. De plugin bevat geen API-sleutel en maakt geen netwerkverbindingen. Voor het samenvatten wordt gebruikgemaakt van TF-IDF en TextRank in plaats van een model. Hierdoor kost de stap niets en werkt deze ook offline. Het nadeel is dat de samenvatting extractief is: het selecteert zinnen uit uw logboek in plaats van nieuwe zinnen te schrijven.
Waarom ontbreekt mijn .recall/context.md of is deze verouderd?
auto_save_context staat standaard ingesteld op off, waardoor de samenvatting alleen wordt gegenereerd wanneer u /recall:save uitvoert. Stel "auto_save_context": "on_end" in binnen recall.config.json om de samenvatting te laten herschrijven zodra een sessie eindigt. Als history.md ook ontbreekt, draaien de hooks niet: controleer of de plugin is geladen met /recall:show en verifieer vervolgens of python3 -V reageert op die machine, aangezien de hooks Python-scripts zijn.
Hoeveel bespaart Recall per sessie?
Het laden van een samenvatting kost ongeveer 1,200 tokens, tegenover een gemiddelde van 30,000 tokens voor een model dat uw repository opnieuw moet lezen om te bepalen waar het is gebleven. Dit zijn gemiddelde cijfers. Meet uw eigen verbruik met wc -c .recall/context.md en het /context-commando tijdens een sessie, waarbij u een koude start vergelijkt met een hervatting vanuit een samenvatting.
Heb ik nog steeds een CLAUDE.md-bestand nodig?
Ja, beide bestanden vervullen verschillende rollen. CLAUDE.md is wat u bewust schrijft: de vaste regels en de build-commando's. context.md wordt gegenereerd op basis van wat er daadwerkelijk is gebeurd in de vorige sessie; het bevat dus de halfvoltooide migratie die u zelf waarschijnlijk niet zou noteren. Behoud beide bestanden.
Kan één VPS het geheugen voor meerdere projecten bevatten?
Ja. Recall bewaart het geheugen in .recall/ binnen elke projectmap, waardoor twee projecten op dezelfde server aparte logboeken en aparte samenvattingen behouden. Start Claude Code telkens vanuit de projectmap, aangezien de bestanden de werkmap volgen en niet het gebruikersaccount.