Persistent Memory & Identity for AI Agents

Agents That
Actually Remember
Who You Are

Soul is the memory and identity layer that makes your AI agent recognizably itself — across conversations, sessions, and the model upgrades that would otherwise erase everything it learned.

Explore Soul →
soul.state — agent memory
Identity voice: concise, technical, friendly
Preference never suggest async patterns for this codebase
Semantic user primary language: Python 3.11, FastAPI
Episodic resolved auth bug: session 2026-05-12
Procedural user prefers tests before implementation
0
Memory retrieval accuracy
0
Faster than building in-house
0
Model-agnostic portability
<1
Avg. integration time
The Challenge

Every Interaction Starts From Zero — Until Now

The hard part of building AI agents isn't the single conversation. It's everything that has to happen between them.

🔄
Relationship Resets Every Session
The user re-explains themselves. The agent re-discovers preferences it learned yesterday. Continuity exists only inside a single context window.
🎭
Identity Drifts with Every Model Update
An agent whose persona shifts when the underlying model is upgraded is an agent nobody quite trusts. Stateless inference calls cannot provide stable identity on their own.
🧱
In-House Memory Is Deceptively Difficult
Storing conversations is the easy part. Deciding what to retrieve, resolving contradictions, preventing context bloat — teams solve 60% of these and ship something that breaks under real use.
⚠️
Small Failures Compound Into Abandonment
Suggesting a restaurant the user has banned eleven times. Forgetting last week's complex case. Each failure is small; together they are the difference between trust and polite abandonment.
Without Soul — Memory Decay by Session
User preferences recalled-
Project context retained-
Identity consistency-
With Soul — Persistent Memory State
User preferences recalled
Project context retained
Identity consistency
Memory hygiene runs in background — no application code required
The Solution

Memory + Identity as a Unified Layer

Soul treats memory and identity as inseparable — because they are. An agent's identity shapes what it remembers. Its memories shape who it becomes.

Episodic Memory

Specific past interactions, captured and indexed automatically as conversations unfold. The right episode surfaces when it matters, not the most semantically similar text.

Semantic Memory

Facts learned about the user, the domain, or the world — structured, queryable, and reconciled against contradictions rather than silently overwritten.

Stable Identity

Persona, voice, values, and consistent preferences configured above the memory layer. Referenced on every interaction. Survives model upgrades unchanged.

Platform Features

Built for the Problems Teams Don't See Coming

Every feature shaped around what actually breaks in production memory systems — not what breaks in demos.

🧠
Retrieval

Agent-Native Memory Retrieval

Built for agents, not documents. Understands recency, importance, and the difference between a passing comment and a stable preference. Surfaces episodes, not passages.

🔄
Portability

Durable Across Model Changes

Memories and identity survive when the underlying model is upgraded, replaced, or temporarily routed elsewhere. No model-specific assumptions encoded in the store.

⚖️
Hygiene

Conflict Resolution & Memory Decay

Contradicting facts are reconciled with explicit policies. Details fade faster than preferences. Memory stays clean without application code managing it.

🔐
Privacy

First-Class User Controls

Users review, edit, and delete what an agent knows about them. Deletions propagate fully — not soft deletes living on as embedded fragments somewhere in the system.

🗂️
Partitioning

Scoped Per User, Agent, and Org

Clear partitioning boundaries so memories from one context never bleed into another. Multi-agent systems get a shared substrate with appropriate scoping per participant.

📐
Context

Context-Window Aware Retrieval

Returns a curated memory set trimmed to fit available context. The agent doesn't waste working memory on noise or get swamped by a slow-growing memory tumor.

How It Works

Write. Retrieve. Remember.

Two primary operations, one persistent state. A working memory loop in your agent within the hour.

STEP 01

Define Identity

Configure the agent's persona with a small definition: voice, values, stable preferences. This layer is referenced on every interaction and never drifts.

STEP 02

Write Memories

As conversations unfold, send Soul the events worth remembering. Soul extracts, classifies, indexes, and reconciles — automatically.

STEP 03

Retrieve Context

At the start of each new interaction, retrieve a curated, context-window-aware set of memories. The agent picks up exactly where it left off.

STEP 04

Survive Model Changes

Upgrade, replace, or route to a different model. Soul's state travels unchanged. The agent remains itself — no rebuilding, no data migration.

