Nothing is auto-extracted from your conversations: you store what matters, typed as a fact, preference, instruction, feedback, decision or insight, and tagged. That makes the store curated rather than noisy, and search returns snippets first so retrieval stays cheap until you ask for a full memory by name. The unusual part is dreaming — dream_report surfaces near-duplicates and conflicts and the merge happens through the model non-destructively, with superseded memories retired by expiry rather than deleted.
A Python memory server backed by PostgreSQL with pgvector: memories are stored explicitly, typed and tagged, and retrieved by BM25 full-text and vector search fused together.
- store_memory — save a memory, idempotent by content, with near-duplicate detection and an optional expires_at
- retrieve_memory — hybrid semantic and full-text search, returning compact snippets so a lookup does not flood the context
- recall_memory — search by a natural-language time expression rather than a date range
- get_memory — the full content of one memory by name, expired ones included
- list_memories with type and tag filters, and search_by_tag with AND/OR matching
- update_memory, delete_memory and move_memory, including moving a memory between workspaces
- list_workspaces — the shared and personal workspaces you belong to
- dream_report — a read-only consolidation pass listing similar pairs, expired and expiring-soon memories, which the dream prompt then walks the model through merging
- A web UI for browsing, editing, deleting and exporting memories as JSON
- Local ONNX embeddings that ship with the server — no embedding API key to configure
Python 3.12 with uv, and PostgreSQL 15 or newer with the pgvector extension. OAuth 2.1 is always on; set MEMLORD_BASE_URL to your public URL and change MEMLORD_OAUTH_JWT_SECRET before deploying. Docker Compose start is documented. Dual-licensed: AGPL-3.0 for open-source use, commercial licence for closed-source deployments.
One command — uvx memlord
