中文EN

dsh-memj

memory已测通过npmMIT

以项目为主线的 DSH 记忆插件。开放知识书写,以及插件提示词编辑,让用户不改一行代码就能重新设计记忆库结构与模型被驱动的方式。默认的记忆库核心设计在于,项目以一份你自己设计的项目文档(默认是一份交接文档)作为实体,插件自动识别会话所属项目、把沉淀的知识与项目绑定,并把可复用的部分升级进主题与全局层。用最自然的逻辑完成知识的初筛,上下文可控压缩和留档。

下载量 / Downloads
1,497
依赖体积 / node_modules
32.81 MB
测试时间 / Tested
2026-11-06
DSH 版本 / Version
0.2.2-rc.1

安装

dsh plugin --profile web add dsh-memj

沙箱测试结果

阶段结果
1 安装✓
2 列装✓
3 挂载✓
4 启动—

四阶段在隔离沙箱里跑:安装(有网)→ 列装 → 挂载 → 启动(后三步断网)。

README

dsh-memj —— 让记忆跟着项目走

[English](README.en.md) | 中文

一个 DeepSeek Harness 记忆插件。

最大的卖点:你可以用它,做一个你的记忆系统

它给你足够颗粒度的读写工具,用硬校验守住数据安全与系统稳定;

剩下的最大自由度留给你 —— 下面这些都能在界面上直接改,不改一行代码:

你能改的 · 改了就变

知识类型 · 知识分几类、叫什么、什么时候用

文档模板 · 记忆长什么样:有哪些节、每一节怎么写

全部提示词 · 模型被怎么指挥、协议怎么定

一个例子:我没有做"子代理异步沉淀"。
但你可以改工具协议 / 提示词,让模型在收尾前 fork 一个子代理去沉淀
—— 这是系统性的功能变化,一样不改代码。
(再往前一步,就是给钩子写接口工具。)

一句话:你可以用这个记忆系统,做一个你的记忆系统。

核心设计思路

  • 项目 = 记忆的实体 —— 一份规范由你自由设计的项目文档(默认就是一个 handoff),

它就是这个项目的总入口,跨会话、跨实例都用它;

  • 交接是主路径 —— 把一轮工作压成下一轮的起点,压缩可控、可编辑、可留档;
  • 插件自动识别会话属于哪个项目,沉淀的知识与项目绑定;
  • 按你实际的多项目开发情况去找共性,把通用知识升级为主题 / 全局;
  • 传统的 tag / kind / 搜索照常可用,可以嵌套叠加。

⇒ ⭐ 用最自然的项目逻辑、开发逻辑,完成知识的初筛与关联。

库就是一个目录(~/.dsh-memj/),拷走即迁移;
项目文档与知识全部是 Markdown,可读、可 diff、可随时用编辑器打开。

快速开始

⭐ 推荐:直接在 DSH 界面里装 —— 左侧「插件」页 → 右上角 「添加插件」 →

输入框填 dsh-memj → 「安装」。

不用敲命令、不用重启,装完侧边栏就有入口。(安装源按你的网络情况选即可。)

也可以走命令行(等价):

dsh plugin --profile web add dsh-memj

