Memory that survives the next prompt.
Turn durable conclusions into scoped records, preserve their history, and recall them with vector, keyword, temporal, and graph signals. FishMem makes the write path and the retrieval evidence inspectable.
- 01CaptureSubmit one distilled fact or an inference request with an idempotency key.
- 02CommitWrite the canonical record, history, scope, metadata, and journal event.
- 03RecallFuse semantic, lexical, temporal, and graph candidates under the same scope.
- 01user, agent, and run scopes
- 02verbatim or inferred writes
- 03bi-temporal validity
- 04history and feedback
Raw conversation is evidence. A memory is a deliberate, durable conclusion with scope, provenance, and a lifecycle.
Choose what becomes durable.
Use infer=false when your application already knows the exact record to keep. Use inference when a conversation needs refinement; Cloud returns a durable event receipt before the model work runs.
- Idempotency keys make retries safe and reject conflicting re-use.
- Inference failure never silently falls back to storing the raw conversation.
- Metadata can retain source links without turning derived records into the authority.
Retrieve the right fact, not the nearest paragraph.
Search combines complementary signals and can expose its trace. Filters, scope, score floors, ordering, and temporal state keep retrieval behavior explicit enough to debug in production.
- Vector and full-text candidates are fused instead of treated as interchangeable.
- Superseded facts retain their validity interval while current recall favors active state.
- Trace mode exposes candidate lists, fused scores, and selected records.
Correct memory without erasing the audit trail.
Get, update, delete, batch operations, feedback, entities, and history use one canonical contract across the hosted and self-hosted HTTP surfaces.
- Updates and invalidations are recorded as events.
- Entity deletion removes one structural user, agent, or run scope deliberately.
- Namespace export preserves authoritative state and marks projections for rebuild.
Start with one concrete request.
const event = await fishmem.memories.addAsync(
{
content: "Alex moved to Berlin and prefers dark mode.",
user_id: "alex",
metadata: { source: "profile-update" }
},
{ idempotencyKey: "alex-profile-2026-08" }
);
const result = await fishmem.events.wait(event.event_id);What this surface includes
- Canonical records, history, feedback, entities, events, and portable snapshots.
- Synchronous verbatim writes and durable asynchronous inference.
- The same public memory contract in Cloud and the open-source control-plane.
Explicit boundary
- FishMem does not claim that every transcript turn should become a memory.
- Derived profiles and indexes are replaceable projections, not the source of truth.
- Cloud model quality depends on the configured provider and your evaluation set.
