| 1 | [English](README.md) | [Français](README_fr.md) | [Español](README_es.md) | [Deutsch](README_de.md) | [Italiano](README_it.md) | [Português](README_pt.md) | [Nederlands](README_nl.md) | [Polski](README_pl.md) | [Русский](README_ru.md) | [日本語](README_ja.md) | [中文](README_zh.md) | [العربية](README_ar.md) | [한국어](README_ko.md) |
| 2 | |
| 3 | <p align="center"> |
| 4 | <img src="assets/banner.png" alt="ICM — Infinite Context Memory" width="600"> |
| 5 | </p> |
| 6 | |
| 7 | <h1 align="center">ICM</h1> |
| 8 | |
| 9 | <p align="center"> |
| 10 | Permanent memory for AI agents. Single binary, zero dependencies, MCP native. |
| 11 | </p> |
| 12 | |
| 13 | <p align="center"> |
| 14 | <a href="https://github.com/rtk-ai/icm/actions/workflows/ci.yml"><img src="https://github.com/rtk-ai/icm/actions/workflows/ci.yml/badge.svg" alt="CI"></a> |
| 15 | <a href="https://github.com/rtk-ai/icm/releases/latest"><img src="https://img.shields.io/github/v/release/rtk-ai/icm?color=purple" alt="Release"></a> |
| 16 | <a href="LICENSE"><img src="https://img.shields.io/badge/License-Apache--2.0-blue.svg" alt="Apache-2.0"></a> |
| 17 | </p> |
| 18 | |
| 19 | --- |
| 20 | |
| 21 | > ⚠️ **Project status: experimental** |
| 22 | > |
| 23 | > ICM is pre-1.0 and under active development. Breaking changes can land |
| 24 | > in any minor release, and hooks/MCP configuration formats may shift. |
| 25 | > |
| 26 | > That said, I (the maintainer) use ICM every day as my primary AI |
| 27 | > coding memory layer — it's experimental in API stability, not in |
| 28 | > day-to-day usefulness. |
| 29 | > |
| 30 | > My focus is currently on [rtk](https://github.com/rtk-ai/rtk); ICM |
| 31 | > updates are merged on a best-effort cadence. Issues and pull requests |
| 32 | > are welcome but may take longer to review than usual. |
| 33 | > |
| 34 | > ICM is Apache-2.0 licensed and ships **as-is, without warranty of any |
| 35 | > kind** (see [LICENSE](LICENSE)). Before any destructive operation, run |
| 36 | > the read-only equivalent first (`icm uninstall --dry-run`, |
| 37 | > `icm uninstall --check`). |
| 38 | |
| 39 | --- |
| 40 | |
| 41 | ICM gives your AI agent a real memory — not a note-taking tool, not a context manager, a **memory**. |
| 42 | |
| 43 | ``` |
| 44 | ICM (Infinite Context Memory) |
| 45 | ┌──────────────────────┬──────────────────────────┐ |
| 46 | │ MEMORIES (Topics) │ MEMOIRS (Knowledge) │ |
| 47 | │ │ │ |
| 48 | │ Episodic, temporal │ Permanent, structured │ |
| 49 | │ │ │ |
| 50 | │ ┌───┐ ┌───┐ ┌───┐ │ ┌───┐ │ |
| 51 | │ │ m │ │ m │ │ m │ │ │ C │──depends_on──┐ │ |
| 52 | │ └─┬─┘ └─┬─┘ └─┬─┘ │ └───┘ │ │ |
| 53 | │ │decay│ │ │ │ refines │ │ |
| 54 | │ ▼ ▼ ▼ │ ┌─▼─┐ ┌─▼─┐│ |
| 55 | │ weight decreases │ │ C │──part_of──>│ C ││ |
| 56 | │ over time unless │ └───┘ └───┘│ |
| 57 | │ accessed/critical │ Concepts + Relations │ |
| 58 | ├──────────────────────┴──────────────────────────┤ |
| 59 | │ SQLite + FTS5 + sqlite-vec │ |
| 60 | │ Hybrid search: BM25 (30%) + cosine (70%) │ |
| 61 | └─────────────────────────────────────────────────┘ |
| 62 | ``` |
| 63 | |
| 64 | **Two memory models:** |
| 65 | |
| 66 | - **Memories** — store/recall with temporal decay by importance. Critical memories never fade, low-importance ones decay naturally. Filter by topic or keyword. |
| 67 | - **Memoirs** — permanent knowledge graphs. Concepts linked by typed relations (`depends_on`, `contradicts`, `superseded_by`, ...). Filter by label. |
| 68 | - **Feedback** — record corrections when AI predictions are wrong. Search past mistakes before making new predictions. Closed-loop learning. |
| 69 | |
| 70 | ## One memory, every AI tool — no re-explaining |
| 71 | |
| 72 | The point of ICM: **you stop re-explaining context every time you switch |
| 73 | AI tools**. Tell Claude Code about your project's auth strategy on |
| 74 | Monday — Tuesday's Gemini session already knows it. Hit a Postgres |
| 75 | indexing gotcha in a Codex run — next week's Cursor session finds the |
| 76 | fix in `errors-resolved`. |
| 77 | |
| 78 | This works because every AI tool you configure with `icm init` reads |
| 79 | and writes the **same SQLite database** at the OS |