{"slug": "show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs", "title": "Show HN: Rememori zero-dependency agent memory that runs anywhere JS runs", "summary": "Rememori, a zero-dependency agent memory engine written in pure TypeScript, launched on Hacker News. The library provides memory primitives for AI agents via a three-verb API (remember, recall, forget) and runs anywhere JavaScript runs, including browsers, Node.js, and edge workers. It uses local embeddings and a bipartite knowledge graph to enable semantic recall without external servers.", "body_md": "# Your agent forgets. Give it memory.\n\nrememori is an embedded memory engine in pure TypeScript. Zero dependencies, zero servers, zero native bindings. One file on disk — or IndexedDB in the browser.\n\n`npm install rememori`\n\nv0.3.0 · 0 dependencies · ~8 kB core · MIT\n\nrememori — Esperanto for “to remember”. A language built to run anywhere. Same idea.\n\n## Every session ends the same way.\n\nThe context window empties. The user's preferences, the decisions made, the names mentioned — gone. Fixing it usually means a vector database, an embedding pipeline and a retrieval service. All that, for a bot that needs to remember fifty things.\n\nMemory should be a primitive, not a platform.\n\n## memori. *rememori.* forgesi.\n\nRemember, recall, forget — three verbs. That’s the API.\n\n**remember** stores text with its embedding, tags and\nextracted entities. **recall** ranks by cosine similarity ×\nimportance × time decay — plus a graph bonus for shared entities.\n**forget** deletes. Everything else is an option, not a method.\n\nBring any embedder: Ollama for local privacy, any OpenAI-compatible endpoint, or your own function. The verbs are Esperanto, like the name.\n\n``` js\nimport { Memory } from 'rememori';\nimport { ollama } from 'rememori/embedders';\n \nconst mem = await Memory.open('./agent.mem', {\n  embedder: ollama('nomic-embed-text'),\n});\n \nawait mem.remember('User prefers dark mode', {\n  tags: ['prefs'], importance: 0.8,\n});\n \nconst hits = await mem.recall('UI settings?', {\n  limit: 5, halfLifeDays: 90,\n});\n \nawait mem.forget(hits[0].id);\n```\n\n## Don’t take our word for it.\n\nThis section runs rememori in *your* browser. The embedding model\ndownloads once (~30 MB, cached), then everything — embeddings, storage,\nsemantic recall — happens on your machine. Open\nDevTools → Network and watch it stay silent.\n\nDownloads the MiniLM embedding model (~30 MB) from Hugging Face, once. Your memories never leave this page.\n\nReady.\n\n## Give your agent a memory. Now.\n\nrememori ships as an [MCP server](https://github.com/GiorgioDotcom/rememori/tree/main/mcp).\nOne command gives Claude Code — or Cursor, Windsurf, any MCP client —\npersistent memory across sessions. Embeddings run locally via Ollama;\nmemories live in one file on your disk.\n\n`claude mcp add rememori -- npx -y rememori-mcp`\n\n## Recall is more than similarity.\n\nEvery memory links to the entities it mentions — a bipartite knowledge graph, built automatically at write time. At recall, memories sharing entities with the query get a bonus:\n\n`(cosine + graph) × importance × decay`\n\nSo when the words don't match but the *who* does, the right\nmemory still surfaces. Entity extraction is pluggable; the built-in\nheuristic costs zero dependencies and zero API calls.\n\n## If it runs JavaScript,\n\nit remembers.\n\n**Node ≥ 18** append-only file, one`npm i`\n\n**Bun** same file format, same API**Browser** IndexedDB via`idb://`\n\npaths**Edge workers** bring a KV adapter — it's one interface**Electron** no rebuild, ever\n\nNative-binding memory engines compile per platform and stop at the browser's edge. Pure TypeScript ships everywhere the language does — this very page is the existence proof.\n\n## What would you build?\n\n### A support bot that remembers the customer\n\nLast ticket, preferred tone, the promise a colleague made two weeks\nago. `remember()`\n\nevery message, `recall()`\n\nbefore\nreplying. Telegram, Discord, Slack — three lines each.\n\n### A coding agent with cross-session memory\n\nDecisions, conventions, “we already tried that”. One\n`.mem`\n\nfile next to the repo, versionable and greppable.\n\n### A local-first app with semantic search\n\nElectron or Tauri note-taking, mail, research tools: recall by meaning without shipping your users' data to a server.\n\n### Assistants under compliance\n\nLegal, health, finance. Memory that provably never leaves the device: IndexedDB storage plus local embeddings, auditable in the Network tab.\n\n### A home-automation brain on a Raspberry Pi\n\n“Boiler serviced in March, technician was Rossi.” Nobody wants to run Postgres on a Pi.\n\n### NPCs that hold a grudge\n\nGame characters that remember the player across saves — in-process, inside the game loop, zero infrastructure.", "url": "https://wpnews.pro/news/show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs", "canonical_source": "https://rememori.dev", "published_at": "2026-07-07 13:16:31+00:00", "updated_at": "2026-07-07 13:30:10.035098+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "machine-learning", "developer-tools"], "entities": ["Rememori", "Ollama", "Hugging Face", "Claude Code", "Cursor", "Windsurf", "MCP", "MiniLM"], "alternates": {"html": "https://wpnews.pro/news/show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs", "markdown": "https://wpnews.pro/news/show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs.md", "text": "https://wpnews.pro/news/show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs.txt", "jsonld": "https://wpnews.pro/news/show-hn-rememori-zero-dependency-agent-memory-that-runs-anywhere-js-runs.jsonld"}}