Teams decide things in Slack and standups and then nothing reaches the tracker. Extracting typed chunks — decision, blocker, scope change — is what makes those recoverable later, and semantic search finds the right one even when the words have changed.
A single Go binary that captures conversations, extracts structured project artifacts, and makes them searchable by semantic embedding. The vector store and the embedding model are both embedded in the binary, so there is no Ollama, no Docker and no external process.
- 10 tools once connected: `save_conversation`, `remember`, `search`, `recall`, `observe_turn`, `list_chunks`, `update_status`, `delete_chunk`, `list_actions`, `consolidate_memory`
- Chunk types that match how project talk actually breaks down — `decision`, `action_item`, `blocker`, `requirement`, `scope_change`, `context`, `research_finding`, `status_update`
- `recall` returns a bounded context packet with memory IDs and source references, so an LLM pulls only what it needs
- Working, episodic, semantic and procedural memory in isolated namespaces, each with provenance, confidence, importance and a validity window
- `list_actions` for everything still pending, and `update_status` / `delete_chunk` so the knowledge base stays current
- An HTTP API on port 8420 as an alternative to MCP stdio, plus a memory proxy for providers that do not speak MCP at all
Go 1.22+ with CGO enabled to build from source; then add the binary to your client with `--mcp` for stdio mode. On first run it downloads the embedding model (all-MiniLM-L6-v2, about 80MB) into `./data/models/`. `DATA_DIR` sets where the SQLite database, model files and vector index live. Automatic consolidation of episodic memory is optional and only runs when `MEMORY_LLM_BASE_URL` points at an OpenAI-compatible endpoint. It runs on a 2GB VPS.
