|
I use Claude Desktop, Claude Code, and Cursor daily. They all have memory now, but none of them share it. Something I explained in Claude Desktop doesn't exist when I open Cursor. I got tired of re-explaining my stack, my preferences, and my project context every time I switched tools. Most solutions I found required Docker, external databases, or cloud accounts - overkill for what's essentially a personal context store. So I built Covalence: a Mac app that bundles an MCP server and a local vector database into a single download. Any MCP client connects to it. Store a memory in Claude, retrieve it from Cursor. Same database, zero config. The stack:
SQLite + sqlite-vec, nomic-embed-text-v1.5 running on-device via CoreML (no API keys, no network calls). Hybrid BM25 + vector search. Everything lives in a single SQLite file.
The hard part was concurrency. Multiple Claude sessions writing to the same MCP server would deadlock. SQLite in WAL mode with each MCP client as a separate process solved it - multiple clients read and write simultaneously without blocking. Embeddings run sub-second on Apple Silicon. A few features that emerged from daily use: Core Memories - pin facts the AI should always know (your stack, your preferences, standing instructions). They persist across every session and every client.
Spaces - separate memory contexts for work, personal, or individual projects. No cross-contamination.
Global hotkey capture - store something without switching away from whatever you're doing. Free, no limits. macOS 15+, ~261MB (mostly the CoreML embedding model).
https://covalence.app |
One thing I'm curious about — how are you handling memory relevance decay? If I stored context about a project six months ago that's no longer accurate, the hybrid search might still surface it confidently. Do you have any mechanism for staleness detection or does the user have to manually curate old memories?