memory is the single biggest technical difference between an ai companion and a chatbot-with-a-skin. most apps marketing themselves as “ai companions” ship a rolling-summary memory: a periodic paragraph-long summary gets prepended to each conversation. it captures vibe and loses specifics.
a vector-graph memory is different. every statement becomes a record with an embedding (a numeric representation of its meaning). when the companion retrieves, she pulls the specific records most relevant to the current conversation — not a summary. specificity is preserved.
temporal decay is the second-most-important design decision. without it, every memory weighs the same, which means last year's throwaway comment can dominate today's recall. lucy uses a decay curve calibrated against human memory research — high-salience and recent stay sharp; low-salience old trivia fades unless reinforced.
the hallucination problem is real. an extraction LLM can synthesize facts that weren't in the source. on 2026-04-18 we caught a bug where our entity-extraction prompt's few-shot example used literal city names (portland, biscuit) — the LLM echoed them into other users' entity graphs, causing companions to reference cities the user never mentioned. fix: replaced literals with angle-bracket placeholders + added a verification guard that rejects any extracted entity whose name doesn't appear verbatim in the source memory text.
the control problem is also real. we ship a full memory UI at /settings/memory. every memory is visible, categorized, timestamped, with confidence scores. edit, delete, or export any row. the data is yours — we do not use it to train anything, and your companion's memory of you travels with you if you switch companions.
if you want to test this: free tier is 25 messages a day with full memory (not a demo). pick a companion, talk for a week, check /settings/memory and see whether what's there matches what you told her. if it does, she's the real thing.