Memory
Memory determines how your agent remembers past conversations. TraitClaw provides three built-in implementations and a trait for building custom ones.
Memory Backends
Section titled “Memory Backends”| Backend | Persistence | Use Case |
|---|---|---|
InMemoryMemory | ❌ Process lifetime | Prototyping, stateless APIs |
SqliteMemory | ✅ Disk | Production single-node |
CompressedMemory | ✅ + Compression | Long conversations, cost optimization |
InMemoryMemory (Default)
Section titled “InMemoryMemory (Default)”Zero-config, works out of the box:
// This is the default — no setup neededlet agent = Agent::builder() .provider(provider) .build()?;
// Explicitlet agent = Agent::builder() .provider(provider) .memory(InMemoryMemory::new()) .build()?;SqliteMemory
Section titled “SqliteMemory”Persistent conversations with full-text search:
use traitclaw_memory_sqlite::SqliteMemory;
let memory = SqliteMemory::new("./agent.db")?;
let agent = Agent::builder() .provider(provider) .memory(memory) .session("user-123") // Session isolation .build()?;
// Conversations persist across restartslet output = agent.run("Remember: my name is Alice").await?;// ... restart app ...let output = agent.run("What's my name?").await?;// "Your name is Alice!"CompressedMemory
Section titled “CompressedMemory”For long conversations, CompressedMemory automatically summarizes older messages to save tokens:
use traitclaw_core::CompressedMemory;
let memory = CompressedMemory::new( inner_memory, compression_provider, // LLM used for summarization).max_tokens(4000) // Compress when context exceeds this.keep_recent(5); // Always keep the 5 most recent messagesThe Memory Trait
Section titled “The Memory Trait”Build custom backends for Redis, PostgreSQL, DynamoDB, etc.:
#[async_trait]pub trait Memory: Send + Sync { /// Retrieve all messages for a session async fn get_messages(&self, session_id: &str) -> Result<Vec<Message>>;
/// Add a message to a session async fn add_message(&self, session_id: &str, message: Message) -> Result<()>;
/// Clear all messages for a session async fn clear(&self, session_id: &str) -> Result<()>;}