Finding a memory

Five ways in, each one suited to a different kind of question. All of them answer straight from the local store, with the model kept out of the loop.

RouteEntry pointWhat it is for
By cuememory_recall Similarity, graph strength and recency fused in one pass. Contradicting memories return alongside matching ones.
By timememory_temporal_recall “What did I say about pricing in May?” Every record carries the window it was true for.
By shapememory_recall_structural Matches the structure of a memory, so you can find one whose wording you have forgotten.
By textmemory_search Keyword search over the record surface, fused with the semantic lane.
Engine asleepiai-mcp bank-recall Reads the store directly. Recall keeps working while the engine rests.

Every response reports how it was produced: the token budget it respected, whether the cue was read as literal or conceptual, which pattern triggered that reading, and the latency. A degraded run announces itself.

Finding the right memory: R@5 0.962  ·  python -m bench.longmemeval_blind

Staying accurate over months

The whole design rests on one promise: what you said is what comes back, and every version you ever held stays on the record.

A replaced fact stays reachable: 1.000  ·  its original wording survives: 1.000  ·  python -m bench.contradiction_longitudinal

Token economy

Memory pays for itself. An assistant that has forgotten something goes hunting for it, and that hunt is what memory replaces.

Session-start cost: 1,629 min / 2,993 std  ·  python -m bench.tokens

The nightly cycle

The heavy work waits for you to step away. The engine learns when that usually happens and books itself into that window.

Ambient capture, six assistants

One command wires every assistant on the machine. From then on it records as you work.

AssistantWhat it gets
Claude CodeRecall at session start, recall before each turn, turn capture, session capture
CodexThe same four, registered in its own hook file
CursorSession-start recall and full capture
AntigravityRecall on each invocation, capture from the full transcript
HermesRecall before each model call, capture at session end
OpenClawThe memory tools, available on request

Teaching it directly

Drop a file in and it studies it: splits it into passages, weaves them into what it already knows, keeps one copy of anything familiar, then verifies that it can recall what it just read and reports the difference.

Accepted: .txt .md .markdown .rst .tex .bib .csv .pdf .docx .pptx .xlsx .rtf .epub

Office documents are read straight from their container, and the PDF reader loads only when a PDF actually arrives.

The dashboard

A live map of the memory, and every control on it does real work. iai brain opens it locally.

The terminal

Two commands. iai is for asking memory things. iai-mcp is for running it.

iai        recall · temporal-recall · search · ask · capture · teach · upload ·
           watch · brain · status · last

iai-mcp    doctor · self-update
           daemon {install,start,stop,restart,logs,pause,resume,stats,configure}
           crypto {init,status,rotate,migrate-to-file,recover-with-prior-key,
                   redact-undecryptable}
           maintenance {compact-hippo,compact-records,idem-dedup,edge-backfill,
                        schema-cleanup,sleep-cycle}
           capture-hooks {install,uninstall,status} · cowork · lifecycle ·
           migrate · build-native · audit

iai watch keeps a folder in step: it rescans every thirty seconds, restudies what changed and retires what you deleted.

Looking after itself

Your data, your keys

What runs it

Four pieces do the load-bearing work, and all four are ours.

Hippo — the store

Records, search index and the connections between memories in one encrypted file. Written for a graph that changes every night.

MOSAIC — the sorting

Works out which memories belong together. A Leiden-family method on the CPM objective, rewritten in permissively licensed Python so the whole project stays MIT.

Lilli HD — the substrate

Gives moments, knowledge and habits their own representation in one store, which is how you find a memory by its shape.

The native core

Rust: the embedder and the graph kernels. This is where the speed comes from.

Underneath sit boring, audited, permissively licensed pieces: the encryption, the tensor library and the numerical stack are other people’s excellent work, deliberately.

The fifteen tools your assistant can call

memory_recall · memory_temporal_recall · memory_recall_structural · memory_search · memory_capture · memory_contradict · memory_reinforce · memory_consolidate · profile_get_set · topology · schema_list · events_query · episodes_recent · curiosity_pending · camouflaging_status

The engine also tells your assistant when to reach for memory: ask it first for decisions, preferences, past discussion and rationale, and keep file search for the current state of the code.

Where the line is

Worth saying plainly, so you know what you are getting.

pip install iai-pme Back to the overview