前言¶
在 DeepSeek Harness(DSH)里做长期助手时,「个人记忆」往往需要三处各写一点:~/.dsh/AGENTS.md 里的规则段落、personal-memory 技能,再加上 memory.py 脚本。规则散在文档里,换 workspace 或换会话时容易出现「记得查库、但不知道怎么查、写完不重建索引」之类的不一致。
dsh-memory-vault(维护者 wsy320,分类:记忆)把上述三件套收进一个 Host bundle:一段常驻 system prompt 规定何时检索、凭据边界、写入回报;四个工具负责检索、写入、体检与维护。规则写在代码里,对每个 workspace、每个会话一视同仁。社区目录页见 SkillHub,源码在 GitHub。当前包版本为 0.4.0(MIT)。
这是什么¶
一句话:本地 Markdown 记忆库的 DSH 宿主插件,带加权检索、受控写入、frontmatter 自检,以及可选的 git 自动同步。
它替代的不再是「再装一个技能」,而是把「个人记忆库」从 AGENTS.md 和独立脚本里迁到插件生命周期中:挂载即生效,设置页改路径后原地 apply,无需重启 DSH。
提供的工具¶
下面四个工具在配置有效库路径后注册;vault 为空或路径非法时工具不注册,提示段会说明「记忆库不可用」。
| 工具 | 主要参数 | 作用 |
|---|---|---|
memory_search |
query(必填)、include_credentials(可选) |
加权检索,返回 路径:行号、摘要与摘录;凭据目录默认不搜,需显式开启 |
memory_write |
path、text(必填)、append(可选) |
写入并重建索引,返回 committed 报告 |
memory_health |
无 | lint 前 20 条问题、篇数、库路径;同步结果在输出最后一行 |
memory_maintain |
op: index\|lint\|new(必填),type、title(可选) |
重建索引、全量 lint,或从模板在 inbox/ 新建 |
memory_write 成功后会刷新条目的 updated:、重建 INDEX.md 与 MEMORY.md 覆盖段,并追加 CHANGELOG.md。memory_maintain 的 new 从 templates/ 取模板(缺省用 通用.md)。
常驻提示词与设置¶
插件注册 system prompt 段 memory-vault,order 为 9600(位于 file references 之后、structured output 之前),interpolate: false,避免库路径中的反斜杠被误当成模板变量。内容涵盖:判断标准、检索方式、凭据纪律、写入回报、自检。
在 DSH 设置 → 记忆库 中可改「库目录」。该页由插件注册的 settings.section 提供,经 ctx.configForms.get('dsh-memory-vault') 读写 Config:getSnapshot() 读,set('vault', path) 写(带 revision 栅栏,保存失败会提示而非静默覆盖)。Host 侧 vault 等字段为 .volatile(),保存后插件原地重新 apply,工具与提示段立即使用新路径。
除 vault 外,可在设置页调整的字段(默认值见 README):
| 字段 | 默认 | 说明 |
|---|---|---|
vault |
空 | 记忆库文件夹绝对路径 |
searchLimit |
5 | 检索最多返回条数 |
maxExcerpt |
120 | 摘录截断长度 |
promptOrder |
9600 | 常驻提示段排序 |
cordis.patch.yml 中故意不写 vault,避免把本机路径写进 bundle 成为所有 profile 的默认值。
库目录须为绝对路径;相对路径、不存在路径或无法解析为字符串的配置一律视为未配置,Host 日志会 warn。写入前还会校验根目录存在、为文件夹,且含有 MEMORY.md / INDEX.md / CHANGELOG.md / templates 之一,否则拒绝写入。
库结构约定¶
一级目录固定为 me / work / life / memory / inbox;me/credentials/ 为明文凭据目录。
frontmatter 字段包括 title、type、domain、scope、summary、keywords、status、created、updated。type、scope、status 各有枚举取值(见项目 README)。
INDEX.md、MEMORY.md 中 <!-- coverage:start --> 与 <!-- coverage:end --> 之间的覆盖段,以及 CHANGELOG.md 由工具维护,不宜手改。
典型用法流程¶
- 在设置里填好记忆库绝对路径并保存。
- 对话中需要回忆时,由 agent 调用
memory_search,按需传入query;涉及密码、token 等时再设include_credentials: true。 - 需要落笔时调用
memory_write;追加正文用append: true(内容追加在 frontmatter 之后)。若返回committed: false,应把reason原样告知用户。 - 定期或怀疑索引异常时调用
memory_health;需要重建索引、全量 lint 或在 inbox 建稿时用memory_maintain。
写入流程在插件内完成:校验路径与内容 → 写盘 → 读回校验 → 刷新 updated: → 重建索引与覆盖段 → 记 CHANGELOG → 返回 { committed, path, line, verify, index },其中 line 为刷新 updated: 后的行号,便于局部读取。
凭据与检索纪律¶
me/credentials/ 下内容为明文;检索命中时与其它笔记一样返回摘录行,以便 agent 取出用户所需的值。默认检索不包含凭据文件,只有 include_credentials: true 才纳入,避免普通问题顺带泄露秘密。常驻提示段约束使用侧:只用于用户交办的事或原样交还用户,不进日志、不进 commit、不主动罗列。
自动 git 同步¶
记忆库本身是 git 仓库时,插件可保持多机一致:
- 插件挂载(应用启动或保存设置后重挂)时拉取一次远程。
- 每隔
syncIntervalSeconds(默认 300 秒,小于 60 按 60 处理)先 pull 再 commit + push。
配置项 syncEnabled 默认 true;设为 false 则不做启动拉取也不定时同步。实现遵循「先 pull 后 push」「失败自动 abort」「commit 先于 push」;工作区有未提交改动时 pull 会跳过并报告。自动 commit 标题来自 memory_write 记录的实际写入,无记录时回退为 memory: 自动同步。同步失败不抛错、不影响工具调用,状态出现在 memory_health 最后一行。
安装与依赖¶
README 给出的安装方式是用 plugin_manager 的 install_bundle,指向本插件目录的绝对路径(并非凭仓库名拼接 CLI 添加命令)。
依赖 @deepseek-ai/schemastery(^3.18.0),Config 须为真正的 schemastery schema,设置页才能看到本插件。包通过 link: 装进 profile 时,node_modules 落在插件目录自身;换机器或删掉 node_modules 后,在插件目录执行:
pnpm install
回滚可选:移除 bundle,或将 cordis.patch.yml 里对应 row 设为 disabled: true。两种方式都不会删除库文件。
原 AGENTS.md「个人记忆库」节与 personal-memory 技能已退役;memory.py 保留在 ~/.agents/skills/_retired/personal-memory/scripts/ 仅作逃生参考。
适用场景与注意¶
适合:已在用或打算用本地 Markdown 库沉淀偏好、项目、凭据索引,并希望 DSH 会话里检索与写入有统一规则、索引自动维护的开发者。
注意:
- 插件以当前 DSH 进程权限读写你配置的库路径;安装前请自行审阅 源码 与 MIT 许可证。
- 凭据目录为明文;同步开启时 commit 会带上记忆库变更,请确认远程仓库可见范围。
- SkillHub 目录为社区站点,与 DeepSeek / 幻方无官方从属关系;星标等元数据以各站点实时显示为准。
项目自测命令(Node 24 下需带引号):
node --test "test/*.test.js"
结尾¶
dsh-memory-vault 把个人记忆从「文档 + 技能 + 脚本」收成一套宿主插件:工具管数据面,提示段管行为面,设置页管路径与检索参数,可选 git 同步管多机一致。若你正在 DSH 里维护长期上下文,可按 README 用 install_bundle 挂载并配置库目录试用。
- 目录页:https://www.skillhub.cn/plugins/wsy320/dsh-memory-vault
- GitHub:https://github.com/wsy320/dsh-memory-vault