DSH 上 hermes-agent 记忆机制的忠实移植(MEMORY.md / USER.md):有界双记忆库(2200/1375 字符)、单个 memory 工具(add/replace/remove/batch 全有或全无)、每会话冻结快照注入与 nudge 提醒、DSH 原生 JSON 存储——零外部依赖、零 LLM 成本。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:isheng-eqi/dsh-hermes-memory
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
Hermes-style persistent memory for DeepSeek Harness (DSH) — a faithful port of the hermes-agent
MemoryStore(MEMORY.md/USER.md) mechanism.
DeepSeek Harness 的 Hermes 式记忆管理插件:MEMORY.md(Agent 个人笔记)+ USER.md(用户画像)双记忆库,由模型用一个 memory 工具自主策展,跨会话持久化,每个会话以冻结快照重新注入。忠实复刻 NousResearch/hermes-agent 的 tools/memory_tool.py 机制,零外部依赖、纯 DSH 原生接缝实现。
✨ Features
| Hermes 机制 | 本插件实现 |
|---|---|
MEMORY.md — agent 个人笔记(环境事实/项目约定/工具怪癖),2200 字符上限 |
✅ memory 记忆库 |
USER.md — 用户画像(偏好/沟通风格/工作习惯),1375 字符上限 |
✅ user 记忆库 |
条目以 § 分隔、可多行,字符上限(非 token) |
✅ 同 |
单个 memory 工具:add / replace / remove / batch(全有或全无) |
✅ 同 |
replace/remove 用唯一子串匹配 old_text,多条命中报冲突 |
✅ 同 |
| 超限不静默丢弃:返回当前条目列表,模型当轮合并后重试;每轮失败上限 3 | ✅ 同 |
add 自动去重(同文本不重复) |
✅ 同 |
冻结快照:会话开始注入一次(<system-reminder> 框架 + ═ 标尺 + [n% — x/limit chars] 用量表头),会话中途写入不改已注入快照(保前缀缓存) |
✅ 同 |
| nudge 提醒:连续 10 轮无写入提醒持久化 | ✅ 同 |
成功结果:memory(memory): Entry updated. + usage + "do not repeat" |
✅ 同 |
| 工具内部无 LLM(agent-curated 策展,零 LLM 成本) | ✅ 同 |
🚀 Quick Start
方式 A:dsh bundle 安装(推荐,部署级、重启自动加载)
本仓库是标准 dsh bundle(package.json 声明 dsh.bundle + cordis.patch.yml),一行安装:
dsh plugin --profile web add github:isheng-eqi/dsh-hermes-memory
# 或本地路径
dsh plugin --profile web add /path/to/dsh-hermes-memory
安装后插件在部署级生效(所有会话可见):模型获得 memory / memory_search / memory_list / memory_stats / memory_debug 工具,每个会话开始自动注入记忆冻结快照。
方式 B:动态 Cordis 插件(进程级,无需改部署配置)
在任意 DSH 会话中,让模型执行 cordis_define(Host 半边代码 = host.js,Client 半边 = client.js,额外带 Run 卡记忆面板)与 cordis_run。注意动态插件随进程退出而消失,重启后需重新运行(数据不丢)。
使用
直接对模型说"记住 XXX"即可;每个新会话开始会自动注入记忆快照。
数据存储:~/.dsh/storages/hermes_memory.json(DSH storage hub 的 json 后端,原子写、人类可读、跨会话跨重启持久)。
🛠 Tools
memory
唯一的记忆写入入口,与 hermes-agent 契约一致:
action:add/replace/remove/batch(必填)target:memory(默认,= MEMORY.md)/user(= USER.md)content:新增/替换条目文本oldText:replace/remove 时的唯一子串匹配operations:batch 时的操作数组(全有或全无,可在一次调用里腾空间+写入)
辅助工具
memory_search— 确定性关键词检索两个记忆库memory_list— 列出条目(按存储顺序)memory_stats— 用量统计(3% — 79/2,200 chars)memory_debug— 诊断存储句柄表与 store 状态
🔬 Architecture
┌────────────────────────────────────────────────────────────┐
│ systemPrompt / agent/pre-step │
│ └─ 冻结快照注入(会话首步一次)+ nudge 提醒(每 10 轮) │
├────────────────────────────────────────────────────────────┤
│ `memory` 工具(harness.defineTool/registerTool) │
│ └─ MemoryStore 语义:add/replace/remove/batch,§ 分隔条目 │
│ 字符预算(2200/1375),超限合并协议,失败上限 3/轮 │
├────────────────────────────────────────────────────────────┤
│ DSH storage hub → json 后端 → KvUnit `hermes_memory` │
│ └─ ~/.dsh/storages/hermes_memory.json(原子写、版本化) │
└────────────────────────────────────────────────────────────┘
- 写链串行:单进程内所有写入经 promise 链排队,先落盘后更内存。
- 自愈:更新/重启插件时若旧纤维的单元句柄未释放(
unit already open),自动强制关闭僵尸句柄并重开;disposer 返回 Promise 等待 close 完成。 - 注入格式(逐字符对齐 hermes-agent
MemoryStore._render_block):
条目内<system-reminder> <hermes-memory-snapshot> Persistent memory, maintained with the `memory` tool. ... ══════════════════════════════════════════════ MEMORY (your personal notes) [3% — 79/2,200 chars] ══════════════════════════════════════════════ entry one § entry two ... </system-reminder></system-reminder>被转义,文件内容无法破坏框架。
📋 Design Decisions(与 Hermes 原版的差异)
- 存储介质:Hermes 用
~/.hermes/memories/*.md文件 + 文件锁/原子 rename;本插件改用 DSH 原生 json 存储单元(本身原子写、版本化、人类可读),单进程内无需文件锁。 - 注入载体:Hermes 注入系统提示词;本插件经
agent/pre-step注入 durable user 消息(source{kind:'plugin', plugin:'hermes-memory'}),会话日志可重建(model-visible ⟺ logged)。 - 未实现(与社区移植版一致):
write_approval审批门、提示注入安全扫描(信任度与 AGENTS.md 相同)、session_search(Hermes 用 SQLite FTS5 检索会话历史;DSH 原生sessionQuery可作后续接入点)。
📦 社区收录
本插件为 DSH 社区生态的一部分。欢迎收录进 awesome-dsh-plugin 等精选列表。
📄 License
MIT
链接
同类插件
volcengine/OpenViking#examples/dsh-memory-plugin★ 28738
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
vectorize-io/hindsight#coding-agents★ 20063
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
dsh-engramory★ 155
把 Engramory 策展式记忆纪律做成可安装插件([npm: dsh-engramory](https://www.npmjs.com/package/dsh-engramory)):通过 `ctx.tools.guard()` 对 `MEMORY.md` 索引施加确定性的 200 行 / 25KB 上限(增长即拒、缩小的重写一律放行),并把协议注册为运行时 skill。记忆库是纯 markdown、一条事实一个文件,与 Claude Code、Codex、Kiro、OpenClaw 共用。
bowenliang123/dsh-context★ 121
上下文洞察面板:一眼看清模型上下文窗口的组成与变化——构成对照窗口大小、按请求历史趋势、压缩/注入事件、消息级 token 统计。
omdsh-dev/dsh-mnemon★ 62
由 Mnemon 驱动的 DeepSeek Harness(DSH)跨 Agent、本地优先的持久记忆插件。它可在支持 Mnemon 的 Agent 之间共享长期记忆,并提供运行时记忆、可检索项目档案、语义召回、知识图谱和 Sidebar UI。
modusensus/dsh-mneme#dsh-mneme★ 20
DeepSeek Harness 结构化记忆引擎。离线语义搜索、实体-属性-时间轴、autoDream 自我巩固、可人工编辑的 Markdown 存储。