Local-first · zero-cloud · MCP-native

Your agent doesn't need more memory. It needs judgment.

Wyrm is the intelligence layer between your AI agent and its memory. It doesn't just store and recall — it blocks repeated mistakes, keeps decisions honest, and learns as a fleet. Deterministic, runs entirely on your machine, no LLM in the hot path.

$npm i -g wyrm-mcp Read the benchmark →
zero cloud calls· zero LLM in memory ops· 52.4% → 72.2% recall on real LoCoMo· reproducible offline
The problem

Persistent memory is table stakes now — every tool can recall the past. The real problem is what agents do with it: they repeat the same mistakes, contradict yesterday's decisions, and in a fleet of subagents nothing one learns ever reaches the rest. Recall doesn't fix that. Judgment does.

What Wyrm does that recall can't

Three moves. Only one of them is memory.

01

Blocks the repeat

A recorded failure trips a PreToolUse firewall before the agent re-runs it, and hands back the antidote. Other tools learn only from success — Wyrm learns from failure too.

02

Keeps decisions true

Decisions link to the truths they rest on. When a truth is refuted, recalling a decision built on it warns you: "stop — this rests on something we proved wrong."

03

Proves it stayed home

Every recall returns a determinism receipt: zero generative-LLM calls, zero data egress. Local by construction, not by promise.

Show me

The moment recall can't give you.

  agent session — wyrm-guard active
# a week ago, this dropped the prod users table. Wyrm remembered.
agent › npm run migrate:prod
✖ BLOCKED by wyrm-guard — failure #1 (command: npm run migrate:prod)
  tried 1×: "ran migrate:prod with no --dry-run; dropped the users table"
  → antidote: --dry-run first, gate on a backup. The call never ran.

agent › wyrm recall "prod migration"
  #1  prod migration corrupted the DB — use --dry-run first
  [attestation] deterministic · 0 generative-LLM calls · 0 bytes egress 
The number

The only agent-memory number you can reproduce with no API key.

Tier (real LoCoMo, 1,982 evidence QA)recall@5recall@10MRRproperties
no-LLM FTS floor52.4%59.9%.393offline · zero-cloud · zero-LLM · CI-gated
+ local vectors (hybrid)60.3%72.2%.447local Ollama embeddings · still zero-cloud

This is retrieval recall — did Wyrm return a ground-truth supporting turn? — not end-to-end QA accuracy. We don't claim to beat the cloud players' LongMemEval answer scores; we claim the strongest number you can reproduce offline, with the dataset and harness in the repo. Methodology + repro →

Switch in one line

mem0 is easy to start. Wyrm makes it easy to leave.

Drop-in adapter — swap the import

- import { Memory } from "mem0ai";
+ import { Memory } from "@wyrm/mem0-compat";
  const m = new Memory();
  await m.add("prefers pnpm", { userId:"u1" });
  // every add is now a local SQLite write — 0 LLM, 0 cloud

Or bring your data across

wyrm import --from mem0        dump.json
wyrm import --from zep         export.json
wyrm import --from supermemory data.json
wyrm import --from letta       archive.json
# lands in the review queue — never silently trusted

Framework adapters for Vercel AI SDK, LangGraph, and OpenAI Agents. Renders into any harness's native slot (MEMORY.md / AGENTS.md / Cursor / Copilot / Windsurf) with wyrm init.