**English** | [中文](./README_zh-CN.md)

iai-memory — a personal memory engine for your AI coding workflow

Keeps every conversation word-for-word and gives your AI agent the right
context on every turn.

iai-memory searching, recalling, pinning, fading, rescuing, and learning a file

iai-memory on PyPI MIT License Python 3.11 or 3.12 macOS and Linux supported Windows beta MCP compatible

Rescue@10 1.000 LongMemEval R@5 0.962 Historical-verbatim hit@10 1.000 AES-256-GCM at rest

Quick start · How it works · Benchmarks · Compatibility · Technical reference

--- ## What it is A local server that speaks the MCP protocol and gives Claude, and any other MCP-compatible agent, a long-term memory. It captures every turn of every session verbatim, organizes those captures over time into a personal map of who you are, and serves a small slice of relevant memory back at the start of each new conversation and turn. You never have to say *"remember this"* or *"what did we say last time?"*. I built this for myself. It worked. The benchmarks were mostly for my own curiosity. Under the hood it's not a wrapper around someone else's vector store and graph library — the parts that matter are my own code: the storage engine, the community-detection algorithm, the hyperdimensional memory substrate, and a native engine that makes it fast. And unlike cloud memory services, there's no API key, no account, and no telemetry: the engine, the store, and the embeddings all run locally. The only things that leave your machine are the normal model calls your CLI already makes, a nightly consolidation step that asks your model for a single insight through the same subscription your CLI already uses (on by default; `IAI_MCP_REM_DISABLED=1` turns it off), a daily version check, and the one-time download of the embedding model. --- ## Quick start ### Claude Code ```bash python3.12 -m pip install -U iai-pme ``` Then run inside Claude Code: ```text /plugin marketplace add CodeAbra/iai-personal-memory-engine /plugin install iai-memory@iai-pme ``` Restart the session, then verify: ```bash iai --version iai-mcp daemon status iai-mcp doctor ``` Python 3.11 is also supported. ### macOS or Linux: all-in-one source install ```bash curl -fsSL https://raw.githubusercontent.com/CodeAbra/iai-personal-memory-engine/main/scripts/bootstrap.sh | bash ``` This builds the Rust engine and TypeScript wrapper, installs the background service and hooks, registers Claude Code, and runs the health check. It requires Git, Python 3.11/3.12, Node.js 18+, and Rust. To inspect the steps without changing anything: ```bash curl -fsSL https://raw.githubusercontent.com/CodeAbra/iai-personal-memory-engine/main/scripts/bootstrap.sh | bash -s -- --dry-run ``` ### Other hosts ```bash python3.12 -m pip install -U iai-pme iai-mcp crypto init iai-mcp daemon install iai-mcp capture-hooks install --target codex ``` Replace `codex` with `cursor`, `antigravity`, `hermes`, `openclaw`, or `all`. MCP tools work with any MCP-over-stdio client; automatic capture and context injection depend on the hooks exposed by the host. See the [technical reference](docs/REFERENCE.md). New stores use the native engine format by default; an existing store keeps its current format on upgrade. To move an existing legacy SQLite store onto the native engine, run `iai-mcp migrate-to-lilli` — `iai-mcp doctor` prints the exact command, and the [technical reference](docs/REFERENCE.md) documents the full flow. --- ## What happens after installation | Event | Action | |---|---| | Prompt | New turns are appended to a session buffer as file IO; no embedding or engine RPC is needed on the capture path | | Session end | Remaining transcript content is rolled over for ingestion; hook failures do not block the host | | Session start | A bounded memory prefix is exposed as host context; an empty store or unavailable engine yields empty output | | Later turns | Supported hosts receive a small foresight or delta pack with age and revision markers | | Idle time | Captures are embedded, deduplicated, encrypted, inserted, clustered, consolidated, reinforced, and decayed | The background process is called the `daemon` in the CLI. The MCP wrapper and `iai` can still read the local store directly when it is asleep or temporarily unavailable. --- ## How it works ### Memory model | Tier | Contains | |---|---| | **Episodic** | Timestamped, write-once fragments of what was said | | **Semantic** | Summaries induced from related episodes during idle consolidation | | **Procedural** | Ten bounded behavioural parameters learned over time | Distinct hyperdimensional representations keep literal detail, semantic structure, and behavioural tendencies from collapsing into one vector surface. The local, LLM-free recall path combines semantic similarity, graph evidence, recency, temporal validity, and lexical evidence. `memory_recall` returns both `hits` and `anti_hits`; `memory_contradict` closes the old record's validity interval, creates a new record, and links the two. While idle, the engine groups related episodes, induces semantic memory, reinforces useful paths, and decays weak unreviewed edges. One REM step, on by default, may invoke `claude -p` through the user's existing Claude subscription, capped at no more than 1% of the daily quota; `IAI_MCP_REM_DISABLED=1` turns it off. No Anthropic API key is required. ### First-party components | Component | Role | |---|---| | **Hippo** | Encrypted records, vector index, and graph in one local store | | **MOSAIC** | Leiden-family community detection with stable community identity | | **Lilli HD** | Hyperdimensional substrate and structural recall | | **Native engine** | Rust embedder and graph kernels | --- ## Dashboard and CLI ```bash iai brain ``` The local dashboard searches the store, exposes graph neighbourhoods and contradictions, pins or fades memories, ingests files, controls the background engine, and reports token-use estimates from your own store. ```text iai recall · temporal-recall · search · ask · capture · teach · upload iai watch · brain · status · last ``` `iai upload` accepts documents, Office files, e-books, source code, configuration files, and directories. Full formats and administrative commands are listed in [`docs/REFERENCE.md`](docs/REFERENCE.md). --- ## Benchmarks Every harness ships in `bench/`; methodology and reproduce commands are in [`BENCHMARKS.md`](BENCHMARKS.md). | Benchmark | Result | |---|---:| | Rescue@10 after contradiction | **1.000** | | Historical-verbatim hit@10 | **1.000** | | LongMemEval-S R@5, product embedder | **0.962** | | LongMemEval-S R@10, product embedder | **0.978** | Historical-verbatim retrieval uses a flat-cosine baseline of about 0.71. With the matched `all-MiniLM-L6-v2` embedder, iai-memory and mempalace v3.3.6 both score R@5 `0.966` and R@10 `0.978`; no win is claimed. On the author's store, an automatically injected memory pack averaged about 350 tokens versus about 2,850 tokens for the agent-search round trip it replaced: approximately 88% cheaper on that measured workload. This does not apply to explicit `memory_recall`, whose default response budget is 1,500 tokens. --- ## MCP tools ```text 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 claim_check ``` Fifteen tools cover cue, temporal, structural, and lexical recall; checking a claim against memory; capture and correction; reinforcement and consolidation; behavioural-profile control; and store introspection. --- ## Compatibility | Host | Ambient behaviour | |---|---| | **Claude Code** | Session-start recall, per-turn updates, turn capture, and session capture | | **Codex CLI** | Full integration through Codex hooks | | **Cursor** | Session-start recall and capture; no per-turn text injection | | **Antigravity** | Recall per invocation and lossless transcript capture | | **Hermes 0.5.0+** | Recall before model calls and capture from its message store | | **OpenClaw** | MCP tools on request; no ambient shell hooks | | **Gemini CLI and other MCP hosts** | MCP tools; no bundled host-specific hooks unless listed above | | **Claude Desktop** | MCP tools; plain Chat does not expose Claude Code-style ambient hooks | --- ## Privacy and limitations - Records are encrypted at rest with AES-256-GCM. The store and key live under `~/.iai-mcp/`; back them up together. Two kinds of files there are plain text: the per-turn capture spool until the engine's next pass encrypts it, and the caches the hooks inject memory from. The [plugin README](plugin/README.md#privacy) lists them. - macOS and Linux use a Unix socket. Windows uses an ephemeral loopback port with a per-user token. - There is no iai-memory account, telemetry pipeline, hosted dashboard, or cross-machine sync. - iai-memory goes online in three places, each with an off switch: the nightly REM `claude -p` step (on by default, `IAI_MCP_REM_DISABLED=1`), a daily PyPI version check (`IAI_MCP_VERSION_CHECK=0`), and the first-use download of the embedding model from Hugging Face (`IAI_MCP_EMBED_OFFLINE=1`). - The engine checks that your Claude Code login is a subscription by reading Claude Code's login record (`~/.claude/.credentials.json`, or the macOS Keychain item) when the MCP server starts and before the REM step. Nothing from the record is sent anywhere. - The MCP server starts the engine in the background, and it keeps running after the session ends. Stop it with `iai-mcp daemon stop`. - The store refuses to mix incompatible embedding generations; changing the embedder requires an explicit migration. - Recall is usually mediocre during roughly the first ten sessions, and quality and latency depend on corpus size, language, embedder, and stored history. - The default store is English-first. Raw non-English records require an explicit `raw:` tag and a multilingual or custom embedder. - Windows support is beta. Ambient behaviour varies with host hook support. - The project is solo-maintained and has no enterprise SLA. Health and updates: ```bash iai-mcp doctor # 38 checks iai-mcp daemon status iai-mcp self-update ``` --- ## About the name **IAI — Independent Autistic Intelligence** describes the memory design. - **Independent:** the engine, store, embeddings, and dashboard run locally. - **Autistic:** literal preservation, precise cues, sustained focus, and rare events retained as rare rather than smoothed into a typical summary. This is an operational design description, not a diagnosis or casual metaphor. - **Intelligence:** used in the systems sense — a process that observes, adapts, reorganizes itself, and remains viable over time. “Personal memory engine” describes the scope: one person's memory, on one machine, used by the assistant they already have. --- ## Documentation - [`docs/REFERENCE.md`](docs/REFERENCE.md) — technical and operational reference - [`BENCHMARKS.md`](BENCHMARKS.md) — methodology and reproduce commands - [`docs/EMBEDDERS.md`](docs/EMBEDDERS.md) — providers, languages, and migrations - [`CHANGELOG.md`](CHANGELOG.md) — release history - [`CONTRIBUTING.md`](CONTRIBUTING.md) — development and test setup - [`SECURITY.md`](SECURITY.md) — private vulnerability reporting Issues and pull requests are welcome. Changes to retrieval, capture, contradiction handling, or consolidation should include relevant benchmark reruns. ## Authors By Areg Aramovich Noya and Lilli Noya, in collaboration with the team at [lcgc.dev](https://lcgc.dev). ## License [MIT](LICENSE)