Memory Lifecycle
How memories flow from creation through embedding, deduplication, retrieval, consolidation, and archival
Every memory follows a defined lifecycle from creation to eventual archival or consolidation.
Memory Pipeline
Creation → Embedding → Dedup Check → Storage → Retrieval → Consolidation → Archival1. Creation
Memories are created from three operations/surfaces:
- Arena (voice sessions) — via
extractAgentMemories()andextractSessionBrief() - Agent Chat (1:1 text) — via
extractFromChat() - Team Chat (group text) — via
extractFromTeamChat()
2. Embedding
Each memory's content is passed through EmbeddingService.embed() using OpenAI's text-embedding-3-small model, producing a 1536-dimensional vector stored in the embedding column.
If embedding fails, the memory is still stored but without vector search capability (embedding = null).
3. Deduplication
Before inserting, MemoryService checks for existing memories with cosine similarity above the threshold (see operations/configuration):
SELECT id, importance FROM agent_memories
WHERE agent_id = $1
AND embedding IS NOT NULL
AND (1 - (embedding <=> $2::vector)) > 0.92
LIMIT 1If a duplicate is found:
- The existing memory's
importanceis updated tomax(existing, new) last_accessed_atis refreshed- No new row is inserted
4. Storage
Non-duplicate memories are inserted with:
- Default
importanceof 0.5 statusofactivesource_typematching the interaction surface
5. Retrieval
Memories are retrieved via pipeline/scoring|semantic search using the composite scoring formula. Retrieved memories have their last_accessed_at timestamp refreshed via touchMemory().
6. Consolidation
When an agent accumulates >20 active memories, the weekly operations/cron-jobs|consolidation cron clusters similar memories (cosine similarity ≥0.8) and replaces clusters of 3+ with a single consolidated memory via LLM summarization.
Old memories are marked status = 'consolidated'.
7. Archival (Daily Files)
Daily memory files follow a separate three-state lifecycle:
active → warm → archived
0-7d 7-30d 30d+| Transition | Trigger | Timing |
|---|---|---|
active → warm | Age > 7 days | Daily at 03:00 UTC |
warm → archived | Age > 30 days | Daily at 03:00 UTC |
The pipeline/context-assembly pipeline only includes active daily files (last 7 days).
Status Values
Agent Memories
| Status | Meaning |
|---|---|
active | Available for retrieval and context assembly |
consolidated | Replaced by a consolidated memory |
completed | Stale task memory, auto-pruned after 7 days of inactivity |
Daily Files
| Status | Meaning |
|---|---|
active | Included in context assembly (0–7 days old) |
warm | Retained but not in context (7–30 days old) |
archived | Long-term storage (30+ days old) |