Memnest gir Claude Code og Codex delt minne mellom økter, helt lokalt
Samle minnet til Claude Code, Codex og pi i én lokal Rust-tjeneste som aldri sender innholdet videre.
«KI-kodeagenten din glemmer alt når økten er slutt.» — åpningslinjen i memnests README
Memnest er svaret utvikleren bak GitHub-kontoen Blue-B har skrevet på nettopp det problemet: én Rust-prosess som lytter på 127.0.0.1 port 3111 og serverer både et HTTP-API og et MCP-endepunkt på samme adresse. Claude Code, Codex, pi og andre MCP-klienter kobler seg til den samme instansen, og deler dermed ett minne på tvers av verktøy og økter. Prosjektet er ferskt: npm-pakken pi-memnest ble publisert 30. august i versjon 0.1.0, og repoet hadde én stjerne da dette ble skrevet.
Under panseret er SQLite fasiten. Ved siden av databasen ligger to avledede indekser: Tantivy for BM25-nøkkelordsøk og HNSW for vektorlikhet. Et søk kjører begge og slår resultatene sammen med RRF-fusjon før MMR rangerer om lista. Begge trengs fordi de feiler ulikt, forklarer dokumentasjonen: BM25 finner et eksakt portnummer eller crate-navn, men bommer på en omskrivning, mens vektorsøket finner omskrivningen og kan gli forbi den bokstavelige strengen du faktisk skrev. Innbakingene beregnes lokalt med modellen multilingual-e5-base.
Koblingen mot agentene går to veier. Kommandoen memnest hook henges på UserPromptSubmit og skyter inn en kontekstblokk avgrenset til arbeidsområdet før hver prompt. Claude Code og Codex bruker samme hook-form, så én konfigurasjon dekker begge, selv om filene heter ulikt. Kommandoen memnest watch fanger opp transkripsjoner i bakgrunnen, og hopper over systemprompter, resonnering, verktøykall og subagent-sidespor. Selve verktøykontrakten er fem kall: memory_remember, memory_search, memory_get, memory_update og memory_delete.
Personvernbildet er mer nyansert enn «lokalt» antyder, og dokumentasjonen sier det rett ut. Vanlig minnetekst ligger ukryptert på disk. Bare hvelvet bruker AES-256-GCM, med en master.key du må sikkerhetskopiere for seg. Sletting er heller ikke utsletting: en slettet oppføring blir liggende 30 dager i papirkurven, og når den til slutt fjernes for godt, skrives hele posten i klartekst til en JSONL-fil under archive/. Sett MEMNEST_ARCHIVE=0 hvis du ikke vil ha den loggen. Tjenesten binder seg til 127.0.0.1, og en ikke-lokal binding avvises med mindre du setter MEMNEST_TOKEN.
Et lite kvalitetstegn: repoet dokumenterer også eksperimentene som ble forkastet, blant annet en CJK-tokenizer og en cross-encoder-reranker som kostet for mye minne til å forsvare plassen i søkeveien.
Hva bør du gjøre?
- Kjør memnest --warmup-embedding rett etter installasjon. Embedding-modellen lastes ned først når den trengs, så det aller første søket blir ellers merkbart tregere enn resten.
- Velg MCP over Streamable HTTP, ikke stdio, hvis flere verktøy skal dele minnet. En andre skriver mot samme datakatalog blir avvist i stedet for å kappes om indeksene.
- Ta backup av memory.db og master.key sammen. Indeksene bygger tjenesten opp igjen selv, men databasen finnes bare i ett eksemplar, og uten nøkkelen er hvelvet uleselig.
KI-kuratert — innholdet er generert av KI-agenter basert på originalkilden.