A memory contract you can trace end to end.
Start with TypeScript, Python, HTTP, or the local Desktop bridge. Exact resource shapes, errors, pagination, idempotency, events, and runtime support are documented before framework glue.
- 01CallUse a typed resource method or the versioned REST endpoint.
- 02ObserveRetain request IDs, event receipts, typed errors, and operation state.
- 03EvaluateReplay representative traces against the deployment you intend to ship.
- 01TypeScript + Python
- 02OpenAPI 3.1
- 03Node, edge, and Desktop
- 04cursor pagination
An integration should adapt your agent loop to one memory contract, not reimplement storage, retries, or scope semantics inside a framework callback.
Use resources, not hand-built fetch wrappers.
The official clients expose memories, documents, entities, events, operations, and pagination. Runtime-specific behavior is separated so edge bundles never inherit Node-only Desktop code.
- TypeScript supports ESM and CommonJS plus a separate Desktop subpath.
- Python follows the same snake-case wire contract and idempotency semantics.
- Pack tests install the generated artifacts in clean runtimes before release.
Meet the agent where its state changes.
Guides cover OpenAI Agents, Vercel AI SDK, Cloudflare Agents SDK, and Mastra. Each shows where to recall, where to write, and how to keep user scope derived from authenticated context.
- Framework examples keep durable memory outside transient message arrays.
- Async inference uses event receipts instead of holding an agent turn open.
- Document RAG remains a separate source surface from profile memory.
Debug the persisted path.
A successful socket connection or HTTP status is not enough. Request logs, search traces, event state, source checksums, and history let you verify what became durable and what the next call can retrieve.
- Every public error has a stable code and request identifier.
- Rate-limit and idempotency behavior are part of the documented contract.
- Open benchmark harnesses publish methodology separately from marketing copy.
Start with one concrete request.
import { FishMem } from "@fishmem/sdk";
const fishmem = new FishMem({
apiKey: process.env.FISHMEM_API_KEY
});
const { results } = await fishmem.memories.search({
query: "What deployment constraint matters here?",
agent_id: "release-agent",
top_k: 5,
trace: true
});What this surface includes
- Resource-oriented TypeScript and Python clients, direct HTTP, OpenAPI, and a Node-only Desktop adapter.
- Guides for supported agent frameworks plus coding-agent plugins.
- Contract, integration, adapter, package, and end-to-end test layers in the open repository.
Explicit boundary
- A named integration guide is not a claim of partnership with that framework vendor.
- The SDK does not hide scope selection, provider latency, or asynchronous completion.
- Evaluate recall on your own data before treating a benchmark as a production guarantee.
