; iOS/Android browser<br>chrome should match whichever the user has on. Without<br>the media-query split, both modes render dark chrome. -->
I tried every AI memory tool. Here's why I built another one. — Memento Blog
s before<br>guessing the path. -->
/, and clears it on the home page. -->
Blog > Post Title` directly in SERPs.<br>Cleared on home and on /blogs/. -->
entries at these sizes, Google falls back<br>to the SVG (slow / inconsistent) or the default globe. -->
Memento
One memory layer for every AI assistant you use.
A local-first, LLM-agnostic memory layer for AI assistants. Memento runs an MCP server over a single SQLite file on your machine, so any MCP-capable AI assistant — Claude Desktop, Claude Code, Cursor, GitHub Copilot, Cline, OpenCode, Aider, custom agents — can read and write durable, structured memory about you, your work, and your decisions.
Get started:
npx @psraghuveer/memento init
GitHub ·<br>npm ·<br>MCP Registry ·<br>docs
This page uses JavaScript for the full experience. Enable JavaScript or visit the GitHub README for the same content.
code]:font-mono [&_:not(pre)>code]:text-[0.92em] [&_:not(pre)>code]:rounded [&_:not(pre)>code]:border [&_:not(pre)>code]:border-border [&_:not(pre)>code]:bg-bg/60 [&_:not(pre)>code]:px-1.5 [&_:not(pre)>code]:py-0.5 [&_:not(pre)>code]:text-fg [&_pre]:mt-6 [&_pre]:overflow-x-auto [&_pre]:rounded-md [&_pre]:border [&_pre]:border-border [&_pre]:bg-bg/60 [&_pre]:p-4 [&_pre]:font-mono [&_pre]:text-sm [&_pre]:leading-relaxed [&_pre]:text-fg [&_hr]:my-12 [&_hr]:border-border [&_img]:mt-8 [&_img]:rounded-md [&_img]:border [&_img]:border-border [&_strong]:font-medium [&_strong]:text-fg [&_em]:italic [&_table]:mt-6 [&_table]:w-full [&_table]:text-sm [&_th]:border-b [&_th]:border-border [&_th]:px-3 [&_th]:py-2 [&_th]:text-left [&_th]:font-medium [&_th]:text-fg [&_td]:border-b [&_td]:border-border/60 [&_td]:px-3 [&_td]:py-2"><br>Memory in every AI tool I've used has the same essential shape: a list of entries, each with a vector. Some tools dress it up — Mem0 tags entries with a user_id and a run_id, Supermemory adds tags, Cursor's memories carried a project scope. Retrieval is cosine similarity over the vectors, possibly filtered by that light metadata. That's the model.
No timestamp weighting on retrieval, so a preference you stated 18 months ago outranks a decision you made yesterday whenever the older entry is lexically closer to your prompt. No notion of kind at retrieval time — preferences, one-time facts, project decisions, and todos all retrieve through the same heuristic. Rarely an event log you can interrogate — when the assistant surfaces a memory you don't remember writing, you usually can't trace it back to the conversation that produced it. Rarely a conflict detector that catches contradictions at write time — when you change your mind, both versions usually stay in the index at full strength, and which one wins next is a coin flip on embedding geometry. (Mem0's graph backend is the partial exception on a couple of these. None of them have all four.)
For an ordinary database we'd never accept this. We'd demand types, indices, audit logs, constraints. We've somehow accepted vector blobs with the word "memory" on the marketing page.
That's what made me build another one.
I'm aware of the optics — "another AI memory server" in May 2026 reads like another React state library in 2017. The genre is saturated, the survivors are scrappy, and most new entrants are derivative. So before I tell you what I built, I want to be honest about what already exists — and where each of them keeps treating memory as a flat string with a vector when it should be something more.
The status quo, tool by tool
ChatGPT Memory. A vector store of facts ChatGPT extracts from your conversations, retrieved by similarity to whatever you're typing now. Zero-config, baked into the product; Anthropic's "Memory Import" launched in March now lets you carry it across to Claude. The architecture beneath the marketing: a flat list with no kind distinction, no per-memory event log, no decay over time. When you correct something, the previous version often stays. The memory lives in OpenAI's account, not on your machine.
Cursor Memory. When it existed, it was a flat collection of facts surfaced to the model on each turn — scoped to project or global, no decay, no audit trail per entry. Cursor removed Memories in v2.1 (late 2025) and pointed everyone at Rules — static instruction files in a project. The migration threads on the Cursor forum are still open as I write this. Whatever the future of the feature, the lesson is durable: when memory lives inside one tool's product roadmap, you're at that roadmap's mercy.
CLAUDE.md, AGENTS.md, .cursorrules, copilot-instructions.md. These aren't memory. They're config files the AI reads on session start. The 2026 convention is "write AGENTS.md, symlink the others to it" — that gives you project-level cross-tool consistency. It also gives you no...