It is 9 a.m. in Bengaluru. Priya opens her laptop and asks her coding agent to add retry handling to the payments service.
The agent suggests a message queue. Confidently. It is a reasonable idea.
It is also the idea the team rejected three weeks ago, in a long session that Marcus had from Austin while Priya was asleep. His agent knew why: the queue broke ordering guarantees for refunds. Priya's agent has never heard of it. So she spends her morning building it, and Marcus finds out on Thursday.
Then it gets worse. Tomás, who wrote the original payments code, gave notice last month. His last day is Friday. Half of what he knows was never written down. Some of it lives in his agent's memory, on his laptop, and leaves with him.
Every one of these agents has memory. The team has none.
That gap is what this post is about. The open-source memory tools are good at making one agent remember one user or one conversation stream. Engineering teams have a different problem, the one Priya, Marcus and Tomás had: knowledge that belongs to the team, not to whoever happened to be in the chat. Time zones, distance and turnover are how teams normally work, and they are exactly where personal memory breaks.
The landscape: what agent memory tools do today
"Agent memory" now covers a crowded field. These are the tools I compared, and what each is built for.
Mem0 extracts candidate facts from each message pair and reconciles them with what it already stores. It has the largest ecosystem of the group and a managed cloud, which makes it the easiest way to add personalization to an app. Independent comparisons have reported weaker long-horizon retrieval than graph-based systems, so check current benchmarks yourself.
Zep / Graphiti writes a temporal knowledge graph in which every fact carries a validity window. It is strong when the question is "what was true, and when did it change?"
Letta (formerly MemGPT) gives the agent tiered memory that the agent edits itself through tool calls, plus background "sleep-time" processing. It is designed around a single autonomous agent managing its own state.
OpenViking, from ByteDance's Volcano Engine team, is a context database that organizes memory, resources and skills as a filesystem (viking://). It loads context in tiers (abstract, overview, full detail) to cut token use.
Each makes a different bet on what "remembering" means: extracted facts, a temporal graph, self-edited tiers, or a filesystem. All four are excellent at their bet. But the unit they organize around is the user, the session or the agent.
Three questions that separate them
- Whose knowledge is it? One user, one agent, or the whole team?
- What is it made of? Chat-derived facts only, or also your specs, requirements, runbooks and code?
- Can you trust it? When two memories conflict, or a decision gets reversed, who finds out?
The comparison
| Dimension | Mem0 | Zep / Graphiti | Letta | OpenViking | ContextHarbor |
|---|---|---|---|---|---|
| Primary unit | User / agent | User / session graph | Single agent | Agent workspace | Team and project |
| Memory model | Extracted facts | Temporal graph | Self-edited tiers | Filesystem hierarchy | Durable memory plus source-backed docs plus code graph |
| Knowledge sources | Conversations | Conversations and business data | Agent state | Memory, resources, skills | Documents, requirements, transcripts, code, memories, prompts |
| Team sharing | Add-on, managed tier | Possible, not the design center | Agent-scoped | Not the focus | Native: projects with RBAC and per-project access keys |
| Code awareness | No | No | No | Limited | Code graph with blast-radius (code_impact) |
| Session handoff | Manual | No | Within one agent | No | Immutable, verified handoffs between sessions and people |
| Provenance | Reconciliation | Validity windows | Agent decides | Consolidation | Source chain, timeline and conflict checks per memory |
| Deployment | SDK plus infra, or cloud | Service plus graph DB | Agent runtime | Self-hosted database | Self-hosted Docker or managed tenant, remote MCP |
| License | Open source | Open source | Open source | Open source | Commercial |
| Best for | Personal chatbots | Fact-history apps | Autonomous single agents | Token-efficient agent context | Engineering teams running several agents |
What team knowledge actually needs
Memory that works for a team has properties a personal memory layer does not need.
Scoping. A team's knowledge is split by project, and access is split by role. ContextHarbor namespaces everything per project, with admin, manager and viewer roles and MCP API keys that can be limited to specific projects. Engineering, product and operations can share one platform without sharing everything with everyone.
Sources, not just recollections. Most of what a team knows was never said to an agent. It lives in specs, plans, meeting transcripts and runbooks. ContextHarbor indexes those with semantic search plus keyword boost, so exact terms such as an error code or class name rank properly, and it consolidates them into a hierarchy of domain and module briefs with citations.
Memory tied to that knowledge. Decisions, constraints and rejected approaches are captured per project, so the queue-based design that was already rejected stays rejected, for every agent and every engineer.
Handoffs. When a session ends, the agent stores a verified handoff. The next person, or the next agent in a different tool, starts from it instead of from zero.
Trust. Any memory can be traced through its source chain and checked for conflicts, and a timeline shows how it changed. A shared memory that quietly goes stale misleads everyone at once, so this matters more for teams than for individuals.
Code. ContextHarbor indexes a repository into a symbol and relationship graph. code_impact answers "what breaks if I change this?" with callers, dependent modules, related tests and linked requirements. A preference store cannot answer that.
Where ContextHarbor wins
- The team owns the knowledge, not the person. When someone leaves (Tomás), changes tools or starts a fresh session, nothing is lost. Individual memory silos disappear with their user.
- One source of truth across agents. Claude Code, Codex and Cursor all connect over remote MCP to the same project. You get one memory, not one per agent.
- Handoffs are a first-class feature. Work moves across time zones (Austin to Bengaluru) and between people and agents without a "let me re-explain the project" tax.
- Structured by project, not a flat bag of facts. Briefs by area, requirements lookup and planning context give an agent the right slice of knowledge instead of the top N similar snippets.
- Trustworthy by design. Provenance, timelines and conflict checks keep the shared memory honest.
- Docs, memory and code in one retrieval path. Competitors mostly cover conversational memory. ContextHarbor also covers the documents and the codebase the conversation is about.
- Private by default. Deploy on infrastructure you control, or use an isolated managed tenant. Project-scoped access means teams share what they intend to.
- Low adoption cost. A single prompt asks the agent to set up the harness: skill file,
AGENTS.mdblock and, for Claude Code, a memory-capture hook. There is no new agent runtime to adopt.
Where the others are the better choice
This is not a story where one tool wins everywhere.
- Building a consumer app that should remember its users? Mem0 or Zep is the more natural fit. ContextHarbor is not a personalization layer.
- Need a rigorous history of how facts changed over time? Zep's temporal graph is purpose-built for it.
- Building an autonomous agent that manages its own state? Letta's self-editing memory is designed for that.
- Want open source you can fork? All four are open source. ContextHarbor is a commercial product with a proprietary license.
How to choose
- One user, one app, personalization: start with Mem0 or Zep.
- One autonomous agent managing its own memory: look at Letta.
- Single-agent context engineering with tight token budgets: try OpenViking.
- A team of engineers, several agents, shared specs and code, and a need to keep it private and current: that is what ContextHarbor is for.
The question is not which tool has the best memory. It is whether the memory you are building belongs to a person or to a team.
Try it
Rewind to Priya's morning with a shared memory. Her agent starts from Marcus's handoff, sees that the queue was rejected and why, and proposes something that respects refund ordering. Tomás's last-week decisions are captured with their sources instead of walking out the door.
If your team has already caught two agents disagreeing about your own project, that is the problem ContextHarbor solves. See the ContextHarbor site or the code intelligence overview and request a trial.