—— 详见 [安装](#安装) 一节


目录

卖点与设计核心:

  • [最大的卖点:你可以用它,做一个你的记忆系统](#最大的卖点你可以用它做一个你的记忆系统)
  • [核心设计思路](#核心设计思路)
  • 知识跟着项目走 —— 项目是记忆的主线:每条知识都归属一个项目,其下再按主题 / 全局 / 类型 / 标签多维度复用
  • 交接是主路径 —— 项目文档本身也是交接文档,把一轮工作压成下一轮的起点,压缩可控、可编辑、可留档
  • 一切都开放 —— 文档模板、知识类型、全部提示词都可在前端进行编辑。

其余部分:

  • [归属三层与升级机制](#归属三层与升级机制)
  • [项目文档长什么样](#项目文档长什么样)
  • [知识怎么存怎么找](#知识怎么存怎么找)
  • [四种使用方式](#四种使用方式)
  • [三种召回机制](#三种召回机制)
  • [人侧面板](#人侧面板)
  • [快速开始](#快速开始)
  • [安装](#安装)
  • [库长什么样](#库长什么样)
  • [配置](#配置)
  • [边界与已知限制](#边界与已知限制)
  • [开发](#开发)

① 知识跟着项目走

这是整个插件的设计核心。

memj记忆插件,基于项目的根本逻辑,沉淀的知识跟着项目走,在根据项目共性升级成为主题知识、全局知识。

按照最自然的行为逻辑,天然聚合知识,贴近用户本身的需求

项目是主线:每条知识都归属一个项目,项目文档就是它的总入口:

        ┌──────────────────────────────────────────────┐
        │  项目 = 记忆的主线                             │
        │                                               │
        │   HANDOFF-<项目>.md                           │
        │   ├─ 叙事:这个项目一路怎么走过来的             │
        │   └─ 知识索引:它旗下每条知识的一行说明          │
        └──────────────────────────────────────────────┘
             │                    │                 │
    聚合出共性 │          再提炼   │        同时打上    │
             ▼                    ▼                 ▼
      主题(跨项目通用) → 全局(无条件注入)   类型 · 标签

⭐ 但主线不等于唯一的检索维度 —— 一条知识同时带着:

维度 · 作用

项目 · 主线。它在哪个项目里被做出来的

主题 · 跨项目复用:这条知识别的项目也用得上

全局 · 跨主题通用,无条件注入

类型 · 它是事实 / 陷阱 / 流程 / 决策 / 留档

标签 · 自由词,和标题、描述同级参与检索打分

⇒ 所以模型既能"顺着项目"检索(我先看看这个项目里有什么),

也能"按话题"横着捞(凡跟"pnpm/发布"有关的知识,不管在哪个项目)。

两条路都通,而且可以叠加(例如"在主题 X 下,找带标签 Y 的")。

三个视图,对应三种问法

① 知识 —— 一条知识长什么样

知识的封面归属可由用户进行二次编辑。

② 项目 —— 记忆的主线

项目的归属同样可以进行编辑,项目文档的章节书写规范可在项目文档单独编辑,包括压缩和归档规则。

③ 主题 —— 跨项目的那条线

用户在新会话交接时,可以直接交接与项目相关的主题,获取相关主题的通用知识和关键上下文。

每个项目一份项目文档,它是这个项目的记忆总入口:

  • 新会话接续这个项目时,读这一份就够——不用先猜"该搜什么关键词";
  • 每条知识都挂在某个项目下,索引就写在那个项目的文档里

⇒ 顺着项目走下去,知识自然被带出来。

它和"一个扁平的大知识库"有什么不同:

· 扁平知识库 · memj

主线 · 没有,全靠关键词 · 项目——有确定归属,不会散落

找东西的入口 · 你得先想出关键词 · 以项目自然聚类知识,缩小召回范围更贴实际需求

换个角度找 · —— · 主题 / 标签横着捞,两条路都通

换了会话 / 换了机器 · 上下文要重建 · 沿着项目捡回来

⭐ 判据一句话:换一台机器、换一个会话,沿着"项目"能不能把上下文捡回来?

能 —— 这就是它要达到的效果。

⚠️ 为什么把项目当主线,而不是只按话题组织:话题会重叠、会变名、颗粒度难以控制,

光靠话题收不住——一件事做完了,相关的话题还在长。

而项目是有边界的:一件事做完了就是做完了,边界清楚。

⇒ 主线负责"收得住",主题、标签、关键字负责"捞得着"。


② 交接:把一轮工作压成下一轮的起点

交接(handoff)是本插件的主路径。

它解决的问题是:怎么让老窗口的上下文压缩可控,可留档。怎么让新窗口不用从头交代背景。

说一句「做一次交接」或输入 /memj-handoff,它会引导模型把这一轮的成果落成两样东西:

落到哪 · 是什么 · 给谁看

项目文档 · 这一轮的进展、踩的坑、定下的方案 · 下一个接手的人(或模型)

知识条目 · 可复用的结论:下次遇到同类问题该怎么办 · 将来任何一次检索或注入

⭐ 为什么必须是它,而不是"让模型写个总结":

· 随手写的总结 · memj 的交接

写到哪 · 聊天记录里,翻不回去 · 项目文档,有确定位置

写什么 · 模型自由发挥 · 由你写的规范决定(每节该写什么)

下次怎么用 · 你得记得有这回事 · 新会话读项目文档即可接续

会不会丢 · 压缩后可能被丢掉 · 落盘成文件,永不被压缩

能不能改 · 改不了 · 普通 Markdown,直接改

会不会越写越长 · —— · 有留档机制(原文照收,不是有损摘要)

⭐ 本质是一次主动压缩——把一轮百万 token 的过程,压成几 KB
"下一轮真正需要知道的"。但这次压缩是可控、可编辑、可留档的。
  • 可控:压缩成什么样,由你写在项目文档的规范里(哪一节留什么、多少字该整理)。
  • 可编辑:压完就是普通 Markdown,你可以直接改;改完下次交接照样沿用。
  • 可留档:项目文档越写越长时,交接把最早写下的那些小节整段原文收进一条

history 留档知识,原处只留一行指针(完整 id + 一句话主题)——

⭐ 所以压缩可以一直做下去,而原文一个字都没丢、随时能按 id 读回来。

⚠️ history 留档照常存在库里、在知识库页看得见、按 id 读得回,

但不参与检索(搜索与热知识注入都会跳过它)——它不回答"下次该怎么做",

只负责"当初到底写了什么"。

⭐ 若把一段被取代的原文写成别的类型,它就会正常参与检索(通常不是你想要的)。

💡 这就是它和"让模型摘要一下"最关键的区别:
摘要是有损的、而且你事后无从核对;留档是无损的、指针一直指得到原文。

它同时是"人"和"模型"之间的交接:你随时可以打开项目文档看它记了什么、

写得不对就直接改——记忆不是你无法插手的东西。

不做全量交接也行:只想沉淀知识、不想动项目文档,或者反过来只更新文档不落知识,

都可以分开做(见 [四种使用方式](#四种使用方式))。


③ 一切都开放:模板、类型、提示词都由你定

memj 把三处本来该你说了算的东西全部开放出来。这三处正好对应

"记忆长什么样"、"知识分几类"、"模型被怎么指挥"。

a) 文档模板与书写规范 —— 决定记忆长什么样

节名、节数、每节要干什么,都由你定:

  • 模板只在【新建项目】那一刻生效;已有项目记着自己的结构,改模板不影响它们。
  • ⚠️ 节名不是文案,是程序协议 —— 读文档、重建骨架、统计信息都按节名来。
  • ⭐ 每节标题下面那段规范,就是"这一节该写什么"(建模版时从模板复制过来),

模型读文档时会拿到它、按它写;

  • ⭐ 规范可以就地编辑:项目详情页每一节的规范块上都有「编辑」入口。

⇒ 你可以把项目文档改成你自己的工作方式:做研究的用"公司画像/竞争格局",

做工程的用"接口契约/踩坑记录"。留档规则也写在这里

(例如"这一节超过 20000 字符就把最早的小节收进 history 留档")。

b) 知识类型 —— 决定知识分几类

一条知识属于哪一类形态,由你的词表决定。内置五种:

fact 事实 / trap 陷阱 / howto 流程 / decision 决策 / history 留档。

改它同时影响三处:模型能填哪些值(工具参数)、写库时的下拉、以及

"这类知识该怎么写"的指导语。

  • 内置类型的 id 与显示名锁死(库里已有几百条知识在用它们);
  • 「什么时候用 / 怎么写」可改,改错了随时改回;

c) 提示词 —— 决定模型被怎么指挥

写给模型的每一段文本——协议、使用指导、11 个工具的说明、命令文案、

各类内部提示词(评分、标签规范化、翻译、模板写作指导)——都能改:

特性 · 说明

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:7,最后更新 2026-10-20

链接

GitHub · Homepage · npm

同类插件