error_check before a task and memory_contradict for supersession are the pieces most memory servers lack: the first asks whether this has already failed, the second records that a newer fact replaced an older one instead of leaving both in the index. Recall expands through bonds, so a hit pulls its neighbours with it.
A local-first memory server on SQLite. Memories are typed atoms joined by typed bonds; recall combines full-text search, semantic similarity from local Ollama embeddings, confidence, recency and expansion through the graph.
- 35 tools over the memory store
- remember, recall, working_set, semantic_search, get_atom, list_atoms, merge_atoms, export_atom
- link and unlink, search_graph, suggest_bonds and suggest_bonds_all for the knowledge graph
- curator_run, learning_run, cognitive_status, decay_run, reindex_embeddings and the cleanup tools for maintenance
- error_check, error_log, error_list and preference_search — remembered mistakes, with promotion to preferences after repeated failures
- memory_contradict, list_contradictions, classify_memory_tier and memory_impact for supersession and dependency analysis
- import_markdown for existing notes, one-way, so your human-readable files stay intact
- backup_database, restore_database, export_all and import_data
- An optional web UI for graph exploration and contradiction browsing
Docker with the published image, or Python. It serves SSE on port 8085 by default. All four environment variables are optional: MEMORY_DB_PATH, MARKDOWN_SOURCE, MEMORY_PORT and MEMORY_API_TOKEN — setting the token makes every request require a bearer. Semantic search wants Ollama with nomic-embed-text; without it, full-text recall still works.
One command — docker compose up -d
