Claude Code geheugen geven op een VPS met Recall
Recall 0.4.0 slaat Claude Code-sessies lokaal op zonder API-tokens. Leer de plugin op Ubuntu 24.04 instellen en meet hoeveel tokens u bespaart.
Wat Recall doet voor het geheugen van Claude Code
Recall is een Claude Code-plugin die elk project tussen sessies door van geheugen voorziet. De plugin schrijft twee Markdown-bestanden naar een map .recall/ in uw project: een logboek waaraan alleen kan worden toegevoegd van wat er is gebeurd, en een korte samenvatting van waar u bent gestopt. Beide bestanden worden op de machine waarop u werkt gegenereerd door een lokale Python-samenvattingstool. Het geheugen zelf kost daarom nul API-tokens.
Het vult een kleine, constante leemte op. U sluit dinsdag een sessie op uw VPS. Op woensdag weet Claude Code niets over dinsdag. U legt het project opnieuw handmatig uit, of u laat het model opnieuw de helft van de repository lezen om de situatie te begrijpen. Beide opties kosten tokens. De tweede optie kost er veel.
Recall-versie 0.4.0 is actueel sinds juli 2026 en het project valt onder de MIT-licentie. Het is een plugin. De plugin maakt geen netwerkverbinding.
Wat u nodig hebt op de VPS
De capture hooks van Recall zijn Python-scripts die met de plugin worden meegeleverd. Er zijn geen afhankelijkheden van derden. De enige echte vereiste is daarom een interpreter.
python3 -VUbuntu 24.04 geeft Python 3.12.3 terug. Recall ondersteunt Python 3.9 en nieuwer. Minimale containerimages bevatten soms helemaal geen interpreter. In dat geval geeft de shell python3: command not found terug. 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 hebt het niet nodig.
python3 -c "import numpy"ModuleNotFoundError: No module named 'numpy' is hier een geldig antwoord. De summarizer heeft een pad met pure Python. De testsuite van het project controleert dat beide paden dezelfde zinnen selecteren.
Sessiegeheugen is belangrijker op een server dan op een laptop, omdat serverwerk in korte bezoeken over meerdere dagen wordt uitgevoerd. Als u Claude Code al in tmux op een VPS uitvoert, zorgt Recall ervoor dat de sessie van gisteren beschikbaar blijft in de sessie van vandaag.
Recall installeren vanuit de plug-inmarkt
Twee opdrachten, ingevoerd binnen een Claude Code-sessie:
/plugin marketplace add raiyanyahya/recall
/plugin install recall@recallDe tweede opdracht leest plugin@marketplace. Beide namen zijn hier recall, wat eruitziet als een fout bij het kopiëren en plakken, maar dat niet is.
Controleer de installatie door een van de eigen opdrachten van de plug-in uit te voeren:
/recall:show/recall:show geeft het huidige overzicht weer. In een volledig nieuw project is er nog niets om weer te geven. U controleert dus in feite alleen of de opdracht bestaat. Als Claude Code /recall:show niet herkent, is de plug-in niet geladen en wordt er geen hook uitgevoerd.
Als u de plug-in vanuit een checkout wilt uitvoeren, 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 plug-in correct is opgebouwd. Start Claude Code vervolgens 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 plug-inmap.
SessionStartwordt uitgevoerd bij het opstarten, hervatten en wissen. De hook toontcontext.md, zodat uw sessie wordt geopend met uw samenvatting in beeld.Stopwordt uitgevoerd telkens wanneer Claude een antwoord voltooit. De hook voegt die beurt toe aan het logboek.SessionEndwordt uitgevoerd wanneer de sessie wordt gesloten en kan de samenvatting opnieuw genereren.
Hieruit ontstaan twee bestanden, beide in .recall/.
history.mdis het logboek waaraan alleen wordt toegevoegd: prompts, antwoorden, aangeraakte bestanden en uitgevoerde opdrachten.context.mdis de gegenereerde samenvatting: het doel, een samenvatting, vervolgstappen, aangeraakte bestanden, uitgevoerde opdrachten en git-context.
Bekijk de map na één echte sessie.
ls -la .recall/U zou history.md met inhoud moeten zien. Mogelijk ziet u helemaal geen context.md. Dat is het standaardgedrag en geen fout. auto_save_context is off, tenzij u dit instelt. De samenvatting wordt dus alleen geschreven wanneer u erom vraagt:
/recall:saveMet die opdracht voert u de lokale samenvatter uit op history.md en herschrijft u context.md. Het algoritme gebruikt TF-IDF-scoring (term frequency, inverse document frequency) voor TextRank-zinsrangschikking. Het algoritme is deterministisch en extractief. Dit betekent dat het zinnen selecteert die al in uw logboek staan. Er wordt geen model aangeroepen. Daardoor zijn er geen kosten aan verbonden en werkt deze stap offline op de machine.
Recall voor één project configureren
De configuratie staat in een recall.config.json-bestand in de projecthoofdmap. Dit zijn de standaardinstellingen die worden meegeleverd:
{
"output_dir": ".recall",
"capture_history": true,
"summary_sentences": 8,
"redact": true,
"include_git": true,
"max_input_chars": 200000
}output_dirbepaalt waar de twee bestanden staan. Houd deze locatie binnen het project.capture_historyschakelt hethistory.md-log in en uit.auto_save_contextaccepteertoffofon_enden gebruikt standaardoff.summary_sentencesbepaalt hoeveel zinnen incontext.mdbehouden blijven. Een hogere waarde geeft een langere samenvatting en een iets hogere belasting bij de start van een sessie.redactverwijdert veelvoorkomende patronen van geheimen voordat er iets naar schijf wordt geschreven.include_gitvoegt de huidige diff en recente commits toe aan de samenvatting.max_input_charsbeperkt hoeveel vanhistory.mdde summarizer per keer leest.
Voor een project op een VPS is automatisch opslaan de nuttigste wijziging, omdat een sessie op een server vaak eindigt wanneer de terminalverbinding wordt verbroken en niet wanneer u besluit te stoppen.
{
"auto_save_context": "on_end",
"summary_sentences": 12
}Als u het vastleggen tijdelijk wilt stoppen zonder de configuratie te wijzigen, maakt u de pauzemarker aan. Verwijder deze om het vastleggen opnieuw te starten.
touch .recall/.capture-pausedDoe dit voordat u een sessie start waarin u productiegegevens voor authenticatie verwerkt, omdat redactie een filter is en geen garantie biedt. Om dezelfde reden is het in het algemeen belangrijk om geheimen buiten AI-agents te houden: een geheim is veilig als de agent het nooit ziet.
Hoeveel tokens bespaart Recall?
Dat hangt ervan af wat het alternatief was. Een samenvatting laden bij de start van een sessie kost weinig. Wat de samenvatting vervangt, kan duur zijn, omdat een model zonder kennis van uw project het project opnieuw ontdekt 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 gebruikelijke waarden voor een middelgroot project, geen meting van uw project. Een Recall-samenvatting wordt geladen met ongeveer 1,200 tokens. Dat komt overeen met de gepubliceerde schatting van een tot tweeduizend tokens voor een hervatting. Als u een volledig eerder transcript opnieuw afspeelt, wordt het hele gesprek opnieuw geladen. Dat komt neer op ongeveer 85,000 tokens. Als u het model het project opnieuw laat ontdekken door bestanden te lezen, ligt het verbruik tussen deze twee waarden, rond 30,000 tokens. Dit aantal neemt toe naarmate de repository groter wordt. De rij CLAUDE.md dient als schaalreferentie. Deze is goedkoper omdat de inhoud kort en statisch is. De rij vertelt het model uw vaste regels, niet wat er de vorige avond is gebeurd.
Meet uw eigen waarden. Eén token komt ongeveer overeen met vier tekens Engelse proza, en met iets minder tekens in code.
wc -c .recall/context.md .recall/history.md
echo $(( $(wc -c < .recall/context.md) / 4 ))Binnen een sessie toont /context wat op dit moment in het contextvenster is geladen. /cost rapporteert de totalen van de sessie. Start één sessie zonder vooraf geladen context en start de volgende met een samenvatting. Vergelijk de resultaten. Voor een volledig overzicht van waar de tokens van een sessie daadwerkelijk aan worden besteed, bevat hoe Claude Code tokens besteedt de uitsplitsing.
Er is één beperking waarmee deze bewering correct blijft. De samenvatting wordt bij de start van elke sessie geladen. Een samenvatting waarop u geen actie onderneemt, is dus een kleine kostenpost en geen besparing. Laat summary_sentences dicht bij de standaardwaarde staan, tenzij uw sessies lang duren.
Het overzicht opnieuw opbouwen zonder een sessie
Als u de repository hebt gekloond, heeft de summarizer een eigen opdrachtregelinterface. Dat is handig op een VPS wanneer een sessie samen met de terminal is beëindigd en u het overzicht toch nodig hebt.
python3 ~/recall/scripts/make_context.py --helpDe helpuitvoer vermeldt de geaccepteerde flags: --cwd voor de projecthoofdmap, --transcript voor een expliciet transcriptbestand, --quiet om uitvoer te onderdrukken en --harness om te kiezen tussen claude en opencode. Geef een project op:
python3 ~/recall/scripts/make_context.py --cwd /srv/projects/apiDe tool leest het sessietranscript en history.md en schrijft vervolgens context.md onder de opgegeven directory. Als u de plugin via de marketplace hebt geïnstalleerd, staat deze in een directory die Claude Code beheert. /recall:save is dan de ondersteunde manier om dezelfde taak uit te voeren.
Waarom er niets wordt geschreven
Geen .recall/-directory na een volledige sessie. De hooks zijn nooit uitgevoerd. Voer /recall:show uit om te controleren of de plugin is geladen en voer daarna python3 -V uit. De hook-opdracht probeert eerst python3 en daarna python. Een omgeving zonder beide schrijft niets en meldt dit niet.
history.md groeit, maar context.md verandert nooit. auto_save_context is standaard ingesteld op off. Voer /recall:save uit of stel de sleutel in op on_end en laat de SessionEnd-hook dit uitvoeren.
De bestanden verschijnen onder het verkeerde project. Recall schrijft relatief ten opzichte van de directory waarin Claude Code is gestart. Als u een sessie vanuit uw homedirectory start, wordt het geheugen daar opgeslagen. Start vanuit de projectroot en gebruik ls -la .recall/ om te bepalen waar de bestanden daadwerkelijk zijn opgeslagen.
Het vastleggen is gestopt zonder waarschuwing. Controleer met ls -a .recall/ of de pauzemarker aanwezig is. Een .capture-paused-bestand dat u vorige week hebt aangemaakt, blijft actief.
De samenvatting is kort na een lange sessie. max_input_chars beperkt de invoer van de summarizer tot 200000 tekens. Een zeer lang logboek wordt daardoor afgekapt. Roteer het logboek.
mv .recall/history.md .recall/history-2026-07-30.mdVoer daarna één korte sessie uit en controleer opnieuw ls -la .recall/ om te bevestigen dat er een nieuwe history.md is verschenen.
Waar Recall stopt
Recall is een logboek met een samenvattingsfunctie. Het is belangrijk om duidelijk te zijn over wat daarmee buiten beeld blijft.
De samenvattingsfunctie is extractief. TextRank selecteert zinnen die al in history.md staan. Het beoordeelt dus nooit of een beslissing juist was. Een verkeerde keuze die dinsdag is vastgelegd, ziet er precies hetzelfde uit als een goede beslissing op woensdag. Als er echt iets van afhangt, leest u context.md en corrigeert u dit handmatig. Het is een markdown-bestand en niets verhindert dat u het bewerkt.
Er is geen zoekfunctie. Per project hebt u één actuele samenvatting en één groeiend logboek, geen doorzoekbaar geheugen voor meerdere projecten. Als de vraag is wat u drie weken geleden over de database hebt besloten, gebruikt u grep op history.md.
Het helpt niet binnen een sessie. Een contextvenster dat halverwege een sessie volloopt, is een ander probleem met andere oplossingen. het contextvenster binnen één sessie beheren is het bijbehorende artikel bij deze handleiding.
De samenvatting wordt bewust behandeld als niet-vertrouwde invoer. context.md wordt afgeschermd en gelabeld ingevoegd. Claude vraagt om bevestiging voordat het erop vertrouwt. Dat ontwerp is nodig omdat een vastgelegde map .recall/ een locatie is waar iedereen met commit-toegang tekst kan schrijven die uw agent leest. Bepaal één keer 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 wordt uitgevoerd, beschrijft Claude Code veilig uitvoeren op een VPS de bredere beveiligingsgrens.
Redactie werkt zo goed mogelijk. De functie richt zich op veelvoorkomende patronen, zoals API-sleutels, tokens, PEM-blokken en .env-toewijzingen. Lees .recall/ voordat u het commit.
Het versienummer geeft de ontwikkelingsstatus eerlijk weer. Bij versie 0.4.0 in juli 2026 kunnen de configuratiesleutels en de bestandsindeling nog tussen releases wijzigen. Lees daarom het changelog voordat u een installatie bijwerkt waarvan u afhankelijk bent.
FAQ
Verzendt Recall mijn code of transcripties ergens naartoe?
Nee. De capture-hooks en de summarizer zijn Python-scripts die op uw eigen machine worden uitgevoerd. De plugin bevat geen API-sleutel en maakt geen netwerkverbinding. Voor het samenvatten worden TF-IDF en TextRank gebruikt in plaats van een model. Deze stap kost dus niets en werkt ook wanneer de machine offline is. Het nadeel is dat de samenvatting extractief is: er worden zinnen uit uw log geselecteerd in plaats van nieuwe zinnen te schrijven.
Waarom ontbreekt mijn .recall/context.md of is deze verouderd?
auto_save_context is standaard ingesteld op off. De samenvatting wordt daarom alleen opnieuw gegenereerd wanneer u /recall:save uitvoert. Stel "auto_save_context": "on_end" in recall.config.json in om de samenvatting aan het einde van elke sessie opnieuw te laten schrijven. Als history.md ook ontbreekt, worden de hooks helemaal niet uitgevoerd. Controleer met /recall:show of de plugin is geladen. Controleer vervolgens of python3 -V op die machine antwoord geeft, omdat de hooks Python-scripts zijn.
Hoeveel bespaart Recall per sessie?
Het laden van een samenvatting kost ongeveer 1,200 tokens, tegenover doorgaans 30,000 tokens voor een model dat uw repository opnieuw moet lezen om vast te stellen waar het werk is gebleven. Dit zijn typische waarden. Meet uw eigen waarden met wc -c .recall/context.md en de opdracht /context binnen een sessie. Vergelijk daarbij een koude start met een sessie die vanuit een samenvatting wordt hervat.
Heb ik nog steeds een CLAUDE.md-bestand nodig?
Ja. De twee bestanden hebben verschillende functies. CLAUDE.md schrijft u bewust: dit bevat de vaste regels en de build-opdrachten. context.md wordt gegenereerd op basis van wat er tijdens de vorige sessie daadwerkelijk is gebeurd. Het bevat daardoor ook de onafgemaakte migratie die u nooit zelf zou bedenken om vast te leggen. Houd beide bestanden aan.
Kan één VPS het geheugen voor meerdere projecten bevatten?
Ja. Recall bewaart het geheugen in .recall/ binnen elke projectdirectory. Twee projecten op dezelfde server houden daardoor afzonderlijke logs en afzonderlijke samenvattingen. Start Claude Code altijd vanuit de projectroot, omdat de bestanden de werkdirectory volgen en niet het gebruikersaccount.