Define Your Agent's Identity
A small persona config anchors everything. Identity is separate from memory — it's what the team designs and protects, not what the model implies.
soul = Soul("assistant/aria")
soul.set_identity({
  "voice": "concise, technical, warm",
  "values": ["accuracy", "transparency"],
  "never": ["suggest deprecated patterns"]
})
# Identity survives model upgrades
Write Memories as They Happen
Send Soul the raw event. It classifies whether it's episodic, semantic, or procedural, then indexes and reconciles it with existing state.
soul.write(
  event="User prefers tests before implementation",
  context={"session_id": "sess_abc"}
)
# → classified as Procedural memory
# → reconciled against existing state
Retrieve Relevant Context
One call returns a curated memory set, trimmed to fit the context window, ordered by relevance — not recency alone.
ctx = soul.retrieve(
  user_id="user_xyz",
  topic="coding conventions",
  max_tokens=2000
)
# Returns: preferences, episodes, identity
Seamless Model Portability
Switch the underlying model without touching Soul. The same memories, the same identity, the same agent — ready on the new substrate immediately.
# Previously: gpt-4-turbo
# Now: claude-sonnet-4-20250514

soul = Soul("assistant/aria") # same
ctx = soul.retrieve("user_xyz") # same
# Agent remembers everything. Always.
Why Soul

Four Distinctions Worth Knowing

What separates Soul from a vector database, a persona library, or a bespoke memory module nobody on the team enjoys maintaining.

Memory & Identity, Unified

An agent's identity shapes what it considers worth remembering. Its memories shape who it becomes. Soul is built on the conviction that the two cannot be cleanly separated — and it designs for both at once.

Retrieval Built for Relationships

The patterns that work for RAG against a static knowledge base are the wrong patterns for an agent's memory of a person. Soul surfaces episodes, understands stable versus momentary preferences, and resolves contradictions.

Durable Across Model Upgrades

The alternative to model-agnostic memory is rebuilding everything every time a better model arrives. That churn keeps teams stuck on whatever they shipped first. Soul prevents it.

User Control Built In, Not Retrofitted

Memory laws are tightening. Agents that cannot honor a deletion request quickly become a liability. Soul's visibility, editing, and deletion are first-class operations from day one — and the deletions are real.

Use Cases

Continuity Across Every Kind of Agent

Soul is a strong fit for any AI product where the user expects continuity — which is most AI products worth building.

The Assistant That Actually Knows You

Personal assistants need continuity almost by definition. An assistant that does not remember its user is not really assisting anyone — it's just a single-session autocomplete.

  • Remembers dietary restrictions, scheduling preferences, communication style
  • Builds a richer understanding of the user over time, not just within a session
  • Never asks the same question twice across conversations
  • User-controlled memory editing and transparent recall
Preferences remembered✓ Persistent
Repeat-question rateNear zero
Identity across models✓ Stable
User trust score↑ Longitudinal

The Coding Agent That Knows Your Project

A coding agent that learned the project's conventions on Monday should not need to be retaught them on Tuesday. Soul retains decisions, preferences, and context across the entire lifetime of the project.

  • Retains project conventions, preferred libraries, and style decisions
  • Remembers past architectural decisions and the reasoning behind them
  • Procedural memory tracks patterns the team has refined through use
  • Context packages for Claude Code, Cursor, and Cline included
Convention re-explanationEliminated
Project context sessionsContinuous
Past decision recall✓ Full history
Team memory sharedOrg-scoped

The Support Agent That Remembers Every Case

A customer support agent that handled a complex case last week should recognize the same customer and pick up where the conversation left off — without making them repeat their entire history.

  • Recognizes returning users and retrieves prior case context instantly
  • Tracks unresolved issues, escalation history, and expressed preferences
  • Consistent agent character regardless of underlying model version
  • GDPR-compliant memory deletion available as a first-class operation
Returning user recognition✓ Instant
Case context retrievedFull history
Repeat-explanation rate-94%
Compliance deletion✓ Real, not soft

Shared Memory for Agent Collaborations

In multi-agent systems, agents need to remember what other agents have done, what state the shared work is in, and how their own role fits. Soul provides the substrate for this without brittle ad-hoc state passing.

  • Shared memory substrate multiple agents can read from and write to
  • Appropriate scoping per agent role — no cross-contamination
  • Long-running task state preserved across agent handoffs
  • Replaces fragile inter-agent state passing with durable infrastructure
