Memory Manager Skill
Optimize agent memory usage, implement pruning strategies, and manage conversation context effectively.
Capabilities
-
🧠 Memory pruning and optimization
-
📊 Context window management
-
🗂️ Conversation history archiving
-
🎯 Important memory consolidation
-
🔄 Memory decay implementation
-
📈 Memory usage monitoring
Memory Types
Short-term Memory
-
Current conversation context
-
Working memory (max 50 items default)
-
Cleared per session
Long-term Memory
-
Important facts and information
-
Persistent across sessions
-
Decay modeling over time
Knowledge
-
Static facts from configuration
-
Document-based knowledge
-
Dynamically learned information
Memory Operations
// Create memory await runtime.createMemory({ entityId: userId, roomId: conversationId, content: { text: 'Important information', metadata: { importance: 'high' } }, embedding: await generateEmbedding(text) });
// Retrieve memories const memories = await runtime.getMemories({ roomId: conversationId, limit: 10, unique: true });
// Search semantically const results = await runtime.searchMemories( 'query text', { roomId: conversationId, limit: 5, minScore: 0.7 } );
// Update memory await runtime.updateMemory({ id: memoryId, content: { ...updated content }, metadata: { lastAccessed: Date.now() } });
Pruning Strategies
Time-based Pruning
async function pruneOldMemories( runtime: IAgentRuntime, daysToKeep: number = 30 ): Promise<number> { const cutoffDate = Date.now() - (daysToKeep * 24 * 60 * 60 * 1000);
const oldMemories = await runtime.getMemories({ createdBefore: cutoffDate, importance: 'low' });
for (const memory of oldMemories) { await runtime.deleteMemory(memory.id); }
return oldMemories.length; }
Size-based Pruning
async function pruneLargeMemories( runtime: IAgentRuntime, maxSize: number = 1000 ): Promise<void> { const memories = await runtime.getMemories({ limit: 10000 });
if (memories.length > maxSize) { // Keep most important and recent const toKeep = rankMemoriesByImportance(memories).slice(0, maxSize); const toDelete = memories.filter(m => !toKeep.includes(m));
for (const memory of toDelete) {
await runtime.deleteMemory(memory.id);
}
} }
Best Practices
-
Set appropriate conversationLength limits
-
Implement importance scoring
-
Use memory decay for temporal relevance
-
Archive important conversations
-
Monitor memory growth
-
Prune regularly
-
Use embeddings for semantic search
-
Cache frequently accessed memories
-
Batch memory operations
-
Index memories properly