英语 | 法语 | 西班牙语 | 德语 | 意大利语 | 葡萄牙语 | 荷兰语 | 波兰语 | 俄语 | 日本语 | 中文 | 阿拉伯语 | 韩语
ICM
Permanent memory for AI agents. Single binary, zero dependencies, MCP native.
______________________________________________________________________
ICM为你的AI代理提供了一个真正的记忆——不是一个笔记工具,也不是一个上下文管理器 记忆.
ICM (Infinite Context Memory)
┌──────────────────────┬─────────────────────────┐
│ MEMORIES (Topics) │ MEMOIRS (Knowledge) │
│ │ │
│ Episodic, temporal │ Permanent, structured │
│ │ │
│ ┌───┐ ┌───┐ ┌───┐ │ ┌───┐ │
│ │ m │ │ m │ │ m │ │ │ C │──depends_on──┐ │
│ └─┬─┘ └─┬─┘ └─┬─┘ │ └───┘ │ │
│ │decay │ │ │ │ refines ┌─▼─┐│
│ ▼ ▼ ▼ │ ┌─▼─┐ │ C ││
│ weight decreases │ │ C │──part_of──>└───┘│
│ over time unless │ └───┘ │
│ accessed/critical │ Concepts + Relations │
├──────────────────────┴─────────────────────────┤
│ SQLite + FTS5 + sqlite-vec │
│ Hybrid search: BM25 (30%) + cosine (70%) │
└─────────────────────────────────────────────────┘两种内存型号:
- 回忆 --按重要性进行时间衰减的存储/回忆。批判性记忆永不褪色,低重要性的记忆会自然衰退。按主题或关键字筛选。
- 回忆录 --永久知识图。通过类型化关系链接的概念(
depends_on,contradicts,superseded_by, ...).按标签过滤。 - 反馈 --当人工智能预测错误时记录更正。在做出新的预测之前,先搜索过去的错误。闭环学习。
安装
# Homebrew (macOS / Linux)
brew tap rtk-ai/tap && brew install icm
# Quick install (macOS / Linux) — verifies SHA256 against the release checksums
curl -fsSL https://raw.githubusercontent.com/rtk-ai/icm/main/install.sh | sh
# Quick install (Windows PowerShell)
irm https://raw.githubusercontent.com/rtk-ai/icm/main/install.ps1 | iex
# From source
cargo install --path crates/icm-cli重新运行install命令以升级到最新版本。要固定版本,请传递 --version icm-vX.Y.Z (sh: sh -s -- --version …).
设置
# Auto-detect and configure all supported tools
icm init配置 17工具 在一个命令中(完整集成指南):
| 工具 | MCP | 钩子 | CLI | 技能 |
|---|---|---|---|---|
| 克劳德代码 | ~/.claude.json | 5个挂钩 | CLAUDE.md | /recall /remember |
| 克劳德桌面 | JSON | -- | -- | -- |
| Gemini CLI | ~/.gemini/settings.json | 5个挂钩 | GEMINI.md | — |
| Codex CLI | ~/.codex/config.toml | 4个挂钩 | AGENTS.md | — |
| Copilot命令行界面 | ~/.copilot/mcp-config.json | 4个挂钩 | .github/copilot-instructions.md | — |
| 光标 | ~/.cursor/mcp.json | — | — | .mdc 规则 |
| Windsurf | JSON | -- | .windsurfrules | — |
| VS代码 | ~/Library/.../Code/User/mcp.json | — | — | — |
| Amp | JSON | -- | -- | /icm-recall /icm-remember |
| 亚马逊Q | JSON | -- | -- | -- |
| Cline | VS代码全局存储 | -- | -- | -- |
| Roo代码 | VS代码全局存储 | -- | -- | .md 规则 |
| 千码 | VS码全局存储 | -- | -- | -- |
| Zed | ~/.zed/settings.json | — | — | — |
| OpenCode | JSON | TS插件 | -- | -- |
| Continue.dev | ~/.continue/config.yaml | — | — | — |
| 助手 | -- | -- | .aider.conventions.md | — |
或手动:
# Claude Code
claude mcp add icm -- icm serve
# Compact mode (shorter responses, saves tokens)
claude mcp add icm -- icm serve --compact
# Any MCP client: command = "icm", args = ["serve"]技能/规则
icm init --mode skill为Claude Code安装斜线命令和规则(/recall, /remember),光标(.mdc 规则),Roo代码(.md 规则)和Amp(/icm-recall, /icm-remember).
CLI说明
icm init --mode cli将ICM指令注入到每个工具的指令文件中:
| 工具 | 文件 |
|---|---|
| 克劳德代码 | CLAUDE.md |
| GitHub副本 | .github/copilot-instructions.md |
| 风帆冲浪 | .windsurfrules |
| OpenAI Codex | AGENTS.md |
| 双子座 | ~/.gemini/GEMINI.md |
挂钩(5个工具)
icm init --mode hook为所有支持的工具安装自动提取和自动调用挂钩:
| 工具 | 会话开始 | 预工具 | 后工具 | 压缩 | 提示调用 | 配置 |
|---|---|---|---|---|---|---|
| 克劳德代码 | icm hook start | icm hook pre | icm hook post | icm hook compact | icm hook prompt | ~/.claude/settings.json |
| Gemini CLI | icm hook start | icm hook pre | icm hook post | icm hook compact | icm hook prompt | ~/.gemini/settings.json |
| Codex CLI | icm hook start | icm hook pre | icm hook post | — | icm hook prompt | ~/.codex/hooks.json |
| Copilot命令行界面 | icm hook start | icm hook pre | icm hook post | — | icm hook prompt | .github/hooks/icm.json |
| OpenCode | 会话开始 | -- | 工具提取 | 压缩 | -- | ~/.config/opencode/plugins/icm.ts |
每个钩子的作用:
| Hook | 它做什么 |
|---|---|
icm hook start | 在会话开始时注入关键/高记忆唤醒包(约500个令牌) |
icm hook pre | 自动允许 icm CLI命令(无权限提示) |
icm hook post | 每N次调用从工具输出中提取事实(自动提取) |
icm hook compact | 在上下文压缩之前从转录中提取记忆 |
icm hook prompt | 在每个用户提示的开头注入调用的上下文 |
CLI与MCP
ICM可以通过CLI使用(icm 命令)或MCP服务器(icm serve).两者都访问同一个数据库。
| CLI | MCP | |
|---|---|---|
| 延迟 | ~30ms(直接二进制) | ~50ms(JSON-RPC标准输入) |
| 代币成本 | 0(基于钩子,不可见) | ~20-50个令牌/调用(工具模式) |
| 设置 | icm init --mode hook | icm init --mode mcp |
| 适用于 | Claude Code、Gemini、Codex、Copilot、OpenCode(通过钩子) | 所有17个MCP兼容工具 |
| 自动提取 | 是(钩子触发 icm extract) | 是(MCP工具调用库) |
| 最适合 | 高级用户,节省代币 | 通用兼容性 |
仪表盘
icm dashboard # or: icm tui交互式TUI有5个标签:概述、主题、记忆、健康、回忆录。键盘导航(vim样式:j/k,g/g,Tab,1-5),实时搜索(/),自动刷新。
需要 tui 功能(默认启用)。构建时不包含: cargo install --path crates/icm-cli --no-default-features --features embeddings.
命令行界面
记忆(偶发性,有衰退)
# Store
icm store -t "my-project" -c "Use PostgreSQL for the main DB" -i high -k "db,postgres"
# Recall
icm recall "database choice"
icm recall "auth setup" --topic "my-project" --limit 10
icm recall "architecture" --keyword "postgres"
# Manage
icm forget
icm consolidate --topic "my-project"
icm topics
icm stats
# Extract facts from text (rule-based, zero LLM cost)
echo "The parser uses Pratt algorithm" | icm extract -p my-project回忆录(永久知识图)
# Create a memoir
icm memoir create -n "system-architecture" -d "System design decisions"
# Add concepts with labels
icm memoir add-concept -m "system-architecture" -n "auth-service" \
-d "Handles JWT tokens and OAuth2 flows" -l "domain:auth,type:service"
# Link concepts
icm memoir link -m "system-architecture" --from "api-gateway" --to "auth-service" -r depends-on
# Search with label filter
icm memoir search -m "system-architecture" "authentication"
icm memoir search -m "system-architecture" "service" --label "domain:auth"
# Inspect neighborhood
icm memoir inspect -m "system-architecture" "auth-service" -D 2
# Export graph (formats: json, dot, ascii, ai)
icm memoir export -m "system-architecture" -f ascii # Box-drawing with confidence bars
icm memoir export -m "system-architecture" -f dot # Graphviz DOT (color = confidence level)
icm memoir export -m "system-architecture" -f ai # Markdown optimized for LLM context
icm memoir export -m "system-architecture" -f json # Structured JSON with all metadata
# Generate SVG visualization
icm memoir export -m "system-architecture" -f dot | dot -Tsvg > graph.svg记录(逐字回放)
按原样存储与代理交换的每条消息——无摘要,无提取。 稍后使用FTS5(BM25+布尔值+短语+前缀)进行搜索。可用于会话回放, 事后审查、合规审计、培训数据。与精心策划的回忆相辅相成。
# 1. Start a session
SID=$(icm transcript start-session --agent claude-code --project myapp)
# 2. Record every turn verbatim
icm transcript record -s "$SID" -r user -c "Pourquoi on avait choisi Postgres ?"
icm transcript record -s "$SID" -r assistant -c "JSONB natif, BRIN pour les logs, auto-vacuum tuné."
icm transcript record -s "$SID" -r tool -c '{"cmd":"psql -c ..."}' -t Bash --tokens 42
# 3. Replay, search, inspect
icm transcript list-sessions --project myapp
icm transcript show "$SID" --limit 200
icm transcript search "postgres JSONB" # BM25 ranked
icm transcript search '"auto-vacuum"' # phrase match
icm transcript search "postgres OR mysql" --session "$SID" # boolean, scoped
icm transcript stats
# 4. Delete a session (cascade deletes its messages)
icm transcript forget "$SID"Rust+SQLite+FTS5——0 Python,0 ChromaDB,0外部服务。写入速度比写入速度快约10倍 基于ChromaDB的逐字存储;整个成绩单与您的SQLite文件位于同一个SQLite文件中 回忆和回忆录。
MCP工具(31)
记忆工具
| 工具 | 说明 |
|---|---|
icm_memory_store | 使用自动去重功能存储(相似度>85%→ 更新而不是复制) |
icm_memory_recall | 按查询搜索,按主题/关键字/项目筛选 |
icm_memory_update | 就地编辑记忆(内容、重要性、关键字) |
icm_memory_forget | 按ID删除内存 |
icm_memory_forget_topic | 删除给定主题中的所有记忆 |
icm_memory_consolidate | 将一个主题的所有记忆合并到一个摘要中 |
icm_memory_extract_patterns | 检测主题中重复出现的模式,并将其作为概念呈现出来 |
icm_memory_list_topics | 列出所有有计数的主题 |
icm_memory_stats | 全局内存统计信息 |
icm_memory_health | 按主题进行卫生审核(陈旧性、整合需求) |
icm_memory_embed_all | 矢量搜索的回填嵌入 |
会话工具
| 工具 | 说明 |
|---|---|
icm_wake_up | 为SessionStart风格的上下文注入构建一个项目范围的唤醒包(关键/高内存+偏好) |
icm_learn | 扫描项目目录,并从其代码/文档中为Memoir知识图添加种子 |
回忆录工具(知识图表)
| 工具 | 说明 |
|---|---|
icm_memoir_create | 创建新的回忆录(知识容器) |
icm_memoir_list | 列出所有回忆录 |
icm_memoir_show | 显示回忆录细节和所有概念 |
icm_memoir_add_concept | 添加带有标签的概念 |
icm_memoir_refine | 更新概念的定义 |
icm_memoir_search | 全文搜索,可选择按标签过滤 |
icm_memoir_search_all | 搜索所有回忆录 |
icm_memoir_link | 在概念之间创建类型化关系 |
icm_memoir_inspect | 检查概念和图邻域(BFS) |
icm_memoir_export | 导出具有置信度的图形(json、dot、ascii、ai) |
反馈工具(从错误中学习)
| 工具 | 说明 |
|---|---|
icm_feedback_record | 当AI预测错误时记录更正 |
icm_feedback_search | 搜索过去的更正,为未来的预测提供信息 |
icm_feedback_stats | 反馈统计:总计数、按主题细分、应用最多 |
转录工具(逐字会话回放)
| 工具 | 说明 |
|---|---|
icm_transcript_start_session | 创建用于逐字消息捕获的会话;回报 session_id |
icm_transcript_record | 附加原始消息(角色、内容、可选工具+令牌+元数据) |
icm_transcript_search | FTS5跨消息搜索(BM25、布尔值、短语、前缀) |
icm_transcript_show | 按时间顺序回放会话的完整消息线程 |
icm_transcript_stats | 会话、消息、字节,按角色/代理/顶级会话细分 |
关系类型
part_of · depends_on · related_to · contradicts · refines · alternative_to · caused_by · instance_of · superseded_by
运作原理
双存储器型号
情景记忆(主题) 捕捉决策、错误和偏好。每个记忆都有一个权重,根据重要性随时间衰减:
| 重要性 | 腐烂 | 修剪 | 行为 |
|---|---|---|---|
critical | 无 | 从未 | 从未忘记,从未修剪 |
high | 慢速(0.5倍速率) | 从不 | 缓慢褪色,从不自动删除 |
medium | 正常 | 是 | 标准腐烂,当重量\24小时)。 |
记忆卫生 内置:
- 自动除尘:存储与同一主题中现有内存相似度>85%的内容会更新它,而不是创建副本
- 整合提示:当主题超过7个条目时,
icm_memory_store警告调用者进行合并 - 健康审计:
icm_memory_health报告每个主题的条目计数、平均权重、过时条目和整合需求 - 无无声数据丢失:关键和高度重要的记忆永远不会被自动修剪
语义记忆(回忆录) 以图形形式捕获结构化知识。概念是永恒的——它们会被提炼,永远不会腐烂。使用 superseded_by 标记过时的事实,而不是删除它们。
混合搜索
启用嵌入后,ICM使用混合搜索:
- 英尺5 BM25 (30%)--全文关键字匹配
- 余弦相似度 (70%)——通过sqlite-vec进行语义向量搜索
默认型号: intfloat/multilingual-e5-base (768d,100多种语言)。可在您的 配置文件:
[embeddings]
# enabled = false # Disable entirely (no model download)
model = "intfloat/multilingual-e5-base" # 768d, multilingual (default)
# model = "intfloat/multilingual-e5-small" # 384d, multilingual (lighter)
# model = "intfloat/multilingual-e5-large" # 1024d, multilingual (best accuracy)
# model = "Xenova/bge-small-en-v1.5" # 384d, English-only (fastest)
# model = "jinaai/jina-embeddings-v2-base-code" # 768d, code-optimized要完全跳过嵌入模型下载,请使用以下任何一种方法:
icm --no-embeddings serve # CLI flag
ICM_NO_EMBEDDINGS=1 icm serve # Environment variable或设置 enabled = false 在您的配置文件中。ICM将退回到FTS5关键字搜索(仍然有效,只是没有语义匹配)。
更改模型会自动重新创建向量索引(现有的嵌入将被清除,可以用以下命令重新生成 icm_memory_embed_all).
存储
单个SQLite文件。没有外部服务,没有网络依赖性。
~/Library/Application Support/dev.icm.icm/memories.db # macOS
~/.local/share/dev.icm.icm/memories.db # Linux
C:\Users\\AppData\Local\icm\icm\data\memories.db # Windows配置
icm config # Show active config配置文件位置(特定于平台,或 $ICM_CONFIG):
~/Library/Application Support/dev.icm.icm/config.toml # macOS
~/.config/icm/config.toml # Linux
C:\Users\\AppData\Roaming\icm\icm\config\config.toml # Windows看 config/default.toml 对于所有选项。
自动提取
ICM通过三层自动提取内存:
Layer 0: Pattern hooks Layer 1: PreCompact Layer 2: UserPromptSubmit
(zero LLM cost) (zero LLM cost) (zero LLM cost)
┌──────────────────┐ ┌──────────────────┐ ┌──────────────────┐
│ PostToolUse hook │ │ PreCompact hook │ │ UserPromptSubmit │
│ │ │ │ │ │
│ • Bash errors │ │ Context about to │ │ User sends prompt │
│ • git commits │ │ be compressed → │ │ → icm recall │
│ • config changes │ │ extract memories │ │ → inject context │
│ • decisions │ │ from transcript │ │ │
│ • preferences │ │ before they're │ │ Agent starts with │
│ • learnings │ │ lost forever │ │ relevant memories │
│ • constraints │ │ │ │ already loaded │
│ │ │ Same patterns + │ │ │
│ Rule-based, no LLM│ │ --store-raw fallbk│ │ │
└──────────────────┘ └──────────────────┘ └──────────────────┘| 图层 | 状态 | LLM成本 | 钩子命令 | 描述 |
|---|---|---|---|---|
| 第0层 | 已实现 | 0 | icm hook post | 基于规则的工具输出关键字提取 |
| 第1层 | 已实现 | 0 | icm hook compact | 在上下文压缩之前从转录中提取 |
| 第2层 | 已实现 | 0 | icm hook prompt | 在每个用户提示下注入回忆 |
所有3层均由自动安装 icm init --mode hook.
基准测试
存储性能
ICM Benchmark (1000 memories, 384d embeddings)
──────────────────────────────────────────────────────────
Store (no embeddings) 1000 ops 34.2 ms 34.2 µs/op
Store (with embeddings) 1000 ops 51.6 ms 51.6 µs/op
FTS5 search 100 ops 4.7 ms 46.6 µs/op
Vector search (KNN) 100 ops 59.0 ms 590.0 µs/op
Hybrid search 100 ops 95.1 ms 951.1 µs/op
Decay (batch) 1 ops 5.8 ms 5.8 ms/op
──────────────────────────────────────────────────────────苹果M1 Pro,内存SQLite,单线程。 icm bench --count 1000
代理效率
具有真实Rust项目的多会话工作流(12个文件,约550行)。会话2+显示了最大的收益,因为ICM会召回而不是重新读取文件。
ICM Agent Benchmark (10 sessions, model: haiku, 3 runs averaged)
══════════════════════════════════════════════════════════════════
Without ICM With ICM Delta
Session 2 (recall)
Turns 5.7 4.0 -29%
Context (input) 99.9k 67.5k -32%
Cost $0.0298 $0.0249 -17%
Session 3 (recall)
Turns 3.3 2.0 -40%
Context (input) 74.7k 41.6k -44%
Cost $0.0249 $0.0194 -22%
══════════════════════════════════════════════════════════════════icm bench-agent --sessions 10 --model haiku
知识保留
代理在整个会话中从密集的技术文档中回忆起具体事实。第1节阅读和记忆;第2+节回答10个事实性问题 没有 源文本。
ICM Recall Benchmark (10 questions, model: haiku, 5 runs averaged)
══════════════════════════════════════════════════════════════════════
No ICM With ICM
──────────────────────────────────────────────────────────────────────
Average score 5% 68%
Questions passed 0/10 5/10
══════════════════════════════════════════════════════════════════════icm bench-recall --model haiku
本地LLM(OLAMA)
对本地模型进行相同的测试——纯上下文注入,不需要使用工具。
Model Params No ICM With ICM Delta
─────────────────────────────────────────────────────────
qwen2.5:14b 14B 4% 97% +93%
mistral:7b 7B 4% 93% +89%
llama3.1:8b 8B 4% 93% +89%
qwen2.5:7b 7B 4% 90% +86%
phi4:14b 14B 6% 79% +73%
llama3.2:3b 3B 0% 76% +76%
gemma2:9b 9B 4% 76% +72%
qwen2.5:3b 3B 2% 58% +56%
─────────────────────────────────────────────────────────scripts/bench-ollama.sh qwen2.5:14b
LongMemEval(ICLR 2025)
标准学术基准——6种记忆能力的500个问题,来自 LongMemEval纸 (ICLR 2025)。
LongMemEval Results — ICM (oracle variant, 500 questions)
════════════════════════════════════════════════════════════════
Category Retrieval Answer (Sonnet)
────────────────────────────────────────────────────────────────
single-session-user 100.0% 91.4%
temporal-reasoning 100.0% 85.0%
single-session-assistant 100.0% 83.9%
multi-session 100.0% 81.2%
knowledge-update 100.0% 80.8%
single-session-preference 100.0% 50.0%
────────────────────────────────────────────────────────────────
OVERALL 100.0% 82.0%
════════════════════════════════════════════════════════════════- 检索 =ICM是否找到了正确的信息? 所有类别100%。
- 回答 =LLM能否从检索到的上下文中得出正确答案?取决于LLM,而不是ICM。
- 检索分数是ICM基准。答案分数反映了下游LLM能力。
scripts/bench-longmemeval.py --judge claude --workers 8
测试协议
所有基准测试都使用 真正的API调用 --没有模拟,没有模拟响应,没有缓存答案。
- 代理基准:在tempdir中创建一个真正的Rust项目。与运行N个会话
claude -p --output-format json.没有ICM:MCP配置为空。使用ICM:真正的MCP服务器+自动提取+上下文注入。 - 知识保留:使用虚构的技术文档(“子午线协议”)。根据预期事实的关键字匹配对答案进行评分。每次调用超时120秒。
- 孤立:每次运行都使用自己的tempdir和新鲜的SQLite数据库。没有会话持久性。
多代理统一内存
所有17个工具共享相同的SQLite数据库。Claude存储的内存可立即用于Gemini、Codex、Copilot、Cursor和其他所有工具。
ICM Multi-Agent Efficiency Benchmark (10 seeded facts, 5 CLI agents)
╔══════════════╦═══════╦══════════╦════════╦═══════════╦═══════╗
║ Agent ║ Facts ║ Accuracy ║ Detail ║ Latency ║ Score ║
╠══════════════╬═══════╬══════════╬════════╬═══════════╬═══════╣
║ Claude Code ║ 10/10 ║ 100% ║ 5/5 ║ ~15s ║ 99 ║
║ Gemini CLI ║ 10/10 ║ 100% ║ 5/5 ║ ~33s ║ 94 ║
║ Copilot CLI ║ 10/10 ║ 100% ║ 5/5 ║ ~10s ║ 100 ║
║ Cursor Agent ║ 10/10 ║ 100% ║ 5/5 ║ ~16s ║ 99 ║
║ Aider ║ 10/10 ║ 100% ║ 5/5 ║ ~5s ║ 100 ║
╠══════════════╬═══════╬══════════╬════════╬═══════════╬═══════╣
║ AVERAGE ║ ║ ║ ║ ║ 98 ║
╚══════════════╩═══════╩══════════╩════════╩═══════════╩═══════╝得分=60%的回忆准确率+30%的事实细节+10%的速度。 98%的多智能体效率。
为什么选择ICM
| 能力 | ICM | Mem0 | Engram | AgentMemory |
|---|---|---|---|---|
| 工具支持 | 17 | 仅限SDK | ~6-8 | ~10 |
| 一个命令设置 | icm init | 手动SDK | 手动 | 手动 |
| 挂钩(启动时自动召回) | 5个工具 | 无 | 通过MCP | 1个工具 |
| 混合搜索(FTS5+向量) | 30/70加权 | 仅向量 | 仅FTS5 | FTS5+矢量 |
| 多语言嵌入 | 100+语言(768d) | 视情况而定 | 无 | 英语384d |
| 知识图谱 | 回忆录系统 | 无 | 无 | 没有 |
| 时间衰减+巩固 | 访问感知 | 无 | 基本 | 基本 |
| TUI仪表板 | icm dashboard | 无 | 是 | 网络查看器 |
| 从工具输出中自动提取 | 3层,零LLM | 无 | 无 | 没有 |
| 反馈/校正回路 | icm_feedback_* | 无 | 无 | 无 |
| 运行时 | Rust单二进制 | Python | Go | Node.js |
| 本地优先,零依赖 | SQLite文件 | 云优先 | SQLite | SQLite |
| 多智能体召回准确率 | 98% | N/A | N/A | 95.2% |
文档
| 文档 | 描述 |
|---|---|
| 集成指南 | 所有17个工具的设置:Claude Code、Copilot、Cursor、Windsurf、Zed、Amp等。 |
| 技术架构 | 板条箱结构、搜索管道、衰变模型、sqlite-vec集成、测试 |
| 用户指南 | 安装、主题组织、整合、提取、故障排除 |
| 产品概述 | 用例、基准测试、与替代方案的比较 |
