Client: RMS Digital Services (in-house)
Visit website — github.comRust MCP server + Tauri desktop GUI. One vault, every IDE, every session.
AI coding agents are stateless by design. Every session starts from zero — architectural decisions, known constraints, debugging history, team conventions. Developers compensate by maintaining per-tool rules files that drift out of sync, pasting context manually between sessions, or accepting that every agent works from an incomplete picture of the project.
RMS Memory is a local-first memory layer built to solve this at the infrastructure level. A Rust MCP server maintains an isolated Markdown vault per project, indexes it with hybrid vector and full-text retrieval, and exposes five MCP tools to any connected IDE. Agents read context from the vault automatically and write new decisions back to it proactively. An optional commercial Tauri desktop application adds visual editing, a WebGL knowledge graph, Git and GitHub vault sync, an AI-assisted organizer with proposal review, and cross-tool spend tracking on top of the same data layer.
The core data layer is plain Markdown — one vault per project, stored at ~/.rms-memory/vaults/, outside the repository. LanceDB provides embedded storage combining vector similarity search with Tantivy full-text search. Queries use Reciprocal Rank Fusion when searching across vault and code corpora to avoid incompatible raw distance comparisons.
The optional semantic code corpus is built with Tree-sitter and stored in a separate LanceDB table. Thirteen language adapters cover Rust, Go, TypeScript, JavaScript, JSX, TSX, Python, C, C++, Java, Ruby, Swift, and Vue inline scripts. Unchanged code segments reuse their vectors on reindex. In watch mode, only dirty paths are reindexed; a shared completion marker prevents duplicate reindexes across concurrent IDE processes.
The MCP server is a JSON-RPC stdio server. It resolves project scope through explicit --scope, legacy rootUri, negotiated roots/list, or a tool-level project key — in that order, fail-closed. A per-project filesystem lock is shared across all IDE processes connecting to the same vault. Writes are atomic: a same-directory temporary file is fsynced and then renamed into place. Rolling .bak backups (default: 5) are kept before any mutation.
The Tauri GUI reads from and writes to the same ~/.rms-memory/ directory as the MCP server. The backend is Rust, the frontend is React 19 with Vite 6 and Tailwind 4. The knowledge graph runs in WebGL with force-layout computed in a Web Worker. Heavy screens are lazy-loaded; Monaco and Milkdown are separate chunks.
fastembed-rs (multilingual-e5-small)pulldown-cmark.cursorrules, CLAUDE.md, .zed/assistant.md<vault>/wiki/** excluded from all retrieval, indexing, and write pathslast_modified_by, timestamp, confidence, sourcellms.txt exportproject → folder → file → symbol hierarchy from Tree-sitter indexing<vault>/wiki/, excluded from MCP searchllms.txt and Graphviz DOT exportRust · LanceDB · Tantivy · fastembed-rs · Tree-sitter · pulldown-cmark · Tauri 2 · React 19 · Vite 6 · Tailwind 4 · Monaco · Milkdown · WebGL · GitHub Actions · Contabo self-hosted CI
Production
MCP distributed via Homebrew (max-ramas/tap), crates.io, and GitHub Releases (.deb, .rpm, prebuilt binaries for macOS Apple Silicon, Linux x64/arm64, Windows x64). GUI distributed as binary-only installers via GitHub Releases (.dmg, .msi, .exe, .AppImage, .deb, .rpm).