FishMem

Move from mem0 without a blind cutover.

Map familiar memory operations, preserve user and agent scopes, and validate real traces in a staging project. FishMem documents semantic differences instead of presenting migration as a drop-in rename.

  1. 01InventoryRecord every endpoint, scope field, filter, and inference assumption in use.
  2. 02ReplayRun representative writes and recalls in an isolated FishMem project.
  3. 03Cut overMove traffic only after data, latency, errors, and deletion behavior pass.
  • 01add/search/get/list
  • 02update/delete/history
  • 03user/agent/run scopes
  • 04staged validation

Compatibility is an endpoint mapping exercise; a safe migration also tests write semantics, scope, inference, filters, and recall quality.

Start from calls your product actually makes.

Inventory the deployed client version, payload shapes, implicit defaults, metadata, filters, and batch behavior. Map those to FishMem resources before changing an import or base URL.

  • Keep stable external user, agent, and run identifiers where their meaning matches.
  • Choose infer=false for records already distilled by your application.
  • Treat asynchronous inferred adds as durable events, not synchronous records.

Compare persisted state and downstream recall.

Replay a bounded sample of real, redacted traces. Inspect stored records, history, event completion, result ordering, and application behavior—not only whether both APIs return 200.

  • Use deterministic idempotency keys during replay.
  • Grade recall with the same downstream question and answer criteria.
  • Verify delete and account cleanup paths before production traffic.

Keep rollback possible until evidence is complete.

Use a staging project and a defined observation window. Export the source system, preserve migration provenance, and keep the old read path available until FishMem’s stored state and live retrieval meet your acceptance criteria.

  • Record migration batch IDs and source identifiers in metadata.
  • Monitor failures, event retries, credit usage, and search traces.
  • Cut over by cohort or workspace instead of rewriting every tenant at once.

Start with one concrete request.

await fishmem.memories.add(
  {
    content: "Alex prefers TypeScript examples.",
    user_id: "alex",
    infer: false,
    metadata: { migrated_from: "legacy-memory" }
  },
  { idempotencyKey: "migration-alex-pref-v1" }
);

const recall = await fishmem.memories.search({
  query: "How should examples be written?",
  user_id: "alex",
  top_k: 5
});

What this surface includes

  • A field-by-field migration guide for the common memory CRUD and search surface.
  • Explicit notes for inference, events, filters, pagination, idempotency, and scope.
  • A staging-first validation and rollback checklist.

Explicit boundary

  • FishMem is not affiliated with mem0 and does not claim universal drop-in compatibility.
  • Provider prompts and retrieval systems differ, so identical inputs can produce different records and rankings.
  • No public benchmark substitutes for validation on your production workload.