Engramory:给 DeepSeek Harness 智能体一套可移植的 Markdown 记忆协议

前言

用 DeepSeek Harness(DSH)跑长任务时,上下文窗口再大也装不下所有历史:上一周定下的编码规范、用户偏好的缩进风格、进行中的重构目标,换一条会话或换一个 Agent 就常常「失忆」。向量数据库和 MCP 记忆服务能缓解,但部署成本高,还多出一条模型未必会主动调用的召回通道。

社区插件 Engramorytinqiao-oss/engramory)走另一条路:零基础设施,用一小撮人类可读的 Markdown 文件加一个每次会话加载的索引,把「写什么、怎么写、何时删改」写成一套可移植的策展纪律。在 GitHub 上已有 171 星、11 forks,SkillHub 插件库将其归类为「记忆」,安装状态为已验证(verified)。本文基于 SkillHub 目录页与 GitHub 仓库 README 核实后整理,供 DSH 用户快速上手。

这是什么

Engramory 不是数据库,也不是按相关性加载的 Skill 框架。维护者 tinqiao-oss 将其定位为:面向小规模、本地、文件式智能体记忆的协议——一套强约束的策展纪律、一份参考规范(SKILL.md)、一个可选的索引上限 Hook,以常驻规则形式加载(DSH 下即 $DSH_HOME/AGENTS.md 中的标记块)。

记忆库就是一个目录:每条事实一个 Markdown 文件,外加一份始终加载的 MEMORY.md 索引。没有向量、没有服务端,纯文本可直接打开、编辑、diff;若放在 Git 仓库内,记忆目录本身应加入 .gitignore

词名来自 engram(记忆在大脑中的物理痕迹)+ memory,项目强调「一文件一事实」。npm 包名 dsh-engramory(当前 0.2.3)是 DSH 侧的确定性索引上限插件;协议本体当前标记为 0.10.0 — 实验性,使用前请了解其能力边界。

核心功能与亮点

1. 四类角色 ontology,以 feedback 为脊梁

笔记 frontmatter 使用四种类型:user(用户偏好)、feedback(程序性记忆,须含 Why: / How to apply:)、project(进行中的任务状态,至多一条活跃笔记)、reference(稳定引用指针)。Engramory 不声称发明了语义/情景/程序性三分法,而是把 feedback 做成手写、可审计的程序性记忆集合。

2. 显式策展契约

协议要求模型在写入前查重、更新而非重复、发现错误就删除,并遵守负向范围规则——不把 Git、代码或规则文件里已有的信息再记一遍。调研中常被忽视的「修改 / 删除 / 遗忘」操作,在这里被写进纪律本身(模型尽力遵守,非硬门禁)。

3. 有界索引,防止静默腐烂

索引每次会话加载;Claude Code 官方文档写明只读前 200 行 / 25 KB,超出部分会被静默截断。Engramory 在 150 行 / 20 KB 提醒,逼近 200 行 / 25 KB 时先压缩再询问,并提供 Hook 兜底——只拦「变大」的编辑,压缩类编辑放行。行数与字节双维度,谁先超限谁触发。

4. DSH 插件:把上限从「请求」变成「拒绝」

仅靠 AGENTS.md 里的规则块,模型仍可能忘记跑检查脚本。dsh-engramory 插件通过 DSH 的 ctx.tools.guard() 做同步、单调的写前拒绝:一旦 guard 返回理由,后续 listener 不能把决策改回 allow。这是 Engramory 在 DSH 上相对「只贴规则」的差异化能力。

插件还通过运行时 skill 注册注入完整协议,不依赖手动把文件拷进五个 skill 扫描根目录之一(拷错位置会静默失败)。

5. 跨宿主可移植

同一套纪律可接线 Claude Code、Codex、Cursor、OpenClaw 等;DSH 侧提供 python tools/engramory_init.py dsh --install-skill 初始化助手,以及 dsh-reader 只读模式读取其他 Agent 拥有的记忆库。Engramory 明确走 MCP 作为主路线——在已有文件读写与常驻规则的宿主上,MCP 会引入第二条写入通道并绕过写前 Hook。

安装与启用

