原生实现 Claude Code 式自动记忆:类型化记忆文件(user/feedback/project/reference)+ 自动注入系统提示词的 MEMORY.md 索引,无记忆时零提示词占用;memory_write/read/list/delete 遵循 Claude Code 写入规则(查重更新、相对日期转绝对、交叉链接);项目级与用户级双层作用域,跨进程文件锁与孤儿锁自愈,记忆为磁盘纯 Markdown,无外部服务、无 embedding。
安装
# npm 包(预构建)
dsh plugin --profile web add dsh-auto-memory
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:AskTheWay/dsh-auto-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
你的 dsh 智能体把你说过的每件事都忘掉。每一次。每一个会话。
一条命令修复。 把 Claude Code 式持久记忆带给 DeepSeek Harness——原生实现, 零服务器、零 embedding、零配置。
dsh plugin --profile web add dsh-auto-memory
今天对它说 "记住:我是准备面试的 Python 后端工程师"—— 明天开一个全新会话,问 "你对我有什么了解?",它记得。

亮点
1.x——可信记忆 + 端到端实测:固化产物出生即 candidate 并附逐字证据
摘录;verified 只能由你授予;有争议的记忆永不重新注入;所有写入路径
在存储单点过注入模式守卫。而且测了:四层评测(确定性/召回/固化/端到端)+
LongMemEval-S 对齐跑——包括一个如实公布的非目标场景分数。
完整历史:CHANGELOG.md ·
Releases
Claude Code 有的东西,dsh 一直没有。现在有了。
DeepSeek Harness 是当下 GitHub 最火的开源智能体框架——模型、工具、沙箱,万物皆插件。 但它根本没有记忆子系统。官方的答案是三份默认关闭的 MCP 外挂配置,而且官方文档 自己承认局限:不自动注入、无遗忘策略、只做子串搜索。你的智能体是设计层面的失忆症。
dsh-auto-memory 用原生实现补上这个缺口:
| MCP 外挂方案 | dsh-auto-memory | |
|---|---|---|
| 记忆自动注入每一次系统提示词 | ✗ | ✓(无记忆时零 token 占用) |
| 类型化记忆:user / feedback / project / reference | ✗ | ✓ |
| 工作区 + 用户双层作用域——跨项目不串扰 | ✗ | ✓ |
| 崩溃与并发安全(跨进程锁、孤儿锁自愈) | — | ✓ |
| 需要外部服务 / 数据库 / embedding | ✓✓✓ | 全都不用——纯 Markdown 文件 |
记忆是 $DSH_HOME/memory/ 下的普通文件——可手改、可 grep、对 git 友好,完全属于你。
可信,不只是持久(1.0.0)
模型固化出的记忆可能"自信地错"——而错记忆每个会话都会被重新注入。所以记忆带可信状态:固化产物出生即 candidate(附转写逐字证据摘录,伪造引用会被对照转写拦下),verified 只能由你在面板授予,disputed / superseded 永不注入。所有写入路径在存储单点过注入模式守卫;内容变化自动降级信任并使旧证据失效。🩺 体检面板汇总待验证/僵尸/矛盾嫌疑供复核。同样的扁平文件、同样的零服务——现在连"要不要信它"都有审计轨迹。
一分钟感受它
node scripts/demo.mjs # 不要 API key、不开浏览器:看 写入 → 索引 → 注入 → 召回 → 遗忘
或者在真实对话里:告诉智能体值得记住的事。模型调用
memory_write / memory_read / memory_list / memory_search /
memory_delete,遵循 Claude Code 的写入纪律:查重更新而非堆积、
只用绝对日期、[[name]] 交叉链接、feedback 记忆附 Why: /
How to apply: 行。
记忆面板
整套记忆系统在 dsh Web UI 里只有一个入口:用户级/项目级分组、每条记忆的 读取次数与可信徽章、置顶/停用/编辑/删除、注入统计(逐记忆+按项目+预算截断 榜)、体检面板,以及 Claude Code 导入导出桥。

