The problem
Every assistant that claims to remember you keeps that memory somewhere you cannot see. You are told it learns about you; you are never shown what it wrote down, never asked whether it got you right, and never given a way to correct it. You find out what it believes about you only when it acts on something wrong.
What Mnemo does
Mnemo inverts that. Every fact it decides to keep is a row in a SQLite file on your disk, shown in a pane beside the chat, where you can read it, edit it, pin it or delete it. Memory is the product surface, not an implementation detail.
Glass-box memory. The agent decides what to remember; you keep the final say. Each row carries its kind, tags and provenance, and answers cite the memory ids they relied on, so you can audit any claim back to its source. One-click JSON export, one-click wipe. Delete a memory and it is genuinely gone.
Reusable skills. A skill is a Markdown file you write. Only each skill's name and description sit in the base prompt; the body loads only when the agent calls load_skill, so adding skills costs almost no context. Edit a file and the next message picks it up, with no restart.
Tools you choose. Live web access through Tavily, memory read/write, and skill loading. A tool whose key is absent from your .env is absent from the model's tool list, rather than failing at call time.
Two-tier model routing. Every turn starts on Nemotron 3.5 Lightning. The fast model decides for itself when a sub-problem deserves the 550B Nemotron 3 Ultra and escalates by calling a think_harder tool. The UI shows each escalation, so the cost is visible rather than hidden.
How it is built
Mnemo runs on NVIDIA Nemotron models served by Nebius Token Factory.
Fast path nvidia/Nemotron-3_5-Lightning every turn, tool orchestration Reasoning nvidia/Nemotron-3-Ultra-550b-a55b on escalation only
Token Factory is OpenAI-compatible, so the whole inference layer is the official openai client with base_url repointed at https://api.tokenfactory.nebius.com/v1/. Three things that cost real time on other stacks cost none here. Standing up a 550B model on our own GPUs would have consumed the entire build window; on Token Factory it is one model string, which made two-tier routing a config decision rather than an infrastructure project. Tool calling worked first try against the OpenAI-compatible contract, so the agent loop has no provider-specific shims. And switching tiers is one env var, so model choice was settled by measurement rather than guesswork.
Tavily powers the web_search tool, used by the research-note skill to ground answers in live sources with URLs.
What we measured
Two bugs surfaced in live testing, and both changed the code.
The model would claim to have saved something without calling the tool — the worst possible failure for a memory product, and one only visible because the trace shows every tool call. An explicit prompt rule that saying you saved something is not saving it, plus naming standing preferences as durable, took the measured tool-call rate from 8/12 to 12/12 with 0/12 false claims across three prompts run four times each.
A single research turn then wrote the same conclusion to memory twice. We fixed that in the store rather than the prompt: near-identical memories collapse into the existing row, merging tags and keeping the longer text. A prompt can ask a model not to repeat itself, but the store should not depend on it obeying, because duplicate rows are exactly what turn an inspectable memory pane into noise.
Trying it
The hosted demo runs in demo mode: each visitor gets their own memory space keyed to a browser cookie, so judges never see or edit each other's memories, with a per-visitor message cap. Clone the repo and run it with your own Nebius key for unlimited, fully private use.
Four things worth trying, in order:
- "I'm building a robotics side project in Rust and I keep hitting lifetime errors. Remember that." — watch a row appear in the Memory pane.
- "What do you know about me so far?" — the answer comes from stored memory.
- "Research what Nebius Token Factory is, then file the conclusion." — loads a skill, searches via Tavily, escalates to Ultra, writes exactly one memory.
- Delete the memory from step 1, then ask step 2 again. It is genuinely gone.
Log in or sign up for Devpost to join the conversation.