Memorix
Local project memory shared by coding agents, kept per Git repository in SQLite
Local long-term memory for coding agents, stored in SQLite and shared across agent tools
By Keith So (individual) TypeScript Local · stdio Knowledge and memoryDeveloper tools
69 popularity score ★ 790 ↓ 3.3k/wk
Opens the app, which asks before it adds the server.
claude mcp add hippo -- npx -y hippo-memory mcp{
"mcpServers": {
"hippo": {
"command": "npx",
"args": [
"-y",
"hippo-memory",
"mcp"
]
}
}
}{
"mcpServers": {
"hippo": {
"command": "npx",
"args": [
"-y",
"hippo-memory",
"mcp"
]
}
}
}{
"servers": {
"hippo": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"hippo-memory",
"mcp"
]
}
}
}[mcp_servers.hippo]
command = "npx"
args = ["-y", "hippo-memory", "mcp"]gemini mcp add --scope user hippo npx -- -y hippo-memory mcpHIPPO_HOME |
Optional: Folder for the global store instead of the default under your home folder. |
|---|---|
HIPPO_TENANT |
Optional: Tenant the server reads and writes as. Blank uses the default tenant. |
HIPPO_REQUEST_DEADLINE_MS |
Optional: How long a tool call may run before it is answered with a timeout. 0 turns the deadline off. |
Hippo gives coding agents a memory that outlasts one session. Memories live in a SQLite database on your machine (`.hippo/hippo.db` in a project, plus a global store in `~/.hippo/`), with markdown copies written beside it that you can read or commit. The `hippo mcp` command serves that store over stdio to any MCP client, so Claude Desktop, Cursor, Cline and others read and write the same memories the hippo CLI and its hooks do.
Entries change weight over time. A memory fades unless it is recalled, and recalling it makes it stronger. Error lessons get twice the half-life, pinned ones never fade, and when you tell it whether recalled memories helped, their decay slows down or speeds up. It tracks memories that contradict each other so you can pick one, a lesson can be copied to the global store for other projects, and it can scan recent git commits for lessons from fixes and reverts. Search is keyword (BM25) unless you add an embedder.
The server registers 13 tools in `src/surface/mcp/tools.ts`. That file caps the token budget a caller can pass to recall, assemble, drill and context at 25 times the recall default, which the README never mentions. `hippo_drill` walks one level down unless you pass `depth`, and `hippo_resolve` can delete the losing memory or tombstone it so the same text is refused if it comes back.
There is also an HTTP server (`hippo serve`) on `127.0.0.1:6789` by default. It wants an API key on every request, local ones included, and writes a fresh member key to `.hippo/server.key` each time it starts. On a store set up as shared it answers MCP at `POST /mcp` for several repos at once, with each request naming its project in a header.
| Runtime | Node.js 22.16+ |
|---|---|
| Runs on | macOS, Windows, Linux |
No account or API key is needed for `hippo mcp` over stdio. With no store present, the first tool call creates the global store in `~/.hippo`. Running `hippo init` in a project (after `npm install -g hippo-memory`) adds a project store. Hybrid search needs `npm i @huggingface/transformers` or an API embedder key (OpenAI, Voyage or Cohere). The HTTP server needs a key made with `hippo auth create`, sent as `Authorization: Bearer <key>`.
Recall is keyword (BM25) search unless you install an embedder yourself; nothing is auto-installed. On a shared store served by `hippo serve`, `hippo_learn`, `hippo_share`, `hippo_resolve` and `hippo_peers` are switched off and every other tool except `hippo_predict_baserate` refuses calls that lack the `X-Hippo-Project` header. The README says those project headers are a filter, not access control: any member key can name another project. Its own FAQ notes that the published benchmarks measure retrieval, not whether agents do better work with it. A commercial edition is described as planned, not released.
Suits a developer who uses several coding agents on one machine and wants one local memory they all share, with no account and no hosted service. Because memories decay unless reused and can be rated, it fits people willing to let the store prune itself rather than keep a fixed notes file. Teams wanting a hosted, multi-user memory service with real per-project access control should note the README's own caveat that the shared-store project headers are not a security boundary, and pick a store whose access model matches. Anyone wanting semantic search out of the box must add an embedder.
8 only read, 4 change things, 1 can delete or overwrite. A ? marks an optional parameter.
hippo_recallquery: stringbudget?: numberinclude_continuity?: booleanscope?: stringfresh_tail_count?: numberfresh_tail_session_id?: stringsummarize_overflow?: booleanscorer_window?: numbersession_id?: stringhippo_assemblesession_id: stringbudget?: numberfresh_tail_count?: numbersummarize_older?: booleanscope?: stringhippo_drillsummary_id: stringlimit?: numberbudget?: numberdepth?: integerhippo_remember changestext: stringerror?: booleanpin?: booleantag?: stringpersonal?: booleanhippo_outcome changesgood: booleanhippo_contextbudget?: numberscope?: stringhippo_statushippo_learn changesdays?: numberhippo_conflictshippo_resolve deletesconflict_id: numberkeep: stringforget?: booleanrejectLoser?: booleanreason?: stringhippo_share changesid: stringforce?: booleanhippo_peershippo_predict_baserateclass_tag: string