说明:SkillHub(https://www.skillhub.cn/plugins)是社区维护的 DSH 插件目录,与 DeepSeek / 幻方无官方从属关系;安装命令以目录页生成的方案为准。插件以当前 dsh 进程权限运行,安装前请审阅源码与 MIT 许可证。

第一步:通过 SkillHub 安装 DSH 插件

SkillHub 为 tinqiao-oss/engramory 生成的安装计划(profile 示例为 web,commit 固定为目录同步的 head SHA):

dsh plugin --profile web add github:tinqiao-oss/engramory#39efc183a55cb3d2c56e11a42b2b5e059a193ce3

安装后重启 profile:

dsh --profile web

若你的环境已配置 npm 源,也可直接安装已发布的 npm 包(需 0.2.1 及以上;0.2.0 存在装得上但永不激活的问题):

dsh plugin --profile <name> add dsh-engramory

第二步:初始化记忆库与常驻规则

插件负责索引上限 guard 与协议 skill 注册,不会自动创建记忆目录。需在 Engramory 仓库根目录执行(Python 3.9+;Linux/macOS 请用 python3):

git clone https://github.com/tinqiao-oss/engramory.git
cd engramory
python3 tools/engramory_init.py dsh --install-skill

默认写入 $DSH_HOME(环境变量优先,否则 ~/.dsh):

  • $DSH_HOME/AGENTS.md 中的 Engramory 标记块(每会话由 @deepseek-ai/dsh-agent-instructions 加载)
  • $DSH_HOME/skills/engramory/ 完整协议(按需加载)
  • $DSH_HOME/.engramory-memory/MEMORY.md 记忆索引与笔记目录

若只服务单个项目,加 --project-root /path/to/project,skill 会装到 <project>/.dsh/skills/engramory/(DSH 实际扫描的项目 skill 根,不是 .agents/skills)。

可选:固定 commit 或调整 guard 配置

SkillHub 命令已 pin 到 commit 39efc183…;自行安装 GitHub 源时也可显式指定。Guard 默认配置可在 profile patch 层覆盖(勿重复 insert 两行):

- id: engramory
  config:
    indexName: MEMORY.md
    maxLines: 200
    maxBytes: 25600
    indexPath: /absolute/path/to/.engramory-memory/MEMORY.md

indexPath 建议设为记忆索引的绝对路径,避免误拦其他目录下同名的 MEMORY.md

典型用法示例

日常记忆读写

Agent 每会话从 AGENTS.md 看到策展纪律;需要细节时读取 .engramory-memory/ 下单条笔记。写入后应汇报新增 / 更新 / 归档 / 跳过项及索引尺寸。

编辑索引后自检

python3 $DSH_HOME/skills/engramory/tools/engramory_check.py $DSH_HOME/.engramory-memory/MEMORY.md

若输出 OVER,需压缩索引后再写。周期性全量健康检查:

python3 $DSH_HOME/skills/engramory/tools/engramory_doctor.py $DSH_HOME/.engramory-memory

跨 Agent 只读共享

让 DSH 读取 Claude Code 等项目记忆(只读,不写入):

python3 tools/engramory_init.py dsh-reader \
  --project-root /path/to/repo \
  --memory-root ~/.claude/projects/<project>/memory

卸载

python3 tools/engramory_init.py dsh --uninstall --dry-run   # 预览计划
python3 tools/engramory_init.py dsh --uninstall             # 执行

卸载只移除安装器写入的规则块与 skill 副本,不会删除 .engramory-memory/ 中的笔记。

适用场景与注意事项

适合谁:

  • 希望在 DSH 上维护可审计、可 diff 的长期工作记忆,又不想搭向量库或 MCP 服务
  • 需要把 Claude Code / Codex 等宿主上的 Markdown 记忆纪律原样搬到 DSH
  • 个人或小团队、单写者场景,记忆条目控制在索引上限(约 200 条指针)以内

务必知晓的限制:

  • 协议标记为实验性:Hook 对 Edit | Write | MultiEdit 类直接编辑工具有确定性拦截,但 Bash、MCP 文件工具、外部编辑器 等通道可绕过;纪律本身靠模型遵守,非每个任务 guaranteed
  • 假设单写者 / 串行写入,无 store 级并发锁
  • 记忆为明文、未加密;勿把密钥、令牌写入笔记,只记录「秘密存在何处」
  • 无 schema 版本迁移与 provenance 字段;召回内容应视为建议而非权威事实
  • dsh plugin 安装第三方插件需本机有 pnpm 且在 PATH 中(上游 rc.7 起修复预览版安装问题)

dsh-xray 对本插件的静态扫描显示:能力等级 C2 来自 manifest.bundle.patch(生态中多数可挂载插件均声明此项),未发现 execeval、安装脚本或出站域名——但仍请自行审阅后再装。

结尾

Engramory 的价值不在于 reinvent 向量检索,而在于把「Markdown 索引 + 单文件单事实 + 四类 typed 笔记 + 写前查重删改」打包成可跨 Agent 复制的纪律,并在 DSH 上通过 dsh-engramory 把索引上限从软约束升级为写前拒绝。若你正用 DeepSeek Harness 做长周期编码助手,值得一试。

  • SkillHub 目录页:https://www.skillhub.cn/plugins/tinqiao-oss/engramory
  • GitHub 仓库:https://github.com/tinqiao-oss/engramory
  • DSH 适配说明:https://github.com/tinqiao-oss/engramory/tree/master/adapters/dsh
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