What it is
The folder is the memory.mengram local reads and writes a memfmt tree:
memfmt validate checks it. Nothing expires, nothing asks for a key.
Bring your own model. Extraction (turning a conversation into facts, events and workflows) and a failure revision need an LLM: an Anthropic or OpenAI key you already have, or Ollama (8B+, 8K+ context). Everything else — search, recall, the policy gate, recording outcomes — runs with no model and no network.
Install
init writes the folder and .mengram/config.json. With no --provider, an ANTHROPIC_API_KEY or OPENAI_API_KEY in the environment is used; with neither, the folder still works for everything but add.
Use it
--context asks your model what belief broke and produces the next version of the workflow — unless the fix would silently break another workflow in the folder, in which case it is quarantined for you to review instead of shipped to the agent.
Claude Code, all local
MCP for any client
remember, recall, context_for, list_procedures, procedure_feedback — the same surface as the Claude connector, plus feedback so an agent can record an outcome from inside its tool call. Claude Desktop, Cursor, Windsurf and any MCP client can point at it:
What a procedure file looks like
81% expected is not a ratio: v2 has no runs of its own yet, and the number is inherited from v1’s record, discounted. Once v2 runs it reads N% reliable. The steps that the revision left alone keep their counts; the new step starts untracked. See memfmt for the rules.
Where a folder stops being enough
Search is word overlap: past a few hundred files you want embeddings. Syncing a folder between machines is agit pull only until two machines disagree. Extraction runs only when you call it, not from every session in the background. That is what the cloud adds — and it writes this same format, so mengram export markdown hands you the folder back at any time.
Not yet
Multiple users per folder, the reflection and curator agents, deleting a file that a rename left behind, and staleness (last_succeeded, which needs its own field — the same gap the cloud has).