Migrating a large amount of data? Chat with us and we’ll help you plan it.
What is COGX?
COGX (the Cognee eXchange format) is a common shape that all memory imports are translated into before they enter Cognee. Instead of writing one importer for every memory tool, Cognee defines a single intermediate format and a single loader:cognee.export() writes, so the same
format powers backup, restore, and Cognee-to-Cognee migration. For a full
breakdown of the format and its record kinds, see
COGX Exchange Format.
You never construct COGX records by hand. You hand a source object to
cognee.remember() and it does the rest:
Quickstart: import from Mem0
This script uses a small inline sample in the exact shape Mem0 returns, so you can run it without a Mem0 account. Swap in real data using the patterns at the bottom of this page.Requires
LLM_API_KEY to be set (in .env or your environment) — both the
import and recall() use the LLM.migrate_from_mem0.py
Mem0Source, pass it to
cognee.remember(), then query with cognee.recall(). Your Mem0 memories are
now a queryable Cognee knowledge graph.
Import modes
Every source accepts amode argument that controls how much work Cognee does
on import. Pick it based on whether your source already has an extracted graph
and how much you want to spend on LLM calls.
| Mode | What it does | When to use it |
|---|---|---|
re-derive | Ingests the raw content and runs Cognee’s own extraction (cognify). The source’s own graph (if any) is ignored. | You want the richest graph and don’t mind the LLM cost. Default for Mem0 and Letta. |
preserve | Maps the source’s already-extracted entities and facts straight into the graph with zero LLM calls. Raw content is stored but not re-processed. | Your source already has a good graph, or you want a fast, free, deterministic import. Default for COGX archives. |
hybrid | Keeps the source’s graph and re-cognifies the raw content. | Your source has both verbatim content and a derived graph (e.g. Zep/Graphiti) and you want the best of both. Default for Zep/Graphiti. |
re-derive mode for Mem0 imports when you want Cognee to build a knowledge
graph from those memories.
Other sources you can import from
Every source has the same interface — construct it from a file path (or in-memory data) and pass it tocognee.remember().
Letta / MemGPT (.af agent files)
Letta / MemGPT (.af agent files)
LettaSource reads a Letta Agent File (.af, a JSON serialization of one
or more agents) and imports:- core memory blocks → memory blocks in the graph
- message history → one conversation episode per agent
- archival memory → one document per passage
Zep / Graphiti (graph exports)
Zep / Graphiti (graph exports)
ZepSource reads a JSON export of a Zep or Graphiti knowledge graph and
imports:- episodes (verbatim ingested content)
- entity nodes
- relation edges (“facts”), including their bi-temporal
valid_at/invalid_atvalidity windows
hybrid mode because Zep/Graphiti keep both verbatim episodes
and a derived graph.Another Cognee instance (COGX archive)
Another Cognee instance (COGX archive)
COGXArchiveSource re-imports an archive produced by cognee.export(..., format="cogx"). This is the restore half of backup/restore and the receiving
end of Cognee-to-Cognee migration. It defaults to preserve mode (zero-LLM),
because a Cognee archive already carries a fully extracted graph.Export: Cognee → COGX
Migration runs both ways.cognee.export() writes a dataset’s graph to a
portable COGX archive that you can back up, move to another Cognee instance, or
re-import later with COGXArchiveSource:
Using real data
The Mem0 example above uses an inline sample. Here’s how to point any source at real data. From a provider’s client (live API). Fetch with the provider’s own SDK and pass the response straight in — sources accept already-parsed Python lists and dicts, not just file paths:Next steps
remember()
How import and ingestion work under the hood
recall()
Query your migrated memory
COGX Exchange Format
The portable format behind every import and export
Configuration
Configure LLM, embedding, and storage backends