@modusensus/dsh-mneme
会做梦的记忆 — DeepSeek Harness 跨会话记忆插件:跨会话记住你与项目,空闲时自动巩固记忆(autoDream),冲突记忆先冻结待你裁决,全程可回放审计。记忆落在本机:SQLite 存储配可人工编辑的 Markdown 镜像;附带四路召回(关键词、向量、BM25、实体图谱)与交互式记忆库面板,另有 10 个模型工具、MCP 服务端、外部 API 与 CLI。摘要与巩固走你已配置的宿主模型;把嵌入换成本地模型后,语义检索可完全离线运行。
安装
dsh plugin --profile web add @modusensus/dsh-mneme
沙箱测试结果
| 阶段 | 结果 |
|---|---|
| 1 安装 | ✓ |
| 2 列装 | ✓ |
| 3 挂载 | ✓ |
| 4 启动 | — |
四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。
README
<p align="center"><strong>中文 | <a href="docs/SEMANTIC.md">English(语义增强)</a></strong></p>
dsh-mneme







给 DeepSeek Harness 的跨会话记忆插件:让 Agent 记住你、记住项目、自动整理记忆。Mneme(Μνήμη)——希腊记忆女神 Mnemosyne 之名,掌管记忆与梦境,正如 autoDream 在后台巩固记忆。
dsh-mneme 是一个 DeepSeek Harness (DSH) 插件,为 Agent 提供持久的跨会话记忆能力。它借鉴了 Claude 的 Dream 机制 与 cc-haha / Claude Code 的 autoDream 记忆巩固功能——不仅存储记忆,还会自动巩固(去重、合并、冲突裁决、摘要生成),让记忆库越用越精炼。完整溯源与致谢见文末「[🙏 致谢](#-致谢)」。
⏱️ 30 秒理解
一句话:给 Agent 装上跨会话记忆——记住你、记住项目,并在后台自动整理,越用越懂你;v0.8.0 起记忆可按 agent 与工作区隔离(scopeEnabled),多 Agent / 多项目互不串台;v0.9.0 起「这件事怎么跑」也能落进项目仓库(M.O.,actionPipelineEnabled,默认关)。
① 写入 · ② 存储 · ③ 进化
对话中模型主动记录(memory_save,可带敏感度与事件时间);会话结束自动提炼(autoSummarize) · SQLite 主库 + 人类可编辑 Markdown 镜像;实体 / 属性 / 时间轴三层结构化;记忆带 agent / workspace / 敏感度 / 发生时间标注 · 新会话自动注入相关记忆(按当前作用域加权,strictScope 开启后显式收窄的归属硬隔离);autoDream 后台去重 / 合并 / 归档,冲突冻结待人工裁决
# 30 秒上手 dsh plugin --profile web add @modusensus/dsh-mneme dsh web
它不是什么(边界声明):
- 不是向量数据库——语义搜索是可选增强,默认零额外依赖
- 不替代会话日志——它存的是「值得跨会话记住的」精炼知识
- 不改变模型本身——进化的是记忆库与每次注入的上下文
- 删对话 ≠ 删记忆——记忆是跨会话的全局知识(v0.7.11 起不再与会话绑定),删除会话不影响已存入的记忆
✨ 功能
记忆存储(SQLite + Markdown 镜像)
- SQLite 主存储:
~/.dsh/memory/memory.db,node:sqlite内置,零原生依赖 - Markdown 镜像:按类型分文件(
preferences.md/projects.md/decisions.md/history.md/summary.md/patterns.md/pitfalls.md/constraints.md/rejected-solutions.md,外加只读视图documents.md),文件头是 YAML frontmatter(type/generated.by/generated.at/covered/coverage/tags)。人类可读,条目标题与正文可手工编辑(人工修改优先合并回库);documents.md例外:它只有 document 指针行(id、标题、摘要首句、文件路径),不含正文也不参与人工回填。文件头与条目元数据行由机器维护 - 10 种记忆类型:
preference偏好 /project项目 /decision决策 /history历史 /summary会话总览 /pattern模式 + 编码记忆三型rejected_solution被否方案 /pitfall踩坑 /constraint约束(v0.7.13 起,codingRetrospect默认关;v0.7.11 近重写已收窄删除 user/fact 两型)+document文档指针(#230,只存摘要与doc_path,正文留在磁盘由 agent 自管) - 镜像同步状态机(v0.3.6+):mirror 与主库强一致,用
generation(期望轮次)/applied_generation(已应用轮次)建模同步债务 - 业务写操作在自身事务内原子递增 desired generation——崩溃在 COMMIT 后、渲染前,重启也能凭 durable 债务恢复,绝不静默跳过(v0.3.8)
generation用 SQLite 原子语句递增,多进程并发零丢失;带CHECK上界,负数/溢出拒绝- 逐 type 记录
committed / failed / pending回执,健康端点区分ok / degraded / unknown - 状态写失败不静默:同步失败落日志并留债务,重启自动收敛
模型工具(默认注册 11 个;开 organizeEnabled 后 12 个)
工具 · 功能
memory_save · 记录一条记忆(自动按标题去重合并;v0.8.0 起去重键含 agent/workspace/scope 作用域,可选 sensitivity / occurred_at 参数)
memory_search · 全文搜索(中文子串友好,可启用向量语义搜索;可选 occurred_from / occurred_to 按事件发生时间过滤)
memory_list · 按类型分页列出(include_archived=true 可查看已归档;可选 occurred_from / occurred_to 时间过滤)
memory_get · 读取单条记忆完整正文(v0.7.25,按 id;memory_search / memory_list 命中后读全文)
memory_update · 修改已有记忆
memory_delete · 删除记忆(按记忆 ID 精确删除)
memory_forget · 抑制注入(降权不删除,可恢复)
memory_archive · 归档/恢复记忆(v0.2.5;归档后隐藏于列表/搜索/注入/整理,archived=false 可恢复)
set_scope_state · 按下/松开某个作用域的可逆闸门(#471:政策轴。暂停期间该作用域的记忆照旧存着,只是不注入、不参与巩固,松开即原样回来;不改任何一条记忆的标注,与上面逐条操作的 memory_forget / memory_archive 是两根不同的轴)。两级开关 scopeState.enabled / .enforce 默认都关,没开时按下不产生拦截效果
memory_register_document · 登记 agent 产长文档的指针行(#230:摘要 + doc_path + evidence 落 document 类型;正文留在磁盘、由 agent 自管,注册口唯一,旁路写入被拒)
memory_organize · 主动整理(#231,要 organizeEnabled 打开才注册):mode=dryRun 先出比对报告(每条候选 exact / near / new + 命中行,不写一行库、只留审计回执),agent 判断后 mode=apply 引用那份报告的 run_id 落地。两种「不要它」要分清——discard = 这条候选不写,什么都不动(只进回执);archive = 把报告标为被取代的那条既有行归档(可恢复,绝不物理删除)。没有比对过的候选写不进库,一份报告也只许落地一次
memory_runtime · 本地推理运行时的状态 / 供给 / 校验(v0.7.32,自管运行时三档取件)
工作流(M.O.,v0.9 beta)
记忆库答的是「这件事为什么这么办」,答不了「这件事到底怎么跑」。v0.9 把后者从记忆库里的一行文字变成项目里可提交、可 review、可被 CI 读的一份文件——一条工作流一个 JSON:
<项目>/.mneme/pipelines/<id>.json ← 项目层(默认;跟着项目提交) <插件包>/pipelines/<id>.json ← 全局层(兜底;今天包里没有这个目录,有意为空)
- 两层来源,顺序即优先级:同 id 两处都有,项目层赢,被挡住的那份进
shadowed报出来(不静默丢弃);项目层的坏文件进unreadable而不拖死全局层——一层写坏不该让人连兜底那份也看不见 - 校验很硬:
id/name/project/version/status/done与每一步的phase/title/when/do/done/why缺一不可,risk限 R0–R3、needs必须指向存在的步骤、图里有环直接报错——任何一处不合规整条读不出来,不做「跳过坏文件继续」:半个工作流比没有更危险 - 护栏,不是轨道:绕行要留出口。自报 R0/R1 且不跨闸门 且兜底清单(
IRREVERSIBLE_PATTERNS,机械匹配、不看自报)没命中 → 记账先走;其余 → 停下问人 - 候选分层:草稿住
<memoryDir>/candidates/<项目键>/,只在本地。升格要同时满足「走过两次(至少一次成功)」且「写得出反事实」;够格之后系统只提议,promoteCandidate()只返回内容不写盘,提交与推送是人握着的那道门 - 两个指标分开数:跳过(这次不用这一步,≥3 次提议删这一步)与绕开(这条路整个不对,≥3 次提议重看这条路径)各自累加,混在一起两种提议都发不出来
- 只读路由
GET /api/dsh-mneme/pipeline[?id=&project=](project非绝对路径回 400project-not-absolute,不回退process.cwd());答复契约mneme.pipeline/v1,面板渲染与 agent 读的是同一份数据 - 默认关(
actionPipelineEnabled),设计取舍见 [docs/WORKFLOWS.md](docs/WORKFLOWS.md)
自动注入 + 会话摘要
- 自动注入:新会话开局注入记忆摘要(
summary优先 + 少量高重要性条目) - 会话摘要:
turn/end时用 LLM 提炼本次会话的偏好/决策/教训,自动入库(过滤 plugin 注入上下文,避免污染)
autoDream 自动记忆整理 🧠
…(truncated)
以上内容来自 npm 上的 README,我们只做格式化,不改内容。
版本
npm 上共发布:110,最后更新 2026-11-05