从 Claude Code 导入,也能撤销
面板里的 📥 从 Claude Code 导入 按钮只读扫描 ~/.claude/projects/*/memory,
按源项目分组列出每条记忆。勾选后应用:字段一一映射(同款四类型、H1 → 标题、
ISO modified → 时间戳),同名记忆跳过、绝不覆盖。
导入的记忆在 frontmatter 里带一个 origin 块(kind / slug / file /
imported / hash),所以勾选框是可逆的:取消勾选一条已导入的记忆并应用,
它就从本插件删除——Claude Code 里的源记忆原样保留,随时可以再导。导入后被
编辑过的记忆,内容指纹对不上,会标成已修改并保留,绝不会被静默丢掉。
旧版本(0.8.0/0.9.x)导入、没有 origin 标记的记忆按内容完全一致识别为
旧版导入,同样可以取消勾选撤销。
甚至不用自己盯着:宿主每 5 分钟扫描一次 Claude 记忆目录,只要有可同步的 记忆,列表上方就会出现提示条。
导出到 AGENTS.md——桥是双向的
面板一键把信任态记忆(verified/未设置——candidate 和有争议的绝不外流) 渲染成 AGENTS.md 片段并复制到剪贴板。粘进任何遵循 AGENTS.md 惯例的 工具——Claude Code、Codex、Cursor——这个插件学到的东西就跟着你走。 同样的扁平文件,两个方向。
模型实际看到什么
每个请求,一个系统提示词段(order 4000)携带索引——每步重新求值、字节预算控制、 存储为空时整段消失:
# Persistent memory index
## Project memories
- [压测过 PostgreSQL](id-generator-benchmark.md) — psycopg2 连接池有踩坑经验 (2026-09)
- [用户是 Python 后端工程师](user-prefers-python.md) — 正在准备面试; 偏好中文交流
中文标题、YAML frontmatter、一条记忆一个文件——完整的 Claude Code MEMORY.md
模型,在 dsh 的提示词组装管线上原生重建。
首发之前就被锤炼过
这个插件在 v0.1.0 发布前经受了一次 12 个智能体的对抗性代码审查 (68 万 token 的源码级拷问)。五个生产级陷阱被抓出并修复——全部带回归测试—— 其中两个若上线就是事故:
- NTFS 静默毁数据:名为
memory的记忆会在大小写不敏感文件系统上撞上MEMORY.md——写入报告成功,实际销毁记录。保留字守卫拦截。 - 毒提示炸弹:任何记忆里三个字面
{{{ }}}花括号,就能炸掉工作区的 每一个模型请求——且模型无法自救。收敛式消毒器中和。
还有:孤儿锁自愈(Ctrl+C 砸不坏你的记忆库)、symlink 读取防护、坏文件容错、 稳定的索引排序(保住 KV 前缀缓存)、严格不写自定义会话事件(那会让 dsh 会话 拒绝 resume)。
用数字说话,不止口头宣称
确定性评测层(evals/)随 CI 运行——无 LLM、结果完全可复现:
注入成本是一条平线——真实渲染路径实测(典型 ~40 字中文摘要,默认 4 KB 预算):
记忆条数 0 10 20 50 100 200 注入段 0 B 2.3 KB (~564 tok) 3.2 KB (~801 tok) 4.0 KB (~1008 tok) 4.0 KB 4.0 KB 字节预算是硬顶——50 条之后无论存多少条,注入段钉在上限(排序靠后的行带 截断标记让位);空库注入 0 字节:整段消失。
架构级压缩免疫:索引挂在动态系统提示词段上、每步组装重新求值—— 上下文压缩(compaction)只压会话历史,压不到系统提示词段,记忆无需任何 "重注入补丁"天然穿越每次压缩。把记忆存成会话日志消息的方案在第一次 压缩就会丢。
端到端净贡献实测(L2,管道之上的那一层):固化 → 注入 → 问答全链路, 项目特定探针题带记忆 95.8% vs 无记忆 16.7%——净贡献 +79.2 个百分点 (standard 集 30 题,盲判)。同时如实公布一个非目标场景数据点:LongMemEval-S (122k token 闲聊海捞针,30 题分层子集,官方判分协议)总分 23.3%—— 量化了编码场景设计与闲捞针任务的距离,而不是挑基准。结果 · 方法学
淘汰零误杀:四类混合场景——只有"超龄零引用"被隐藏,文件零丢失, 读一次即复活。
已知局限(有意钉板):预算截断目前按索引行序(位置式)而非相关性排序—— 半量预算压力下探针保留率随规模降至 ~38%→10%。置顶可解关键项:同预算下 pinned 探针保留 ≥80%(0.3.0);完整相关性排序仍在路线图。
评测层已抓到过真实 bug:字节预算曾遗漏指导文本、整段超支 ~800 字节 (已修复并带回归)。
已实测平台矩阵(手动验证,非纸面声明):
| CLI | 桌面端 | Web profile | |
|---|---|---|---|
| dsh 版本 | 0.1.5-rc.2 | 0.2.0-rc.2 | 0.2.1-rc.2 |
| 状态 | ✓ 工具/注入/固化 | ✓ 面板 + 导入 + 审计 | ✓ 面板 + 导入 |
188 项测试 + 四层评测(L0 确定性/L1 召回/L3 固化质量/L2 端到端 + LongMemEval 对齐)。运行时依赖仅 yaml。
安装
包发布在 npm(dsh-auto-memory)——
dsh plugin add 直接从 registry 拉取,无需手动下载:
# 1) 装进某个 profile(web 是默认的图形 profile;
# 用别的 profile 就换成你自己的名字)
dsh plugin --profile web add dsh-auto-memory
# 2) 重启 profile —— 完成
dsh web
用桌面端? 打开内置插件管理器(Plugins 页),搜索 dsh-auto-memory
点安装——同一个包、同版本号。
源码安装:npm install && npm run build && dsh plugin --profile web add /绝对路径。
要求 @deepseek-ai/dsh >= 0.1.5-rc.2(Node ^22.19 || >=24)。
兼容官方桌面端——已在 0.2.0-rc.2 实测。
装完就能用:对智能体说 "记住:代码注释用中文";在 Web UI 打开「记忆」 面板管理;聊几个会话后回来看注入统计。
配置
在 profile 的 cordis.patch.yml 覆盖(config 整表替换):
- id: auto-memory
config:
maxBytes: 4096 # 注入预算(索引+指导文本+协议壳)
memoryDir: D:/memories # 默认: $DSH_HOME/memory
enableUserScope: true # false: 用户层在所有路径禁用
autoSummarize: false # true: 根会话结束时后台 LLM 提取持久事实写入
autoSummarizeMaxMemories: 5 # 单次固化上限
autoSummarizeMaxTokens: 2048 # 固化输出 token 上限
staleAfterDays: 0 # >0: 软隐藏超 N 天零引用记忆(文件保留)
工作原理(60 秒)
- 写入:工具
execute→ name 归一化为[a-z0-9-](保留字拒绝)→ 跨进程文件锁(官方dsh-atomic-write)→ 原子写 → 锁内全量重建索引。 - 注入:单个动态段,每步组装重新求值;同步读索引、执行字节预算、中和
{{。 工具写入在下一个请求即生效——永远不需要重启。 - 审计:不写自定义会话事件(第三方事件类型会让 dsh 拒绝 resume);
一切走标准
tool/call/tool/result。1.0 起每次注入还会落audit.jsonl(哪些记忆/哪个会话/预算截了谁)并聚合进面板统计—— 记忆带纸质轨迹。
深度内容:设计决策 · 复盘:向 awesome-dsh-plugin 提 PR
路线图
- P0——类型化存储、四工具、提示词注入、分层作用域、崩溃安全
- P1——会话结束自动固化、遗忘与淘汰、召回展开、人工审批的批量删除
- P2——Web UI 记忆面板、token 成本/召回质量评测
- P3——更新替换语义、匹配核心与评测共用
- 0.8–1.0——Claude Code 导入桥(可撤销)、注入审计+统计、可信记忆(状态/证据/守卫/体检)
- 1.1–1.2——L2 端到端 + LongMemEval 对齐、memory_search、导入 watcher、反向 AGENTS.md 导出
- L2 精修(相关性排序截断)、社区反馈驱动
更新日志
逐版本说明:CHANGELOG.md · GitHub Releases
许可
MIT
链接
同类插件
vectorize-io/hindsight#coding-agents★ 59457
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
volcengine/OpenViking#examples/dsh-memory-plugin★ 41708
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
MemTensor/MemOS#memos-local-plugin★ 12306
DeepSeek Harness 本地记忆插件:分层 L1/L2/L3 记忆,自动沉淀与手动 memos_* 检索工具并存,内置记忆浏览器。
agentscope-ai/ReMe#dsh★ 3762
将 DeepSeek Harness 接入 ReMe 本地优先、自进化的个人知识库:自动把已完成的主 Agent 对话沉淀为用户掌控的 Markdown 记忆,通过 reme_search 结合 BM25、可选向量检索和 wikilink 展开搜索对话与资料,并按日整理长期记忆。
zilliztech/memsearch#MemSearch★ 2826
供 DSH 与其他编程 Agent 共享的 Markdown 记忆,支持自动捕获、步骤前上下文注入、搜索召回,以及通过审阅面板实现 memory-to-skill 自进化。
vshulcz/deja-vu#extensions/dsh★ 1422
读取本机上其他四十二个编程智能体已经写下的会话文件(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)。
社区评论
评论公开保存在 GitHub Discussions。加载评论会连接 GitHub 和 Giscus;发表内容需要 GitHub 账号。