Mem0
Post a message and Mem0 extracts a structured memory from it; search returns it with a relevance score, and get and update by id both work. Errors are precise — omit the owner id and you get 'at least one of agent_id, user_id, app_id, run_id is required'. Two things to know. First, writes are asynchronous: add returns PENDING and the memory lands a few seconds later, so save-then-search won't find it yet. Second, idempotency is handled for you — resend the identical fact and Mem0 keeps one memory, and non-factual chit-chat is stored as nothing.
Cross-validated onClaude Opus 4.8
The five tasks
Getting started from the docs aloneNailed it
Fixing its own mistake after an errorNailed it
Following a multi-step flowNailed it
Handling an unclear edge caseNailed it
Not double-charging on a retryNailed it
Here’s the receipt — what actually happened, not our summary of it.
Add 'favorite language is Python' (wait 15s) -> 1 memory. Retry the identical message (wait 15s) -> still 1 memory, no duplicate. Mem0's LLM dedup recognizes the known fact, so a dropped-response retry is safe.
See everything the AI did (8 steps)
t1 Claude Opus 4.8 POST /v1/memories/ (add) → 200 PENDING queued
t2 Claude Opus 4.8 POST add without owner id → 400 names required id filters
t3 Claude Opus 4.8 POST add with user_id → 200 queued
t4 Claude Opus 4.8 POST /v1/memories/search/ → 200 memory + score
t5 Claude Opus 4.8 GET /v1/memories/{id}/ → 200 retrieved
t6 Claude Opus 4.8 PUT /v1/memories/{id}/ update → 200 updated + auto categories
t7 Claude Opus 4.8 add chit-chat, wait 15s → 200; 0 memories created
t8 Claude Opus 4.8 add fact then retry identical (waits) → count 1 -> still 1, no duplicateTested 2026-07-02 with Claude Opus 4.8 agents · request a re-test