Engram:用 Go 为 AI 编码助手构建完美记忆系统
2026 年,AI 编码助手已经无处不在。Claude Code、Cursor、GitHub Copilot、Windsurf 等工具深刻改变了开发者的编码方式。然而,这些助手都有一个共同的痛点:上下文窗口耗尽后,AI 就会”忘记”之前讨论的内容、做出的决策、以及积累的技术上下文。
Beads 尝试解决这一问题,但它是 Python 项目且缺乏 MCP 支持。现在,一个纯 Go 编写的解决方案——Engram——正以其独特的设计吸引开发者的目光。
AI 编码助手的”失忆症”
当你与 AI 编码助手进行一个复杂的重构任务时,流程通常是这样的:
-
第一个 session:讨论架构、设计决策、技术选型 -
第二个 session:AI 已经忘记了之前的讨论,你需要重新解释 -
第三个 session:上下文窗口接近耗尽,AI 开始” hallucination”(虚构)
这是一个系统性的问题,而不是 AI 模型的 bug。即使是最强大的模型,也有上下文长度限制。
现有解决方案的局限
Beads(Steve Yegge 开发)是较早的尝试,但它:
-
基于 Python,需要 Node.js 运行时 -
没有 MCP 协议支持 -
与 Go 生态系统的集成不够深入
Claude Memory(官方):目前仍处于有限测试阶段,能力有限。
手动保存上下文:繁琐、难以检索、不成体系。
Engram 登场
Engram 是一个纯 Go 编写的 AI 编码助手记忆系统,于 2026 年 2 月发布,迅速获得 2800+ stars。它的核心设计哲学是:
Agent-agnostic. Single binary. Zero dependencies.
这意味着无论你使用 Claude Code、Cursor、OpenCode、Gemini CLI、Codex 还是任何支持 MCP 的 AI 工具,Engram 都能与之配合工作。
核心特性
|
|
|
|---|---|
| 纯 Go 实现 |
|
| SQLite + FTS5 |
|
| MCP 协议 |
|
| 多端同步 |
|
| TUI 界面 |
|
| HTTP API |
|
架构设计解析
Engram 的架构简洁但功能强大:
┌─────────────────────────────────────────────────────────────┐│ AI Coding Agent ││ (Claude Code / Cursor / OpenCode / ...) │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ MCP Client ││ (记忆读写请求) │└─────────────────────────────────────────────────────────────┘ │ ▼┌─────────────────────────────────────────────────────────────┐│ Engram Binary ││ ┌─────────────┐ ┌─────────────┐ ┌─────────────────┐ ││ │ MCP Server │ │ HTTP API │ │ CLI │ ││ └─────────────┘ └─────────────┘ └─────────────────┘ ││ ││ ┌─────────────────────────────────────────────────────┐ ││ │ Memory Protocol Layer │ ││ │ mem_save / mem_search / mem_update / mem_timeline │ ││ └─────────────────────────────────────────────────────┘ ││ ││ ┌─────────────────────────────────────────────────────┐ ││ │ SQLite + FTS5 │ ││ │ (Persistent Storage) │ ││ └─────────────────────────────────────────────────────┘ │└─────────────────────────────────────────────────────────────┘
工作流程
1. Agent completes significant work (bugfix, architecture decision, etc.)2. Agent calls mem_save {title, type, What/Why/Where/Learned}3. Engram persists to SQLite with FTS5 indexing4. Next session: agent searches memory, gets relevant context
实战:构建 AI 结对编程记忆系统
让我们从头开始搭建一个完整的 Engram + Claude Code 环境。
安装 Engram
brew install gentlemankind/tap/engram
或者从源码编译:
git clone https://github.com/Gentleman-Programming/engram.gitcd engramgo build -o engram ./cmd/engramsudo mv engram /usr/local/bin/
配置 Claude Code 使用 Engram MCP
-
首先启动 Engram MCP 服务器:
engram mcp --project my-project
-
在 Claude Code 中添加 Engram 插件:
claude plugin marketplace add Gentleman-Programming/engram && \claude plugin install engram
-
配置环境变量:
export ENGRAM_PROJECT=my-projectexport ENGRAM_PATH=~/.engram/my-project.db
使用 TUI 查询记忆
Engram 提供了一个优雅的 TUI 界面来浏览和搜索记忆:
engram tui
界面显示:
-
左侧:记忆时间线 -
中间:记忆详情 -
支持 vim 键位导航 -
/触发搜索
编程实践:自动保存重要决策
在 .claude/commands/ 目录下创建自动保存记忆的命令:
# .claude/commands/save-architecture.md@mprompt Save this architecture decision to memory with:- Title: The architecture decision title- Type: architecture- What: What was decided- Why: Why this approach was chosen- Where: Where this applies in the codebase- Learned: Any lessons or trade-offs consideredFocus on capturing the *reasoning* not just the conclusion.
MCP 工具深度解析
Engram 通过 MCP 协议暴露了一系列强大的工具:
mem_save – 保存记忆
{"title": "使用策略模式替代 if-else 链","type": "architecture","what": "将 PaymentProcessor 中的 15 个 if-else 改写为策略模式","why": "新增支付渠道时只需添加新策略,无需修改核心逻辑","where": "internal/payment/ 目录","learned": "策略接口要足够抽象,避免策略类之间产生耦合"}
mem_search – 全文搜索
{"query": "支付 策略 架构","limit": 10}
返回相关记忆,支持模糊匹配和语义搜索。
mem_timeline – 时间线视图
查看某个项目或主题的记忆历史:
{"project": "my-project","type": "architecture"}
mem_suggest_topic_keys – 智能推荐
Engram 可以分析文本内容,推荐合适的话题标签:
{"text": "在实现分布式锁时,我们选择了 Redis 但考虑了 etcd 的强一致性..."}
跨设备同步:Git-based Chunking
Engram 的同步机制设计精巧:
-
自动分块:大记忆被压缩成 chunks -
Git 集成:存储为 Git commit,无冲突合并 -
选择性同步:可以只同步特定项目的记忆
# 导出记忆到 Gitengram syncgit add .engram/ && git commit -m "sync engram memories"# 在另一台机器上导入engram sync --import
这解决了 AI 记忆的便携性问题——你可以带着你的”知识库”在不同的机器和项目间穿梭。
Engram vs Beads:深度对比
|
|
|
|
|---|---|---|
| 语言 |
|
|
| 二进制大小 |
|
|
| MCP 支持 |
|
|
| TUI |
|
|
| Git 同步 |
|
|
| FTS5 搜索 |
|
|
| 多项目支持 |
|
|
| 发布时间 |
|
|
如果你已经在用 Go 项目,Beads 的 Python 依赖会增加复杂度。Engram 的纯 Go 实现让它成为 Go 开发者的天然选择。
适用场景与局限
适合使用 Engram 的场景
-
长期项目重构:保持对历史决策的记忆 -
跨团队知识传承:新成员可以快速了解项目背景 -
复杂 bug 追踪:记录调试过程中的关键发现 -
技术债务管理:记录技术债务的成因和解决方案
不适合的场景
-
简单一次性脚本:记忆系统会引入不必要的复杂度 -
敏感代码库:所有记忆存储在本地,需要注意安全性 -
团队协作记忆:Engram 是个人记忆系统,不适合团队共享
性能与安全
性能基准
Engram 使用 SQLite + FTS5,在 10000 条记忆规模下:
|
|
|
|---|---|
|
|
|
|
|
|
|
|
|
安全考虑
-
本地存储:所有数据存储在 ~/.engram/目录 -
Git 加密:可以使用 GPG 签名 commits -
项目隔离:不同项目使用不同的数据库文件
未来展望
Engram 的 Roadmap 显示:
-
[ ] MCP Resources 支持(让 AI 主动查询记忆) -
[ ] 向量语义搜索 -
[ ] 多语言文档索引 -
[ ] VS Code 插件 -
[ ] 云端同步选项
结语
Engram 代表了一种新的 AI 辅助开发范式:不是让 AI 记住一切,而是建立一个外部记忆系统,让 AI 在需要时检索相关上下文。
它的纯 Go 实现、零依赖设计、MCP 协议支持,以及精心设计的同步机制,使其成为 2026 年最值得关注的 Go AI 工具之一。
无论你是使用 Claude Code 的独立开发者,还是在大型项目中工作的工程师,Engram 都能帮助你构建一个持久、可靠、可搜索的知识库。
让你的 AI 助手不再”失忆”,从今天开始构建你的第二大脑。
相关资源
-
GitHub: https://github.com/Gentleman-Programming/engram -
文档: https://gentleman-programming.github.io/engram/ -
安装指南: https://github.com/Gentleman-Programming/engram/blob/main/docs/INSTALLATION.md
推荐阅读

夜雨聆风