OmniMem
官方一个自托管的MCP服务器,为AI代理提供跨会话、项目和机器的持久记忆。
你可以用 OmniMem MCP 做什么?
为你的AI代理提供跨会话、跨项目、跨机器的持久化、自托管记忆——让它“在推荐一个已经失败的库之前,先查一下墓地”。
- 会话简报 — 请求一份
briefing,即可在一次调用中获取项目上下文、经验统计、过期记忆、新文章和技能建议。 - 避开过去的死胡同 — 让代理在推荐之前失败过的库或模式之前,先检查墓地。
- 回顾过去的决策 — 使用
recall来浮现早期会话中跨项目的决策、修复和模式。 - 记录来之不易的经验 — 使用
record_experience记录修复过程,让那些付出实际努力才得到的教训下次更容易浮现。 - 去重记忆 — 运行
find_duplicates来标记并批量清理近乎相同的存储记忆。 - 备份你的记忆 — 使用
dump_to_file将所有内容导出为你拥有的JSON文件。
文档
面向 AI 代理的自托管语义记忆。持久化会话、经验评分,以及死胡同的墓地,由你阅读的 RSS 获取的知识支撑,存储在 Valkey 向量搜索中,然后作为 MCP 服务器暴露。 https://omnimem.org
<OmniMem>omnimem.org
开发在 Codeberg 上进行——问题和 PR 请发到那里。
不要两次活在同一会话中。
每个 Claude Code 会话都从零开始。没有你项目的记忆。没有上周失败的记忆。没有你上周二花了三个小时发现为什么 onnxruntime 在 Alpine 上爆炸、最后才找到真正可行方案的记忆。
于是你又解释了一遍项目。Claude 又推荐了同一个坏掉的库。同样的警报。同样的歌。你是 Bill Murray,Claude 是 Punxsutawney。
OmniMem 解决了这个问题。它是一个自托管的 MCP 服务器,为你的 AI 代理提供跨会话、跨项目、跨机器的持久记忆。它运行在你自己的硬件上,永远免费。
claude> use onnxruntime for the embeddings
⚠ WARNING: previously abandoned approach
onnxruntime — SIGILL crash on Alpine musl libc (effort: 4/5)
→ switched to sentence-transformers instead
那个警告来自记忆,而非运气。你已经付出代价的错误不会让你再付一次。
快速上手
提示
一条命令即可从预构建的 Docker Hub 镜像启动完整栈:
curl -fsSL https://codeberg.org/ric_harvey/omnimem/raw/branch/main/install.sh | bash
它记住什么
五种记忆,回忆时一起搜索:
- 情景记忆 — 你做出的决策、修复的 bug、发现的模式。那些需要真正努力才能学会、不应该每天早上重新学习的东西。
- 项目上下文 — 你的技术栈、目标和当前状态。代理在每个会话开始时已经了解情况,而不是从零开始。
- 知识 — 你配置的 RSS 源,按计划抓取,由 Claude Haiku 总结、嵌入并存储。当上周出现相关文章时,它会作为值得阅读的起点浮现。
- 偏好 — 关于你希望如何工作的规范性规则("功能落地后总是更新 README"),从你的对话中自动提取,并在适用时浮现。
- 技能 — 从你在某个领域积累的经验编译而成的 SKILL.md 文档,让代理从第一个提示词开始就按你的方式工作。从其他命名空间派生,从不手工编辑,每次更改都经过你的审查。参见技能编译器。 最高召回结果可能是六个月前另一个项目的决策、昨天的解决方案,或周二晚上出现的一篇文章。只要有用,它来自哪里并不重要。
它的不同之处
不仅仅是带 MCP 包装的键值存储。OmniMem 模拟了记忆的实际运作方式:事物会随时间淡忘,有时会相互矛盾,而来之不易的经验会赢得一席之地。
- 墓地 — 每条死胡同都会被记录,包括你尝试过什么、为什么失败,以及你浪费了多少时间。代理在推荐库或模式之前会先检查它。
- 经验评分 — 花了四次尝试和一个奇怪的平台变通方案才攻克的东西是金子。越难获得,下次就越容易被调出。
- 记忆生命周期 —
ACTIVE → DEPRIORITISED → ARCHIVED → DELETED。“忘掉 X”通常意味着别再提起它,而不是从存在中抹去。被降权的记忆可以重新赢得地位。 - 矛盾检测 — 如果新记忆与已存储的内容不一致,OmniMem 会捕捉到。每次写入都有快速启发式检查,可选通过 Claude Haiku 进行更深入的分析。
- 语义去重 — 几乎相同的记忆会在写入时被标记,并通过
find_duplicates()批量清理。 - 一键简报 — 一次
briefing()调用即可返回项目上下文、经验统计、过期记忆、新文章、矛盾警告和技能建议。无需三步预热。 - 技能编译器 — 将强化的经验教训和死胡同提炼为可加载的技能,并通过提议-接受门控,确保坏教训不能悄然成为政策。
- 自动维护 — 重复项归档、矛盾标记、过期知识清理,全部在后台完成。
- Web 界面 — 通过 htmx 仪表板浏览、搜索和管理一切,附带遥测和 Prometheus
/metrics端点。
每次召回背后的排名公式:
score = similarity x surface_score x recency x experience_weight
四个因素决定返回什么。仅靠语义相似性是不够的——生命周期状态、年龄和经验获取的难度都起作用。
适用于任何 MCP 代理
一个记忆层适用于所有代理:claude.ai、Claude Code、Claude Desktop、Cursor、GitHub Copilot、GitLab Duo、AWS Kiro、OpenCode、OpenAI Codex CLI 和 Open Design。
架构
四个容器。一切都不会离开你的机器。通过 sentence-transformers 进行本地嵌入,存储在带向量搜索的 Valkey 中,两个前端共享同一个记忆引擎。
flowchart TB
agent["AI agent<br/>Claude Code · claude.ai · Cursor · Copilot · ..."]
browser["Browser"]
agent -- "MCP · Streamable HTTP / SSE · :8765" --> mcp
browser -- "HTTP · :8080" --> webui
subgraph stack["Docker Compose stack"]
mcp["MCP server<br/>Python · FastMCP<br/><i>remember · recall · briefing<br/>compile_skill · record_experience</i>"]
webui["Web UI<br/>Starlette · htmx · Jinja2<br/><i>dashboard · search · skills<br/>projects · backups · /metrics</i>"]
rss["RSS worker<br/>feedparser · APScheduler<br/>Claude Haiku summaries"]
valkey[("Valkey + valkey-search<br/>HNSW vector indexes<br/><i>idx:episodic · idx:project · idx:knowledge<br/>idx:preference · idx:skill</i>")]
mcp <--> valkey
webui <--> valkey
rss --> valkey
end
完整图景——召回管道、存储模型和设计决策——见 docs/architecture.md。
自托管、开源、属于你
无 SaaS。无供应商锁定。无上下文发送到他人的服务器。
- Valkey 是开源的 Redis 分支。你所有数据都保存在你自己机器上的命名 Docker 卷中。
- 多架构 Docker 镜像 支持 amd64 和 arm64。它在 Raspberry Pi、AWS Graviton 或 Apple Silicon 上运行得和 x86 一样好。
- sentence-transformers 在本地运行嵌入,无需 API 调用。
- MIT 许可 意味着你可以分叉、扩展、在任何地方运行它。
- 一条备份命令 调用
dump_to_file()并将所有内容导出到你拥有的 JSON 文件中。
通过反向代理暴露 MCP 端口,你工作的每台机器都共享同一个记忆。一次部署,处处可用——见 docs/remote-access.md。
快速开始
安装程序检查 Docker 是否已安装,生成安全密码,写入合理的 .env,并从预构建的 Docker Hub 镜像启动一切:
curl -fsSL https://codeberg.org/ric_harvey/omnimem/raw/branch/main/install.sh | bash
或从源码构建:
git clone https://codeberg.org/ric_harvey/omnimem.git && cd omnimem
cp .env.example .env
# Set VALKEY_PASSWORD and ANTHROPIC_API_KEY in .env
docker compose up -d
然后将你的代理指向它——Claude Code (~/.claude.json):
{
"mcpServers": {
"omnimem": {
"type": "sse",
"url": "http://localhost:8765/sse"
}
}
}
服务器通过 MCP instructions 字段自动向任何连接的代理提供其使用指南——无需配置文件。Web 仪表板位于 http://localhost:8080。
完整演练,包括认证令牌、权限设置和其他代理,见 docs/quick-start.md。
文档
| 快速开始 | 安装程序、从源码构建、连接你的代理 |
| 功能详解 | 生命周期、墓地、经验评分、去重、矛盾、简报 |
| 技能编译器 | 将经验编译为可加载的技能 |
| MCP 工具参考 | 所有 30+ 工具 |
| 配置参考 | 每个环境变量 |
| RSS 与知识 | 被动知识摄入与提升 |
| 多机器 | 反向代理、claude.ai 的 OAuth 2.1、故障排除 |
| Web 界面 | 管理仪表板和 Prometheus 指标 |
| 架构 | 容器、召回管道、设计决策 |
| 记忆类型规范 | 存储模型,逐字段 |
| 连接指南 | 每个代理的设置 |
| 部署指南 | macOS · Raspberry Pi · AWS · GCP · Linux + Tailscale Funnel |
按命名空间的存储规范,如果你想确切知道什么被写入 Valkey 以及由谁写入:概述 · 情景 · 项目 · 知识 · 偏好 · 技能
贡献
欢迎提交 Issue 和 PR。开发在 Codeberg 上进行——请在那里提交 Issue 和 PR。OmniMem 设计为可扩展的,评分管道结构允许在不触及核心的情况下添加新的乘数。新的 MCP 工具、额外的命名空间类型和替代嵌入后端都是合理的方向。
许可
MIT。免费使用、分叉和修改。无企业版、无托管版本、无附加条件。
由 Ric Harvey 在 SquareCows Ltd 构建,一家为希望拥有自己工具的人提供 AI 和自动化咨询的公司。