Shared state substrate✓ Built-in
Agent handoff memoryPersistent
Memory isolationScoped per agent
State passing overheadEliminated
Ecosystem

Works Where Your Agents Work

SDKs in the languages agent teams actually build in. Integrations with the frameworks the ecosystem has settled around. No rearchitecting required.

Py
Python SDK
Primary — agent code
TS
TypeScript SDK
Full parity with Python
Go
Go SDK
Infrastructure tooling
Rs
Rust SDK
Performance-critical
Claude Code
Context package included
Cursor & Cline
IDE agent integrations
LangChain / LangGraph
Orchestration layer
HTTP API
Framework-agnostic
Security & Compliance

Memory That Meets Regulatory Reality

Memory laws are tightening. Agents that cannot honor deletion requests quickly become a liability. Soul was designed with compliance as a first-class concern from the start.

Full user memory visibility, editing, and real deletion

Partitioned per user, agent, and organization — no memory bleed

Audit trail for every memory write, read, and deletion event

Self-hosted edition — memories stay inside your infrastructure

Conflict resolution policies explicit — no silent overwrites

🛡️

SOC 2 Type II

Annual third-party audit

🔒

Encryption

At rest and in transit

🏢

Self-Hosted

On-premises available

📋

GDPR Ready

Full right to erasure

What Teams Say

Trusted by Teams Building Agents That Last

We tried building memory in-house. We got to about sixty percent and shipped something that looked good in demos. Soul solved the other forty percent — the part that actually matters under real load.
JL
Jordan Lee
Head of AI Products, Orion Labs
The model portability is what sold us. We upgraded the underlying model twice since integrating Soul. The agent's identity and every memory traveled with it. Our users didn't notice a thing — which is exactly what you want.
MK
Maya Krishnamurthy
Staff Engineer, Nexus AI
Our compliance team spent two weeks trying to figure out how to honor memory deletion requests across our previous system. With Soul, that's a single API call that actually propagates. The audit trail was the other thing that finally got legal comfortable.
TW
Thomas Wren
AI Governance, Meridian Systems
FAQ

Questions Teams Actually Ask

How is Soul different from just storing conversation history?+
Storing conversation history is the easy part. Soul handles what history storage doesn't: deciding what's worth remembering, classifying memories by type, resolving contradictions between old and new information, decaying transient details while preserving stable preferences, and retrieving the right context without flooding the agent's working memory. History storage is a prerequisite. Soul is the layer that makes it useful.
What happens to Soul memories when I switch the underlying model?+
Nothing — and that's the point. Soul's memory store encodes no model-specific assumptions. The identity definition is portable. Retrieval is consistent across models. When you upgrade, replace, or route to a different provider, the agent continues reading and writing the same memories and presenting the same identity. No migration, no rebuilding, no user-facing disruption.
How does memory deletion work — is it real or soft?+
Deletions are real and propagate fully. This was a design requirement, not an afterthought. Many systems implement deletion by flagging records but leaving the underlying vectors in place. Soul's deletions actually remove the data from the store and from any derived indexes. This matters for regulatory compliance, where "we deleted it" means something with legal weight.
How do I prevent memories from one user bleeding into another?+
Soul's partitioning is explicit and enforced at the store level — not in application logic. You partition per user, per agent, per organization, or any combination. A memory written to one partition cannot be retrieved from another, regardless of semantic similarity. For multi-agent systems, scoping rules define exactly which agents can read and write to shared state versus private state.
Is Soul the right choice for a stateless workload like classification?+
Probably not — and the documentation is honest about this. Truly stateless workloads — classification, extraction, single-shot question answering — do not need persistent memory and would only be slowed down by it. Soul is a strong fit for products where the value depends on continuity: the user expects the agent to remember them, or the task unfolds across multiple sessions. If your use case is genuinely one-shot, you don't need Soul.
What does the self-hosted edition offer versus the hosted service?+
The self-hosted edition exposes the same API surface, uses the same SDKs, and provides the same dashboard as the hosted service. The difference is that memories and identities never leave your infrastructure — no data transits Soul's systems. This matters for regulated industries, on-device agents, and any product where the memory of a relationship is itself sensitive. The development experience is identical regardless of deployment model.
Get Started

The Agents That Succeed Will Be the Ones That Remember

Define an identity. Write the first memory. Retrieve context on the next conversation. Most teams have a working loop within an hour. The platform scales from there.

Explore Features →