AI & AutomationAI-generated

Claude Code's geheugen uitbreiden met claude-mem

Claude Code's geheugen uitbreiden met claude-mem

Als je Claude Code dagelijks gebruikt voor meerdere projecten, ken je het probleem: je legt iets uit, Claude begrijpt het perfect, en twee sessies later is het weg. Je herhaalt jezelf. Steeds opnieuw. Het standaard geheugen van Claude Code is functioneel, maar beperkt. De claude-mem plugin lost dat op — de afgelopen week heb ik uitgezocht hoe het precies werkt en wat er nodig was om het volledig te activeren.

Het probleem met standaard Claude Code geheugen

Claude Code heeft een ingebouwd automemory-systeem. Als je iets herhaaldelijk benadrukt of expliciet markeert als belangrijk, schrijft het dat weg naar markdown-bestanden in ~/.claude/projects/<project>/memory/. Er is een MEMORY.md index die naar die bestanden verwijst en bij elke sessie wordt geladen.

Klinkt goed. In de praktijk is het systeem erg conservatief. Beslissingen die je in een gesprek neemt — welke database je gebruikt, hoe de deploymentinfrastructuur eruitziet, wat je hebt besloten over authenticatie — worden zelden automatisch opgeslagen. Als ze er niet in staan, zijn ze weg na de sessie.

Het grotere probleem is terughalen. Als iets niet is opgeslagen, kun je het alleen terugvinden door handmatig door oude sessies te bladeren. Er is geen zoekfunctionaliteit, geen structuur.

Drie vragen die elk geheugensysteem moet beantwoorden

Elk goed geheugensysteem moet antwoord geven op drie dingen:

Opslag — wanneer en hoe wordt informatie vastgelegd? Het verschil tussen "alles wat er gezegd wordt" en "wat de AI zelf belangrijk vindt" is groot. Standaard Claude Code kiest zelf wat het opslaat, en dat is heel selectief.

Injectie — welke informatie wordt automatisch geladen aan het begin van een sessie? Claude Code laadt de CLAUDE.md en de memory-index, maar concrete beslissingen en projectcontext uit eerdere sessies haal je er niet automatisch uit.

Terughalen — hoe zoek je weken later terug wat je toen hebt besproken? Dit is het zwakste punt van de standaardinstallatie. Zonder zoekmechanisme is lange-termijngeheugen nutteloos.

Wat claude-mem toevoegt

De claude-mem plugin van thedotmack pakt alle drie de punten aan. Na installatie voegt het een reeks MCP-tools toe en een hook-systeem.

Aan de opslagkant registreert de plugin observaties bij elke tool-aanroep via een PostToolUse hook. Elke keer dat Claude Code een bestand schrijft, een command uitvoert of een agent spawnt, wordt dat automatisch gedocumenteerd met metadata: type, tijdstip, betrokken bestanden, sessie-ID.

Aan de injectiekant laadt een SessionStart hook bij elke nieuwe sessie de recente context op. Dat is die grote blok tekst die je bovenaan elke sessie ziet — een tijdlijn van recente observaties, gegroepeerd per dag. Die wordt gecached, dus het kost je niet bij elke boodschap extra tokens.

Aan de terughaalkant zijn de MCP-tools: search, get_observations, smart_search en timeline. Je kunt doorzoeken op trefwoord, op type, op datum, op project. smart_search combineert meerdere zoekvragen in één call.

Het ontbrekende stuk: de Stop Hook

Toen ik dit systeem analyseerde, ontdekte ik dat één onderdeel niet actief was: de Stop Hook. De plugin heeft die hook gedefinieerd in zijn configuratiebestand (hooks.json), maar hij was niet geregistreerd in mijn ~/.claude/settings.json.

Een Stop Hook is een commando dat uitvoert op het moment dat Claude Code klaar is met een conversatieturn — nadat het antwoord is gegeven. De claude-mem plugin heeft hiervoor een summarize worker die de turn samenvat en opslaat als observatie.

Zonder deze hook worden turns alleen opgeslagen als er een tool-aanroep in zit. Een gesprek zonder tool-gebruik — een discussie over architectuurkeuzes, een vraag-en-antwoord sessie — wordt niet als doorzoekbare observatie opgeslagen. De sessietranscripts blijven wel bestaan in ~/.claude/projects/, maar zijn niet doorzoekbaar via de plugin.

Het activeren was eenvoudig: één blok JSON toevoegen aan de hooks sectie in ~/.claude/settings.json. Ik haal de exacte hook-definitie rechtstreeks uit de plugin's eigen hooks.json, zodat die altijd synchroon blijft met de plugin-versie.

Na een validatie met jq was het klaar.

Cross-project geheugen

Alle observaties landen in één centrale store onder ~/.claude/. Het geheugen is niet per project gescheiden.

Dat betekent dat als je in project A iets besluit over gedeelde infrastructuur, dat beschikbaar is als je later in project B werkt. De context van een gesprek over authenticatie in het ene project komt terug als je weken later in een ander project hetzelfde vraagstuk aanpakt. Voor wie dagelijks schakelt tussen meerdere projecten is dat het verschil tussen een assistent die context heeft en één die elke keer opnieuw begint.

Hoe terughalen in de praktijk werkt

Met de plugin actief en de Stop Hook ingeschakeld, zoek je via de mem-search skill of direct via de MCP-tools. Een zoekopdracht als "welke database hebben we gekozen voor project X" geeft observaties terug met tijdstip, context en betrokken bestanden.

get_observations haalt specifieke observaties op aan de hand van ID's uit een zoekresultaat. timeline geeft een chronologisch overzicht van wat er is gebeurd binnen een tijdsvenster.

De sessie-samenvatting bovenaan elke sessie dekt recente activiteit. Voor iets van weken geleden gebruik je de zoektools.

Conclusie

claude-mem is een serieuze uitbreiding op het standaard Claude Code geheugen. Het is geen perfecte oplossing — het is geen semantische vectorzoekopdracht, en de kwaliteit van observaties hangt af van wat de hooks oppikken. Maar voor dagelijks gebruik over meerdere projecten is het verschil merkbaar.

Het enige wat ik moest doen om het volledig te activeren, was de Stop Hook toevoegen. Die stap ontbrak in de standaardinstallatie, maar is inmiddels het meest waardevolle onderdeel van de setup.

Als je de plugin al hebt geïnstalleerd: check of je Stop Hook actief is. Als hij er niet in staat, mis je alle pure gespreksturns zonder toolgebruik — en dat zijn precies de gesprekken waarin je beslissingen neemt.