🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI
广告☁️ 云服务器特惠阿里云首购 8 折 · 腾讯云合作特惠
DeepSeek Harness Hub
← 返回列表

mattcarvercom/dsh-unified-memory

DeepSeek Harnessspec-screened扫描:中风险在 GitHub 查看 ↗
未验证

为 DeepSeek Harnessdsh提供的长期记忆,以 Claude Code 的记忆格式存储为纯…

尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/9/25 · 已提供中文文档

为 Claude Code 格式的 DeepSeek Harness 提供长期记忆:私有、叠加,或与 Claude Code 共享,且每个文件都带有来源信息

综合分
30.7
GitHub 分
30.7
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add mattcarvercom/dsh-unified-memory
该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
信任档位:已验证本站已于 0 天前真实安装成功(L4 · 真实安装)
是什么
dsh 原生插件 · chat
装得上吗
本站已真实安装成功(L4 · 真实安装,非静态推断)
安全吗
本站尚未对该插件做风险分级(暂未覆盖,不等同于无风险)
还在维护吗
活跃:最近一次提交在 1 天前

档位由下列信号合成:本站实装验证(真实安装,当前最高到 L4)· 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。下方各区块是它的证据明细。 验证判据与等级说明 →

🟢实装验证通过· 2026/9/26
由本站实装验证器在真实 dsh 环境安装成功,非静态推断。
数据截至 2026/9/26(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-tools@deepseek-ai/schemastery
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动

README

由 DeepSeek 最新模型翻译生成
dsh-unified-memory

为 DeepSeek Harness(dsh)提供的长期记忆,以 Claude Code 的记忆格式存储为纯 markdown 文件。你可以将其作为 dsh 自己的私有存储运行,作为同时读取 Claude Code 记忆的私有存储运行,或作为与 Claude Code 共享的单一存储运行,使两个 agent 读写相同的记忆。

dsh 创建的每个文件都会在其 frontmatter 中注明这一点,这使得切换模式成为一次机械化的迁移,并让你可以用一条命令删除 dsh 写过的所有内容。

模式

| 模式 | dsh 写入到 | dsh 读取和搜索 | Claude Code 能看到 dsh 的记忆 |
|---|---|---|---|
| dsh | dsh 存储(~/.dsh/memory) | dsh 存储 | 否 |
| overlay | dsh 存储 | dsh 存储,外加 Claude Code 的记忆(只读) | 否 |
| shared | Claude Code 的记忆文件夹 | Claude Code 的记忆文件夹 | 是 |

- shared 适合在同一台机器上同时使用两个 agent 的单个人:两个 agent 都不会重新学习对方已经知道的内容。
- overlay 让 dsh 受益于 Claude Code 的记忆,而无需写入其中。
- dsh 将一切保持分离,并且无需安装 Claude Code 即可工作。

安装

dsh plugin --profile web add github:mattcarvercom/dsh-unified-memory#v1.0.0

之后重启 dsh web。该插件以 dsh 模式启动(其自身的存储在 ~/.dsh/memory 中);参见模式以与 Claude Code 共享记忆。

若要开发插件本身,请改为从检出目录安装。dsh 随后会从 profile 之外加载它,因此请将检出目录的 node_modules 链接到运行时的 node_modules,以便其 @deepseek-ai/ 导入能够解析:

git clone https://github.com/mattcarvercom/dsh-unified-memory
ln -s ~/.dsh/profiles/node_modules dsh-unified-memory/node_modules
dsh plugin --profile web add ./dsh-unified-memory

兼容性与权限

| | |
|---|---|
| dsh | 已使用 DeepSeek Harness 0.1.7-rc.1、web profile 测试 |
| Node | dsh 所需的任何版本(22.19+ 或 24+),其中包括用于搜索的内置 node:sqlite;已在 Node 24 上测试 |
| Claude Code | 密钥和文件夹规则已针对 Claude Code 2.1.282 验证;仅 overlay 和 shared 模式需要 |
| 平台 | 已测试 Linux 和 macOS 路径;Windows 路径遵循相同的密钥规则,但未经测试 |
| 依赖 | 除 dsh 运行时(@deepseek-ai/dsh-tools、@deepseek-ai/schemastery)外无其他依赖 |
| 网络 | 无。任何内容都不会离开你的机器 |
| 读取的文件 | dsh 存储(~/.dsh/memory),以及在 overlay 和 shared 模式下,~/.claude/projects//memory |
| 写入的文件 | dsh 存储,仅在 shared 模式下外加 Claude Code 的记忆文件夹;搜索索引位于 ~/.cache/dsh-unified-memory |
| 进程 | 运行 git rev-parse 以查找会话的仓库根目录 |

记忆是磁盘上的纯文本。不要在其中存储机密;注入的提示也会这样告诉 agent。

配置
覆盖你 profile 的 cordis.patch.yml 中的 memory 行。该覆盖会整体替换该行的配置,因此请重新声明你设置的每个字段。

- id: memory
config:
mode: shared
promptMode: feedback

| 键 | 默认值 | 含义 |
|---|---|---|
| mode | 未设置 | dsh、overlay 或 shared。未设置时遵循 mem mode 最后记录的值 |
| dshRoot | $DSH_HOME/memory,否则 ~/.dsh/memory | dsh 存储 |
| claudeRoot | $CLAUDE_CONFIG_DIR 或 ~/.claude | Claude Code 的主目录 |
| projectAliases | {} | 项目键到规范键的映射,使多个检出共享同一个文件夹 |
| promptMode | full | full 注入每个文件夹的 MEMORY.md 和一个文件列表;feedback 只注入常驻反馈规则并依赖搜索 |
| includeInPrompt | true | 将记忆部分注入系统提示 |
| maxIndexLines / maxIndexBytes | 200 / 25000 | 注入 MEMORY.md 的量 |
| maxList | 200 | full 模式下列出的文件数量上限 |
| searchLimit | 5 | 搜索默认返回的命中数 |
| indexDir | $XDG_CACHE_HOME/dsh-unified-memory | 搜索索引缓存 |
| minResyncIntervalMs | 60000 | 为搜索自动重新扫描文件夹之间的最短时间;dsh 自身的写入会立即重新索引 |

设置 mode 绝不会移动文件。 磁盘上的文件处于 /state.json 中记录的模式。当配置的模式不同时,插件仍可读取,但拒绝写入,并告知 agent 让你运行 mem mode。

全新安装在首次使用时采用配置的模式(或 dsh),因为没有需要迁移的内容。

更改模式:mem mode

mem mode                        # 打印当前模式
mem mode shared --dry-run       # 准确显示将移动什么
mem mode shared                 # 备份、迁移、重建搜索索引

| 从 | 到 | 移动的内容 |
|---|---|---|
| dsh | overlay | 无 |
| overlay | dsh | 无 |
| dsh 或 overlay | shared | dsh 的记忆移入 Claude Code 的文件夹,连同其 MEMORY.md 行 |
| shared | overlay | dsh 创建的记忆移出到 dsh 存储 |
| shared | dsh | 同上,外加 Claude Code 记忆的副本,使 dsh 保留它所知道的内容;--clean 跳过副本 |

确保此操作安全的细节:

- 备份。 每次迁移首先将 dsh 存储和每个 Claude Code 记忆文件夹复制到 /backups//。只复制 memory 文件夹,绝不复制 Claude Code 的会话记录。
- 名称冲突。 名称已被占用的传入文件会以 -dsh(或 -claude)后缀重命名,dry run 会显示这一点。
- 编辑随文件保留。 dsh 编辑过的 Claude Code 记忆在你离开 shared 模式后仍留在 Claude Code 的文件夹中。
- 带副本返回共享模式。 未更改的副本会被丢弃,因为原始文件已经存在。经 dsh 编辑过的副本属于冲突:请使用 --prefer dsh(dsh 的版本会替换原始文件的正文和描述)或 --prefer claude 重新运行。如果副本的原始文件已被你删除,则该副本会被丢弃,除非你传入 --restore-deleted。

来源与移除

dsh 创建的文件会在 metadata: 下携带来源信息:

name: deploy-notes
description: How myapp deploys
metadata:
type: project
origin: dsh
originSessionId: session-7c1e4b2a-9d3f-4a6b-8e5c-2f1a0b9c8d7e
modified: 2026-09-24T18:02:11.000Z

| 字段 | 含义 |
|---|---|
| origin | 谁创建了该文件。缺失表示 Claude Code 文件夹中的文件由 Claude Code 创建,dsh 存储中的文件由 dsh 创建 |
| originSessionId | 创建该文件的 dsh 会话(Claude Code 也会为自己的文件写入同一字段) |
| updatedBy | 当 dsh 编辑一个并非由它创建的文件时添加;origin 永不改变 |
| copiedFrom、copiedAt | 在离开共享模式时创建的副本上 |

mem list --origin dsh           # dsh 创建的所有内容
mem list --updated-by dsh       # dsh 编辑过的 Claude Code 记忆
mem purge --origin dsh --dry-run
mem purge --origin dsh          # 先备份,然后删除 dsh 的文件及其索引行

清除操作绝不会移除 dsh 仅编辑过的文件;它会将这些文件列出。当 dsh 删除一个并非由它创建的记忆时,会将副本放入 /trash/。

文件的写入方式

- Claude Code 的格式。 一个记忆就是一个带有 YAML frontmatter 的 markdown 文件;每个文件夹都有一个 MEMORY.md 索引,其中每个记忆对应一行 - Title — hook。
- 编辑只改变它们所设置的内容。 更新文件时只会重写正在更改的 frontmatter 行;未知字段、列表和注释都会逐字节保留。将 type: 保留在顶层的文件也会将其保留在顶层。
- 索引编辑会先重新读取 MEMORY.md。 Claude Code 不加锁,因此插件会在每次更改前立即读取索引,以避免并发编辑丢失。
- 类型: user、feedback、project、reference。

会话使用哪个文件夹

Claude Code 以启动目录的 git 仓库根目录(工作树会映射到其主检出)作为记忆的键,若不在仓库中则以该目录本身为键。该键会将每个非字母数字字符替换为 -,因此 /home/me/dev 会变成 -home-me-dev;超过 200 个字符的键会被截断并附加哈希后缀。

dsh 会话的启动位置通常比 Claude Code 的启动位置更深,因此插件会从会话的根目录向上走到最近的、在任一侧已有记忆文件夹的祖先目录,并在你的主目录处停止。若无匹配,则使用根目录自身的键。projectAliases 会在该遍历之前应用。

搜索
memory action=search 和 mem search 使用 SQLite FTS5 索引(内置于 Node 的 node:sqlite,无原生依赖),支持 Porter 词干提取和 bm25 排序,名称和描述的权重高于正文。Markdown 文件是唯一的事实来源:索引位于 indexDir,会增量更新,并且可以随时删除。

当 promptMode: feedback 时,只预加载常驻反馈规则(一百条记忆约 1k token),代理会针对每个任务搜索其他所有内容,这适合上下文窗口较小的模型。

代理的工具

memory 工具提供 add、update、delete、search、list 和 read。add 会拒绝名称或描述与现有记忆高度匹配的记忆,并列出匹配项,以便代理改为更新其中之一;force: true 则仍会保存。模型决定何时保存;注入的提示会告诉它哪些内容值得保留。

mem 参考

mem status [--cwd DIR]
mem search  [-n N] [-o OFFSET] [-t TYPE] [--cwd DIR] [--json]
mem list [--origin dsh|claude] [--updated-by dsh] [--json]
mem mode [dsh|overlay|shared] [--dry-run] [--clean] [--prefer dsh|claude] [--restore-deleted]
mem purge --origin dsh [--dry-run]
mem move-legacy [--cwd DIR] [--dry-run]
mem reindex [--rebuild]

常用选项:--dsh-root、--claude-root 和 --alias RAW=KEY(可重复)。$DSH_MEMORY_ROOT(否则为 $DSH_HOME/memory)和 $CLAUDE_CONFIG_DIR 设置默认值。

从 deepseek-harness-memory 0.1 升级

- memoryRoot、scope 和 importClaudeMemory 设置已移除(仍会被接受,但会被忽略并发出警告)。请使用 mode、dshRoot 和 claudeRoot。
- 现有的 dsh 存储会被视为 dsh 模式。运行 mem mode  可切换到其他模式。
- 旧存储顶部的用户级记忆(~/.dsh/memory/*.md)仍可读取,但为只读;mem move-legacy --cwd  会将它们合并到某个项目中。
- import-claude 工具操作已移除:overlay 模式会就地读取 Claude Code 的记忆,而从 shared 执行 mem mode dsh 会获取副本。
- 搜索缓存已从 ~/.cache/deepseek-harness-memory 移至 ~/.cache/dsh-unified-memory;旧文件夹可以删除。

面向其他工具的格式约定

任何其他读取或写入与 dsh-unified-memory 和 Claude Code 共享的文件夹的工具都应:

1. 每条记忆保留一个 .md 文件,其 YAML frontmatter 至少包含 name 和 description,类型可以是顶层 type: 或 metadata.type。
2. 在 MEMORY.md 中为每条记忆保留一行 - Title — hook,只修改自己的行,并在写入前立即重新读取该文件。
3. 保留所有它不理解的 frontmatter 字段。
4. 用它创建的文件标记 metadata.origin: ,用它编辑的文件标记 metadata.updatedBy: ,绝不更改其他工具的 origin。
5. 通过临时文件写入,然后重命名到位。

开发

bash
ln -s ~/.dsh/profiles/node_modules node_modules   # 运行时导入,用于插件测试
npm test

致谢

dsh-unified-memory 最初是 jzc 的 deepseek-harness-memory(MIT 许可)的一个分支。其 frontmatter 解析以及一些存储辅助函数仍然源自那项工作;而存储模式、来源追踪、迁移、全文搜索、Claude Code 密钥解析以及 mem CLI 则是全新的。

上游仓库有新提交时邮件通知你(每天最多一封,无更新不打扰),随时一键退订。

💬 加入社群

插件用法、部署报错、新插件第一时间同步——群里问,比一个人翻文档快。

DPharness QQ 群二维码,QQ 扫码进群
QQ 扫码进群
DPharness 飞书群二维码,飞书扫码进群
飞书扫码进群