5-Type Memory System - Quick Reference¶
Home > Memory System > Quick Reference
One-page cheat sheet for the 5-type memory system. Print this and keep it handy!
Memory Types at a Glance¶
| Type | What | When Stored | Example |
|---|---|---|---|
| Episodic | Specific events & decisions | SessionStop | "Decided to use Redis for sessions" |
| Semantic | Facts & concepts | SessionStop | "JWT contains header, payload, signature" |
| Prospective | TODOs & future work | UserPromptSubmit | "Add rate limiting to API" |
| Procedural | How-to workflows | TodoWriteComplete | "Deploy: 1) Test, 2) Build, 3) Push" |
| Working | Active context | UserPromptSubmit | "Currently debugging auth flow" |
Quick Start¶
from amplihack.memory import MemoryCoordinator
coordinator = MemoryCoordinator()
# Store a memory
coordinator.store(
content="Use bcrypt for password hashing",
memory_type="semantic"
)
# Retrieve memories
memories = coordinator.retrieve(
query="password security",
limit=5
)
Common Queries¶
Get Recent Decisions¶
memories = coordinator.retrieve(
query="architectural decisions",
memory_types=["episodic"],
limit=10
)
Find Workflows¶
Check Pending TODOs¶
Learn About Concepts¶
Get Recent Context¶
recent = coordinator.retrieve(
query="last 7 days",
since=datetime.now() - timedelta(days=7),
limit=10
)
Memory Type Decision Tree¶
What are you capturing?
│
├─ A specific decision or event?
│ └─> EPISODIC
│
├─ A fact or concept you learned?
│ └─> SEMANTIC
│
├─ Something to do in the future?
│ └─> PROSPECTIVE
│
├─ Steps to accomplish a task?
│ └─> PROCEDURAL
│
└─ Temporary context for current session?
└─> WORKING
Storage Parameters¶
coordinator.store(
content="...", # REQUIRED: Memory content
memory_type="episodic", # REQUIRED: Type (see table above)
metadata={ # OPTIONAL: Additional data
"priority": "high",
"component": "auth"
},
context={ # OPTIONAL: Contextual info
"session_id": "...",
"agent": "architect"
}
)
Retrieval Parameters¶
coordinator.retrieve(
query="...", # Query text
memory_types=["episodic"], # Filter by type (default: all)
limit=10, # Max results (default: 10)
max_tokens=2000, # Token budget (default: none)
since=datetime(...), # Only after date (default: all time)
deduplicate=True, # Remove similar (default: False)
similarity_threshold=0.85 # Similarity % (default: 0.85)
)
Hooks (Automatic Triggers)¶
| Hook | When | What Happens |
|---|---|---|
| UserPromptSubmit | You submit prompt | Extract prospective + working memory |
| TodoWriteComplete | Task completes | Capture procedural memory (if score >= 6) |
| SessionStop | Session ends | Review for episodic + semantic, consolidate working |
Multi-Agent Review Scoring¶
Storage Review (3 agents)¶
Analyzer → Scores technical importance (0-10)
Patterns → Scores reusability as pattern (0-10)
Knowledge Arch. → Scores long-term value (0-10)
─────────────────────────────
Average >= 6.0 → STORE
Retrieval Scoring (2 agents)¶
Analyzer → Scores relevance to query (0.0-1.0)
Patterns → Scores pattern match (0.0-1.0)
──────────────────────────────
Average = Relevance Score
Performance Targets¶
| Operation | Target | Actual (Avg) |
|---|---|---|
| Storage | <50ms | 2-3ms (DB) + 3-5s (agent review) |
| Retrieval | <50ms | 5-10ms (search) + 1-2s (scoring) |
| Database | <10MB | ~1MB per 10,000 memories |
Common Patterns¶
Pattern: Agent Uses Past Decisions¶
class ArchitectAgent:
def design(self, requirements):
# Get relevant past decisions
past = coordinator.retrieve(
query=requirements,
memory_types=["episodic"],
limit=5
)
# Use for context
return self.generate_design(requirements, past)
Pattern: Session Start TODOs¶
def on_session_start():
todos = coordinator.retrieve(
query="",
memory_types=["prospective"],
limit=10
)
print("Pending tasks:")
for todo in todos:
print(f" - {todo.content}")
Pattern: Time-Weighted Retrieval¶
# Prefer recent memories
recent = coordinator.retrieve(
query="authentication",
since=datetime.now() - timedelta(days=7),
limit=5
)
older = coordinator.retrieve(
query="authentication",
since=datetime.now() - timedelta(days=30),
limit=5
)
combined = recent + older[:3] # 5 recent + 3 older
Troubleshooting¶
Memory Not Stored¶
Check: Agent review scores
result = coordinator.store(content, type)
print(f"Stored: {result.stored}")
print(f"Score: {result.consensus_score}")
print(f"Reason: {result.reason}")
Solution: Content might be trivial or scored too low (<6.0)
Retrieval Too Slow¶
Check: Query is too broad or returning too many results
# Add token budget
memories = coordinator.retrieve(
query="...",
max_tokens=1000, # Strict limit
limit=5
)
Solution: Use more specific queries, limit results
Duplicate Memories¶
Check: Deduplication disabled
memories = coordinator.retrieve(
query="...",
deduplicate=True, # Enable
similarity_threshold=0.85 # Adjust threshold
)
Solution: Enable deduplication with appropriate threshold
Missing Context¶
Check: Query is too vague
# BAD: Too vague
memories = coordinator.retrieve(query="auth")
# GOOD: Specific with context
memories = coordinator.retrieve(
query="JWT authentication with Redis session storage",
memory_types=["episodic", "semantic"]
)
Solution: Use specific queries with relevant memory types
Configuration¶
Database Location¶
Default: ~/.amplihack/memory.db
Custom:
Consensus Threshold¶
Default: 6.0 (out of 10)
Custom:
Token Budget Default¶
Default: None (unlimited)
Custom:
Example Workflows¶
Workflow 1: Capture Decision¶
# At SessionStop (automatic)
coordinator.store(
content="Decided to use PostgreSQL over MongoDB for ACID guarantees",
memory_type="episodic",
metadata={"decision_type": "database", "component": "backend"}
)
Workflow 2: Learn Concept¶
# At SessionStop (automatic)
coordinator.store(
content="ACID: Atomicity, Consistency, Isolation, Durability",
memory_type="semantic",
metadata={"category": "database", "importance": "high"}
)
Workflow 3: Plan Future Work¶
# At UserPromptSubmit (automatic)
coordinator.store(
content="Add database migration for user preferences table",
memory_type="prospective",
metadata={"priority": "high", "component": "backend"}
)
Workflow 4: Document Workflow¶
# At TodoWriteComplete (automatic)
coordinator.store(
content="Database migration: 1) Create migration file, 2) Write up/down, 3) Test locally, 4) Deploy to staging, 5) Deploy to prod",
memory_type="procedural",
metadata={"task_type": "migration", "success": True}
)
Workflow 5: Track Active Context¶
# At UserPromptSubmit (automatic)
coordinator.store(
content="Debugging slow query in user dashboard analytics",
memory_type="working",
metadata={"session_id": "sess_123", "component": "analytics"}
)
API Summary¶
MemoryCoordinator Methods¶
| Method | Purpose | Returns |
|---|---|---|
store() | Store memory | StoreResult |
retrieve() | Get memories | List[Memory] |
stats() | Get statistics | MemoryStats |
delete_memory() | Delete by ID | bool |
clear_working_memory() | Clear session | int (count) |
Memory Object¶
memory.id # str: Unique ID
memory.type # MemoryType: Type enum
memory.content # str: Memory content
memory.timestamp # datetime: When stored
memory.token_count # int: Token count
memory.metadata # dict: Additional data
memory.context # dict: Contextual info
memory.relevance_score # float: Relevance (if retrieved)
StoreResult Object¶
result.stored # bool: Was stored?
result.memory_id # str: Memory ID (if stored)
result.consensus_score # float: Agent consensus (0-10)
result.reason # str: Why stored/rejected
Further Reading¶
- User Guide: 5-Type Memory Guide - Complete usage guide
- Developer Guide: Developer Guide - Architecture and extension
- Memory System: Memory README - All memory documentation
Pro Tip: Bookmark this page and use Ctrl+F to quickly find what you need!