Skip to Content
MarshalMemory

Memory

Durable facts agents and operators share across sessions—ownership, preferences, policies, and incident history.

Marketing: exemplar.dev/marshal/memory .

When to use it

Keep ownership and dependency facts out of one-off prompts. Agents recall the same map operators see instead of rediscovering the estate every turn.

Where in Console

Manage and inspect memory entities in the Marshal console after you enable connectors (Getting started). Pair with Context management for live per-turn context.

Use from SDK and CLI

Scoped memory CRUD and recall via the SDK (harness.memory(...)) or exemplar memory CLI. At least one scope is required (user_id / --user-id, agent, session, or app).

Search modes: hybrid (default), semantic, or keyword.
Formats: json, json_compact, markdown (default for recall), or toon.

from exemplar_harness import Harness memory = Harness.from_env().memory( user_id="user-123", session_id="chat-abc", app_id="my-app" ) memory.add("User prefers bullet-point answers.", memory_type="preference") context = memory.recall("how should I format answers?", format="markdown") hits = memory.search("formatting preferences", top_k=5, search_mode="hybrid")
exemplar memory add "User prefers bullet points" --user-id u1 --type preference exemplar memory search "formatting" --user-id u1 --mode hybrid --format markdown exemplar memory recall "how should I format answers?" --user-id u1 --format markdown

Full CRUD: SDK client usage · CLI. Agents can also call memory_tool over MCP — Tools & MCP.

Framework / SDK examples

Wire recall into the agent loop with framework helpers (or the generic MemoryHook). Seed memory once, then recall before each turn.

Generic hook (any runtime)

from exemplar_harness import Harness from exemplar_harness.integrations.memory import MemoryHook harness = Harness.from_env() memory = harness.memory(user_id="user-123", session_id="chat-abc", app_id="my-app") hook = MemoryHook(memory, recall_top_k=5, auto_add=False) user_input = "What do you know about me?" recall = hook.before_turn(user_input) # prepend to system prompt # ... run your LLM / agent ... hook.after_turn(user_input, assistant_output) # writes only if auto_add=True

Agno — pre / post hooks

pip install "exemplar-harness-sdk[agno]"
from agno.agent import Agent from agno.models.openai import OpenAIChat from exemplar_harness import Harness from exemplar_harness.integrations.memory.agno import ( make_agno_memory_helper, harness_agno_memory_hooks, ) harness = Harness.from_env() mem = make_agno_memory_helper( harness, user_id="user-123", session_id="sess-abc", app_id="my-app" ) pre, post = harness_agno_memory_hooks(mem) agent = Agent( name="support-bot", model=OpenAIChat(id="gpt-4o-mini"), pre_hooks=[pre], post_hooks=[post], instructions=["Answer in one or two concise sentences."], ) agent.run("What do you know about my formatting preferences?")

LangChain — callback recall

pip install "exemplar-harness-sdk[langchain]"
from langchain_core.messages import HumanMessage, SystemMessage from langchain_openai import ChatOpenAI from exemplar_harness import Harness from exemplar_harness.integrations.memory.langchain import make_langchain_memory_handler harness = Harness.from_env() handler = make_langchain_memory_handler( harness, user_id="user-123", session_id="sess-abc", recall_top_k=3, ) question = "What do you know about my formatting preferences?" recall = handler.recall_for(question) llm = ChatOpenAI(model="gpt-4o-mini") messages = [] if recall: messages.append(SystemMessage(content=recall)) messages.append(HumanMessage(content=question)) llm.invoke(messages, config={"callbacks": [handler]})

OpenAI SDK — recall helper

pip install "exemplar-harness-sdk[openai]"
from openai import OpenAI from exemplar_harness import Harness from exemplar_harness.integrations.memory.openai import ( make_openai_memory_helper, sdk_chat_completion_with_memory, ) harness = Harness.from_env() helper = make_openai_memory_helper( harness, user_id="user-123", session_id="sess-abc", recall_top_k=3 ) client = OpenAI() sdk_chat_completion_with_memory( helper, client, model="gpt-4o-mini", messages=[{"role": "user", "content": "What do you know about my formatting preferences?"}], )

TypeScript — recall into your agent prompt

import { Harness } from "@exemplar-dev/exemplar-harness-typescript-sdk"; const harness = Harness.fromEnv({ agentId: "support-bot" }); const memory = harness.memory({ userId: "user-123", sessionId: "sess-abc", appId: "my-app", }); await memory.add("User prefers bullet-point answers.", { memoryType: "preference" }); const context = await memory.recall("how should I format answers?", { format: "markdown", searchMode: "hybrid", }); // Prepend `context` to your system prompt / agent instructions, then run the model.

More framework demos (Anthropic, Google ADK, Google GenAI, LiteLLM): Python SDK live memory demos  · runnable sample: platform/memory.py · catalog Live SDK examples.

Last updated on