Notes
Prose, reasoning, and working knowledge. Backed by your existing Markdown vault, read in place.
markdown vault
Open-source agent memory, over MCP
Multimode Mind unifies five kinds of memory (notes, structured data, session state, files, and embeddings) behind one retrieval router that ranks, reconciles, and cites what it returns. Local-first. It wraps the Markdown vault you already have instead of asking you to migrate.
The problem
Most agent memory is one vector database and a search box. Everything gets flattened into one shape, and the agent loses the difference between a fact, a document, and a thought. Real memory is not one shape. A decision lives in structured data. The reasoning behind it lives in a note. The contract that triggered it lives in a file. The association that surfaces it later lives in an embedding. A layer that holds only one of those is a filing cabinet, not a mind.
The five stores
Prose, reasoning, and working knowledge. Backed by your existing Markdown vault, read in place.
markdown vault
Facts and records you can query. Backed by local SQLite, or point it at a Postgres database you already run.
sqlite / postgres
Fast key-value scratch for the working state of a session.
leveldb
Unstructured documents like PDF and Word. Backed by a files directory with a metadata index.
files + index
Meaning-based recall across everything else. Backed by a local vector index, or pgvector on the same Postgres.
vector / pgvector
one ranked context bundle, with provenance and conflicts
How it works
The router fans out to every store, then ranks what comes back by signals a similarity search cannot see: relevance, recency, corroboration across stores, and whether a memory was curated by a human or generated by the agent. When two memories contradict each other, it surfaces the conflict instead of quietly picking one. Every item carries its provenance, so the agent can always show where a memory came from.
type StoreType = 'markdown' | 'sqlite' | 'leveldb'
| 'files' | 'vector';
type RetrieveInput = {
query: string;
limit?: number; // ceiling on results
stores?: StoreType[]; // routing hint
explain?: boolean; // score derivation
};
type RetrieveResult = {
entries: RankedEntry[]; // ranked, with provenance
query: string;
totalCandidates: number;
storesQueried: StoreType[];
conflicts?: ConflictNote[]; // contradictions surfaced
};
await mind.retrieve('why did we drop the queue?');
Dashboard
A built-in terminal dashboard shows store status and handles configuration interactively. Every store reports whether it is up, which access mode it is in, and how much it holds, so a misconfigured backend is visible immediately instead of failing silently at retrieval time.
mmind dashboard
Ranking changes are saved immediately, but the server reads them at startup, so restart it for an edit to take effect.
Quick start
npm install -g multimodemind
mmind "/path/to/your/vault"
Point it at any folder of Markdown. An Obsidian vault works as-is. Windows and macOS, no server to stand up.
The vault path is optional: store data defaults to ~/.mmind, so mmind runs from any directory.
No API key required. Set OPENAI_API_KEY for OpenAI embeddings, or it runs a local model fully offline.
Scope