Open-Mem
Integrates with local Ollama models for compressing session records into observations and summaries, with auto-detection, model pinning, keep-alive, and pausing/unloading while games run.
Supports OpenAI-compatible LLM APIs through the openai provider, configurable with a base URL and API key, for local or remote memory compression and summarization.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
claude-open-mem
Open, local-first persistent memory for Claude Code.
claude-open-mem records what happens in your Claude Code sessions, compresses it into searchable observations and session summaries, and hands Claude a compact brief of each project at the start of every session, so it can start working instead of re-exploring the codebase. It is a drop-in alternative to claude-mem and imports your claude-mem history automatically.
It never spends your Claude plan. Compression runs on a local LLM through Ollama, on any OpenAI-compatible endpoint you choose, or without any LLM at all.
Zero dependencies: Node.js ≥ 22.13 built-ins only (
node:sqlitewith FTS5).One SQLite file in
~/.claude-open-mem/, or one shared server for all your machines.Fast session start: a per-project brief, open tasks, last next steps and hot files, in ~3 KB of context.
Prompt-time recall: each prompt gets the few past records that match it, never the same one twice.
Notes and tasks that Claude creates and updates itself, with a status history, per project and directory.
Web viewer: progress, projects, timeline, task board, notes, search and sessions, protected by an admin token.
Every record carries reconstruction metadata: machine, working directory, git branch and commit, model, tool, files.
Automatic, incremental, read-only import from claude-mem; optional claude-mem uninstall.
Install
Requirements: Claude Code, Node.js ≥ 22.13 on PATH. Optional: Ollama with a chat model
(ollama pull gemma3:12b, or gemma3:4b / qwen3:8b on smaller GPUs).
claude plugin marketplace add Noel18101987/claude-open-mem
# or from the GitLab mirror: claude plugin marketplace add https://gitlab.com/noelcheda/claude-open-mem.git
claude plugin install open-mem@claude-open-memRestart Claude Code. On the first session start claude-open-mem:
creates
~/.claude-open-mem/withsettings.jsonandopen-mem.db;generates a random web admin token and shows it once in the session — save it in your password manager (only its SHA-256 hash is stored);
starts the web viewer on http://127.0.0.1:37800;
imports your claude-mem database in the background if it finds one (
~/.claude-mem/claude-mem.db);starts injecting memory for the current project.
The plugin id is open-mem (Claude Code reserves plugin names that start with claude-).
Related MCP server: claude-memory
How it works
Hook | What it does |
| Injects the project brief, open tasks, recent sessions, hot files and notes; records device and git state. |
| Stores the prompt and injects matching memory (full-text search, no LLM, a few ms). |
| Queues the tool call. No network, returns immediately. |
| Queues a summary of the turn. |
A detached background process drains the queue: the LLM decides whether a tool call is worth remembering and writes
a structured observation (title, narrative, facts, concepts, files). At the end of each turn it writes a summary, and
every briefEvery new records it rewrites the project brief. If the LLM is unreachable, items wait in the queue.
Gaming: a local model and a game fight over the same GPU. While a game runs (anything under Steam, Epic, Xbox,
EA, GOG, Riot or Ubisoft game folders, plus whatever you list in busyProcesses), the queue waits and the Ollama
models are unloaded; it drains once the game closes. node "$OM" busy shows what is detected.
Tools Claude gets (MCP)
Tool | Use |
| Recall: compact index first, details only for chosen ids |
| The start-of-session brief of any project |
| Durable to-dos ( |
| Decisions, conventions, gotchas, preferences |
Ids: 123 observation, S45 session summary, I7 note or task.
Web viewer
http://127.0.0.1:37800 (started automatically in local mode; or run cli serve). Log in with the admin token.
Sections: Progress (counters, activity, open tasks, latest sessions, machines), Projects (brief, tasks, notes, recent sessions, most-edited files, branches), Timeline (everything by day, filterable), Tasks (board), Notes, Search, Sessions (prompt by prompt). Any record opens in a side panel with its metadata; notes and tasks can be edited there.
Security: HttpOnly + SameSite=Strict session cookie (30 days), origin check on writes, strict CSP, login rate limit.
Lost the token? cli token reset prints a new one and logs every browser out. To reach it from other devices,
put it behind an HTTPS reverse proxy rather than exposing the port.
Sharing memory between machines
One machine runs the server; the others push their records to it and read from it.
# server
node "$OM" serve --host 0.0.0.0 # or a systemd service; `token init` for the web login
node "$OM" device add laptop # prints a device key once
# each client (the key is read from stdin, so it never lands in shell history)
node "$OM" remote connect --url http://server:37800 --name laptop < keyfileClients keep writing to their own database (an outbox), compress with their own LLM, and push new rows after each
drain. Reads, notes and tasks go to the server; if it is unreachable they fall back to the local copy and sync later.
remote disconnect returns to local mode.
LLM providers
OM="$(cat ~/.claude-open-mem/plugin-root)/src/cli.mjs"
node "$OM" config set provider auto # default: local Ollama if it has a chat model, else none
node "$OM" config set model gemma3:12b # pin a model
node "$OM" config set provider openai # any OpenAI-compatible server (LM Studio, llama.cpp, vLLM, ...)
node "$OM" config set baseUrl http://localhost:1234/v1
node "$OM" config set provider none # no LLM: only edits and shell commands, stored raw; no briefsCLI
node "$OM" status # counts, LLM, mode, claude-mem detection
node "$OM" import # import new claude-mem rows (safe to repeat)
node "$OM" search nginx certs # search from the terminal
node "$OM" brief my-project # rewrite a project brief now
node "$OM" drain | sync # process the queue / push to the server now
node "$OM" busy [--unload] # is a game running? (exit 0 = busy)
node "$OM" serve | token init | token reset | device add|list|remove | remote connect|disconnect
node "$OM" config [set key value]Inside Claude Code you can also ask Claude to use the open-mem skill.
Privacy
Everything stays in
~/.claude-open-mem/unless you pointproviderat a remote endpoint or connect a server.Secrets are redacted before anything is queued, stored, synced or sent to the LLM: API keys (Anthropic, OpenAI, OpenRouter, GitHub, GitLab, AWS, Google, Slack, Stripe, Telegram, Context7), JWTs, bearer tokens, private keys,
user:pass@in URLs andpassword=/token:-style assignments. The server redacts again on ingest.Wrap anything in
<private>…</private>in a prompt to keep it out of memory.settings.json(which can hold a device key) is written with mode 600; tokens and keys are stored only as hashes.node "$OM" redactre-scans stored memory (useful after upgrading redaction patterns).
Migrating from claude-mem
The import is automatic and incremental: while both are installed, every session start copies new claude-mem rows. The claude-mem database is opened read-only and never modified.
node "$OM" uninstall-claude-mem --dry-run # preview
node "$OM" uninstall-claude-mem --yes # final import, uninstall plugin, stop its worker
node "$OM" uninstall-claude-mem --yes --move-data # also rename ~/.claude-mem to ~/.claude-mem.removed-<date>claude-open-mem never deletes claude-mem data.
Settings (~/.claude-open-mem/settings.json)
Key | Default | Meaning |
|
|
|
| empty | Provider details |
| TodoWrite, AskUserQuestion, … | Tools never recorded |
| 12 / 3 / 10 | Amount injected at session start |
|
| Prompt-time recall |
| 25 | New records before a project brief is rewritten (0 = never) |
|
| Folder names never recorded |
|
| Import claude-mem at session start |
|
| Shared mode (set with |
|
| Web viewer |
| 6000 | Tool output sent to the LLM |
| 72 | How long queued calls wait for an LLM that is down before being stored without it |
|
| How long Ollama keeps the model loaded after the last call |
|
| Pause the queue and unload Ollama models while a game runs |
|
| Exe names ( |
| game libraries / launchers | Folders whose programs count as games, and exceptions |
Set CLAUDE_OPEN_MEM_DATA_DIR to move the data folder.
Development
node --no-warnings --test "test/*.test.mjs"
claude plugin validate .
claude --plugin-dir . # try the plugin without installing itLicense
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Persistent memory for Claude Code and Cursor. Stop re-explaining your project every session.
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Project memory, documentation and controlled secret access for AI coding agents.
Shared memory for coding agents. Stop re-explaining your codebase every session.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides Claude with a persistent local memory and structured knowledge graph to track project states, tasks, and historical decisions across different chat sessions. It enables users to recall information using keyword relevance, time-travel queries, and dependency analysis for complex project management.MIT
- AlicenseNot gradedqualityDmaintenanceProvides persistent, searchable memory for Claude Code using local SQLite, semantic embeddings, and full-text search, enabling Claude to recall and retrieve context across sessions and projects without external services.18 npm4MIT
- AlicenseCqualityDmaintenanceProvides long-term memory and lossless context management for Claude Code, enabling automatic context compression, cross-session memory sharing, and semantic search across all history.10MIT
- AlicenseAqualityCmaintenancePersistent knowledge base tools for Claude Code that store project context, decisions, and patterns locally across sessions, eliminating cold starts.823 PyPIMIT