Recall (session memory)

A local, searchable memory of your coding sessions, built from your own transcripts and exposed to agents over MCP.

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.

$ enigma config recall on
$ enigma recall sync

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.

$ enigma recall sync
$ enigma recall search auth refresh
$ enigma recall list
$ enigma recall show 42
$ enigma recall timeline 42
$ enigma recall sessions
$ enigma recall prune 5000
$ enigma recall clear

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, or security

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.

$ enigma config recall-llm off
$ enigma recall enrich

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); queries adds extra phrasings of the same need
  • enigma_recall_timeline - chronological context around an observation, including older versions
  • enigma_recall_get - fetch full details for specific ids
  • enigma_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.