Quickstart
From zero to a searchable memory in a few minutes.
1. Get an API key#
Sign up at rememberos.ai and grab a free key (the free tier is
free — no charge). Your key starts with mv_; keep it secret. Set it as an
environment variable:
export LONGMEM_API_KEY=mv_...
2. Install a client#
# PyPI publish pending — install from source:
pip install "git+https://github.com/11data/longmem#subdirectory=sdk/python"
# npm publish pending — install from source:
npm install "github:11data/longmem#workspace=sdk/js"
# no install needed — curl works directly against the API
3. Store a memory#
from longmem import Longmem
mem = Longmem() # reads LONGMEM_API_KEY
mem.add("Alex prefers dark mode", collection="prefs")
import { Longmem } from "longmem";
const mem = new Longmem(); // reads LONGMEM_API_KEY
await mem.add("Alex prefers dark mode", { collection: "prefs" });
curl -s https://rememberos.ai/v1/memory/collections/prefs/memories \
-H "Authorization: Bearer $LONGMEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text": "Alex prefers dark mode"}'
4. Search it#
hits = mem.search("what theme does Alex like?")
for h in hits:
print(h["score"], h["text"])
const hits = await mem.search("what theme does Alex like?");
for (const h of hits) console.log(h.score, h.text);
curl -s https://rememberos.ai/v1/memory/search \
-H "Authorization: Bearer $LONGMEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "what theme does Alex like?"}'
Search is hybrid by default — vector similarity and full-text, fused. No keyword overlap is required: "what theme does Alex like?" finds "Alex prefers dark mode".
5. Let memory evolve (graph memory)#
mem.remember("Alex moved from Google to Stripe last month", collection="people")
await mem.remember("Alex moved from Google to Stripe last month", { collection: "people" });
curl -s "https://rememberos.ai/v1/memory/collections/people/remember" \
-H "Authorization: Bearer $LONGMEM_API_KEY" \
-H "Content-Type: application/json" \
-d '{"content": "Alex moved from Google to Stripe last month"}'
remember extracts atomic typed facts and links them to what you already
know — a fact that contradicts an older one supersedes it, so search returns the
current truth. By default it runs async (HTTP 202 + a job id); pass
?sync=true to get the extracted facts back inline.
Plainaddnever calls an LLM — it embeds and stores. Userememberwhen you want extraction and fact evolution; it costs LLM calls.