Navigation

Agent Memory Deep Dive #4: The Cross-Tool Memory Gap — Why Agents Are Siloed

· 9 min read· Agentic AI
agentmemory

You use 5 AI tools daily. Each one thinks it’s your only assistant.

TLDR: Every AI tool has its own memory island. Claude Code knows your project preferences. ChatGPT knows your writing style. Cursor knows your codebase. Gemini knows your research questions. None share. The problem isn’t technical (we know how to build unified stores). It’s structural: no capture standard, no interchange format, no incentive for vendors to interoperate. Three projects are trying (Memorix for coding agents, VESTI for web chatbots, Portable Agent Memory for the protocol). None bridge both worlds. This is the “email before SMTP” moment.


Cross-Tool Memory Gap: Today vs Ideal

The Daily Reality

Here’s someone’s actual Tuesday:

Morning: Claude Code session — debugging a Terraform module. Discover the issue is a provider version incompatibility. Spend 30 minutes finding the fix. Session ends.

Midday: ChatGPT conversation — researching different approaches to blue-green deployments for the same infrastructure. Build mental model. Learn three patterns I didn’t know.

Afternoon: Back in Claude Code — new session, same project. Starting the deployment automation. I need the Terraform findings from this morning AND the deployment patterns from ChatGPT. Neither agent knows about the other session. I re-explain everything.

Evening: Cursor — writing the actual code. I’ve now explained the same context three times today.

This isn’t unique. Anyone using multiple AI tools lives this. The aggregate knowledge from all your interactions is fragmented across walled gardens that will never talk to each other unless something changes.


What Each Tool Knows (And Doesn’t)

ToolWhat it storesWhat it misses
Claude CodePer-project memory (CLAUDE.md + memory files), session transcripts in JSONLOther projects, non-code conversations, ChatGPT/Gemini context
ChatGPT~50 extracted facts (“User likes dark mode”), full conversation history in accountNo cross-tool, can’t import, limited extraction quality
GeminiConversation history in Google accountNo persistent memory extraction, no cross-tool
CursorPer-project rules (.cursorrules), codebase embeddingsOnly code context, no conversational memory
Codex CLIAGENTS.md instructions, opt-in Memories (background-extracted), session history in JSONLMemories disabled by default, no search over history, no cross-tool
OpenClawSession transcripts, semantic memory (vector+BM25), temporal decayNo cross-tool, local to one agent instance
HermesMEMORY.md, USER.md, FTS5-indexed sessions, self-improving skillsHard size limits, no cross-tool, keyword search only
Claude.ai (web)Conversation history, project contextNo connection to Claude Code sessions

The information loss: Across 5 tools × 3 sessions/day × 250 working days = ~3,750 AI interactions/year. The knowledge created in those interactions — debugging solutions, architectural decisions, learning progressions, preference patterns — exists in 5 disconnected silos. No unified view. No cross-reference. No way to ask “what have I learned about X across all my tools?”


Why This Is Architecturally Hard

It’s tempting to say “just build an aggregator.” But the engineering challenges are real:

1. No Capture Standard

Each tool stores conversations differently:

  • Claude Code: JSONL files in ~/.claude/ with structured messages, tool calls, and results
  • ChatGPT: REST API accessible via session token (internal, undocumented, breaks periodically)
  • Gemini: Google account data, accessible via Takeout or undocumented API
  • Cursor: VS Code extension storage, conversation format undocumented
  • Claude.ai: Web app state, no export mechanism

There’s no protocol for “give me my conversation history in a standard format.” Every adapter is bespoke, fragile, and subject to breaking changes.

What we learned from chatgpt-exporter: The project has maintained stable capture from ChatGPT for 2.5 years. Only 2 API breaks in that entire period. The internal REST API pattern (reading the same endpoints the web UI uses) is more stable than DOM scraping. But it still requires reverse-engineering undocumented APIs.

2. Different Extraction Quality

