Λήθη — the ancient Greek personification of forgetfulness.
A memory store for LLM agents that gets better the more you use it. Hybrid BM25 + dense retrieval, cross-encoder reranking, clustered retrieval-induced forgetting (RIF). Every retrieval teaches it which entries are chronic distractors — no fine-tuning, just bookkeeping (Anderson, 1994).
Homebrew installs the lethe CLI:
brew tap teimurjan/lethe
brew install letheFor the standalone CLI only, use Cargo on any platform with a Rust toolchain:
cargo install lethe-cliPrebuilt CLI bundles are also available from GitHub Releases.
Verify the installation, then index and search the current project's Claude Code, Codex, and Oh My Pi transcripts:
lethe --version
lethe index
lethe search "query" --top-k 5
lethe # TUITranscript discovery uses ~/.claude, ~/.codex, and ~/.omp/agent by
default and honors each agent's directory override environment variables.
The CLI works on its own. Install a plugin only if you want recall and
recall-global available directly inside a coding agent.
/plugin marketplace add teimurjan/lethe
/plugin install lethe
Recall via skills — lethe indexes your Claude Code transcripts directly and writes nothing into your repos. See plugins/claude-code/README.md.
codex plugin marketplace add teimurjan/letheThen run codex, open /plugins, and install lethe — it wires the recall / recall-global skills into Codex automatically. See plugins/codex/README.md.
omp plugin marketplace add teimurjan/lethe
omp plugin install lethe@teimurjanRestart omp to load the recall / recall-global skills and the background
index freshness hook. See plugins/omp/README.md.
Cross-project search and periodic compaction are also available from the CLI:
lethe search "query" --all --top-k 5
lethe dedupe --allpip install lethe-memoryfrom lethe_memory import MemoryStore
store = MemoryStore("./my_memories")
store.add("I prefer window seats on flights", session_id="trip")
for hit in store.retrieve("travel preferences", k=5):
print(f"[{hit.score:.1f}] {hit.content}")
store.save()npm install @lethe-memory/letheimport { MemoryStore } from "@lethe-memory/lethe";
const store = new MemoryStore("./my_memories", { dim: 384 });
await store.add("first entry");
const hits = await store.retrieve("query", { k: 5 });LongMemEval-S, full 199,509-turn corpus, turn-level NDCG@10:
| Stage | NDCG@10 | Gain |
|---|---|---|
| Hybrid BM25 + vector (RRF) | 0.241 | baseline |
| + cross-encoder reranking | 0.382 | +59% |
| + clustered + gap RIF | 0.342 | +3.4% over RRF-truncation baseline |
| + LLM enrichment, covered queries | 0.473 | +20–25% |
Scope. RIF targets chronic-false-positives in long-term conversational memory. On NFCorpus (medical IR) it regresses — workload-specific by design. Full methodology + checkpoints in BENCHMARKS.md.
- ARCHITECTURE.md — pipeline, RIF formula, storage layers.
- RESEARCH_JOURNEY.md — 18 checkpoints from biology-inspired mutation through RIF to enrichment.
MIT


