前言¶
用 markdown 积累长期记忆的人都会撞上一堵墙:记是记下来了,可 agent 不会自觉去翻。每次都得你手动说一句「你先读一下记忆」——不读,就等于没记。
dsh-engramory-recall 解决的就是这一步。它装上之后,相关的老笔记会在每一轮自己浮上来,不用你再当那个提醒它翻笔记本的人。
这是什么¶
DeepSeek Harness 的本地记忆插件。记忆库就是一份普通 markdown 文件夹(默认 ~/memory/engramory),布局遵循本仓库维护的 Format v1。它借鉴了 Engramory 协议「一事一文 + 索引当小抄 + 索引有硬上限」的路子,但检索、注入、账本、写入闸门、归档、体检、面板、MCP 全部自研,与上游没有共享代码。
全部用 node: 内置模块实现:零第三方依赖、零网络、默认零模型调用、零常驻进程。
核心能力¶
每轮自动想起¶
在每个用户轮的开头检索一次,命中就顺手提醒模型「库里有这几篇相关的」。一条提醒包含文件名 + 命中的那一行片段 + 一句「需要细节自己 read」。模型顺着它去读原文,你不必再当那个提醒它翻笔记本的人。
只在对的时候出现,而且永远有上限¶
没命中就一个 token 都不注入;命中最多 4 条、一轮最多 480 字符(这两个数都能调)。「继续」「嗯」「好的」这类寒暄直接放行,零开销。
看得见有没有用上¶
会话里多一个「记忆」标签页:这一轮为什么提醒 / 为什么没提醒、提醒过的后来有没有被打开、库里有哪些笔记、写得干不干净,都在里面。
写入保护¶
不合规的笔记当场拒写。不合规包括:文件名不合规、缺 frontmatter、疑似真实密钥。写进来的那一刻就被打回并留审计。
体检器¶
20 项检查:孤儿笔记、索引重复、失联路径、超 100KB、待办 30 天没更新、「带进上下文 20 次一次没被读过」、索引快满了该压哪几行……
可逆归档¶
把「第 N 批」这类追加式章节整段搬进 <笔记>-history.md,不删历史。先备份、两段式确认,没有一步不可逆。
打开率账本 + 记忆周报¶
每次提醒、每次被打开都落一行 JSONL。npm run recall:stats 看账,npm run recall:report 出一页人话周报(谁在干活、花了多少上下文、「本轮一个字都没进」也可见)。
一页人话面板¶
「记忆」标签页:首屏三问(这一轮提醒了什么 / 用上了多少 / 有没有人被拦住)接着八个页签看明细;只读、每 3 秒自刷新,另有术语表和「我要的功能在哪个开关上」两张清单。
MCP 支持¶
mcp.js 是零依赖的 stdio MCP 服务器:五个只读工具 + 索引资源 + 两个提示(recall / curate),同一份库挂给 Claude Code / Codex / Cursor。
安装与启用¶
前提是装好了 DeepSeek Harness(dsh 命令可用)。
# 1) 安装
dsh plugin --profile desktop add dsh-engramory-recall
# 2) 重启一次宿主(网页端重跑 dsh web;桌面端退出 App 再打开)
配置在 profile 的 cordis.patch.yml 中:
- insert:
- id: engramory-recall
name: dsh-engramory-recall
config:
enabled: true
storePath: ~/memory/engramory
maxPointers: 4
maxChars: 480
nudge: true
guardWrites: true
autoArchive: false
安装完之后,会话里多一个「记忆」标签页。
查账与周报¶
# 查账
cd ~/.dsh/profiles/desktop/node_modules/dsh-engramory-recall && npm run recall:stats
# 周报
npm run recall:report -- --days 30
适用场景¶
适合需要本地记忆管理、希望对记忆使用情况可审计的开发者。插件以当前 dsh 进程权限运行,安装前应检查源码与许可证。
结尾¶
dsh-engramory-recall 把本地 markdown 记忆变成可检索、可审计、可监控的资产。记住,不是「存下来就行」,而是「每轮都能被找到」。对于长期对话场景,这一步往往比存本身更重要。
- 目录页:https://www.skillhub.cn/plugins/yffo/dsh-engramory-recall
- GitHub:https://github.com/yffo/dsh-engramory-recall