Letta V1 — memory blocks plus sleep-time compute
primary agent (on the critical path)
responds to user; writes raw facts fast; no consolidation
turn 1 user: "my name is ava, I live in Berlin"
block_append human "name=ava city=Berlin"
turn 2 user: "plan a curriculum for senior eng"
block_append task "audience=senior eng"
turn 3 user: "I moved to Lisbon"
block_append human "city=Lisbon" — both cities now in block
sleep-time agent (off the critical path)
runs between turns; stronger model allowed; no latency cost
scan blocks summarize if near_limit
compact human block: drop duplicates, keep latest values
reconcile archival invalidate stale facts
contradictions against core trigger invalidation, not delete
write learned_context into shared blocks
produces new stable facts for the next turn
three tiers of Letta memory
core (always visible)
blocks: human, persona, task
editable via block_{append,replace,rewrite}
per-block character limit
near_limit triggers sleep-time summarization
Persona/Safety block writes need review
versioned; diff surfaces in the trace
pinned in the prompt every turn
recall (conversation)
turn log, paginated
auto-written each turn
retrieval via conversation_search
tail evicts on cap
citation: session_id + turn_id
primary reads; sleep-time summarizes
lossy but always addressable
archival (external)
vector + KV + graph (Lesson 09)
archival_memory_{insert,search}
invalidation, not deletion, for contradictions
tags for scope: user/session/agent
untrusted on retrieval (Lesson 27)
sleep-time dedups on >90% token overlap
scales past context window
Letta V1 swaps send_message+heartbeat for native reasoning; loop shape unchanged.