Neomonic
External context memory for AI agents

Memory outside the context window.

An agent's window is a lens, not the store. Neomonic is the store: typed memos under topics under contexts, recalled by the keyphrases the agent already holds.

Wire it into an agent See how recall works neomonic.net · neumonic.net
context caroline3 topics · 7 memos
# moving
mv-denverPLACE moved to Denver in March, sister Priya helped
mv-leaseTIME lease starts 1 April, two bedrooms
# work
wk-promoACTION promoted to lead designer, announced at the Friday standup
wk-teamPERSON reports to Marcus now, team of four
# hobbies
hb-guitarTHING started guitar lessons, Tuesdays
> who helped Caroline move?
recall via keys mv-denver · sister Priya · PERSON

Three verbs, and the window stays small.

Every memo is one typed fact with a key. The agent keeps the keys hot in its window and pulls the payload only when a question needs it. That is the whole discipline, and it is what keeps a long-running agent from forgetting.

Add

One fact per memo, typed by what it is: a person, a place, a time, an action, a thing. Payloads go to the store, not the prompt.

memory.add caroline, moving, mv-denver, moved to Denver in March

Hold the keys

Loading a context loads its keyphrase cache: a few hundred bytes the agent carries between turns instead of the memos themselves.

memory.cachekeys caroline

Recall

A question is matched against the keys first, the full-text index second. The hit comes back as the memo, with its type and its time.

memory.modelkeywords caroline, who helped with the move

What a store holds.

Built as the memory module of the 0verload tool federation: one C++ binary, no runtime, no cloud, the on-disk store yours to copy, version and inspect.

Contexts, topics, memos

A context is one person, project or agent. Topics are its chapters. Memos are the facts, each with a key, a type and a timestamp.

The temporal web

Every memo anchors to the most specific date it carries, so "last spring" and "before the promotion" are questions the store can answer.

Load-bearing words

A trained word net reads each memo and keeps the words that carry it: names, places, times, actions, things. Those words, paired, are the keys the index runs on.

Trains where the hardware is

The word net trains on any OpenCL GPU, NVIDIA, AMD or Apple silicon, with nothing to install, and serves on a plain CPU anywhere. One model file either way.

Automatic version control

Every save of every enrolled file is a version. Memory that can be rolled back is memory you can let an agent write to.

Speaks MCP

Every verb is a tool over the Model Context Protocol, so Claude Code, Cursor or any MCP client gets persistent memory in one config line.

Measured, not promised.

BEAM, LoCoMo and LongMemEval, run in mem0's own open-source benchmark harness with only the memory search swapped for Neomonic's. GPT-5 answers and GPT-5 judges. Each figure is the mean of repeated runs, compared against mem0's published numbers.

49.0%
BEAM 10M, 50 memories: ahead by 3.5
mem0 publishes 45.5%
72.3%
BEAM 1M, 200 memories: ahead by 2.2
mem0 publishes 70.1%
92.9%
LoCoMo: level, with half the memories
100 memories; mem0 92.5% at 200
93.7%
LongMemEval, 50 memories: behind by 1.1
mem0 publishes 94.8%

Runs vary by up to 1.5 points, so smaller gaps count as level. The full results, the method, and every question with its answer and verdict →

For agents, from the first turn.

Register the server once. The agent then recalls before it assumes it is starting fresh, and saves durable facts as it works, so they outlive the window.

  • memory_addremember one typed fact under a context and topic
  • memory_cachekeysload a context's keyphrase cache into the window
  • memory_keywordsrecall by keyword when the keys do not hit
  • memory_temporalask by time: before, after, around a date
  • memory_w5who, what, where, when, why over a context
  • memory_recentresume where the last session stopped
// claude_desktop_config.json / .mcp.json
{
  "mcpServers": {
    "neomonic": {
      "command": "0neo",
      "args": ["mcp"]
    }
  }
}

// or over HTTP, served by the resident
"url": "http://127.0.0.1:9966/mcp"