Migrating from Zep

Key differences and migration steps for teams moving from Zep to the Unison brain.

I'm using Zep. What changes when I switch to Unison?

Both Zep and Unison provide long-term memory for AI agents, but their architectures differ. Here's what to expect.

Key differences

ZepUnison
Memory modelSession-centric (facts extracted per session)Path-based pages + bitemporal entity facts
Retrievalmemory.search(session_id, query)GET /v1/brain/context?q=&mode=auto
Team / shared memoryLimitedNative: /workspace/ paths visible to all members
Temporal modelSession historyBitemporal — full history, current facts win
IngestAppend messages to a sessionPOST conversation (async) or PUT page (sync)
ScopingSession IDActor ID + path prefix

Migration steps

1. Export your Zep sessions.

Use the Zep SDK to fetch all sessions and their message history.

2. Provision a Unison account.

curl -X POST https://brain.unisonlabs.ai/v1/auth/provision \
  -H 'content-type: application/json' \
  -d '{"email": "you@example.com"}'

3. Ingest sessions as conversations.

For each Zep session, re-ingest the message history into Unison. Map Zep's session_id to a Unison actor ID and a sourceRef:

curl -X POST https://brain.unisonlabs.ai/v1/brain/ingest \
  -H "Authorization: Bearer $UNISON_TOKEN" \
  -H "X-Unison-Actor: ${USER_ID}" \
  -H 'content-type: application/json' \
  -d "{\"items\":[{\"type\":\"conversation\",\"turns\":[...],\"sourceRef\":\"zep-session-${SESSION_ID}\",\"visibility\":\"private\"}]}"

Unison will extract entities and facts from the historical messages, building up the same knowledge the brain would have accumulated from live use.

4. Update your recall calls.

Replace memory.search(session_id, query) with:

GET /v1/brain/context?q={query}
# + header X-Unison-Actor: {user_id}

5. Update your add calls.

Instead of appending to a Zep session, POST new conversations or PUT individual pages as facts accumulate.

For a deeper comparison of capabilities, see the full Zep comparison.

On this page