Show HN: Mimir – local-first encrypted memory for AI agents (single Rust binary) Perseus Computing LLC released Mimir, a local-first, encrypted memory engine for AI agents as a single Rust binary with zero dependencies. The open-source tool provides persistent memory across sessions via the Model Context Protocol, supporting 46 tools and AES-256-GCM encryption, and works with clients like Claude Desktop and Cursor. Mimir aims to differentiate from competitors like Mem0 and Letta by being fully offline, MCP-native, and dependency-free. Persistent Memory for AI Agents — MCP-Native. Local-First. Zero Dependencies. Mimir is a single Rust binary that gives AI agents durable memory across sessions. One binary. One file. No Docker. No Postgres. No cloud. Just persistent memory that works with any MCP host. curl -sSf https://raw.githubusercontent.com/Perseus-Computing-LLC/mimir/main/scripts/install.sh | sh That's it. Mimir is installed to ~/.local/bin/mimir . Start it: mimir serve --db ~/.mimir/data/mimir.db macOS note.On Apple Silicon, an unsigned binary is killed on launch Killed: 9 , no output by the OS binary policy — even with no quarantine attribute. The installer ad-hoc code-signs Mimir for you. If you build or copy the binary yourself cargo build --release && cp target/release/mimir ~/.cargo/bin/ , sign it once after each rebuild: codesign --sign - "$ command -v mimir " Connect any MCP host Claude Desktop, Cursor, Hermes Agent, Perseus, etc. : { "mcpServers": { "mimir": { "command": "mimir", "args": "serve", "--db", "~/.mimir/data/mimir.db" } } } Start Mimir mimir serve --db memory.db & sleep 1 Remember a fact via MCP JSON-RPC on stdio echo '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"mimir remember","arguments":{"category":"demo","key":"hello","body json":"{\"text\":\"Hello from Mimir \"}"}}}' | mimir serve --db memory.db Search for it echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"mimir recall","arguments":{"query":"Hello"}}}' | mimir serve --db memory.db Mimir is a standard MCP stdio server — the same mimir serve command works everywhere. Run mimir doctor to validate your install and print this matrix locally. | Client | Status | Config | |---|---|---| | Claude Desktop | ✅ | claude desktop config.json | | Claude Code / Hermes | ✅ | .mcp.json / config.yaml | | Cursor | ✅ | .cursor/mcp.json | | Windsurf | ✅ | mcp config.json | | VS Code + Continue.dev | ✅ | config.json | | Zed | ✅ | settings.json | | Codex CLI | ✅ | ~/.codex/config.toml | Copy-paste config snippets for each: docs/clients/ . Mimir is the only memory engine that is simultaneously MCP-native, local-first, zero-dependency, AND agent-first. | Mimir | Mem0 | Letta | Zep | | |---|---|---|---|---| Deployment | Single binary ~8MB | Cloud + self-host | Docker/Postgres | Docker/Postgres | Dependencies | None SQLite embedded | Python + vector DB | Postgres + Python | Postgres + Go | MCP-Native | ✅ 46 tools | ❌ Not MCP-native | ❌ Not MCP-native | ❌ Not MCP-native | Offline/Local | ✅ Fully local | Cloud-dependent | Docker needed | Docker needed | Encryption | AES-256-GCM ✅ | ❌ | ❌ | ❌ | Hybrid Search | BM25 + Dense + RRF | Vector only | Vector only | Vector + Graph | Entity Lifecycle | Decay + Promote + Archive | ❌ | ❌ | ❌ | Entity Graph | Link + Traverse | ❌ | ❌ | ✅ | Journal Audit Trail | ✅ Immutable | ❌ | ❌ | ❌ | State Management | ✅ Key-value + TTL | ❌ | ❌ | ❌ | MCP Tools | 46 | 5 | 8 | 0 | GitHub Stars | ~20 | ~55K | ~15K | ~3K | License | MIT | Apache 2.0 | Apache 2.0 | Apache 2.0 | Full comparison: Mimir vs Mem0 → /Perseus-Computing-LLC/mimir/blob/main/docs/comparison/mimir-vs-mem0.md vs Letta → /Perseus-Computing-LLC/mimir/blob/main/docs/comparison/mimir-vs-letta.md vs Zep → /Perseus-Computing-LLC/mimir/blob/main/docs/comparison/mimir-vs-zep.md Mimir handles production workloads on modest hardware: | Metric | Result | |---|---| 100K entity insert | 1.01s 98,732 entities/s | FTS5 recall 10 results | 0.022s | Decay tick 100K entities | 1.317s batched, transactional | Memory 100K entities | ~85MB RSS | DB file size 100K | ~45MB with FTS5 index | Run it yourself: cargo test stress 100k --release -- --ignored --nocapture Ready-to-use adapters that make Mimir the default memory backend for popular AI agent frameworks: | Framework | Integration | Type | |---|---|---| LangGraph | MimirStore BaseStore implementation CrewAI MimirMemoryTool AutoGen MimirMemory Memory implementationEach adapter: - Connects via MCP stdio subprocess persistent session - Maps the framework's memory interface to Mimir tools - Comes with a README quickstart 5 minutes to working - Has passing tests with mocked MCP transport Any MCP-compatible framework works with Mimir directly. See Awesome Mimir /Perseus-Computing-LLC/mimir/blob/main/awesome-mimir.md for the full list. | Tool | Description | |---|---| mimir remember | Store/update entity. Idempotent by category, key ; a content change snapshots the prior version into history. | mimir recall | Search with FTS5/dense/hybrid modes, filters, stemming expansion. | mimir recall layer | Recall from a specific biomimetic layer world, episodic, semantic . | mimir recall when | Proactive just-in-time recall: surface entities whose recall when triggers match. | mimir get entity | Fetch one entity by ID with full body json . | mimir as of | Bi-temporal time-travel: the version of a fact category + key that was live at a past instant. | mimir history | List every superseded version of a fact category + key , newest first — the full version trail companion to mimir as of . | mimir forget | Soft-delete archived=1 . | | Tool | Description | |---|---| mimir ask | RAG: recall context, query LLM, return grounded answer with sources. | mimir embed | Generate dense vectors via the bundled model, Ollama, or OpenAI-compatible endpoint. | mimir semantic search | Dense-only semantic search shortcut — find entities by meaning, ranked purely by embedding similarity no keyword fallback . | mimir context | Pre-formatted markdown block for session injection. | mimir ingest | Trigger connector syncs GitHub, file watcher . | mimir ingest file | Locally extract a document's text plaintext/markdown always; DOCX/PDF with the multimodal feature and store it as a recallable entity. | mimir extract | Local, deterministic, rule-based knowledge extraction facts / preferences / temporal events / episodes from text or a stored entity. Read-only. | | Tool | Description | |---|---| mimir link | Create typed relationship links between entities. | mimir unlink | Remove entity links. | mimir traverse | Walk entity link graph up to configurable depth. | | Tool | Description | |---|---| mimir journal | Append structured event with actor attribution. | mimir timeline | Query journal by time range with filters. | | Tool | Description | |---|---| mimir state set | Set key-value state with optional TTL. | mimir state get | Get state value. Returns null if expired. | mimir state delete | Delete state entry. | mimir state list | List state keys, optionally filtered by prefix. | | Tool | Description | |---|---| mimir decay | Recalculate Ebbinghaus decay scores batched 1000-entity transactions . | mimir prune | Bulk archive by category, decay threshold, or age. | mimir purge | Permanently delete archived entities + VACUUM. Destructive. | mimir cohere | Autonomous coherence grooming pass — promote, decay, link, archive. | mimir autocohere | Full atomic grooming: cohere → decay → compact in one pass supports dry-run . | mimir compact | Archive entities below decay threshold. | mimir reindex | Rebuild FTS5 search index from entities table. | | Tool | Description | |---|---| mimir score | Assign quality score 0.0-1.0 . | mimir conflicts | Detect conflicting entities via trigram similarity; opt-in resolve=true invalidates the lower-certainty side into history reversible, dry-run by default . | mimir correct | Structured correction capture for learning from errors. | mimir supersede | Mark a new fact as superseding an old one sets the old entity to deprecated . | | Tool | Description | |---|---| mimir vault export | Export entities to .md files with YAML frontmatter. | mimir vault import | Import from .md vault directory idempotent . | mimir federate | Copy entities between workspaces. | mimir share | Share one entity by category + key into another workspace, preserving content. | mimir workspace list | List all distinct entity categories. | | Tool | Description | |---|---| mimir stats | Full DB statistics across all tables. | mimir health | Server and DB health check. | mimir bench | Performance benchmark tracking. | mimir maintenance | DB maintenance: dedup, orphan detection, VACUUM, FTS5 reindex supports dry-run . | mimir synthesize | LLM session synthesis — extract lessons from transcripts. | mimir migrate | Migrate v0.1.x DB to current schema. | Server mimir serve --db /data/mimir.db mimir serve --web --port 8767 --encryption-key ~/.mimir/secret.key mimir serve --llm-endpoint http://localhost:11434/api/generate --llm-model llama3 mimir serve --transport sse --port 8787 --mcp-token my-secret-token Maintenance operate directly on DB, no server needed mimir stats --db /data/mimir.db mimir forget --db /data/mimir.db --category decision --key stale-choice --reason "superseded" mimir prune --db /data/mimir.db --category junk --min-decay 0.1 --dry-run mimir purge --db /data/mimir.db --dry-run mimir decay --db /data/mimir.db mimir reindex --db /data/mimir.db mimir vault-export --db /data/mimir.db --vault-dir ./export/ mimir vault-import --db /data/mimir.db --vault-dir ./export/ mimir obsidian-sync ~/obsidian-vault/Mimir/ one-shot export to an Obsidian vault mimir obsidian-sync ~/obsidian-vault/Mimir/ --watch continuous sync on every memory change Key management mimir keygen --key-file ~/.mimir/secret.key | Flag | Description | |---|---| --db | SQLite database path default: ~/.mimir/data/mimir.db | --web | Start web dashboard | --port | Dashboard port default: 8767 | --web-bind | Dashboard bind address default: 127.0.0.1 | --transport | MCP transport: stdio default , sse , or http | --mcp-token | Bearer token for SSE/HTTP transport auth | --encryption-key | AES-256-GCM key file path | --llm-endpoint | LLM API endpoint for mimir ask and embeddings | --llm-model | LLM model name default: llama3 | --llm-api-key | API key for LLM endpoints OpenAI, Azure, etc. | --embedding-endpoint | OpenAI-compatible embedding endpoint | --connectors-config | Path to connectors.yaml | Mimir is your AI agent's long-term memory — and it doubles as your second brain. Every entity your agent remembers exports to a plain Markdown note with YAML frontmatter, so your AI's memory becomes a navigable personal knowledge base inside the tools you already use: Obsidian, Logseq, or Notion. Export your entire memory to an Obsidian vault as linked Markdown notes mimir obsidian-sync ~/obsidian-vault/Mimir/ Keep it live — re-export automatically on every memory change mimir obsidian-sync ~/obsidian-vault/Mimir/ --watch Open the vault in Obsidian and you get a graph of your agent's knowledge. WikiLink backlinks. When one entity links to another via mimir link or a depends on / implements / references relationship , the exported note gets a Links section with WikiLink backlinks that resolve natively in Obsidian's graph view: --- id: cli-de8dfb8364b6 category: architecture key: api type: insight decay score: 0.5000 --- {"content":"axum service"} Links - cli-99756b494c7d|database depends on Links resolve by entity id notes are written as