会话开始自动注入的长期记忆:preference/fact/summary/knowledge 四类、global/project 双作用域,`agent/pre-step` 字节预算召回,JSON 原子持久化。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:yangyongzhen/dsh-memory
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本——pnpm 默认拦截,所以安装可能停在 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED 或 ERR_PNPM_IGNORED_BUILDS;dsh 会打印出需要添加的确切键名,把它加进该 profile 的 pnpm-workspace.yaml 的 allowBuilds 下,重跑一次即可装上。放行构建本身就是一次信任判断:请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
DeepSeek Harness 的长期记忆插件:把跨会话需要记住的事情(用户偏好、项目事实、会话摘要、可复用知识)持久化到磁盘,并在每个新会话开始时自动注入给 Agent。
特性
- 四类记忆:
preference(偏好,应默认遵守)、fact(项目/环境事实)、summary(会话/任务摘要)、knowledge(可复用知识/经验) - 两种作用域:
global(所有项目适用)、project(按项目隔离,slug 自动从会话 cwd 推导) - 四个 Agent 工具:
memory_write/memory_read/memory_search/memory_delete - 会话开始自动注入:监听
agent/pre-step,在第一步把全局+项目记忆渲染成带字节预算的<system-reminder>注入;内容寻址去重,resume 会话不会重复注入 - 原子持久化:临时文件 + rename,崩溃不产生撕裂文件;损坏的 unit 优雅降级为空而不是崩溃
- 半自动:写入由 Agent 判断(建议先
memory_search查重再写),符合你的「半自动」选型
安装
dsh plugin --profile <name> add dsh-memory
# 或从本地 checkout 安装
cd <dsh-memory目录> && dsh plugin --profile <name> add .
配置
在 profile 的 cordis.patch.yml(或 --patch 覆盖)中配置:
- id: memory
config:
enabled: true
root: C:/Users/<you>/.dsh/memory # 可选;默认 $DSH_HOME/memory(支持 ~ 前缀)
maxBytes: 4000 # 注入预算(UTF-8 字节),默认 4000
maxEntryBytes: 512 # 注入时单条内容上限,默认 512
injectOnStart: true # 会话开始自动注入,默认 true
searchLimit: 20 # memory_search 默认返回上限,默认 20
工具
memory_write
{
"type": "preference",
"scope": "global",
"content": "用户偏好中文回复",
"tags": ["language"],
"importance": 4
}
type:preference|fact|summary|knowledge(必填)scope:global|project(必填;project自动绑定当前会话 cwd)content: 记忆内容(必填)id: 已存在记忆的 id,传了则更新该条tags: 检索标签(可选)importance: 1..5 重要度(可选,注入与搜索排序参考)
memory_read
按作用域(+ 可选类型过滤)列出记忆,最新在前。
memory_search
在全局+当前项目记忆中检索:query(内容/标签不区分大小写包含匹配,多词须全命中)、tags(交集)、type 过滤;按重要度、再按更新时间排序。
memory_delete
按 id + scope 删除一条记忆。
数据布局
$DSH_HOME/memory/
├── global.json # 全局记忆(数组,version: 1)
└── projects/
└── <slug>.json # 每个项目一个 unit 文件
每条记录:
{
"id": "…",
"type": "preference",
"scope": "global",
"content": "…",
"tags": [],
"importance": 3,
"createdAt": "2026-08-20T…",
"updatedAt": "2026-08-20T…"
}
工作原理
- 存储(
src/store.ts):MemoryStore按作用域管理 JSON unit 文件,put/remove/clear全部原子写;搜索按重要度+时间排序。 - 渲染(
src/render.ts):renderMemoryBlock把条目逐条贪心装入<system-reminder>,严格遵守maxBytes预算;放不下的条目跳过而不是丢整个 section。 - 注入(
src/index.ts):agent/pre-step水瀑布中,仅step === 1且尚未注入过时,把渲染块追加到 claimed messages 之后进入第一次请求。source 带plugin: 'memory'+digest,alreadyInjected通过扫描会话 surface 去重,resume 安全。
开发
pnpm install
pnpm run build # tsc → lib/
pnpm test # store 单测(11 项)+ smoke(5 项)
设计取舍
- 半自动写入:注入块会提示 Agent「如需更新记忆,使用 memory_write / memory_delete」,由 Agent 判断何时沉淀;不做全自动摘要(那需要额外 LLM 调用)。
- 预算优先:注入默认 4000 字节,宁可少注入也不撑爆上下文;
importance高的条目优先。 - 文件即真相:不用 SQLite/额外服务,
global.json人类可读可手改,和你的dsh-session-report风格一致。
License
MIT
链接
同类插件
vectorize-io/hindsight#coding-agents★ 41184
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 38914
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
agentscope-ai/ReMe#dsh★ 3530
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2679
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1081
读取本机上其他三十三个编程智能体已经写下的会话文件——Claude Code、Codex、Cursor、VS Code Copilot Chat、opencode、OpenClaw、Hermes、Kimi、Cline、Zed 等,包括安装之前的历史:提供 deja_recall、deja_session、deja_blame、deja_fix、deja_how、deja_remember 六个工具与 /deja 命令,并可选地把召回结果加入运行时上下文。本地 BM25 索引,不用大模型,不用向量嵌入,不联网(dsh plugin --profile web add dsh-deja)。
adoresever/graph-memory★ 631
DeepSeek Harness 的可追溯、可检索跨会话记忆:把对话知识沉淀为带类型的图节点(任务/技能/事件)与关系边。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。