使用说明
记忆印迹
AI代理的本地优先内存操作系统
Engram 1.0是一个用于AI代理的本地模型上下文协议(MCP)服务器和内存操作系统。它为代理提供了持久内存、引用检索、审查源代码获取、文档证据工作流、图形证据和本地运行时检查,而无需将私有项目上下文推送到托管服务。
重建的1.0运行时由以下所有者拥有 engramd:SQLite分类账、内容寻址源存储、LanceDB检索索引、Kuzu图形存储、作业、事务、快照、防火墙状态和发布/检查收据。当调用者在守护进程拥有的运行时中移动时,遗留的JSON内存和ChromaDB仍然是可读的、可重建的兼容性输入。
按稳定级别划分的当前状态 docs/ENGRAM_CURRENT_STATUS.md.
当前本地1.0版本候选检查点为
docs/ENGRAM_LOCAL_1_0_RELEASE_CANDIDATE.md.
Engram围绕一个简单的想法构建:代理应该首先检索最小的有用上下文,然后只有在证据、引用或审查状态证明其合理性时才进行扩展。
为什么选择Engram?
大多数代理内存系统以两种方式之一失败:它们在会话之间忘记了太多,或者在每个会话中加载了太多的上下文。
Engram的目标是走一条中间道路:
- 把记忆保存在你的机器上。
- 从语义上搜索,而不是依赖精确的关键字。
- 在块之前检索片段,在完整文档之前检索块。
- 给代理人收据,说明他们装载了什么以及为什么装载。
- 在成为记忆之前,将杂乱的源材料分解为可审查的证据。
- 保持持久内存可读、可编辑和可恢复。
其结果是为编码代理、研究代理、本地助理和MCP客户端提供了一个实用的会话间记忆层,这些代理需要连续性,而无需将整个知识库转储到每个提示中。
Engram提供什么
英格拉姆是第一个面对的代理人。正常路径是 memory_protocol() 为了发现, search_memories 或 context_pack 对于小上下文, query_knowledge 对于引用的定向/审查/审计数据包,以及用于写入持久状态的任何内容的显式只接受工具。
内存服务器
- Daemon拥有的内存操作系统运行时 通过
engramd,与server_daemon_client.py作为普通多会话代理使用的薄稳定MCP入口点。 - SQLite分类账 用于元数据、作业、事务、快照、别名、实体、概念、收据和迁移状态。
- 内容寻址源存储 用于原始、标准化和提取的证据伪影。
- LanceDB检索与Kuzu图存储 在重建的本地运行时中。
- 传统JSON/Chroma兼容性 在迁移过程中保持可读性和可恢复性。
- Markdown感知分块 尽可能保留标题和段落边界。
- 重复数据删除检查 在写入之前,明确
force=True以(权力)否决 - 元数据筛选器 用于项目、域、标签、生命周期状态和规范内存。
- 关系链接 包括双向遍历。
- 固着表面 用于旧的或潜在的代码陈旧的记忆。
面向检索的代理
- 三层检索:搜索片段,检索块,然后仅在必要时读取完整的记忆。
- 上下文包 在一次调用中搜索、重复数据删除和检索一个有界的工作集。
- 上下文配置文件、数据包和切换 编译以任务为中心,引用工作上下文而不写入内存。
- 协议发现 因此,代理可以询问Engram如何使用内存阶梯。
- 会话引脚 其在不改变存储的元数据的情况下临时促进已知存储器。
- 代币使用估算 Engram归因于电话。
- 检索评估工具 用于检查内存阶梯是否仍按预期运行。
- 知识契约(EKC)响应 用于项目、源代码、文档、审查、审计、图形、实体、决策、实施上下文和证据包定向,并保持稳定的兼容性。
源代码和代码库工作流
- 源摄入量草案 用于成绩单、日志、交接单、设计说明和其他可审查的输入。
- 没有写预览 用于分块和本地源连接器摄入。
- 命名摄入管道 对于常见的源类型。
- 代码库映射作业 在连接的代理执行合成时收集有界存储库上下文。
- 源漂移检测 因此,除非明确强制,否则过时的映射结果将被阻止。
文档智能
- 本地PDF反汇编 无需写入活动记忆,即可清点页面、文本覆盖率、带图像的页面、页面窗口、简历标记和提取收据。
- 端到端文件接收审查包 它结合了反汇编、块预览、质量警告、工件清单、覆盖差距、策略元数据和推广指导。
- 质量报告 标记无文本页面、图像密集页面、失败页面和视觉审查需求。
- 便携式工件清单 具有页面级简历状态和内容寻址的源引用。
- 强制性OCR/视觉工作请求 对于带有图像的页面或区域,包括每个工件的覆盖要求和预期的来源合同。
- 理解数据包 对代理提供的摘要、声明、概念、实体、高价值部分、草稿内存建议以及提供的加自动生成的图覆盖率建议进行规范化。
- 显式工件存储事务 用于分类文件证据。这些存储了审查过的文档/块/覆盖率证据,而没有促进活动记忆或图形边缘。
- 查看首次促销交易 因此,只有在以下情况下,选定的文档证据才会成为持久内存或图形边缘
accept=True并提供审阅者身份。 - 截断保护 对于大型文档:部分页面窗口报表
status: "partial",coverage_missing,resume,并且没有写布尔值,这样代理就不会把预先接受的样本误认为是完整的审查。
图表、证据和审查
- 键入图形边 支持、矛盾、精炼、引用、例子、视觉证据和相关概念。
- 审查第一批图形提案批次 库存可绘制记录,准备有界引用上下文,验证代理提供的边,并仅在以下情况下写入图边
accept=True. - 有界图证据包 通过
query_knowledge默认情况下,在不加载邻居内存体的情况下,显示边缘ID、证据和矛盾。 - 证据审计 关于人工制品、引文、报道收据和图表提案。
- 审查准备包 这有助于代理准备评论,而无需默默地宣传源代码或文档草稿。
- 实体配置文件、决策包、实现上下文和证据包 只有在较低级别的证据路径可用之后。
Web仪表板
- 浏览、搜索、创建、更新和删除记忆。
- 回顾陈旧的记忆和相关的记忆。
- 检查使用估计和检索评估状态。
- 检查内存操作系统运行时状态、作业、事务、审查队列、文档工件事务、升级事务、覆盖图、防火墙事件、图边、图证据收据、实体、概念、快照、技能包、EKC评估覆盖率和释放门命令。
- 监控磁盘使用情况和内存存储增长。
- 默认情况下在本地运行,在环回之外暴露时使用故障关闭令牌保护。
检索模型
Engram的核心工作流程是检索阶梯。
1. search_memories("release checklist", limit=5)
-> scored snippets with keys and chunk IDs
2. retrieve_chunk("project_release_notes", chunk_id=2)
-> one focused chunk
3. retrieve_memory("project_release_notes")
-> full memory, used only when the chunk is not enough
大多数代理工作应该在步骤1或2停止。
对于紧凑的单呼叫工作集,请使用 context_pack:
context_pack(
query="release checklist",
project="example-project",
max_chunks=5,
budget_chars=6000
)
context_pack 返回选定的块、引用、省略的结果计数和预算收据,以便代理可以看到他们所花费的上下文。
对于重复的项目、来源、文件导向、审查准备,
证据审计、有界图证据或更高级别的工件族数据包
例如实体配置文件、决策包、实现上下文和证据
捆绑包,从开始 query_knowledge 如果可用。它返回键入的EKC 1.0
对兼容性的回应 engram.knowledge.*.v0 信封。使用
search_memories 和 retrieve_chunk 当你需要较低级别的证据时
除了定向、审查、审计、图形或工件系列包之外。
稳定的任务列表通过以下方式发布 memory_protocol() 作为
knowledge_contract.task_types 并且必须得到支持
core.memory_os.knowledge_eval.DEFAULT_WORKFLOW_SCENARIOS.
实践中的代理工作流
对于普通代理工作:
memory_protocol()
search_memories(query, limit=5)
retrieve_chunk(key, chunk_id) # when the snippet is not enough
context_pack(query, max_chunks=5) # when a compact working set is better
query_knowledge(request) # when orientation, review, audit, or graph evidence should be cited
prepare_graph_readiness_report() # before a bulk graphing pass
prepare_graph_proposal_batch(...) # bounded cited context plus proposal validation
apply_graph_proposal_batch(..., accept=True, approved_by="agent-review")
对于大型源代码和文档工作:
preview_memory_chunks or prepare_source_memory
prepare_document_intake_review(source_path, max_pages=...)
prepare_visual_extraction_request / preview_visual_extraction
prepare_document_understanding_packet(agent_supplied_analysis)
prepare_document_artifact_store(review_packet)
store_document_artifact(prepared_transaction_id, accept=True, review_packet=review_packet)
prepare_document_promotion_transaction(document_draft, approved_by=...)
apply_document_promotion_transaction(transaction, accept=True)
prepare_document_ingestion_completion(document_id, ...)
complete_document_ingestion(document_id, accept=True, approved_by=...)
文档工作流程的前半部分是故意不写的。大PDF
应该在有界页面窗口中查看,并且应该保留部分数据包
直到缺失的OCR、表格、视觉和简历覆盖范围得到解决。
每个进气包包括 review_completeness这使得截断,
缺少视觉/表格/OCR证据,以及在提交简历之前明确的剩余工作
审阅者接受一个有分类账的工件。
store_document_artifact 记录分类文件证据;它不会创建
活动记忆或图形边缘。这些文章被单独评论
促销交易。文档将保持暂存状态,直到
prepare_document_ingestion_completion 报告完整的视觉/OCR/表格
覆盖率、引用的理解和审查的图表证据,以及
complete_document_ingestion 接受该结果为可用。
MCP工具表面
Engram首先公开结构化MCP工具。文本包装器仍然可供旧客户端使用,但新的集成应该更喜欢结构化工具。
代理密钥和尺寸指南:
- 避免在持久内存键中使用正斜杠字符。使用可读性
snake_case密钥,例如
engram_final_stabilization_slice_1_status_2026_05_14因此,文件系统支持的兼容性路径和其他工具不会解释 键作为嵌套路径。 - 将直接内存写入内容保持在15K服务器端请求指导下。 对于更大的源材料,使用块预览、源摄入、文档摄入, 或工件工作流程,以便审阅者在之前看到覆盖范围和遗漏 晋升。
产品发布标识和协议标识有意分开:
memory_protocol() 报告产品版本 1.0.0,协议 version: 2,
和协议 schema_version: "2026-04-27".
发现和检索
| 工具 | 目的 |
|---|---|
memory_protocol |
描述检索阶梯和当前工具合同。 |
search_memories |
使用过滤器和评分片段进行语义或混合记忆搜索。 |
find_memories |
查找查找动词的代理的别名。 |
context_pack |
搜索、重复数据消除和检索有界块工作集。 |
list_context_profiles |
不列出以任务为中心的上下文编译的写检索配置文件。 |
prepare_context |
为代理任务编译一个无写引用的上下文包。 |
make_handoff |
生成一个包含上下文参考、引用、下一步和验证说明的无写切换包。 |
prepare_project_capsule |
根据上下文参考和质量信号准备一份无需编写的项目总结草稿。 |
query_knowledge |
返回EKC 1.0项目、来源、文档方向、评审准备、证据审计、有界图证据或证据门控工件系列响应,并附上引用、政策、预算、计划和键入错误。信封依然存在 engram.knowledge.*.v0 为了兼容性。 |
retrieve_chunk |
通过内存键和块ID检索一个块 |
retrieve_chunks |
在一次调用中检索几个已知块。 |
retrieve_memory |
有意检索完整内存。 |
read_chunk |
别名为 retrieve_chunk. |
read_memory |
层感知助手:默认情况下为元数据,使用块 chunk_id,仅满 full=True. |
写入和元数据
| 工具 | 目的 |
|---|---|
prepare_memory |
起草密钥/元数据,验证并检查重复项,无需写入。 |
store_memory |
创建或更新内存。 |
write_memory |
寻找书写动词的代理的别名。 |
check_duplicate |
预览语义重复风险。 |
suggest_memory_metadata |
从内容中建议关键字、标题、标签和元数据。 |
validate_memory |
验证提议的有效载荷。 |
update_memory_metadata |
更新元数据而不重写内容。 |
delete_memory |
永久删除内存。 |
组织与质量
| 工具 | 目的 |
|---|---|
list_memories |
带过滤器的分页内存目录。 |
audit_memory_quality |
对范围、生命周期、分块和检索风险信号进行只读元数据质量审计。 |
get_related_memories |
遍历正向和反向内存链接。 |
get_stale_memories |
表面陈旧或可能陈旧的记忆。 |
pin_memory |
为当前会话固定内存。 |
unpin_memory |
删除固定的内存。 |
list_pins |
列出会话引脚。 |
clear_pins |
清除会话引脚。 |
audit_memory_metadata |
只读元数据卫生审核。 |
repair_memory_metadata |
先进行元数据修复。 |
daemon_status |
报告直接模式与选择加入模式 ENGRAM_DAEMON_URL 守护进程客户端模式。 |
来源、图表和评估
| 工具 | 目的 |
|---|---|
prepare_source_memory |
创建可审查的源内存草稿。 |
list_source_drafts |
浏览准备好的源草稿。 |
store_prepared_memory |
将选定的草稿提升到存储的内存中。 |
discard_source_draft |
删除草稿。 |
preview_memory_chunks |
无需书写即可预览组块。 |
preview_source_connector |
无需编写即可预览本地源代码。 |
list_document_extractors |
列出捆绑和外部文档提取功能。 |
preview_document_source_connector |
无需写入即可预览本地Markdown/文本/HTML和URL/外部解析器请求参数。 |
prepare_document_disassembly |
准备一份无需书写的本地PDF页面/文本/图像清单,其中包含质量警告、便携式工件参考、视觉候选和OCR/视觉跟踪请求。 |
prepare_document_intake_review |
为大型文档准备一个无写端到端文档审查包,其中包含反汇编、文本预览、质量、工件、缺少的OCR/视觉/表格覆盖收据、顶级无写标志和恢复状态。 |
prepare_document_extraction_request |
为PDF/DOCX/图像承载源准备一个无写外部解析器请求。 |
prepare_document_extraction_result |
将外部解析器输出标准化为无写预览参数。 |
preview_document_extraction |
无需书写即可预览文档证据和块。 |
prepare_document_understanding_packet |
无需编写,即可规范代理提供的摘要、声明、概念、实体、部分、警告以及提供的自动生成的图形覆盖率建议。 |
prepare_document_draft |
准备无写文档内存/图形提案。 |
prepare_document_promotion_transaction |
准备无书面文件推广操作。 |
apply_document_promotion_transaction |
仅在以下情况下应用所选的已审阅文档升级内存/图形写入 accept=True 和 approved_by 供应。 |
prepare_document_artifact_store |
在没有活动内存或图形升级的情况下,准备一个明确的已审查文档证据工件存储事务。 |
store_document_artifact |
仅在以下情况下存储分类文档/来源/块/覆盖范围证据 accept=True 并且再次提供匹配的已审查包;活动内存和图形边缘保持不变。 |
prepare_document_ingestion_completion |
在标记为可用之前,验证分阶段的文档证据是否具有完整的视觉/OCR/表格覆盖率、引用理解和审查的图形推广。 |
complete_document_ingestion |
标记一个分阶段文档,只有在应用了全面审查的覆盖范围和选定的图表证据后才能使用 accept=True. |
prepare_visual_extraction_request |
准备一份无需书写的OCR/视觉工作请求,其中必须包含每张图像的参考范围。 |
preview_visual_extraction |
无需书写即可预览OCR/视觉观察结果;传递原始视觉请求以强制覆盖。 |
list_ingestion_pipelines |
列出可用的水源取水管道。 |
migration_dry_run |
无需写入,即可根据内存操作系统分类账模式验证遗留JSON内存。 |
memory_os_round_trip_check |
在迁移工作目录中运行内存操作系统导入/导出/还原奇偶校验。 |
retrieval_backend_status |
报告遗留Chroma、守护进程Memory OS LanceDB就绪情况、后端配置意图、迁移的存储、重建探测和黄金比较状态,而不改变数据。 |
add_graph_edge |
存储引用之间的类型化关系,包括文档结构和视觉证据引用。 |
list_graph_edges |
列出参照周围的图形边。 |
impact_scan |
用于影响分析的导线图关系。 |
conflict_scan |
列出矛盾、无效和置换图边,而不加载内存体。 |
audit_graph |
检查图形卫生。 |
graph_backend_status |
报告JSON图、可选Kuzu、后端配置意图、迁移的图边缘、图奇偶校验和守护进程就绪门,而无需切换实时图存储。 |
prepare_graph_readiness_report |
清点可绘制的内存操作系统内存和可用文档,而无需读取全文或写入图边。 |
prepare_graph_proposal_batch |
准备有界引用源上下文,无需编写即可验证候选图边。 |
apply_graph_proposal_batch |
仅当满足以下条件时,才推广已审查的图形提案边和概念/实体参考 accept=True 和 approved_by 供应。 |
usage_summary |
总结Engram归因的代币估算。 |
list_usage_calls |
检查最近估计的使用情况。 |
retrieval_eval |
运行确定性检索,不进行写入工作流质量检查。 |
list_workflow_templates |
列出内置代理工作流配方。 |
代码库映射
| 工具 | 目的 |
|---|---|
read_codebase_mapping_config |
当存在回购映射配置时,读取该配置。 |
draft_codebase_mapping_config |
起草一份保险箱 .engram/config.json 不写 |
store_codebase_mapping_config |
验证并写入 .engram/config.json 具有覆盖保护。 |
preview_codebase_mapping |
在不存储作业的情况下对配置的映射域进行模拟运行。 |
prepare_codebase_mapping |
为代理合成准备源哈希、有界的repo上下文。 |
read_codebase_mapping_context |
阅读一个准备好的映射作业上下文部分。 |
store_codebase_mapping_result |
使用源漂移检查存储代理编写的映射结果。 |
install_codebase_mapping_hook |
在显式意图之后安装可选的提交后映射钩子。 |
运营
| 工具 | 目的 |
|---|---|
list_operation_jobs |
列出最近的本地操作/作业收据。 |
list_operation_events |
列出最近的本地操作事件记录。 |
兼容性文本包装
| 工具 | 目的 |
|---|---|
search_memories_text |
用于内存搜索的传统文本包装器。 |
retrieve_chunk_text |
一个块的传统文本包装器。 |
retrieve_memory_text |
用于全内存检索的传统文本包装器。 |
list_all_memories |
用于列出内存元数据的传统文本包装器。 |
get_related_memories_text |
相关内存链接的传统文本包装器。 |
get_stale_memories_text |
用于陈旧内存检查的旧文本包装器。 |
兼容性包装仍然适用于旧客户端。新的集成应该更喜欢上面的结构化工具。
安装
需求
- Python 3.10+
- Git
- 支持MCP的客户端,如Codex、Claude Code、Claude Desktop或其他MCP主机
快速开始
git clone https://github.com/ckwich/Engram.git
cd Engram
python install.py
安装程序创建虚拟环境,安装依赖项,下载本地嵌入模型,生成配置,并在以下情况下向Codex注册Engram codex CLI可用。
第一个模型下载大约是80 MB。
安装配置文件被拆分,因此普通代理会话可以保持精简:
| 简介 | 文件 | 目的 |
|---|---|---|
| 瘦守护进程客户端 | requirements-daemon-client.txt |
与通信的FastMCP适配器 engramd 无需导入ChromaDB或句子转换器。 |
| 完整的本地核心 | requirements-core.txt |
完整的本地守护进程/直接运行时,带有句子转换器、ChromaDB兼容性、LanceDB和Kuzu。 |
| 仪表板 | requirements-dashboard.txt |
Flask仪表板依赖关系。 |
| 后端峰值 | requirements-backend-spike.txt |
当前引用完整核心依赖集的兼容性配置文件。 |
| Dev | requirements-dev.txt |
测试和审计工具。 |
MCP客户端设置
法典
Codex CLI将MCP注册存储在 ~/.codex/config.toml.
建议的多会话设置:运行一个本地会话 engramd 守护进程和注册
瘦守护进程客户端MCP入口点。这使得Codex会议无法导入
或拥有ChromaDB、LanceDB、Kuzu、句子转换器或文档提取
国家。
窗户:
python install.py --daemon-url http://127.0.0.1:8765 --thin-daemon-client
# Manual fallback:
codex mcp add engram `
--env ENGRAM_DATA_DIR=C:\path\to\Engram\data `
--env ENGRAM_DAEMON_URL=http://127.0.0.1:8765 `
-- C:\path\to\Engram\venv\Scripts\python.exe `
C:\path\to\Engram\server_daemon_client.py
macOS/Linux:
python install.py --daemon-url http://127.0.0.1:8765 --thin-daemon-client
# Manual fallback:
codex mcp add engram \
--env ENGRAM_DATA_DIR=/path/to/Engram/data \
--env ENGRAM_DAEMON_URL=http://127.0.0.1:8765 \
-- /path/to/Engram/venv/bin/python \
/path/to/Engram/server_daemon_client.py
直接的 server.py 注册仍然支持本地调试,
兼容性和单过程开发。只有当你
有意需要更宽的直接模式表面:
codex mcp add engram -- \
/path/to/Engram/venv/bin/python \
/path/to/Engram/server.py
在更改MCP注册后,打开一个新的Codex线程,或重新启动Codex。现有线程可能无法热加载新添加的MCP服务器。
Stdio客户可以在每次对话中启动一个Engram流程。Engram在每个进程中保持JSON写入可用,但一次只有一个活动进程拥有ChromaDB向量索引;辅助进程跳过矢量索引/搜索,而不是关闭MCP传输。如果在客户端崩溃或应用程序更新后积累了许多过时的Engram进程,请在诊断存储故障之前关闭旧线程或重新启动MCP主机。
克劳德代码
claude mcp add engram --scope user \
/path/to/Engram/venv/bin/python \
/path/to/Engram/server.py
窗户:
claude mcp add engram --scope user `
"C:\path\to\Engram\venv\Scripts\python.exe" `
"C:\path\to\Engram\server.py"
克劳德桌面版
将Engram添加到 claude_desktop_config.json:
{
"mcpServers": {
"engram": {
"command": "/path/to/Engram/venv/bin/python",
"args": ["/path/to/Engram/server.py"]
}
}
}
SSE模式
Engram默认为MCP客户端使用stdio传输。
对于SSE运输:
python server.py --transport sse --host 127.0.0.1 --port 5100
只有当您有适当的网络控制时,才能绑定到非环回主机。
本地守护程序模式
engramd.py 启动一个拥有实时Engram内存的选择加入环回守护进程
存储和矢量索引。这让MCP stdio会话充当客户端,而不是
每个代理进程都试图直接拥有嵌入式ChromaDB。
1号航站楼:
python engramd.py --host 127.0.0.1 --port 8765
默认情况下,Engram将本地数据存储在此仓库下 data/ 目录。对于
隔离守护程序烟雾测试或备用本地存储,设置 ENGRAM_DATA_DIR
开始前 engramd 或 server.py;内存JSON、ChromaDB、Chroma锁
文件和源代码引入草稿将位于该目录下。
终端2,在启动MCP服务器进程之前:
export ENGRAM_DAEMON_URL=http://127.0.0.1:8765
python server.py
PowerShell:
$env:ENGRAM_DAEMON_URL = "http://127.0.0.1:8765"
python server.py
当 ENGRAM_DAEMON_URL 指向环回URL,而守护进程尚未
可达成的, server.py 将尝试开始 engramd.py 在接受MCP之前
交通。这可以防止守护进程客户端MCP适配器成为直接ChromaDB
业主。集 ENGRAM_DAEMON_AUTOSTART=0 需要手动启动守护进程。
自动启动在以下位置写入守护进程日志 ENGRAM_DATA_DIR\operations\.
健康检查:
python engramd.py --health --host 127.0.0.1 --port 8765
冒烟测试正在运行的守护进程:
python engramd.py --smoke-test --host 127.0.0.1 --port 8765
烟雾测试检查重复风险、写入、更新元数据、模拟运行
元数据修复、搜索、读取和删除临时 _engramd_smoke_*
通过守护进程访问内存。
工艺卫生医生:
python engramd.py --doctor --host 127.0.0.1 --port 8765
医生报告守护进程健康状况以及此结账 engramd.py 和
server.py 过程。要停止过时的MCP适配器进程,请传递显式PID
根据医生的报告:
python engramd.py --stop-server-pid 12345 12346
停止命令拒绝终止 engramd.py一次CLI检查,
其他Engram签出的流程以及当前流程。
为守护进程客户端模式生成MCP客户端配置:
python server.py --generate-config --daemon-url http://127.0.0.1:8765
这发出 ENGRAM_DATA_DIR 和 ENGRAM_DAEMON_URL 在生成的MCP中
服务器环境。 ENGRAM_DATA_DIR 让Engram指向这个回购
即使Codex在您工作时启动MCP服务器,也可以存储内存
不同的项目。守护程序URL通过修剪尾部斜线进行规范化。
对于跨越多个存储库的Codex会议,更倾向于注册MCP
服务器处于守护进程客户端模式,并运行一个本地守护进程。使用
server_daemon_client.py 用于最薄的稳定存储表面,或
server.py 随着 ENGRAM_DAEMON_URL 当你需要更广泛的测试工具时
表面:
codex mcp remove engram
codex mcp add engram `
--env ENGRAM_DATA_DIR=C:\Dev\Engram\data `
--env ENGRAM_DAEMON_URL=http://127.0.0.1:8765 `
-- C:\Dev\Engram\venv\Scripts\python.exe C:\Dev\Engram\server_daemon_client.py
现有的Codex会议可能仍需要新的工具发现步骤或重新启动 在他们看到Engram工具名称空间之前。重要的稳定性保证是 每个发现的Engram MCP适配器都将稳定的内存操作路由到 而不是竞争嵌入式Chroma所有权。
守护进程模式当前路由稳定的内存搜索、重复检查、块/满
读、写、源草稿准备/列出/丢弃/推广、文档
拆卸和导入审查、文档工件存储事务、文档
促销交易, query_knowledge元数据更新、元数据修复,
并通过以下方式删除 engramd重建的内存操作系统运行时也会初始化
SQLite、内容寻址源存储、LanceDB、Kuzu、作业、事务、,
快照、防火墙状态、释放门收据和本地内存操作系统
守护进程所有者下的检查器。仍支持直接进程内MCP模式
除非 ENGRAM_DAEMON_URL 已设置。托管租户授权不是
本地1.0。
Web仪表板
启动仪表板:
python webui.py
然后打开:
http://127.0.0.1:5000
仪表板首先是环回的。局部使用是有意低摩擦。
内存检查器对于正常的审查工作是只读的:它会显示守护进程
状态、内存操作系统作业、审阅准备草稿、文档工件存储
交易、促销交易、图表证据计数、EKC评估工作流程
从守护进程拥有的分类账中获取覆盖率和释放门命令。应用a
文档升级是检查员唯一的写入路径;它需要一个被接受的
文档推广交易, accept=true,非空 approved_by,以及
当暴露在环回之外时,正常的WebUI写令牌边界。
如果您将仪表板暴露在环回之外,Engram要求:
ENGRAM_WEBUI_ACCESS_TOKEN用于读取访问。ENGRAM_WEBUI_WRITE_TOKEN用于更改请求。- 强令牌,默认情况下最小为32个字符。
- 主机、源、请求大小、会话和浏览器安全检查。
看 docs/REMOTE_WEBUI.md 用于远程访问设置说明。
代码库映射
Engram可以为代理准备代码库映射作业。
它不会秘密地生成特定于提供者的模型来编写架构摘要。相反,它收集有界的存储库上下文,跟踪源哈希,并要求连接的代理合成和存储结果。
映射作业是数据根感知的:当 ENGRAM_DATA_DIR 已设置、准备好的作业
记录写在 ENGRAM_DATA_DIR/codebase_mapping_jobs 而不是
默认回购 data/ 文件夹。Engram自己的草图映射配置使用当前
内存操作系统域 daemon, memory_os, migration,
document_intelligence, backend_status, graph, source, webui,
reliability, codebase_mapping, mcp_tools,以及 legacy_adapters 所以代理商
可以映射当前的1.0架构,而不是旧的前守护进程形状。
每个准备好的域记录源哈希值并返回源漂移收据
当上下文被读取或存储时。 store_codebase_mapping_result 拒绝陈旧
准备好的上下文,除非调用者明确传递 force=True,甚至a
强制存储报告更改的、新的或丢失的源文件。中心文件
例如 server.py 和 core/memory_manager.py 当发生以下情况时,也会发出警告
大小过滤器将它们排除在外,因此审阅者知道映射上下文跳过了
重要的架构文件。
典型MCP流程:
read_codebase_mapping_config(project_root)draft_codebase_mapping_config(project_root)store_codebase_mapping_config(project_root, config)preview_codebase_mapping(project_root, mode="bootstrap")prepare_codebase_mapping(project_root, mode="bootstrap")read_codebase_mapping_context(job_id, domain, part_index)store_codebase_mapping_result(job_id, domain, content)
终端流量:
# Create .engram/config.json interactively
python engram_index.py --project /path/to/project --init
# Preview planned mapping work
python engram_index.py --project /path/to/project --mode bootstrap --dry-run
# Prepare all configured domains
python engram_index.py --project /path/to/project --mode bootstrap
# Prepare only changed domains
python engram_index.py --project /path/to/project --mode evolve
# Prepare every configured domain
python engram_index.py --project /path/to/project --mode full
示例 .engram/config.json:
{
"project_name": "example_app",
"domains": {
"auth": {
"file_globs": ["src/auth/**", "src/middleware/auth*"],
"questions": [
"How does authentication work?",
"What trust boundaries matter?"
]
},
"billing": {
"file_globs": ["src/billing/**", "src/payments/**"],
"questions": [
"How does the billing pipeline work?",
"What external integration points exist?"
]
}
},
"planning_paths": ["docs/"],
"max_file_size_kb": 512
}
Engram跳过生成的目录、依赖文件夹、缓存、明显的秘密文件和在项目根目录外解析的符号链接。
源摄入量
对于储存前应审查的大型或嘈杂的输入,使用源摄入量:
- 会议记录
- 调试日志
- 代理人交接
- 设计注意事项
- 研究摘录
- 代码审查摘要
评审流程为:
prepare_source_memory -> inspect draft -> store_prepared_memory
在存储之前,只要源形状很重要,就可以使用无写预览工具:
preview_memory_chunks和preview_source_connector显示普通来源摄入会产生什么。prepare_source_memory创建可审查的源草稿;store_prepared_memory是明确的推广步骤。list_document_extractors,preview_document_source_connector,prepare_document_disassembly,以及prepare_document_intake_review是文件入口前门。prepare_document_extraction_request,prepare_document_extraction_result,preview_document_extraction,prepare_visual_extraction_request,以及preview_visual_extraction处理外部解析器、OCR、表格和视觉证据。prepare_document_understanding_packet,prepare_document_draft,prepare_document_promotion_transaction,以及apply_document_promotion_transaction在接受选定的内存或图形写入之前,保持代理编写的合成可审查。prepare_document_artifact_store和store_document_artifact是明确的分类文档证据路径。它们仅在以下情况下存储工件、文档、块和覆盖率记录accept=True并且再次提供匹配的已审查包。prepare_document_ingestion_completion和complete_document_ingestion是可用的文档门。分阶段的证据可以阅读和审核,但EKC文档方向在视觉/OCR/表格覆盖、理解和图形证据完成之前仍然是局部的。prepare_graph_readiness_report,prepare_graph_proposal_batch,以及apply_graph_proposal_batch是批量绘图车道。它们从可图形化的内存操作系统记录开始,为代理提供有界的引用证据以进行合成,验证候选边,并在明确接受后才写入图形/概念/实体记录。
文档拆解、提取请求/结果、理解数据包、起草提案、推广运营计划和图像/OCR观察都是证据记录,而不是可信的活动内存。视觉提取请求包括 visual_evidence_contract,每张图像的参考覆盖要求,以及 framework_strategy 因此,代理可以在可用时使用本地视觉,也可以手工操作到外部OCR/视觉框架,并通过以下方式返回观察结果 preview_visual_extraction.将原始视觉请求传递回 preview_visual_extraction 当覆盖范围很重要时;不完整视觉观察返回 status: "partial" 使用保险范围警告,而不是让草稿索赔全额保险。
文档工件存储和文档摄入审查都不会促进活动记忆或图形边缘。视觉/表格证据记录保留页码、源工件id、坐标/边界框(如果可用)、置信度和提取器id。理解数据包保持提供者中立:连接的代理提供分析,Engram将其规范化为摘要槽、声明/概念/实体候选、高值部分、低置信度警告、草稿内存建议和提供的加自动生成的图形建议。
来源摄入永远不会自动促进积极的记忆。草稿是审查记录
status: "draft", active_memory_write_performed: false,以及推广指导
对于四个有效结果:
- 将选定的耐用内容存储为Engram内存
store_prepared_memory. - 将关系事实存储为图边
add_graph_edge. - 在单独的应用程序中保持仅协作的工作流状态。
- 将原材料存放在Engram之外,并通过以下方式进行参考
source_uri.
被拒绝的草稿无法升级。
CLI实用程序
# MCP server, stdio transport
python server.py
# Local daemon, then opt-in MCP daemon-client mode
python engramd.py --host 127.0.0.1 --port 8765
ENGRAM_DAEMON_URL=http://127.0.0.1:8765 python server.py
python engramd.py --smoke-test --host 127.0.0.1 --port 8765
# SSE transport
python server.py --transport sse --port 5100
# Rebuild ChromaDB from JSON
python server.py --rebuild-index
# Export/import memories
python server.py --export
python server.py --import-file engram_export_YYYY-MM-DD.json
# Health and integration checks
python server.py --health
python server.py --self-test
# Agent-facing retrieval reliability harness
python server.py --agent-eval
# Generate MCP client config
python server.py --generate-config
python server.py --generate-config --daemon-url http://127.0.0.1:8765
# Memory OS migration utilities
python -m core.memory_os_migration import-legacy --legacy-dir data/memories --store-root .engram-migration/store
python -m core.memory_os_migration import-graph-edges --store-root .engram-migration/store --graph-path data/graph/edges.json
python -m core.memory_os_migration list-document-records --store-root .engram-migration/store --record-type document_draft
python -m core.memory_os_migration export-bundle --store-root .engram-migration/store --bundle .engram-migration/bundle.json
python -m core.memory_os_migration restore-bundle --store-root .engram-migration/restored --bundle .engram-migration/bundle.json
python -m core.memory_os_migration round-trip --legacy-dir data/memories --work-root .engram-migration/round-trip
# Agent-facing migration checks are also available over MCP:
# migration_dry_run, memory_os_round_trip_check, and retrieval_backend_status
# verify the legacy import and rebuilt Memory OS stores.
建筑
Engram
|-- server.py # FastMCP server and MCP tools
|-- server_daemon_client.py # Thin MCP client that delegates to engramd only
|-- engramd.py # Optional loopback daemon for shared local ownership
|-- webui.py # Flask dashboard and REST API
|-- engram_index.py # Codebase mapping CLI
|-- install.py # Setup wizard
|-- core/
| |-- memory_os/ # SQLite ledger, content store, LanceDB/Kuzu services
| |-- memory_manager.py # legacy JSON + Chroma storage, search, metadata
| |-- embedder.py # Local embedding model wrapper
| |-- chunker.py # Markdown-aware chunking
| |-- source_intake.py # Reviewable source drafts
| |-- codebase_mapper.py # Agent-native codebase mapping jobs
| |-- document_intake_workflow.py # End-to-end no-write document review packets
| |-- document_extractors.py # Local no-write document disassembly
| |-- document_quality.py # Document quality warnings and next-tool guidance
| |-- document_artifacts.py # Portable artifact manifests
| |-- document_intelligence.py # Document evidence, understanding, and promotion drafts
| |-- graph_manager.py # Graph policy and traversal
| |-- graph_store.py # Swappable graph persistence seam
| |-- memory_os/graph_pipeline.py # Review-first graph readiness, proposal, and promotion batches
| |-- graph_backend_status.py # No-write graph backend readiness report
| |-- graph_backend_eval.py # No-write graph parity/cross-document readiness
| |-- retrieval_backend_status.py # No-write backend readiness report
| |-- retrieval_backend_eval.py # No-write vector backend comparison gates
| |-- context_compiler.py # No-write agent context packets
| |-- project_capsule.py # No-write project capsule drafts
| |-- usage_meter.py # Privacy-safe token estimates
| |-- operation_log.py # Job and event receipts
| `-- reliability_harness.py
|-- data/
| |-- memory_os/ # rebuilt ledger, objects, LanceDB, and Kuzu stores
| |-- memories/ # legacy plain JSON memories
| `-- chroma/ # legacy rebuildable vector index
|-- templates/ # Dashboard templates
|-- static/ # Dashboard assets
|-- tests/ # Pytest suite
`-- docs/ # Additional setup and operating notes
运行时依赖关系
| 包装 | 用途 |
|---|---|
fastmcp |
MCP服务器层。 |
sentence-transformers |
局部语义嵌入。 |
chromadb |
持久向量索引。 |
flask |
Web仪表板。 |
lancedb |
本地内存操作系统检索索引。 |
kuzu |
本地内存操作系统图形存储。 |
看 requirements.txt 以及用于精确版本范围和安全级别的拆分配置文件。对于普通MCP适配器进程,瘦守护进程客户端配置文件仍然很小。
存储布局
重建的内存操作系统将操作状态存储在 data/memory_os/:
ledger.sqlite3用于持久元数据、收据、作业、事务、实体、概念、别名、图边镜像、快照和eval/技能包记录。objects/用于内容寻址的源工件。lance/用于可重建的检索索引。kuzu/用于可重建的图形存储。
传统兼容内存仍以普通JSON文件存储在 data/memories/.
例子:
{
"key": "example_architecture",
"title": "Example App Architecture Notes",
"content": "## Overview\n...",
"tags": ["example", "architecture", "decisions"],
"project": "example_app",
"domain": "architecture",
"status": "active",
"canonical": true,
"created_at": "2026-03-16T14:23:00-07:00",
"updated_at": "2026-03-16T14:23:00-07:00",
"last_accessed": "2026-04-01T09:15:00-07:00",
"related_to": ["example_api_contract"],
"potentially_stale": false,
"chunk_count": 7,
"chars": 3200,
"lines": 81
}
如果ChromaDB索引已损坏或删除,请运行:
python server.py --rebuild-index
设计原则
- 本地优先。 除非您公开或导出,否则内存内容将保留在您的计算机上。
- 内存操作系统优先。 Rebuild 1.0使用SQLite分类账、内容寻址源存储、LanceDB检索、Kuzu图存储和守护进程拥有的运行时。
- 记忆之前的证据。 原始和提取的来源在经过审查的持久记忆之前成为证据和草稿。
- 代币比例。 代理应首先加载最小的有用上下文。
- 人为检查噪音摄入。 大型源代码在推广前会变成草稿。
- 提供商中立。 MCP服务器和代码库映射器不需要特定的模型提供程序。
- 默认情况下可移植。 索引和图表必须从持久的分类账和内容寻址的工件中重建。
路线图
Engram 1.0是公共、通用、本地优先的内存操作系统重建:SQLite分类账、内容寻址源存储、LanceDB检索、Kuzu图推理、守护进程拥有的操作、源/文档证据、视觉/OCR覆盖率、检索收据、图关系、事务、快照、项目胶囊、技能包导出、便携式内存护照和本地内存检查器。
1.0后的工作是托管/商业打包:托管同步、租户身份验证、计费、托管MCP/neneneba API网关、托管协作桥、市场和支持操作。本地1.0不应被淡化为遗留JSON/Chroma运行时周围的就绪门。
规划文件:
docs/ENGRAM_CURRENT_STATUS.mddocs/ENGRAM_MEMORY_OS_REBUILD_SPEC.mddocs/superpowers/plans/2026-05-13-engram-memory-os-rebuild-1-0-plan.mddocs/RELEASE_GATES.mddocs/ENGRAM_MEMORY_OS_1_0_RELEASE_CHECKLIST.mddocs/ENGRAM_MEMORY_OS_1_0_MIGRATION_GUIDE.mddocs/archive/legacy-local-core-1-0/README.mddocs/ENGRAM_HOSTED_SELLABLE_CHECKLIST.md
发展
安装开发依赖项:
pip install -r requirements-dev.txt
运行测试:
python -m pytest -q
运行主要健康门:
python server.py --help
python -c "from core.memory_manager import memory_manager; print('ok')"
python engramd.py --doctor
python engramd.py --smoke-test
python server.py --health
python server.py --self-test
python server.py --agent-eval
python -m pytest tests/architecture tests/test_server_daemon_client_entrypoint.py tests/policy tests/mcp/test_no_write_tool_contracts.py tests/backend_gates -q
看 docs/RELEASE_GATES.md 用于EKC前准备就绪门和完整的1.0
释放大门。预EKC门验证瘦守护进程客户端边界,
无写审查界面、明确的写策略元数据和后端准备就绪
在新的代理合同之前,包装材料会分层放置。
贡献
欢迎问题和拉取请求。
对于代码更改,请保持JSON第一存储契约不变,并在打开PR之前运行测试套件。
许可证
麻省理工学院-见 许可证 了解详情。
建造于 CKWich.