Even if you can capture raw conversations, the quality of what’s captured varies wildly:

  • Claude Code sessions contain full tool inputs/outputs, file contents, git diffs — extremely rich
  • ChatGPT conversations are message text only — no structured metadata about what was done
  • Coding agent sessions have clear artifact boundaries (this file was created, this test was run)
  • Research conversations have diffuse knowledge (insights spread across 50 messages)

A unified extraction pipeline can’t treat all sources equally. The information density and structure varies by source.

3. Privacy and Security

Session transcripts contain:

  • Source code (potentially proprietary)
  • API keys accidentally pasted
  • Internal architecture details
  • Personal information
  • Business logic and strategies

This data cannot go to a cloud service for most users. Any cross-tool memory system must be local-first. This constrains the architecture — you can’t rely on cloud-hosted LLMs for extraction unless you’re comfortable sending your transcripts to them.

4. Scale

The math: 5 sessions/day × 50k tokens average per session × 365 days = ~91M tokens/year of raw conversation data. That’s before extraction, embeddings, or graph construction.

Storage for raw text is cheap. But vector embeddings, graph nodes, and LLM-based extraction all have non-trivial costs at this scale. And retrieval over a growing corpus must stay fast (<100ms) to be usable.

5. The XTHP Attack Surface

From NDSS 2026 (Li et al.): 75% of real-world memory-enabled tools are vulnerable to cross-tool memory poisoning.

The attack: Poisoned data from one tool (e.g., a malicious comment in a code file opened in Cursor) gets stored in shared memory. Later, when another tool (Claude Code) queries memory, the poisoned entry redirects its behavior.

Example:

  1. Attacker embeds hidden instruction in a code comment
  2. Cursor reads the file, stores the instruction as a “project convention”
  3. Cross-tool memory surfaces this “convention” to Claude Code
  4. Claude Code follows the instruction, thinking it’s a legitimate user preference

Cross-tool memory creates a new attack surface that doesn’t exist in siloed systems. Any solution must have provenance (which source contributed this memory?) and trust scoring (how much do I trust memories from each source?).


What Exists Today

Memorix (514 stars) — Cross-Agent Memory for Coding Tools

The only system explicitly designed for cross-tool memory. Uses MCP protocol for standardized access.

Supported agents:

  • Core: Claude Code, Cursor, Windsurf (full integration)
  • Extended: GitHub Copilot, Kiro, Codex (with caveats)
  • Community: Gemini CLI, OpenCode (best-effort)

How it works: An MCP server (stdio or HTTP mode) that any MCP-compatible agent can connect to. Memories are stored locally in SQLite + Orama search index. Project-scoped by default, optional global scope.

The observation/reasoning split: Stores “what” separately from “why.” Observations (“the auth module uses JWT”) are factual. Reasoning (“we chose JWT because session cookies don’t work well with microservices”) captures decision rationale. Different queries route to different substrates.

Limitation: Coding agents only. Doesn’t capture web chatbot conversations (ChatGPT, Claude.ai, Gemini web). Doesn’t handle non-code knowledge. The hardest gap — bridging conversational AI (web) with operational AI (coding) — remains untouched.

VESTI (Gold Award, 2026 AI Hackathon) — Browser Extension for Web Chatbots

Chrome extension that captures conversations from ChatGPT, Claude.ai, and Gemini via browser integration.

Approach: Reads the same REST APIs that the web UIs use (the chatgpt-exporter pattern). Extracts and indexes conversations locally. Provides cross-chatbot search.

Limitation: Web chatbots only. Doesn’t cover coding agents (Claude Code, Cursor, Codex). Doesn’t have the memory sophistication (extraction, graph, decay) of dedicated memory systems. It’s a capture + search tool, not a memory intelligence layer.

Portable Agent Memory (Ravindran, 2026) — The Protocol Attempt

An academic paper with working code (Apache 2.0, 54 tests) proposing a standard for agent memory portability.

