Agent memory layers: Mem0 vs Letta vs claude-mem

"Add memory to my agent" hides three different products: a memory API you call from any agent (Mem0), an agent runtime where memory is the core abstraction (Letta), and a plugin that gives one specific harness perfect recall (claude-mem). They're barely competitors — the comparison that matters is which shape fits your stack.

Mem0 claude-mem Letta
⭐ Stars 59k 83.5k 23.4k
Shape Memory layer / API Claude Code plugin Agent runtime with built-in memory
Works with Any agent or framework Claude Code only Agents you build in Letta
Memory model Extracted facts (user/org/session scoped), retrieved on demand Session capture → AI compression → context injection on resume Self-editing agent memory (the MemGPT lineage)
Adoption surface (list tier) slightly complex slightly complex mostly simple
Autonomy (list axis) n/a — memory layer, no loop n/a — plugin, host owns the loop headless
Recovery (list axis) n/a n/a durable
License open source (Apache-2.0) open source open source

Stars as captured for the main list (see README for the capture date).

Pick by situation

The question to ask first

Who owns the memory — the application or the agent? Application-owned (you decide what to store and when to recall) → Mem0. Agent-owned (the agent decides, as part of its loop) → Letta. Harness-owned (the harness remembers for you) → claude-mem. Answer that and the pick usually falls out.


Part of best-of-Agent-Harnesses. Spot an error or a stale claim? Open an issue.