使用说明
Engram
中文 | English
Engram(记忆印迹)——神经科学中,大脑存储特定记忆的神经元集合。
我的想法💡
将人或智能体的"记忆"作为一种可共享、可加载的资源,在不同智能体之间流通,最终实现能力的叠加与融合。
这里的"记忆"不是简单的数据交换,而是一套完整的、有因果链的经验体系:
- 一个人的性格特质与思维方式
- 成长经历与人生轨迹
- 驱动他选择某个专业、成为某个领域专家的动因
- 在该领域积累的专业知识与判断力
将这套记忆封装后共享出来,其他人的智能体可以加载它。当大量不同背景、不同专长的记忆被汇聚并加载到同一个智能体上时,这个智能体就具备了跨领域的认知深度,成为一个"超级智能体"。
简单说:每个人贡献自己的"人生存档",智能体加载得越多,就越强。
给 AI 注入可切换的专家记忆——不只是知识检索,而是**"谁 + 知道什么 + 怎么思考"**的完整人设。一套 Markdown 文件就能让任何 AI 获得专家级记忆,零向量依赖,即插即用。
你还能把这些记忆加载到 N 个 subagent 里面让多个智能体干活
Engram = 专家是谁 + 知道什么 + 怎么思考
Skills/Tools = 具体能做什么操作
RAG 能检索知识,但没有人设、没有决策流程——Engram 解决这个问题。人工策展 + 模型自主检索,在小规模高质量知识场景下比 RAG 更精准——不是因为技术更强,而是因为人工策展的质量天然高于自动切分。把 memory 分享给别人,对方的 AI 立刻成为同一个专家。未来大家共享的不是 Skills,而是 Memory。
支持所有 MCP 兼容客户端:Claude Desktop / Claude Code、Cursor、Windsurf、Codex 等。
功能特性
- 零向量依赖:不使用 chromadb / litellm,只依赖
mcp - MCP 工具:
ping、list_engrams、get_engram_info、load_engram、read_engram_file、write_engram_file、capture_memory、capture_tool_trace、list_tool_traces、consolidate_memory、delete_memory、correct_memory、add_knowledge、install_engram、init_engram、lint_engrams、search_engrams、stats_engrams、create_engram_assistant、finalize_engram_draft、open_ui - 可视化管理界面:内置 Web UI,浏览器中浏览/编辑 Engram,支持对话触发或独立运行
- 索引驱动加载:
load_engram返回角色/工作流程/规则 + 知识索引(含内联摘要)+ 案例索引(含 uses)+ 动态记忆索引 + 全局用户记忆read_engram_file按路径按需读取知识或案例全文
- 动态记忆:对话中自动捕获用户偏好和关键信息,下次加载时自动带入
- 工具轨迹记忆:
name相关 MCP 工具调用会自动写入memory/tool-trace.md,外部工具可用capture_tool_trace补充 - 全局用户记忆:跨专家共享的用户基础信息(年龄、城市等),所有 Engram 加载时自动附加
- 记忆 TTL:支持
expires字段,到期记忆自动归档到{category}-expired.md并隐藏 - Index 分层:
_index.md只保留最近50条(热层),完整记录写入_index_full.md(冷层) - Engram 继承:
meta.json支持extends字段,自动合并父 Engram 的 knowledge index - 冷启动引导:
rules.md支持## Onboarding区块,首次使用时自动触发信息收集 - CLI 命令:
serve/list/search/install/init/lint/stats - 统计面板:
engram-server stats支持纯文本 /--json/--csv/--tui - 评测模板:
evaluation/提供可复现实验(同模型 baseline vs Engram)与自动评分脚本(content/safety/structure + checkpoints)
设计理念:索引驱动的分层懒加载
为什么不用 RAG
纯 RAG(向量搜索取 top-k 片段)的问题:
- 语义相近 ≠ 逻辑完整,容易丢失上下文关联
- 碎片化检索会丢细节
- 人设和决策流程可能被漏掉
- 需要额外依赖(向量数据库、embedding 模型),增加部署复杂度
当前方案
Engram 被加载后,内容不是全量塞入,而是分层按需加载:
第一层:常驻加载(load_engram 时一次性返回)
├── role.md 全文 ← 角色人设(背景 + 沟通风格 + 回答原则)
├── workflow.md 全文 ← 工作流程(决策步骤)
├── rules.md 全文 ← 运作规则 + 常见错误 + Onboarding 区块
├── knowledge/_index.md ← 知识索引(文件列表 + 一句话描述 + 内联摘要,若 extends 会附加父知识索引)
├── examples/_index.md ← 案例索引(文件列表 + 一句话描述 + uses 关联)
├── memory/_index.md ← 动态记忆热层索引(最近50条,TTL过滤)
└── <packs-dir>/_global/memory/_index.md ← 全局用户记忆(跨专家共享)
第二层:按需加载(LLM 根据索引摘要判断后主动调用)
└── read_engram_file(name, path) ← 读取任意知识、案例或记忆文件(含 memory/_index_full.md)
第三层:对话中写入(LLM 识别到重要信息时主动调用)
└── capture_memory(name, content, category, summary, memory_type, tags, conversation_id, expires, is_global) ← 捕获用户偏好、关键决定等
骨架常驻不丢,知识通过"索引内联摘要 + 全文按需"控制 token 消耗。不管 Engram 有多大,每次注入的内容都是可控的。
分组索引(Nested Index)
当知识文件变多时,建议使用二级目录分组:
knowledge/
_index.md
训练基础/
_index.md
深蹲模式.md
营养策略/
_index.md
增肌期配餐.md
顶层 _index.md 可写 → 详见 knowledge/训练基础/_index.md 作为分组入口;add_knowledge 支持 "子目录/文件名" 写法,并在子目录存在 _index.md 时优先追加到子索引。
LLM 三步工作流:
load_engram先读取顶层knowledge/_index.md- 看到分组入口后,调用
read_engram_file(name, "knowledge/xxx/_index.md") - 再按需读取具体知识文件
knowledge/xxx/topic.md
安装
前置条件
需要先安装 uv(极快的 Python 包管理器):
# macOS / Linux
brew install uv
# 或
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
一键安装
在终端输入一条命令,即可完成安装和 MCP 配置:
claude mcp add --scope user engram-server -- uvx --from git+https://github.com/DazhuangJammy/Engram engram-server
这条命令会:
- 将 MCP 配置写入全局(所有项目都能用)
- 首次在某个项目中运行时,自动创建
./.claude/engram/ - 自动放入两个起始包:
starter-complete(完整可加载)和starter-template(说明模板) - 每次 Claude Code 启动时,自动从 GitHub 拉取最新版本运行
~/.engram仍可作为共享/回退目录(由--packs-dir指定)
安装完成后重启 Claude Code,即可开始使用。
一键卸载
claude mcp remove --scope user engram-server
卸载只移除 MCP 配置,不会删除你的 Engram 数据(包括项目内
./.claude/engram/与可选的~/.engram/)。
快速开始
添加 System Prompt(推荐)
在项目的 CLAUDE.md(Claude Code)或 AGENTS.md(Codex)文件开头加入以下提示词,让 AI 自动发现和使用 Engram:
你有一个专家记忆系统可用。对话开始时先调用 engram-server 这个 MCP 中的 list_engrams() 查看可用专家。
# 自动执行规则(傻瓜式)
- 默认原则:能由模型直接完成的事,不让用户手动执行命令;优先直接调用 MCP 工具。
- 除非环境/权限阻塞,否则不要让用户“自己去终端跑命令”。
- 如果调用了 MCP,回复时要告诉用户调用了什么 MCP 和哪个专家。
- 首次进入新项目时,默认检查并使用 `./.claude/engram`。
- 目录策略统一为“项目级优先,`~/.engram` 为共享/回退目录”。
## 自然语言意图 -> MCP 自动映射
- 用户说“找/查/推荐某类 Engram” -> 自动调用 search_engrams(query)
- 用户说“安装某个 Engram” -> 自动调用 install_engram(source-or-name)
- 安装默认写入当前项目 `./.claude/engram`,不是默认全局目录。
- 用户说“初始化当前项目 engram” -> 优先检查 `starter-complete` / `starter-template` 是否存在。
- install_engram(name/source) 失败时,不中断用户:自动调用 search_engrams(query) 找候选后重试 install_engram。
- 用户说“看统计/导出报表” -> 自动调用 stats_engrams(format=plain/json/csv)
- 用户说“创建 Engram” -> 自动进入创建助手流程(create_engram_assistant + finalize_engram_draft)
- 当用户说"打开engram管理界面",AI 调用 open_ui()
## 专家加载与知识读取
- 用户问题匹配某个专家时,调用 load_engram(name, query)。
- load_engram 后优先看知识索引/案例索引;索引不足再 read_engram_file(name, "knowledge/xxx.md")。
- 若 workflow 明确写了 Skill 调用节点,按节点提示主动调用对应 Skills。
- load_engram 返回“继承知识索引”区块时,可 read_engram_file(父专家名, "knowledge/xxx.md") 读取父知识。
- 在 load_engram 后优先读取案例 frontmatter 的 id/title/uses/tags/updated_at,再决定要不要读具体 knowledge 文件。
## 记忆写入规则
- 发现跨专家通用信息(年龄、城市、职业、语言偏好等) -> capture_memory(..., is_global=True)
- 状态性信息(如“用户正在备考”)要加 expires(YYYY-MM-DD),到期自动归档隐藏。
- load_engram 出现“首次引导”区块时,自然收集并 capture_memory。
- 发现用户偏好/关键事实/关键决定时,及时 capture_memory(name, content, category, summary, memory_type, tags, conversation_id, expires, is_global)。
- 只要调用了工具(Skills / MCP / Subagent / 其他外部工具),都要记录工具轨迹:capture_tool_trace(name, tool_name, intent, result_summary, args_summary, status, summary, tags, conversation_id)。
- 工具调用失败也要记录,status 设为 `error`,result_summary 写清失败原因。
- engram-server 内部多数 `name` 相关工具会自动写入 tool-trace;但外部工具不会自动写,必须显式调用 capture_tool_trace。
- 去重规则:若本轮已记录过“同一 tool_name + 同一 intent”的轨迹,不重复写入。
- 外部工具记录字段优先级:至少填写 `tool_name`、`intent`、`args_summary`、`result_summary`、`status`。
- 范围规则:只有已 `load_engram(name, ...)` 的专家,才写入该 `name` 的工具轨迹,避免串专家记忆。
- 交付前检查:若本轮发生过工具调用但未写任何轨迹,结束前补记至少一条 `capture_tool_trace`。
- 记忆条目较多出现“💡 当前共 N 条记忆”时,先 read_engram_file(name, "memory/{category}.md"),再 consolidate_memory(...)。
- 用户要求删除记忆 -> delete_memory(name, category, summary)
- 用户纠正记忆 -> correct_memory(name, category, old_summary, new_content, new_summary, memory_type, tags)
- 记忆较多查历史 -> read_engram_file(name, "memory/_index_full.md")
## 知识写入规则
- 对话中形成系统性可复用知识(方法论/对比分析/决策框架)时,先询问用户是否写入知识库,确认后 add_knowledge。
- 用户纠正知识库错误时,提议并执行 add_knowledge 更新。
- add_knowledge 支持分组路径:filename 可用 "子目录/文件名"(如 "训练基础/深蹲模式")。
## 创建 Engram 助手(双模式)
- mode=from_conversation:把当前对话自动整理成 Engram 草稿。
- mode=guided:一步步引导用户填写;用户说“没有/你来”时自动补全。
- 统一流程:
1) 先调用 create_engram_assistant(...) 生成草稿并回显
2) 用户确认后调用 finalize_engram_draft(draft_json, confirm=True)
3) finalize 后必须看 lint 结果(errors 必须先修复)
- 自动生成内容时必须提示:内容可能不完整,建议用户补充。
- 创建阶段不自动生成用户记忆条目;memory 保持空模板。
## 其他
- 用户也可以用 @专家名 直接指定专家。
- 用户询问某个 engram 详细信息时,调用 get_engram_info(name)。
- 需要直接改 role.md/workflow.md/rules.md 等非知识库文件时,调用 write_engram_file(name, path, content, mode)。
- 新增/修改案例文件时,确保 frontmatter 字段齐全(id/title/uses/tags/updated_at),id 全局唯一,updated_at 用当天日期。
- 多案例命中时,先按 tags 匹配,再参考 updated_at 选更近的案例。
- 回复中引用案例时优先带 title + id,减少歧义。
- 若发现 frontmatter 缺字段或 uses 指向不存在文件,先修复再继续回答。
可选增强:如果你希望在创建 Engram 时通过联网搜索验证知识可信度(并默认丢弃无法验证内容),可将
KNOWLEDGE_VERIFICATION_PROMPT.md的内容追加到 system prompt。
4. 重启 AI 客户端,开始使用
首次在项目里触发 MCP 后,会自动得到:
./.claude/engram/starter-complete(完整示例 Engram,可直接加载)./.claude/engram/starter-template(说明/模板 Engram,用于改造)- 两个起始包的
workflow.md都已内置提醒:可在决策节点主动调用 MCP 工具或 Skills
可视化管理界面(Web UI)
Engram 提供内置的可视化管理界面,可以在浏览器中浏览、编辑和管理所有 Engram 包。
方式一:对话中打开(推荐)
在 Claude Code 对话中直接说"打开管理界面",AI 会自动调用 open_ui 工具,浏览器自动弹出。
方式二:独立运行(不依赖 Claude Code)
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server ui
可选参数:
# 指定端口
engram-server ui --port 8080
# 不自动打开浏览器
engram-server ui --no-open
# 指定 Engram 目录
engram-server ui --packs-dir ~/.engram
独立运行同样不需要安装任何额外依赖,
uvx会自动处理。
CLI 用法
说明:MCP 运行时默认优先使用当前项目的
./.claude/engram/。下面 CLI 示例主要用于手动管理指定目录(如共享目录~/.engram)。
启动 MCP stdio 服务(默认命令):
engram-server serve --packs-dir ~/.engram
等价写法:
engram-server --packs-dir ~/.engram
列出已安装 Engram:
engram-server list --packs-dir ~/.engram
从 git URL 或 registry 名称安装 Engram:
engram-server install <git-url|engram-name> --packs-dir ~/.engram
初始化一个新 Engram 模板:
engram-server init my-expert --packs-dir ~/.engram
初始化一个带二级知识索引的模板:
engram-server init my-expert --nested --packs-dir ~/.engram
搜索 registry 中的 Engram:
engram-server search fitness --packs-dir ~/.engram
运行数据一致性校验:
engram-server lint [name] --packs-dir ~/.engram
查看记忆统计(纯文本):
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server stats
查看记忆统计(JSON):
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server stats --json
查看记忆统计(CSV):
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server stats --csv
查看记忆统计(Rich 渲染版):
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server stats --tui
如果你在 MCP 配置里用了自定义
--packs-dir,这里的所有命令也要保持同一个目录。小技巧:命令较长,可以设个 alias 简化日常使用:
alias engram='uvx --from git+https://github.com/DazhuangJammy/Engram engram-server' # 之后直接用:engram stats / engram stats --tui / engram list
新功能怎么用(v0.9.0 / v1.0.0 / v1.1.0 / v1.3.0)
- 数据校验(lint)
# 校验全部 Engram
engram-server lint --packs-dir ~/.engram
# 仅校验一个
engram-server lint fitness-coach --packs-dir ~/.engram
退出码规则:有 error 返回 1;只有 warning 返回 0。
- 统计导出(JSON / CSV)
engram-server stats --json --packs-dir ~/.engram
engram-server stats --csv --packs-dir ~/.engram
- 搜索与安装(Registry)
# 先搜索
engram-server search fitness --packs-dir ~/.engram
# 再按名称安装
engram-server install fitness-coach --packs-dir ~/.engram
按名称安装时,当前版本会按以下顺序尝试:
- 先从本项目
examples/<name>安装(方案 2) - 若本地无对应目录,再按 registry 的
source安装 - 若 registry 的
sourceclone 失败,会自动回退到主仓库examples/<name>
registry 条目支持本地覆盖(后者优先):
- 内置:仓库根目录
registry.json - 远端:主仓库在线
registry.json - 用户级覆盖:
~/.engram/registry.local.json - 项目级覆盖:
./.claude/engram/registry.local.json
如何向本项目提交 Engram(PR)
- Fork 本仓库并新建分支。
- 复制
examples/template为examples/<your-engram-name>,补齐内容。 - 确保
meta.json与examples/*.mdfrontmatter 符合规范(id/title/uses/tags/updated_at)。 - 在
registry.json增加条目(name/description/author/source/tags/language/version),name与目录名一致。 - 提交 PR,说明你的 Engram 用途、适用场景、示例对话。
- 初始化分组索引模板
engram-server init my-expert --nested --packs-dir ~/.engram
- 对话中写入分组知识(MCP)
当调用 add_knowledge(name, filename, content, summary) 时,filename 可用子目录格式,例如:
filename = "训练基础/深蹲模式"
系统会写入 knowledge/训练基础/深蹲模式.md;若 knowledge/训练基础/_index.md 存在,则优先追加到子索引。
- 案例评测(evaluation)
# 复制模板并填写 baseline/engram 回答
cp evaluation/case_study_template.json evaluation/my_case_study.json
# 执行多维评测
python3 evaluation/score_case_study.py --input evaluation/my_case_study.json
# 可选导出 CSV
python3 evaluation/score_case_study.py --input evaluation/my_case_study.json --csv evaluation/my_case_study_report.csv
傻瓜式创建 Engram(双模式)
用户只用自然语言说“帮我创建一个 Engram”,模型应自动走以下流程:
- 生成草稿
- 对话直转:
create_engram_assistant(mode=\"from_conversation\", ...) - 引导创建:
create_engram_assistant(mode=\"guided\", ...)
- 回显并确认
- 给用户展示草稿摘要(名称、知识目录、案例目录、自动补全字段)
- 明确提示:自动生成内容可能不完整,建议补充
- 确认后落盘
finalize_engram_draft(draft_json, confirm=True, nested=True)- 工具会自动执行 lint 并返回 errors/warnings
- 若有 error,先修复再交付
示例话术:
- “把我们刚才的讨论做成一个 Engram”(from_conversation)
- “帮我做一个面试官 Engram,你来补全细节”(guided + auto-fill)
MCP 工具列表
| 工具 | 参数 | 说明 |
|---|---|---|
ping |
无 | 连通性测试,返回 pong |
list_engrams |
无 | 列出可用 Engram(含描述与文件统计) |
get_engram_info |
name |
获取完整 meta.json |
load_engram |
name, query |
加载角色/工作流程/规则全文 + 知识索引(含内联摘要)+ 案例索引(含 uses)+ 动态记忆(含热层索引)+ 可选全局记忆/继承知识/首次引导 |
read_engram_file |
name, path |
按需读取单个文件(含路径越界保护) |
write_engram_file |
name, path, content, mode |
写入或追加文件到 Engram 包(用于自动打包) |
capture_memory |
name, content, category, summary, memory_type, tags, conversation_id, expires, is_global |
对话中捕获用户偏好和关键信息,支持类型标注、标签、TTL过期、全局写入 |
capture_tool_trace |
name, tool_name, intent, result_summary, args_summary, status, summary, tags, conversation_id |
结构化记录工具调用轨迹到 memory/tool-trace.md,用于后续 workflow 推荐 |
list_tool_traces |
name, limit |
读取最近工具调用轨迹摘要(来自记忆索引) |
consolidate_memory |
name, category, consolidated_content, summary |
将某个 category 的原始条目压缩为密集摘要,原始条目归档至 {category}-archive.md |
delete_memory |
name, category, summary |
按摘要精确删除一条记忆,同时从索引和分类文件中移除 |
correct_memory |
name, category, old_summary, new_content, new_summary, memory_type, tags |
修正一条已有记忆的内容,更新索引和分类文件 |
add_knowledge |
name, filename, content, summary |
向 Engram 添加新知识文件并自动更新知识索引 |
install_engram |
source |
从 git URL 或 registry 名称安装 Engram 包 |
init_engram |
name, nested |
通过 MCP 初始化新 Engram(可选二级知识索引模板) |
lint_engrams |
name? |
通过 MCP 执行一致性校验,返回 errors/warnings 明细 |
search_engrams |
query |
通过 MCP 搜索 registry 条目 |
stats_engrams |
format |
通过 MCP 获取统计,format 支持 plain/json/csv |
create_engram_assistant |
mode, name?, topic?, audience?, style?, constraints?, language?, conversation? |
生成 Engram 草稿(from_conversation / guided),缺失字段可自动补全并标注 |
finalize_engram_draft |
draft_json, name?, nested, confirm |
用户确认后落盘创建 Engram,并自动执行 lint 校验 |
open_ui |
port? |
启动可视化管理界面,自动打开浏览器(默认端口 9470) |
load_engram 返回内容格式
# 已加载 Engram: fitness-coach
## 用户关注方向
{query}
## 角色
{role.md 全文}
## 工作流程
{workflow.md 全文}
## 规则
{rules.md 全文}
## 知识索引
{knowledge/_index.md 内容,含内联摘要}
## 案例索引
{examples/_index.md 内容,含 uses 关联}
## 动态记忆
{memory/_index.md 内容,含自动捕获的用户偏好和关键信息,用 <memory> 标签包裹}
## 全局用户记忆(可选)
{<packs-dir>/_global/memory/_index.md 的活跃条目,用 <global_memory> 标签包裹}
## 首次引导(可选)
{rules.md 中的 ## Onboarding 区块提取内容}
若
meta.json配置了extends,返回里还会出现"继承知识索引(来自父 Engram)"区块;当前仅支持单层继承。
记忆类型(memory_type)
capture_memory 支持七种语义类型:
| 类型 | 说明 | 示例 |
|---|---|---|
preference |
用户偏好 | 偏好晨练、不喜欢跑步 |
fact |
关于用户的客观事实 | 左膝有旧伤、身高175cm |
decision |
对话中做出的关键决定 | 决定从3x/week开始训练 |
history |
历史对话的重要节点 | 第一轮面试通过算法题 |
stated |
用户明确说出的信息(高置信度) | "我膝盖有旧伤" |
inferred |
LLM 从行为推断的信息(低置信度) | 连续3次选早晨训练→推断偏好早起 |
general |
默认,未分类 | 其他信息 |
stated vs inferred 的区别:引用 inferred 类记忆时应加"可能"等不确定性措辞;correct_memory 可将 inferred 升级为 stated。
expires 参数使用 YYYY-MM-DD(ISO 8601 的日期部分,如 "2026-06-01")。系统按 UTC 日期判断是否过期,到期后记忆会转存到 memory/{category}-expired.md 并从加载结果中隐藏。适合状态性记忆("用户正在备考")。
is_global=True 将记忆写入 <packs-dir>/_global/memory/,所有 Engram 加载时都会自动附加这部分记忆。适合跨专家共享的用户基础信息(年龄、城市、职业等)。
全局用户记忆(Global Memory)
解决的问题: 你告诉健身教练"我28岁、住深圳",但语言伙伴完全不知道。全局记忆让这类基础信息一次写入、所有专家共享。
存储位置: <packs-dir>/_global/memory/,结构与普通 Engram 的 memory 目录完全相同。若 --packs-dir 使用默认值 ~/.engram,实际路径就是 ~/.engram/_global/memory/。
使用方式:
用户第一次提到自己的基本信息时:
→ AI 调用 capture_memory(
name="fitness-coach", ← 当前专家名(用于节流key,不影响写入位置)
content="用户名叫 Jammy,28岁,居住在深圳,职业是独立开发者",
category="user-profile",
summary="Jammy,28岁,深圳,独立开发者",
memory_type="fact",
is_global=True ← 写入全局,而非当前 Engram
)
→ 下次加载任意 Engram 时,load_engram 返回内容末尾自动附加:
## 全局用户记忆
<global_memory>
- `memory/user-profile.md` [2026-02-25] [fact] Jammy,28岁,深圳,独立开发者
</global_memory>
适合写入全局的信息:
- 姓名、年龄、城市
- 职业和工作背景
- 语言偏好(中文/英文)
- 长期健康状况(如慢性病、过敏)
不适合写入全局的信息:
- 特定专家领域的偏好(训练计划偏好 → 写健身教练自己的 memory)
- 有时效性的状态(正在备考 → 用 expires 参数)
目录结构示例(参见 examples/_global/):
<packs-dir>/_global/
└── memory/
├── _index.md ← 热层索引(最近50条)
├── _index_full.md ← 冷层索引(全量)
└── user-profile.md ← 用户基础信息
记忆压缩(consolidate_memory)
随着对话积累,某个 category 的原始条目会越来越多。consolidate_memory 解决这个问题:
原始条目不断追加(append-only)
↓
某个 category 超过 30 条时
↓
AI 调用 read_engram_file 读取原始内容
↓
AI 写出去重压缩的密集摘要
↓
调用 consolidate_memory → 原始条目归档,摘要替换
不同类型的记忆,压缩策略不同:
| 类型 | 特征 | 策略 |
|---|---|---|
fact |
稳定,几乎不变 | 永久保留,无需压缩 |
preference |
半稳定,偶尔更新 | 合并压缩,始终加载 |
decision |
有时效性 | 保留近期,压缩旧的 |
history |
越新越相关 | 定期压缩,归档旧的 |
压缩后 _index.md 只保留一条 [consolidated] 条目,context 注入量永远可控。
原始条目归档至 memory/{category}-archive.md,仍可通过 read_engram_file 查阅。
记忆删除(delete_memory)
当用户明确说某条记忆有误或已过时时使用。AI 先读取索引找到精确摘要,再调用删除:
用户:"我已经不住北京了,帮我删掉那条记录"
→ AI 调用 read_engram_file("name", "memory/_index.md") 找到对应条目
→ 确认摘要文本 → 调用 delete_memory("name", "user-profile", "居住在北京")
→ 条目从索引和分类文件中同时移除
summary参数需与索引中的摘要文本完全匹配,建议先读索引再调用。
记忆修正(correct_memory)
当用户说某条记忆内容不准确时使用。原时间戳保留,只更新内容和摘要:
用户:"我体重不是80kg了,现在75kg"
→ AI 读取 memory/_index.md,找到摘要"体重80kg"
→ 调用 correct_memory("name", "user-profile", "体重80kg",
"用户体重75kg(已减重)", "体重75kg", memory_type="fact")
→ 原条目内容和索引同步更新,时间戳保留
memory_type 和 tags 可在修正时一并更新,无需单独操作。
动态知识扩充(add_knowledge)
对话中发现需要补充新知识主题时使用。适合"偶尔补充一个新主题",不适合批量导入:
用户:"帮我把刚才讨论的跑步技术要点记录到知识库里"
→ AI 整理内容
→ 调用 add_knowledge("name", "跑步技术", "# 跑步技术\n\n落地方式...", "落地方式与步频优化要点")
→ 新文件写入 knowledge/跑步技术.md,knowledge/_index.md 自动追加一行
知识索引条目超过 15 个时,建议手动整理
_index.md的###分组结构,帮助模型快速定位。
自动模式
Agent 看到 list_engrams 返回的摘要,判断当前问题是否匹配某个专家,匹配则自动加载:
用户:"我膝盖疼,还能做深蹲吗?"
→ agent 调用 list_engrams() 看到 fitness-coach
→ 判断匹配 → 调用 load_engram("fitness-coach", "膝盖疼深蹲")
→ 看到知识索引中的摘要,判断需要深入
→ 调用 read_engram_file("fitness-coach", "knowledge/膝关节损伤训练.md")
→ 拿到完整知识 → 以专家身份回答
手动模式
用户用 @engram-name 直接指定,agent 跳过判断直接加载:
用户:"@fitness-coach 帮我制定一个增肌计划"
→ agent 识别 @ 指令 → 直接调用 load_engram("fitness-coach", "增肌计划")
@ 指令的解析依赖 agent 端。MCP server 只提供工具,不处理消息格式。
Engram 包结构
<engram-name>/
meta.json # 支持 extends 字段实现继承
role.md
workflow.md
rules.md # 支持 ## Onboarding 区块
knowledge/
_index.md
<topic>.md
examples/ # 可选
_index.md
<case>.md
memory/ # 动态记忆(自动生成,对话中捕获)
_index.md # 热层:最近50条
_index_full.md # 冷层:完整记录(按需加载)
<category>.md
meta.json 支持 extends 字段实现 Engram 继承:
{
"name": "sports-nutritionist",
"extends": "fitness-coach",
"description": "运动营养师,在健身教练基础上增加营养学知识"
}
加载时自动合并父 Engram 的 knowledge index(仅单层继承);子 Engram 的 role/workflow/rules/examples/memory 完全独立,不继承父项。
meta.json 示例:
{
"name": "fitness-coach",
"author": "test",
"version": "1.0.0",
"description": "前康复机构训练主管,10年教练经验,擅长增肌减脂、膝肩不适训练调整与可执行计划落地",
"tags": ["健身", "营养", "训练计划"],
"knowledge_count": 5,
"examples_count": 3
}
使用场景
Engram 不只是专家系统——它是一个通用的身份注入框架,适用于任何你想让 AI "成为"的角色。
| 场景 | 说明 | 示例 |
|---|---|---|
| 专家顾问 | 健身教练、律师、营养师等垂直领域专家 | fitness-coach |
| 聊天伙伴 | 远方的朋友、家人,保留他们的说话方式和记忆 | old-friend |
| 语言陪练 | 母语者角色,在聊天中自然纠错和教学 | language-partner |
| 模拟面试 | 技术面试官,完整的面试流程和反馈 | mock-interviewer |
| 用户画像 | 目标用户角色,用于产品验证和用户研究 | user-persona |
| 品牌客服 | 统一的客服人设、话术规范和处理流程 | brand-support |
| 角色扮演 | 小说角色、游戏NPC,用于创作或互动叙事 | novel-character |
| 历史人物 | 基于史料的思维模式还原,用于思辨和学习 | historical-figure |
| 项目上下文 | 团队的架构决策、技术选型、踩坑记录 | project-context |
| 过去的自己 | 记录某个人生阶段的想法,未来回顾和反思 | past-self |
与 MCP 工具和 Skills 协作
Engram 负责"是谁 + 知道什么 + 怎么思考",MCP 工具和 Skills 负责"能做什么"。三者相辅相成:
Engram = 身份 + 知识 + 决策流程
MCP 工具 = 可调用的外部能力(数据库、监控、API 等)
Skills = 可触发的操作流程(部署、回滚、代码生成等)
在 workflow.md 中,你可以指定在特定决策节点调用哪些 MCP 工具或 Skills。模型加载 Engram 后,会按照 workflow 的指引,在合适的时机主动调用这些工具。
starter-complete 与 starter-template 里也已加入这条提醒,方便直接照着改。
示例(来自 examples/project-context/workflow.md):
## 可调用的外部工具
| 动作 | 工具类型 | 调用方式 |
|------|----------|----------|
| 查看最近提交 | MCP 工具 | 调用 git MCP server 的 git_log |
| 查看服务日志 | MCP 工具 | 调用 grafana MCP server 的 query_logs |
| 部署到测试环境 | Skill | 触发 /deploy-staging skill |
| 回滚线上版本 | Skill | 触发 /rollback skill |
这样 Engram 就不只是"知识库",而是一个完整的专家工作台——既知道怎么判断,也知道该调什么工具。
创建自己的 Engram
最小可用包:
my-engram/
meta.json
role.md
推荐完整结构:
role.md:背景经历、沟通风格、核心信念workflow.md:决策流程rules.md:运作规则、常见错误、记忆规则(见下方)knowledge/_index.md+ 主题文件:知识索引(含内联摘要)+ 细节examples/_index.md+ 案例文件:案例索引(含 uses 关联)+ 复盘memory/:动态记忆目录(对话中自动生成,无需手动创建)
在 rules.md 中定义记忆规则(推荐)
capture_memory 依赖 AI 的主动判断,但 AI 不知道"这个 Engram 应该记什么"。在 rules.md 末尾加一节 ## 记忆规则,明确告诉 AI 何时捕获、用什么 category 和 memory_type,可以大幅提升记忆的覆盖率和准确性。
## 记忆规则
- 用户提到身体状况、伤病或疼痛时 → capture_memory(category="health", memory_type="fact", tags=["injury"])
示例:膝盖旧伤、肩袖问题、腰椎间盘突出
- 用户说出具体训练目标时 → capture_memory(category="goals", memory_type="fact")
示例:3个月减10斤、备战马拉松、增肌5kg
- 用户对训练计划给出反馈时 → capture_memory(category="feedback", memory_type="preference")
示例:上次的计划太累、喜欢居家训练、不喜欢跑步
- 用户做出关键训练决定时 → capture_memory(category="decisions", memory_type="decision")
示例:决定从全身训练开始、选择了3天分化方案
设计原则:
- 每条规则对应一个明确的触发场景,不要写"发现重要信息时"这种模糊描述
- category 命名保持一致,同一类信息始终写入同一个文件
- 用 memory_type 区分信息性质:
fact(客观事实)/preference(偏好)/decision(决定)/history(历史节点) - tags 用于同一 category 内的细分过滤,如
["injury", "knee"]
所有内置示例(examples/ 目录)均已包含针对各自领域的记忆规则,可直接参考。
案例元数据(YAML frontmatter)
每个案例文件头部建议使用结构化 YAML frontmatter,至少包含 id / title / uses / tags / updated_at:
---
id: example_fitness_coach_膝盖疼的上班族
title: 膝盖疼的上班族
uses:
- knowledge/膝关节损伤训练.md
- knowledge/新手训练计划.md
tags:
- fitness-coach
- example
- 膝关节损伤训练
- 新手训练计划
updated_at: 2026-02-26
---
问题描述:32岁上班族,久坐导致膝盖不适...
uses 负责案例→知识关联;id 便于唯一标识与追踪;updated_at 建议统一 YYYY-MM-DD;tags 用于主题检索与筛选。知识文件保持原子化,案例负责组合与落地。_index.md 中也会展示 uses 关联,帮助模型快速判断哪些案例和知识相关。
当知识文件超过 10 个时,建议在
_index.md中用###按主题分组,帮助模型快速定位相关条目,避免平铺过长导致漏看。参见examples/fitness-coach/knowledge/_index.md。
可直接参考模板和完整示例:
examples/template/— 空白模板(含 Onboarding 区块示例)examples/fitness-coach/— 专家顾问(健身教练)examples/sports-nutritionist/— 继承示例(extends fitness-coach,运动营养师)examples/old-friend/— 聊天伙伴(远在旧金山的老朋友)examples/language-partner/— 语言陪练(东京上班族,日语练习)examples/mock-interviewer/— 模拟面试官(技术面试全流程)examples/user-persona/— 用户画像(产品验证用的目标用户)examples/brand-support/— 品牌客服(统一话术和服务标准)examples/novel-character/— 虚构角色(赛博朋克世界的黑客)examples/historical-figure/— 历史人物(王阳明,心学对话)examples/project-context/— 项目上下文(团队架构决策和踩坑记录)examples/past-self/— 过去的自己(2020年刚毕业的版本)
在 AI 工具中集成
以下配置中,将
/path/to/engram-mcp-server替换为你的实际项目路径。
Claude Desktop
在 claude_desktop_config.json 中添加:
{
"mcpServers": {
"engram-server": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/engram-mcp-server",
"engram-server",
"--packs-dir", "~/.engram"
]
}
}
}
Claude Code
项目级配置(.mcp.json 放在项目根目录)或全局配置(~/.claude/settings.json):
{
"mcpServers": {
"engram-server": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/engram-mcp-server",
"engram-server",
"--packs-dir", "~/.engram"
]
}
}
}
Cursor / Windsurf / 其他 MCP 兼容 IDE
在对应 IDE 的 MCP 配置中添加相同的 server 配置即可。具体配置文件位置请参考各 IDE 文档。
Codex
{
"mcpServers": {
"engram-server": {
"command": "uv",
"args": [
"run",
"--directory", "/path/to/engram-mcp-server",
"engram-server",
"--packs-dir", "~/.engram"
]
}
}
}
启用自动加载
方式 A:手动添加 System Prompt(推荐)
将以下提示词添加到对应 AI 工具的指令文件开头:
| AI 工具 | 指令文件 |
|---|---|
| Claude Code | 项目根目录的 CLAUDE.md |
| Codex | 项目根目录的 AGENTS.md |
| 其他 | 对应工具的 system prompt 配置 |
你有一个专家记忆系统可用。对话开始时先调用 engram-server 这个 MCP 中的 list_engrams() 查看可用专家。
# 自动执行规则(傻瓜式)
- 默认原则:能由模型直接完成的事,不让用户手动执行命令;优先直接调用 MCP 工具。
- 除非环境/权限阻塞,否则不要让用户“自己去终端跑命令”。
- 如果调用了 MCP,回复时要告诉用户调用了什么 MCP 和哪个专家。
- 首次进入新项目时,默认检查并使用 `./.claude/engram`。
- 目录策略统一为“项目级优先,`~/.engram` 为共享/回退目录”。
## 自然语言意图 -> MCP 自动映射
- 用户说“找/查/推荐某类 Engram” -> 自动调用 search_engrams(query)
- 用户说“安装某个 Engram” -> 自动调用 install_engram(source-or-name)
- 安装默认写入当前项目 `./.claude/engram`,不是默认全局目录。
- 用户说“初始化当前项目 engram” -> 优先检查 `starter-complete` / `starter-template` 是否存在。
- install_engram(name/source) 失败时,不中断用户:自动调用 search_engrams(query) 找候选后重试 install_engram。
- 用户说“看统计/导出报表” -> 自动调用 stats_engrams(format=plain/json/csv)
- 用户说“创建 Engram” -> 自动进入创建助手流程(create_engram_assistant + finalize_engram_draft)
- 当用户说"打开engram管理界面",AI 调用 open_ui()
## 专家加载与知识读取
- 用户问题匹配某个专家时,调用 load_engram(name, query)。
- load_engram 后优先看知识索引/案例索引;索引不足再 read_engram_file(name, "knowledge/xxx.md")。
- 若 workflow 明确写了 Skill 调用节点,按节点提示主动调用对应 Skills。
- load_engram 返回“继承知识索引”区块时,可 read_engram_file(父专家名, "knowledge/xxx.md") 读取父知识。
- 在 load_engram 后优先读取案例 frontmatter 的 id/title/uses/tags/updated_at,再决定要不要读具体 knowledge 文件。
## 记忆写入规则
- 发现跨专家通用信息(年龄、城市、职业、语言偏好等) -> capture_memory(..., is_global=True)
- 状态性信息(如“用户正在备考”)要加 expires(YYYY-MM-DD),到期自动归档隐藏。
- load_engram 出现“首次引导”区块时,自然收集并 capture_memory。
- 发现用户偏好/关键事实/关键决定时,及时 capture_memory(name, content, category, summary, memory_type, tags, conversation_id, expires, is_global)。
- 只要调用了工具(Skills / MCP / Subagent / 其他外部工具),都要记录工具轨迹:capture_tool_trace(name, tool_name, intent, result_summary, args_summary, status, summary, tags, conversation_id)。
- 工具调用失败也要记录,status 设为 `error`,result_summary 写清失败原因。
- engram-server 内部多数 `name` 相关工具会自动写入 tool-trace;但外部工具不会自动写,必须显式调用 capture_tool_trace。
- 去重规则:若本轮已记录过“同一 tool_name + 同一 intent”的轨迹,不重复写入。
- 外部工具记录字段优先级:至少填写 `tool_name`、`intent`、`args_summary`、`result_summary`、`status`。
- 范围规则:只有已 `load_engram(name, ...)` 的专家,才写入该 `name` 的工具轨迹,避免串专家记忆。
- 交付前检查:若本轮发生过工具调用但未写任何轨迹,结束前补记至少一条 `capture_tool_trace`。
- 记忆条目较多出现“💡 当前共 N 条记忆”时,先 read_engram_file(name, "memory/{category}.md"),再 consolidate_memory(...)。
- 用户要求删除记忆 -> delete_memory(name, category, summary)
- 用户纠正记忆 -> correct_memory(name, category, old_summary, new_content, new_summary, memory_type, tags)
- 记忆较多查历史 -> read_engram_file(name, "memory/_index_full.md")
## 知识写入规则
- 对话中形成系统性可复用知识(方法论/对比分析/决策框架)时,先询问用户是否写入知识库,确认后 add_knowledge。
- 用户纠正知识库错误时,提议并执行 add_knowledge 更新。
- add_knowledge 支持分组路径:filename 可用 "子目录/文件名"(如 "训练基础/深蹲模式")。
## 创建 Engram 助手(双模式)
- mode=from_conversation:把当前对话自动整理成 Engram 草稿。
- mode=guided:一步步引导用户填写;用户说“没有/你来”时自动补全。
- 统一流程:
1) 先调用 create_engram_assistant(...) 生成草稿并回显
2) 用户确认后调用 finalize_engram_draft(draft_json, confirm=True)
3) finalize 后必须看 lint 结果(errors 必须先修复)
- 自动生成内容时必须提示:内容可能不完整,建议用户补充。
- 创建阶段不自动生成用户记忆条目;memory 保持空模板。
## 其他
- 用户也可以用 @专家名 直接指定专家。
- 用户询问某个 engram 详细信息时,调用 get_engram_info(name)。
- 需要直接改 role.md/workflow.md/rules.md 等非知识库文件时,调用 write_engram_file(name, path, content, mode)。
- 新增/修改案例文件时,确保 frontmatter 字段齐全(id/title/uses/tags/updated_at),id 全局唯一,updated_at 用当天日期。
- 多案例命中时,先按 tags 匹配,再参考 updated_at 选更近的案例。
- 回复中引用案例时优先带 title + id,减少歧义。
- 若发现 frontmatter 缺字段或 uses 指向不存在文件,先修复再继续回答。
可选增强:如果你希望在创建 Engram 时通过联网搜索验证知识可信度(并默认丢弃无法验证内容),可将
KNOWLEDGE_VERIFICATION_PROMPT.md的内容追加到 system prompt。
方式 B:MCP Prompt
服务暴露 engram-system-prompt,支持 MCP Prompt 的客户端可自动注入。
方式 C:工具描述引导(零配置)
list_engrams / load_engram / read_engram_file 的工具描述已包含调用流程引导,部分 AI 客户端无需额外配置即可自动触发。
调整压缩触发阈值
当 _index.md 中的记忆条目总数达到阈值时,load_engram 会提示 AI 进行压缩。默认阈值是 30 条,可在以下位置修改:
文件:src/engram_server/loader.py,常量 _CONSOLIDATE_HINT_THRESHOLD
_CONSOLIDATE_HINT_THRESHOLD = 30
建议范围:
20:对话频繁,希望记忆保持精简30:默认,适合大多数场景(约 10-15 次对话触发一次提示)50:轻度使用,不想频繁压缩
这只是一个提示,AI 不会自动压缩,需要主动调用
consolidate_memory。
更新项目
如果使用一键安装(uvx --from git+...),清除缓存后重启即可获取最新版本:
uv cache clean
然后重启 Claude Code,uvx 会自动从 GitHub 拉取最新代码。
当前版本会在首次运行时为项目自动创建
./.claude/engram/(含starter-complete与starter-template)。~/.engram/仍可作为跨项目共享目录。
多设备同步
方案 A:iCloud / Dropbox / OneDrive 同步目录
把 --packs-dir 指向云盘同步目录即可,多台设备共用同一份 Engram 数据:
claude mcp add --scope user engram-server -- \
uvx --from git+https://github.com/DazhuangJammy/Engram engram-server \
--packs-dir "$HOME/Library/Mobile Documents/com~apple~CloudDocs/EngramPacks"
Windows 可改成 OneDrive 路径,例如
C:\\Users\\<你用户名>\\OneDrive\\EngramPacks。
方案 B:Git 同步(把 ~/.engram 当作仓库)
如果你更偏向可审计变更,可以直接把 ~/.engram 初始化为 git 仓库并推送到私有远程:
cd ~/.engram
git init
git remote add origin <your-private-repo-url>
git add .
git commit -m "init engram packs"
git push -u origin main
之后在其他设备拉取同仓库,再用同样的 MCP 配置即可。
测试
pytest -q
路线图
已完成(v0.1.0)
- MCP server 核心功能:list / load / read_file / install / init
- 分层懒加载架构:常驻层 + 索引(含内联摘要)+ 按需全文
- 案例→知识关联:结构化 YAML frontmatter(id/title/uses/tags/updated_at)
- 模板系统:
engram-server init创建标准结构 - 测试覆盖:loader / server / install
- 11 个完整示例 Engram
已完成(v0.2.0)
- 动态记忆:
capture_memory对话中自动捕获用户偏好和关键信息 - 写入能力:
write_engram_file支持从对话自动打包 Engram load_engram自动加载memory/_index.md,无需用户重复说明- 所有示例 Engram 新增 memory/ 样板
已完成(v0.3.0)
capture_memory新增memory_type(preference/fact/decision/history/general)语义分类capture_memory新增tags参数,支持多标签过滤capture_memory新增conversation_id参数,支持对话作用域绑定- 节流保护:30 秒内相同内容重复捕获自动跳过
load_engram动态记忆区块用<memory>标签包裹,AI 可清晰区分记忆与知识- 记忆索引格式升级:含类型标注和标签信息
已完成(v0.4.0)
consolidate_memory工具:将原始条目压缩为密集摘要,原始条目归档至{category}-archive.md_index.md压缩后只保留一条[consolidated]条目,context 注入量永远可控load_engram当记忆条目 ≥ 30 条时自动提示压缩- 按记忆类型分层压缩策略(fact 永久保留 / preference 合并 / history 定期归档)
- 示例 Engram 新增
preferences-archive.md展示归档格式
已完成(v0.5.0)
delete_memory工具:按摘要精确删除一条记忆,同时从索引和分类文件中移除correct_memory工具:修正已有记忆内容,更新索引和分类文件,支持重新指定类型和标签add_knowledge工具:对话中动态向 Engram 添加新知识文件,自动更新知识索引
已完成(v0.8.0)
engram-server stats:CLI 统计命令,查看所有 Engram 的记忆/知识/案例数量、类型分布、最近活动engram-server stats --tui:Rich 渲染版统计面板(彩色表格 + 面板)rich>=13.0作为必装依赖,不影响一键安装体验
已完成(v0.9.0)
engram-server lint:校验索引一致性、uses 引用、meta 合法性、extends、空知识文件、最小必需文件engram-server stats --json / --csv:支持机器可读导出格式- system prompt 与模板规则新增知识提取引导,鼓励 AI 主动沉淀结构化知识
已完成(v1.0.0)
- 分组索引:
add_knowledge支持二级目录写入与子索引优先更新 engram-server init --nested:可一键生成带分组索引的模板- 静态 Registry:新增
registry.json、engram-server search、install名称解析 - README 新增多设备同步章节(云盘 / Git 两种方案)
已完成(v1.1.0)
- 傻瓜式自然语言路由:用户只说需求,模型默认自动调用 MCP 工具
- 创建助手双模式:
create_engram_assistant支持from_conversation与guided - 确认后落盘:
finalize_engram_draft自动创建文件并执行lint_engrams - 自动生成内容透明提示:草稿会标注 auto-filled 字段并提醒“可能不完整”
- 创建阶段不自动写入用户记忆,
memory保持空模板
已完成(v1.2.0)
- 项目级自动初始化:首次运行自动创建
./.claude/engram/ - 自动注入双起始包:
starter-complete(完整示例)+starter-template(说明模板) - MCP 工具(
install_engram/init_engram/finalize_engram_draft)默认写入当前项目目录
已完成(v1.3.0)
- 工具轨迹自动记忆:
name相关核心 MCP 工具调用会自动写入memory/tool-trace.md - 新增轨迹工具:
capture_tool_trace/list_tool_traces,可记录并回看 Skills / MCP / Subagent / 外部工具调用过程 - registry 多源合并与覆盖:支持用户级、项目级
registry.local.json覆盖 - 评测能力升级:
evaluation/score_case_study.py支持 content/safety/structure 多维评分与 weighted checkpoints serve --packs-dir写入路径策略优化,显式路径、项目路径、默认全局路径行为更一致
已完成(v1.4.0)
- 内置 Web UI:可视化管理界面,浏览器中浏览/编辑 Engram 包
open_uiMCP 工具:对话中说"打开管理界面"即可自动启动浏览器engram-server uiCLI 命令:独立运行 Web UI,不依赖 Claude Code- 暗色主题 SPA:卡片式 Engram 列表、文件树 + 内联编辑器、统计面板
- 快捷键支持:Cmd+S / Ctrl+S 保存文件
计划中
engram-server lint --fix:自动修复孤儿文件、无效索引、空文件search_engram_knowledge(name, query):服务端关键词扫描与段落返回- Engram 社区 registry
许可证
MIT
