Catalog PyPI
PACKAGE EXPLORERView in registry

agent-framework-memorysync

PyPI

MemorySync for Microsoft Agent Framework: a ContextProvider with budgeted instruction-layer recall, per-run identity, once-per-turn duplicate-proof capture, and fail-open everything.

agent-frameworkagentscontext-providerlong-term-memorymemorymemorysyncmicrosoft
Versions collected1
Direct dependencies2From release 1.1.0
Last observed20 Oct, 22:00 UTC

README

Version 1.1.0 documentation

agent-framework-memorysync

MemorySync for the Microsoft Agent Framework: agents that remember users across sessions — without ever stalling a run.

pip install agent-framework-memorysync

Quick start

from agent_framework import Agent
from agent_framework_memorysync import MemorySyncContextProvider

provider = MemorySyncContextProvider(
    api_key="ms_...",          # or MEMORYSYNC_API_KEY
    user_id="customer-42",     # required — who these memories belong to
    session_id="support",      # tags the facts from this conversation
)

agent = Agent(client=..., context_providers=[provider])
result = await agent.run("which seat should I book?")

Every run recalls relevant memories into the instructions layer under a hard budget, and after the run the user's messages are sent to MemorySync, which extracts the durable facts they contain — no extra code per turn. The agent's replies are not sent: assistant replies are not stored as memories.

Why this one

Mem0 (agent-framework-mem0, in-repo)Zep (zep-ms-agent-framework)MemorySync
Injection layer✗ fabricates a role="user" message✓ instructions✓ instructions
Recall latency budget✗ none✗ none✓ hard 1.2s default — a slow backend means an unenriched run, never a late one
Capture failure behaviour✗ after_run errors crash the agentswallowed✓ entirely fail-open, logged
Scope model✗ storage ≠ retrieval scopes — forget search_user_id and the agent is silently memorylesssingle✓ one user_id drives both — the bug cannot exist
Per-run identity✗ construction-only✗ construction-only (documented)✓ agent.run(..., options={"memorysync_user_id": ...}) or a user_id_resolver
Write dedup✗ re-adds every turn✗✓ deterministic idempotency seeds — a retried turn is recognised and not extracted twice
Tool-loop double-capture✗—✓ after_run_once_per_turn = True
Release statusbeta (1.0.0b…)0.2.1✓ stable 1.1.0
Python≥3.10✗ ≥3.11 only✓ ≥3.10 (matches the framework)

Semantics worth knowing

  • User messages are sent to fact extraction; only durable facts are stored. After each run, every user input message goes to MemorySync as plain text with role: "user" under the agent-framework::<session> session scope. The server extracts the durable facts it contains and stores only those, tagged with session_id: "agent-framework::<session>" — the same shared user memories as every other MemorySync surface. Filler such as "ok" or "thanks" yields none, and the message text itself is not stored. The agent's replies are not sent: assistant replies are not stored as memories.
  • The resolved run identity is pinned in the provider's session-state slice, so recall and capture can never diverge within a run — and the slice stays JSON-native, so AgentSession serialization keeps working.
  • expose_search_tool=True adds search_memory + save_memory tools via context.extend_tools.
  • Free-tier quota exhaustion is silent by design (adds accepted-without- storing, reads empty); evaluation keys surface strict 429s.

Configuration

ParameterDefaultMeaning
user_id— (required)End user the memories belong to
session_id"default"Session scope: the session_id (agent-framework::<session>) carried by the facts from this conversation
top_k5Memories considered per run
recall_timeout1.2Hard recall budget, seconds
min_prompt_chars8Skip recall for trivial prompts
context_templatebuilt-in{context} placeholder, brace-safe .replace rendering
captureTrueSend the run's user messages for fact extraction after each run
expose_search_toolFalseRegister memory tools on every run
user_id_resolverNoneCallable[[AgentSession], str] for dynamic identity

Development

pip install -e . agent-framework-core pytest pytest-asyncio "httpx>=0.25,<1"
python -m pytest tests -q     # 26 tests incl. a REAL Agent run (stub chat client)

License

MIT

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Versions 1

Collected releases
VersionPublishedDirect dependenciesOpen version
1.1.01 Oct 20262

Package advisories

0
No matching advisories collected

This describes our collected data; it is not a security assessment.

Repository

PENDING
memorysyncio/memorysync-plugins

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 22:00 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package:edeb4395651f2be7d144e279849811db83c22cd9b54a2c4ab181b4691d611eb1