Recall turns your past coding sessions into durable, searchable memory. It reads your local agent transcripts, extracts what each session did - the request, the files read and changed, the outcome - and stores it in a local SQLite database you can search from the CLI, the dashboard, or that agents can query over MCP.
It is off by default and reads only your own local transcripts; nothing leaves your machine. This is separate from agent memory (CLAUDE.md/AGENTS.md), which is instruction content - recall is a record of what happened.
Enable it
enigma config recall on
Turn recall on, then build the store from your existing transcripts. After that the dashboard and CLI keep it fresh.
Use it
enigma recall [action]
sync reads new transcripts into the store. search <query> runs a hybrid search; list shows recent observations; show <id> prints one in full; timeline <id> shows what happened around it; sessions lists recorded sessions; context [project] prints a compact memory block; prune <n> keeps only the newest n (or prune days <n>); clear wipes the store.
Once recall is on, launching an agent through enigma (enigma claude) also refreshes it in the background, so memory stays current without a manual sync.
Search is hybrid
Search fuses keyword ranking (SQLite FTS5/BM25) with a vector similarity pass, merged by reciprocal rank fusion. The vector half is a dependency-free local embedding (word + character-trigram feature hashing), so it adds fuzzy recall - typos and related word forms still match - with no model, network, or extra dependency. A pluggable embedding provider can later replace the local one for true dense semantics.
How extraction works
By default extraction is deterministic - no LLM call, no cost, fully reproducible. For each user turn in a transcript it records:
- the request (the prompt), as the observation title
- the files read and files modified (from the agent’s tool calls)
- a short narrative (the agent’s last reply for that turn) and facts (files changed, commands run)
- an inferred type:
bugfix,feature,refactor,change,discovery,decision, orsecurity
Secrets are redacted and <private>...</private> blocks are dropped before anything is stored.
Today recall reads Claude Code transcripts; Codex and OpenCode are supported as sources once their local transcript format is verified, behind the same store and search.
LLM enrichment (optional)
recall-llm (on by default) has an LLM curate the store: it keeps the observations worth remembering and discards trivial ones. It runs in the background, batched per session and capped per pass to keep quota use small, and falls back to the deterministic heuristic when no login is available. The model comes from recall-provider: claude-local reuses your Claude Code login; anthropic and openai take recall-model, recall-api-base and an encrypted recall-api-key.
enigma config recall-llm off
enrich curates the sessions not processed yet, on demand (it also runs after every sync). Turn curation off to keep only the deterministic observations.
Retention
For long-term use, keep the store bounded with enigma recall prune <maxRows> or enigma recall prune days <n> (drops observations beyond the newest n, or older than n days).
For agents (MCP)
When recall is on, enigma’s MCP server exposes these tools to any connected agent (Claude Code, Codex, OpenCode), following a token-efficient search -> timeline -> get workflow:
enigma_recall- search the memory index (compact results with ids);queriesadds extra phrasings of the same needenigma_recall_timeline- chronological context around an observation, including older versionsenigma_recall_get- fetch full details for specific idsenigma_recall_remember- save one fact about the current project (secrets redacted,<private>blocks dropped)enigma_recall_forget- hide outdated or wrong observations by id, with a reason (up to 20 per call)
So an agent can recall prior context about a project at the start of a task. Search first, then fetch only the ids that matter - keeping token use low.
Memories stay current on their own: the same fact learned in another session strengthens the existing one instead of duplicating it, a newer version of a fact replaces the older one in search, and recent, often-repeated facts rank a little higher. Results come back inside a read-only <enigma-recall> block, so stored text is treated as data, not instructions.
Where it lives
The database is ~/.enigma/recall/recall.db (SQLite with FTS5 keyword search and a vector table). Reset it any time with enigma recall clear or from the dashboard’s Recall tab, where you can also browse observations, expand their detail, and view a timeline.