Skip to content

Memory

Memory gives agents persistence across turns and sessions. A2E defines three tiers — working (current-turn context), episodic (cross-session experience), and semantic (long-term knowledge) — so agents can remember what they just did, learn from past sessions, and recall learned facts, all through a single standard protocol.

Overview

The memory capability provides a 3-tier memory system (working, episodic, semantic) with init, store, retrieve, and forget operations. Agents initialize a session to obtain a memory_id, then use it for all subsequent operations. Memory persists context across turns, recalls relevant information, and maintains knowledge bases.

Memory Tiers

TierScopePersistenceUse Case
workingCurrent sessionIn-memory, LRU evictionScratch pad, current task state
episodicPer-agentAcross sessionsConversation history, task episodes
semanticSharedAcross agentsShared knowledge base, facts

Protocol Messages (8 types)

Type StringModelDirection
memory/init/reqMemoryInitRequestAgent → Host
memory/init/respMemoryInitResponseHost → Agent
memory/store/reqMemoryStoreRequestAgent → Host
memory/store/respMemoryStoreResponseHost → Agent
memory/retrieve/reqMemoryRetrieveRequestAgent → Host
memory/retrieve/respMemoryRetrieveResponseHost → Agent
memory/forget/reqMemoryForgetRequestAgent → Host
memory/forget/respMemoryForgetResponseHost → Agent

MemoryEntry

FieldTypeDescription
keydictStructured key (hash or dict match)
contentdictThe stored value
tierMemoryTierworking, episodic, or semantic
tagslist[str]Classification tags for search
sourcestrWho stored this entry
scorefloatRelevance score
ttlfloat | NoneTime-to-live in seconds
timestampsdictCreated/updated/accessed timestamps

MemoryStoreRequest / Response

python
# Request: batch store
MemoryStoreRequest(entries: list[MemoryEntry])

# Response: results
MemoryStoreResponse(stored: list, errors: list)

MemoryRetrieveRequest / Response

python
# Request: flexible retrieval
MemoryRetrieveRequest(
    keys=None,          # Exact key match
    query=None,         # Similarity search
    tags=None,          # Tag filter
    tier=None,          # Tier filter
    limit=10,           # Max results
    min_score=0.0       # Minimum relevance score
)

# Response
MemoryRetrieveResponse(entries: list[MemoryEntry], total: int)

MemoryForgetRequest / Response

python
# Request: delete by criteria
MemoryForgetRequest(keys=None, tags=None, tier=None)

# Response
MemoryForgetResponse(deleted: int)

MemoryPlugin ABC

python
class MemoryPlugin(A2EPlugin):
    @abstractmethod
    def on_init(self, namespace: str, scope: dict, metadata: Optional[dict] = None):
        """Returns (memory_id, backend_object) — allocates a new memory session"""

    @abstractmethod
    def on_store(self, memory, entries) -> tuple[list, list]:
        """Returns (stored_keys, errors)"""

    @abstractmethod
    def on_retrieve(self, req: MemoryRetrieveRequest) -> list[MemoryEntry]:
        """Returns matched entries"""

    @abstractmethod
    def on_forget(self, req: MemoryForgetRequest) -> int:
        """Returns count of deleted entries"""

MemoryAPI (Client)

python
from a2e.caps.memory.client import MemoryAPI

memory = MemoryAPI(client)

# Step 1: INIT — establish a memory session
resp = memory.init(namespace="my-agent", scope={"agent": "assistant"}, metadata={"version": "1.0"})
print(f"memory_id: {memory.memory_id}")

# Batch store
stored, errors = memory.store([
    MemoryEntry(key={"id": "fact1"}, content={"text": "Earth orbits the Sun"}, tier="semantic"),
    MemoryEntry(key={"id": "task1"}, content={"step": 3}, tier="working")
])

# Flexible retrieval
entries = memory.retrieve(
    query="solar system",   # Similarity search
    tier="semantic",
    limit=5,
    min_score=0.3
)

# Forget
deleted = memory.forget(tags=["temp"], tier="working")

# Convenience helpers
memory.remember("user_name", "Alice", tier="working", tags=["identity"])
name = memory.recall("user_name")  # Returns content or None

Convenience Methods

MethodDescription
init(namespace, scope, metadata)Initialize a memory session — must be called first
remember(key, value, tier, tags, ttl, score)Single key-value store
recall(key, default=None)Single key retrieval

A2E Protocol v1.0 — Released under the MIT License.