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 store, retrieve, and forget operations. Agents use memory to persist context across turns, recall relevant information, and maintain 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 (6 types)

Type StringModelDirection
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_store(self, 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)

# 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
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.