Skip to main content

Persistent semantic memory for AI agents with replay, restore, verify, and ignore decisions

Project description

Agent Memory

CI Python 3.10+ License: MIT PyPI version

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

  1. Query Input: User query enters the system
  2. Hybrid Retrieval: BM25 (keyword) + Vector (semantic) search with RRF fusion
  3. Policy Scoring: Multi-factor scoring (semantic + recency + confidence + usage)
  4. Decision Engine: Intelligently selects the best action
  5. 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 history
  • fact - Verifiable information
  • workflow - Step-by-step processes
  • document - Long-form content
  • tool_output - API/tool responses
  • code - Code snippets
  • summary - Consolidated memories
  • preference - User preferences

Scopes:

  • session - Current conversation
  • user - User-specific
  • project - Project-specific
  • workspace - Workspace-wide
  • team - Team-shared
  • global - 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 queries
  • customer_support.json - Support scenarios
  • research_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


๐Ÿค Contributing

Contributions are welcome! Please follow these steps:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing-feature)
  3. Make your changes
  4. Run tests (python -m pytest tests/)
  5. Run linting (ruff check agent_memory/ tests/)
  6. Commit your changes (git commit -m 'Add amazing feature')
  7. Push to the branch (git push origin feature/amazing-feature)
  8. 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


๐Ÿ“ž Support


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

agent_memory_sdk-0.1.2.tar.gz (40.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agent_memory_sdk-0.1.2-py3-none-any.whl (32.2 kB view details)

Uploaded Python 3

File details

Details for the file agent_memory_sdk-0.1.2.tar.gz.

File metadata

  • Download URL: agent_memory_sdk-0.1.2.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

Hashes for agent_memory_sdk-0.1.2.tar.gz
Algorithm Hash digest
SHA256 00494743ca6bf4c26d0ceb5980059fea0b87372591b47449d15bf71f049bb87b
MD5 7bc197fb1da03b7b3469dc64a13eb150
BLAKE2b-256 918ae5fafda0a54e149c18b8fa7e3a4135fe2359405eb74d17f6bde5d895cefa

See more details on using hashes here.

File details

Details for the file agent_memory_sdk-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for agent_memory_sdk-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 8447cd5db8b04e0e9825b7fadbc51321e114704d090a69174ef7d4053d62c014
MD5 08d3883c863e943773c758174b167011
BLAKE2b-256 ce822bfafe72287505e9dff7f908c3aa2efca68852b5e0f50a79aa8123833d71

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page