coldframe
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@coldframeremember my favorite color is blue"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Your agent forgets everything between sessions. coldframe gives it a memory that lives in one
local file (~/.cold-frame/memory.db) — with full-text + vector search, version history, automatic
forgetting, and the ability to rewind what was true when. No server, no account, no key.
Quickstart
In Claude Code — one install, then it remembers automatically:
claude plugin marketplace add coldzero94/cold-frame
claude plugin install coldframeRecall is injected at the start of every session; durable facts you state are captured as you work (using the Claude you already pay for — no extra key or cost). Nothing to configure.
On the command line — offline, instant:
cold-frame add "I prefer dark roast coffee."
cold-frame search "dark roast coffee"
cold-frame list # each memory with its strength band
cold-frame doctor # health: counts, integrity, embedder(Install: brew install coldzero94/coldframe/cold-frame (Apple Silicon macOS + Linux x86_64), or
download the self-contained binary for your platform from the
latest release — CLI + MCP in one file,
no Python needed. The optional [local-llm] (semantic recall) extra isn't in the binary; install
from source for that — see examples/.)
Related MCP server: mcp-memory-graph
Why coldframe
🗃️ One file you own — everything is
~/.cold-frame/memory.db. Copy it to back up, delete it to forget. No server, no account.🔌 Offline by default —
add→searchworks with zero keys, zero network.🤖 Automatic in Claude Code — recalls what matters, captures durable facts as you work — and the engine keeps it lean instead of hoarding everything.
⏪ Rewindable belief — facts are corrected and superseded, never silently overwritten. Ask "what did I believe back in March?" and get the answer as of that date.
🧭 Conflict resolution — supersession is always deterministic (code decides by
valid_at, never the LLM). Detecting that two facts contradict needs a model: thecold-frame worker(andCOLD_FRAME_LLM=claude, using your Claude session — no API key) turn it on; the zero-key offline default still does exact/near-duplicate merging and honors explicitcorrect/supersede.
How the memory works
Recall — a SessionStart hook injects your strongest durable memories; a UserPromptSubmit hook adds ones relevant to the current prompt (gated so it adds signal, not noise).
Capture — Claude itself extracts durable facts and calls
add_memoryduring your session (a bundled skill), with a keyless deterministic backstop so nothing is missed; dedup merges them.Stays lean — every ~20 facts a consolidation pass decays, rolls up, and archives the weakest (per-scope caps), so the active set never grows without bound. Forgetting archives — nothing is truly deleted, and obvious secrets (API keys, tokens, private keys) are blocked before they ever touch disk. PII redaction (email/phone/card/ssn) is available opt-in (
add --redact-pii, orMemory(pii_redact=…)) — off by default so a personal store keeps your own contact facts. For at-rest protection, the DB is a single local file — put it on an OS-encrypted disk (FileVault / LUKS), which covers the stolen-laptop threat without a second key to manage.Per-project + global — facts are tagged by git project; clear personal facts go to a global tier recalled everywhere.
Semantic recall (opt-in) — the zero-config default recall is lexical (offline
HashEmbedder, no download). For semantic recall, install from source with the[local-llm]extra and setCOLD_FRAME_EMBEDDER=local(a small localbge-smallmodel, downloaded once — nothing leaves the machine). After switching on an existing DB, runcold-frame reembedto re-index.
It's a standard stdio MCP server, so it works with any MCP client — not just Claude Code.
Use it as a library
from datetime import UTC, datetime
from cold_frame import Memory, Scope
mem = Memory() # ~/.cold-frame/memory.db, offline
me = Scope(user_id="coby")
mem.add("I switched jobs to Anthropic in 2026.", scope=me)
print(mem.search("where do I work?", scope=me).hits[0].note.content)
past = mem.search("where do I work?", scope=me, as_of=datetime(2026, 3, 1, tzinfo=UTC)) # rewindSee and edit your memory anytime: cold-frame ui — a local dashboard at 127.0.0.1:27182 where
you can browse facts and pin / correct / forget them (writes are CSRF-guarded and localhost-only).
More
Install & distribution —
packaging/(plugin, Homebrew, standalone binary)Design & spec —
docs/(the spec, decisions, and the analysis of mem0 / Letta / Zep-Graphiti / Cognee / MemOS / A-MEM / LangMem that informed it)Back up / move —
cold-frame export backup.dbthenimportit elsewhere.
Status
The engine, CLI, MCP server, Claude Code plugin, deterministic pre-disk secret-blocking +
grep-verified hard-purge, opt-in PII redaction, an admission confidence-gate + opt-in consent hold,
idempotent event-log replay import, and a local web UI are built and tested end-to-end on a fully
offline gate (ruff + mypy --strict + ~420 deterministic mock-LLM tests green on a 3.12/3.13 CI
matrix). The automatic
recall + capture loop is verified end-to-end against real Claude Code. Distributed as a self-contained
binary via Homebrew + GitHub Releases (not PyPI).
Apache-2.0.
This server cannot be deployed
Maintenance
Related MCP Connectors
Local-first, governed memory and session continuity for AI coding agents. No cloud, no telemetry.
91Hosted memory for AI agents that learns from outcomes — one key across Claude, Cursor & ChatGPT.
Persistent, outcome-grounded episodic memory for Claude. 14ms CPU retrieval, no GPU, no vector DB.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceLocal-first cross-agent memory for AI coding agents. Persistent, shared memory over MCP — what you tell one agent can be recalled by another — with all data stored in a single local SQLite file, no cloud and no API keys.-
- AlicenseAqualityBmaintenanceLocal-first memory for Claude Code and any MCP client: hybrid vector + keyword search and a bi-temporal knowledge graph in one SQLite file. Local embeddings, no API key, $0/token.51159 npm2PolyForm Noncommercial 1.0.0
- 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.5 npm4MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first memory for Claude & AI agents with hybrid search, Graph-RAG, and time-travel, runs entirely on your machine.35 npm1Apache 2.0