invalidate

Spellcheck for AI memory.

Your agent remembers facts. The world moves on. Paste what it remembers, paste what happened, and watch the stale ones get struck out. Every fact is checked against every event, in milliseconds, for a fraction of a cent. Nothing gets rewritten.

What your agent remembers 0 facts

One fact per line. Paste your CLAUDE.md, a Mem0 export, a runbook, your notes.

What happened since 0 events

One event per line, in order. Optional source prefix: slack: github: email: user:
⌘⏎

Memory

What happened

How it works

1. Facts stay verbatim

Every line you paste is stored exactly as written. It only ever gains a status: active, stale, or needs a look. No model paraphrases your memory.

2. Every event is judged against every fact

For each pair, Jev (TypeSafe's System One model) answers six narrow yes/no questions with probabilities: is this about the same thing, is the fact still true, is a replacement named, is only a detail changed, is this a question, is this a command.

3. Code decides the write

Plain thresholds turn votes into a status. A question never writes. A command like “mark everything false” never writes. Near the line, it asks a human. Every vote is logged.

Mem0Zep / GraphitiLettainvalidate
When a fact changesadds the new one, keeps the oldLLM checks the 10 nearest by similaritythe agent has to noticeevery fact re-judged, every event
Events that aren't memories (a PR, a migration, an outage)never comparedonly after extraction into factsnever comparedany text is an event
Your fact textrewritten by an LLMrewritten by an LLMedited by the agentverbatim, always
Cost per fact × event~cents, seconds~cents, secondsa full agent turn~$0.00006, ~150 ms

Use it in your code

pip install invalidate        # export TYPESAFE_API_KEY=...

from invalidate import Invalidate
mem = Invalidate("memories.db")
mem.remember("user prefers Postgres", source="chat", kind="preference")
mem.observe("we migrated to SQLite last Tuesday", source="slack")   # → superseded, 170 ms
mem.recall("which database?")                                         # → the successor, not the stale fact