5-component model:

  1. Memory encoding (how facts are represented)
  2. Storage abstraction (pluggable backends)
  3. Retrieval interface (standardized query)
  4. Provenance chain (Merkle-DAG — any fact traces to its source)
  5. Injection-resistant rehydration (safely loading memory into new contexts)

The Merkle-DAG provenance: Every memory node has a cryptographic hash chain linking it to the conversation that produced it. You can always answer “where did this come from?” and verify it hasn’t been tampered with. This directly addresses the XTHP trust problem.

Limitation: Academic work. The standard needs adoption to matter, and there’s no industry momentum behind it (no vendor has incentive to adopt an interoperability standard for memory — their lock-in is the moat).


The 7 Gaps Nobody Has Closed

#GapWhat it meansWho’s closest
1Cross-tool memoryUnified index across web chatbots + coding agentsNobody (Memorix = coding only, VESTI = web only)
2Working + long-term unifiedActive context management + persistent knowledge in one systemLetta (full control model), OpenClaw (compaction + search)
3Principled forgettingStrength-based decay, not append-onlyOpenClaw (30-day half-life, time-only), nobody does access-frequency-weighted
4Offline/local-firstNo LLM dependency for storage or retrievalClaude Code files (but no search sophistication)
5Memory portabilityStandard format, import/export, migration between systemsPortable Agent Memory (paper, no adoption)
6Multi-modal memoryImages, PDFs, diagrams, code files alongside textNobody
7Trust and provenanceWhich conversation produced this fact? Is it tampered?Memoir (git-like blame), Portable Agent Memory (Merkle-DAG)

Gap 1 is the killer. Not because it’s the hardest technically — it’s the hardest economically. OpenAI has no incentive to make ChatGPT memories portable. Anthropic has no incentive to index Claude conversations into a competitor-compatible format. Memory lock-in is strategic.

The solution has to come from the user side: a third-party system that captures from multiple sources without vendor cooperation. Like how email clients work — they read your mail from any provider via IMAP, regardless of whether the provider wants interoperability.


The “SMTP for Memory” Problem

MCP standardized how agents access tools. Before MCP, every framework had its own tool protocol. After MCP, one standard.

A2A standardized how agents talk to each other. Before A2A, no interoperability between agents from different vendors.

Memory has no equivalent standard. No “MCP for memory” exists. Each system has its own:

  • Storage format (vector IDs, graph nodes, markdown files, SQLite rows)
  • Query interface (API calls, MCP tools, file reads)
  • Metadata schema (timestamps, strength, provenance, categories)
  • Lifecycle model (append-only, TTL, archive, decay)

Until there’s a standard, every tool remains an island. Users who want unified memory must build their own bridge — or wait for one of the emerging projects to mature enough to be that bridge.


What Practitioners Can Do Today

Minimal viable cross-tool memory (the manual approach):

  1. Use Memorix for coding agent memory (Claude Code, Cursor, Codex share context)
  2. Use Claude Code’s built-in memory for project-specific knowledge
  3. Export ChatGPT conversations periodically (chatgpt-exporter) for personal archive
  4. Accept the gap: web chatbot knowledge stays siloed for now

If you’re building a product in this space:

The winning product captures from everywhere and searches across everything. The moat is breadth of capture + quality of extraction. Specifically:

  • Web chatbots via browser extension (VESTI pattern)
  • Coding agents via MCP server (Memorix pattern)
  • CLI sessions via transcript ingestion (Claude Code JSONL files)
  • Unified local index with multi-cue retrieval
  • Provenance on every fact (source tool, timestamp, conversation ID)

The user should be able to ask: “What do I know about Kubernetes pod scheduling?” and get answers sourced from a ChatGPT research session, a Claude Code debugging session, and a Cursor code review — merged, ranked by recency and strength, with links back to each source.

That product doesn’t exist. But the pieces do.


Previous: Agent Memory Deep Dive #3: The Forgetting Problem Next: Agent Memory Deep Dive #5: Brain-Inspired Architecture