Persistent semantic memory for AI agents with replay, restore, verify, and ignore decisions
Project description
Agent Memory
Persistent semantic memory for AI agents with intelligent decision-making.
๐ Created by: TheProdSDE
๐ฏ The Problem
Most AI memory systems simply retrieve and inject past context into every prompt. This leads to:
- ๐ฐ Higher token costs - Unnecessary context in every query
- ๐ญ Inconsistent responses - No validation of stale or incorrect memories
- โฑ๏ธ Poor performance - Always processing memory, even when irrelevant
- ๐ค No intelligence - Memory is treated as a dumb cache
โจ The Solution
Agent Memory is a decision layer that intelligently chooses when and how to use memory:
flowchart TD
A[User Query] --> B[Resolve Memory]
B --> C[Decision Engine]
C -->|High confidence match| D[๐ Replay: Return stored answer]
C -->|Moderate match| E[๐ Restore: Inject as context]
C -->|Needs validation| F[โ
Verify: Validate before reuse]
C -->|No match| G[โ None: Answer from scratch]
style D fill:#0d47a1,color:#ffffff
style E fill:#e65100,color:#ffffff
style F fill:#1b5e20,color:#ffffff
style G fill:#b71c1c,color:#ffffff
Benefits:
- โ Response consistency - Reuse proven answers
- โ Lower token usage - Only inject when beneficial
- โ Faster responses - Instant replay for repeated queries
- โ Better long-term behavior - Agents learn when to trust memory
๐๏ธ Architecture
flowchart LR
subgraph Input["Input Layer"]
Q[User Query]
end
subgraph Retrieval["Retrieval Layer"]
BM25[BM25 Keyword Search]
Vector[Vector Semantic Search]
Fusion[Reciprocal Rank Fusion]
end
subgraph Decision["Decision Layer"]
Policy[Scoring Policy]
Engine[Decision Engine]
end
subgraph Storage["Storage Layer"]
Chroma[ChromaDB]
DB[(Local Persistence)]
end
subgraph Output["Output Layer"]
Replay[Replay Action]
Restore[Restore Action]
Verify[Verify Action]
None[None Action]
end
Q --> BM25
Q --> Vector
BM25 --> Fusion
Vector --> Fusion
Fusion --> Policy
Policy --> Engine
Engine --> Storage
Storage --> Engine
Engine --> Replay
Engine --> Restore
Engine --> Verify
Engine --> None
style Input fill:#4a148c,color:#ffffff
style Retrieval fill:#0d47a1,color:#ffffff
style Decision fill:#e65100,color:#ffffff
style Storage fill:#1b5e20,color:#ffffff
style Output fill:#b71c1c,color:#ffffff
How It Works
- Query Input: User query enters the system
- Hybrid Retrieval: BM25 (keyword) + Vector (semantic) search with RRF fusion
- Policy Scoring: Multi-factor scoring (semantic + recency + confidence + usage)
- Decision Engine: Intelligently selects the best action
- Action Execution: Returns appropriate response based on decision
๐ฆ Features
๐ฏ Decision-Based Memory
Memory is not automatically injected. Each query results in one of four actions:
| Action | Behavior | Use Case |
|---|---|---|
| Replay | Return previous answer | Exact or near-identical queries |
| Restore | Inject memory as context | Similar queries needing adaptation |
| Verify | Validate before reuse | Facts, workflows, tool outputs |
| None | Ignore memory | Unrelated queries |
๐ Hybrid Retrieval Pipeline
flowchart TD
A[Query] --> B[BM25 Search]
A --> C[Vector Search]
B --> D[Reciprocal Rank Fusion]
C --> D
D --> E[Policy Reranking]
E --> F[Top K Results]
style B fill:#f57f17,color:#ffffff
style C fill:#2e7d32,color:#ffffff
style D fill:#1565c0,color:#ffffff
style E fill:#6a1b9a,color:#ffffff
Policy scoring considers:
- ๐ Semantic similarity (70% weight)
- ๐ Recency (15% weight)
- โ Confidence score (20% weight)
- ๐ Usage frequency (10% weight)
๐๏ธ Structured Memory
Store memories with type and scope for better organization:
Memory Types:
conversation- Chat historyfact- Verifiable informationworkflow- Step-by-step processesdocument- Long-form contenttool_output- API/tool responsescode- Code snippetssummary- Consolidated memoriespreference- User preferences
Scopes:
session- Current conversationuser- User-specificproject- Project-specificworkspace- Workspace-wideteam- Team-sharedglobal- Application-wide
โฐ Time-to-Live (TTL)
Automatic expiration with flexible TTL:
# Absolute time
memory.remember(query, response, ttl="30d") # 30 days
memory.remember(query, response, ttl="2h") # 2 hours
# Relative time
memory.remember(query, response, ttl=3600) # 1 hour in seconds
๐ Observability
Full transparency into decision-making:
decision = memory.resolve(query)
print(decision) # Decision object
print(decision.explain()) # Detailed score breakdown
๐ Quick Start
Installation
# From PyPI
pip install agent-memory
# From source (development)
git clone https://github.com/TheProdSDE/agent-memory.git
cd agent-memory
pip install -e ".[dev]"
Basic Usage
from agent_memory import Memory, MemoryAction, MemoryType
# Initialize memory
memory = Memory(persist_dir=".agent_memory")
# Store a memory
memory.remember(
query="How do I reset my password?",
response="Go to Settings โ Security โ Reset Password and follow the email link.",
type=MemoryType.CONVERSATION,
tags=["auth", "faq"],
confidence=0.95
)
# Store a fact that requires verification
memory.remember(
query="Current API rate limit",
response="1000 requests/minute per API key.",
type=MemoryType.FACT,
requires_verification=True
)
# Resolve a query
decision = memory.resolve("How do I reset my password?")
# Handle the decision
match decision.action:
case MemoryAction.REPLAY:
print(f"Replaying: {decision.response}")
case MemoryAction.RESTORE:
context = memory.format_restore_context(decision)
print(f"Context: {context}")
# Use with your LLM: llm(query, context=context)
case MemoryAction.VERIFY:
print(f"Verify: {decision.memory.response}")
# Validate with tools before reuse
case MemoryAction.NONE:
print("No relevant memory - answer from scratch")
๐ ๏ธ API Reference
Core Methods
# Memory management
memory.remember(query, response, *, type, scope, tags, confidence, ttl, metadata)
memory.get(memory_id)
memory.list(limit=100, offset=0, *, scope, include_archived, type)
memory.forget(memory_id)
memory.archive(memory_id)
# Query and resolve
decision = memory.resolve(query, *, mode, top_k, scope, enable_verify)
# Maintenance
memory.cleanup(delete=False) # Mark expired as expired
memory.cleanup(delete=True) # Delete expired
memory.consolidate(similarity_threshold=0.95) # Merge duplicates
memory.stats() # Get usage statistics
Decision Object
class MemoryDecision:
action: MemoryAction # REPLAY, RESTORE, VERIFY, NONE
confidence: float # 0.0 - 1.0
query: str # Original query
reason: str # Human-readable reason
reasons: list[str] # Detailed reasons
response: str | None # For REPLAY action
memory: MemoryEntry | None # For REPLAY/VERIFY
context: list[RetrievalResult] # For RESTORE/VERIFY
def explain(self) -> str: # Detailed score breakdown
return "..."
๐ MCP Server Integration
Expose Agent Memory as MCP tools for Cursor, VS Code, and other MCP-compatible agents.
Configuration for Cursor
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"agent-memory": {
"command": "agent-memory-mcp",
"env": {
"AGENT_MEMORY_DIR": "~/.agent_memory"
}
}
}
}
Available MCP Tools
| Tool | Description |
|---|---|
remember_memory |
Store a query/response pair |
resolve_memory |
Retrieve and decide action |
list_memories |
List with pagination |
get_memory |
Fetch single memory |
forget_memory |
Delete memory |
archive_memory |
Archive memory |
consolidate_memories |
Merge duplicates |
Docker-based MCP (Recommended)
{
"mcpServers": {
"agent-memory": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-v", "agent_memory_data:/home/appuser/.agent_memory",
"ghcr.io/theprodsde/agent-memory:latest",
"agent-memory-mcp"
]
}
}
}
๐ CLI Reference
# Show help
agent-memory --help
# Store a memory
agent-memory remember "query" "response" \
--type conversation \
--scope user \
--ttl 30d
# Resolve a query
agent-memory resolve "query" --explain
# Show statistics
agent-memory stats
# Cleanup expired memories
agent-memory cleanup --delete
# Run benchmark
agent-memory benchmark --seed --repeat 3
# Run evaluation
agent-memory eval --datasets ./benchmarks/datasets
๐ Benchmark & Evaluation
Benchmark
# Quick benchmark with default queries
agent-memory benchmark
# With seeded data from eval datasets
agent-memory benchmark --seed --repeat 3
# Custom baseline comparison
agent-memory benchmark --baseline-ms 500
Evaluation
# Run all datasets
agent-memory eval
# Specific dataset directory
agent-memory eval --datasets ./benchmarks/datasets
Included Datasets:
coding_agent.json- Code-related queriescustomer_support.json- Support scenariosresearch_agent.json- Research workflows
๐ Current Status (v0.1.0-alpha)
โ Implemented
- Hybrid retrieval (BM25 + Vector + RRF fusion)
- Decision engine (replay / restore / verify / none)
decision.explain()observability- Benchmark & evaluation datasets
- TTL + memory states + cleanup
- CLI (remember, resolve, stats, benchmark, eval)
- MCP support for Cursor and other clients
- Comprehensive documentation
- All tests passing
- CI/CD pipeline
- Docker support
๐ง Roadmap
| Feature | Status | ETA |
|---|---|---|
| Async API | โ Completed | v0.1.0-alpha |
| SQLite backend | โ Completed | v0.1.0-alpha |
| Redis backend | ๐ Planned | v0.2.0 |
| Postgres backend | ๐ Planned | v0.3.0 |
| FastAPI server + dashboard | ๐ Planned | v0.3.0 |
| Memory graph | ๐ Planned | v0.4.0 |
| Confidence learning | ๐ Planned | v0.4.0 |
| Multi-agent support | ๐ Planned | v0.5.0 |
๐ก๏ธ Tech Stack
| Component | Technology |
|---|---|
| Language | Python 3.10+ |
| Storage | ChromaDB (local embeddings) |
| Retrieval | BM25 + Vector Search + RRF |
| Interface | MCP (Model Context Protocol) |
| CLI | argparse |
| Testing | pytest + pytest-asyncio |
| Linting | ruff |
| Type Checking | mypy |
| CI/CD | GitHub Actions |
| Container | Docker + docker-compose |
No API keys required - Everything runs locally!
๐ Documentation
- Getting Started - Installation and basic usage
- Architecture - Deep dive into the system design
- Memory Model - Understanding memory types and states
- Policies - Customizing scoring and decision logic
- Benchmarks - Performance metrics and evaluation
- FAQ - Common questions and troubleshooting
๐ค Contributing
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Run tests (
python -m pytest tests/) - Run linting (
ruff check agent_memory/ tests/) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
Development Setup
# Clone the repository
git clone https://github.com/TheProdSDE/agent-memory.git
cd agent-memory
# Create virtual environment
python -m venv .venv
source .venv/bin/activate # or .venv\Scripts\activate on Windows
# Install in development mode
pip install -e ".[dev]"
# Install pre-commit hooks
pip install pre-commit
pre-commit install
# Run tests
make test
# Run all checks
make check
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ Acknowledgments
- ChromaDB - Vector database
- Rank-BM25 - BM25 implementation
- MCP - Model Context Protocol
- FastMCP - MCP server framework
๐ Support
- Issues: GitHub Issues
- Discussions: GitHub Discussions
- Email: theprodsde@gmail.com
Agent Memory helps agents decide: Replay โ Restore โ Verify โ Ignore
Built with โค๏ธ by TheProdSDE
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_memory_sdk-0.1.1.tar.gz.
File metadata
- Download URL: agent_memory_sdk-0.1.1.tar.gz
- Upload date:
- Size: 40.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b1d0478f1addb97648dffda6ce09f4263e312e500a2d95ce637e30278a045709
|
|
| MD5 |
3c9fc913c5da38599aeb29e637c21bd4
|
|
| BLAKE2b-256 |
fc18031d9e559875b9cf54ede14de129d403b70f5ab56bae191db9ea84d10b49
|
File details
Details for the file agent_memory_sdk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: agent_memory_sdk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 32.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d00bf5d4a1cd1eb1c11843d81fef7b1a9340427593944d21353915417afa6cbb
|
|
| MD5 |
9e9a21b606a8d17642946527edf4b8de
|
|
| BLAKE2b-256 |
5e492af1b380c1108e9d0a372f49d85e9850eb581b702389ac61959ced75f12a
|