recall_memory / client.recall()) runs against it, entirely on-device.
There is no remote or server-side vector store. The replication server never receives embeddings — only encrypted
text and metadata. If you’re looking for how remote data is stored, see Storage Architecture: it’s two Postgres tables plus a ciphertext bucket, not a vector database.How local search works
LanceDB runs as an embedded serverless library inside your agent or MCP server process — no background daemon, no connection management. Queries execute in sub-10ms (6.1ms p50 warm recall) using vector search over Float32 normalized vectors.File System Layout
- Default Database Location:
~/.sovseal/db/ - Memories Table Path:
~/.sovseal/db/memories.lance/ - Override with the
SOVSEAL_DB_DIRenvironment variable.
Arrow Table Schema (v2)
See Memory Model for what these fields mean at the record-shape level, not just the storage level.
Thread Safety & File Locking
- Reader Isolation: Multi-threaded read queries are non-blocking — multiple agents or editor panels can call
recall_memorysimultaneously. - Writer Coordination: Writes are serialized via internal file-locking.
- Transaction Log: LanceDB uses append-only transaction logs. If your machine crashes mid-write, the database recovers to the latest consistent state on next start.
Replication (what leaves the device)
When you configure an API key and endpoint, a backgroundSyncWorker monitors local rows with sync_status = 'pending', encrypts them client-side with AES-256-GCM, and pushes ciphertext to the edge endpoint — see Replication & Sync for the full batching, retry, and conflict-handling behavior. The vector column never replicates; only encrypted text and non-secret metadata do.