Minna Memory

Cross-session persistence for AI agents.


The Session Continuity Problem

graph LR
    subgraph without ["Without Memory"]
        direction LR
        S1a["Session 1<br/>Context Built"]:::primary
        S2a["Session 2<br/>??? Lost!"]:::alert
        S3a["Session 3<br/>??? Lost!"]:::alert
        S1a -.- S2a -.- S3a
    end

    subgraph withminna ["With Minna Memory"]
        direction LR
        S1b["Session 1<br/>Context + Store"]:::primary
        S2b["Session 2<br/>Context + Recall"]:::tertiary
        S3b["Session 3<br/>Context + Recall"]:::tertiary
        DB[("minna.db<br/>SQLite")]:::accent
        S1b --> S2b --> S3b
        S1b --> DB
        DB --> S2b
        DB --> S3b
    end

    classDef primary fill:#2563eb,color:#fff
    classDef tertiary fill:#0d9488,color:#fff
    classDef alert fill:#ef4444,color:#fff
    classDef accent fill:#f59e0b,color:#000

Entity-Attribute-Value Model

ENTITY (what) ATTRIBUTE (aspect) VALUE (data)
8me purpose Loop toolkit
8me tier1_status COMPLETE
user prefers dark mode

Basic Usage

from minna_memory import MinnaMemory

memory = MinnaMemory(".spine/minna.db")

# Store memory
memory.store(
    entity="my-project",
    attribute="status",
    value="In development",
    confidence=1.0
)

# Recall memories
memories = memory.recall(entity="my-project")

# Search across all memories
results = memory.search("development")

# Relationships
memory.relate(
    from_entity="user",
    to_entity="my-project",
    rel_type="works_on"
)

High Portability

Single SQLite file = complete state:

project/
└── .spine/
    └── minna.db    ← Contains ALL memory
Scenario How Minna Helps
Move to new machine Copy one SQLite file
Share with teammate Send the .db file
Backup/restore Standard file backup
Multi-project Each project has own .db

Confidence Decay

Memories decay over time unless verified:

# Initial confidence: 1.0
# After 90 days without verification: ~0.5

memories = memory.recall(
    entity="my-project",
    include_decay=True,
    half_life_days=90
)

# Verify to reset decay
memory.verify(memory_id=123)

Use Cases

Progress Tracking

previous = memory.recall(entity=task.id, attribute="progress")
if previous:
    start_from = previous[0]["value"]  # Resume

Error Pattern Learning

similar = memory.search(error.message)
if similar:
    fix = similar[0]["value"]  # Apply known fix

User Preferences

verbosity = memory.set_preference("output", "verbosity")

Best Practices

DO

  • ✅ Store semantic information
  • ✅ Use consistent entity names
  • ✅ Set appropriate confidence
  • ✅ Verify memories that are still accurate

DON’T

  • ❌ Store large binary data
  • ❌ Store sensitive credentials
  • ❌ Forget to clean up stale memories

Next Steps


← Back to Concepts

Back to top

8me Showcase - AI Agent Orchestration Learning Platform

This site uses Just the Docs, a documentation theme for Jekyll.