DeepSeek Harness Plugin Hub

发布与管理完整 Harness Profiles,发现适合你的插件。

探索

插件目录环境预设文档中心动态

社区

发布插件联系我们报告问题

相关链接

Plugin Hub GitHubDeepSeek Harness 官方项目系统状态隐私说明
© 2026 DeepSeek Harness Plugin HubPowered byPaxTech

独立、非官方社区项目,与 DeepSeek 官方无隶属、授权或背书关系。

Unified Memory — DeepSeek Harness 插件(DSH Plugin)
DeepSeek Harness Plugin Hub
ProfilesPlugins分类动态文档登录管理 Profiles
ProfilesPlugins分类动态文档登录
← Plugins
U

dsh-unified-memory

Unified Memory

以 Claude Code 的格式为 DeepSeek Harness 提供长期记忆:可使用私有存储、同时读取 Claude Code 记忆的叠加层,或与 Claude Code 共享的单一存储,并为每个文件记录来源信息。

插件会安装到这里;不确定时保持 web。

npx -y @deepseek-ai/dsh plugin --profile web add github:mattcarvercom/dsh-unified-memory#164ef831d94b56c937d8b95a1e25279794a11fc0
README兼容性版本

兼容性与来源证明

Unified Memory 以 dsh-unified-memory 发布,当前版本为 1.0.0。Plugin Hub 会校验它的 manifest,并保存精确安装来源,便于复现安装结果。

DSH 兼容范围
*
运行环境
any
发布来源
github
Registry 更新时间
2026/9/25

版本

1.0.0stable
2026/9/25

相关插件

正在加载相关插件…

最新版
1.0.0
DSH
*
HMR
重启进程
Tree shaking
未声明可安全裁剪
解包体积
未提供
文件数
未提供
Surface
any
许可证
MIT
发布源
github
GitHub
★ 0
周下载
0
最近提交
2026/9/25
查看源码 ↗
README Badge

点击下方 Badge 复制 Markdown,粘贴到 README 即可。

这是你的 Plugin?认领权益 · 优先安全扫描

验证 package.json 声明的 GitHub 仓库,即可管理这个公开页面。认领后,Hub 会优先安排当前版本的安全扫描,并在通过后公开展示结果。

认领这个 Plugin →
报告问题

相关插件

继续浏览 memory-context 分类下经过校验的插件。

Memory Plugin@openviking/dsh-memory-plugin适用于 DeepSeek Harness 的 OpenViking 记忆与上下文套件Weknora@wxg-prc-cpg/dsh-weknora适用于 DeepSeek Harness (dsh) 的 WeKnora 知识检索工具:通过自有知识库进行语义搜索、文档阅读以及 RAG/代理回答。Archive Manager@michengai/dsh-archive-manager可通过 NPM 安装的 DSH Web 插件,用于管理已归档的会话。Memsearch Dsh@zilliz/memsearch-dsh适用于 DeepSeek Harness 的 MemSearch 插件:在多个代理之间共享 Markdown 记忆,支持捕获、步骤前上下文注入、记忆召回技能和技能候选审核面板。

README

dsh-unified-memory

Long-term memory for DeepSeek Harness (dsh), stored as plain markdown files in Claude Code's memory format. Run it as dsh's own private store, as a private store that also reads Claude Code's memories, or as one store shared with Claude Code so both agents read and write the same memories.

Every file dsh creates says so in its frontmatter, which makes switching modes a mechanical migration and lets you remove everything dsh ever wrote with one command.

Modes

Modedsh writes todsh reads and searchesClaude Code sees dsh's memories
dshthe dsh store (~/.dsh/memory)the dsh storeno
overlaythe dsh storethe dsh store, plus Claude Code's memories (read-only)no
sharedClaude Code's memory folderClaude Code's memory folderyes
  • shared suits one person using both agents on one machine: neither agent relearns what the other already knows.
  • overlay lets dsh benefit from Claude Code's memories without ever writing into them.
  • dsh keeps everything separate, and works without Claude Code installed.

Install

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

Restart dsh web afterwards. The plugin starts in dsh mode (its own store in ~/.dsh/memory); see Modes to share memories with Claude Code.

To work on the plugin itself, install from a checkout instead. dsh then loads it from outside the profile, so link the checkout's node_modules to the runtime's for its @deepseek-ai/* imports to resolve:

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

Compatibility and permissions

dshTested with DeepSeek Harness 0.1.7-rc.1, web profile
NodeWhatever dsh requires (22.19+ or 24+), which includes the built-in node:sqlite used for search; tested on Node 24
Claude CodeKey and folder rules verified against Claude Code 2.1.282; only needed for overlay and shared modes
PlatformsLinux and macOS tested paths; Windows paths follow the same key rule but are untested
DependenciesNone beyond the dsh runtime (@deepseek-ai/dsh-tools, @deepseek-ai/schemastery)
NetworkNone. Nothing leaves your machine
Files readThe dsh store (~/.dsh/memory) and, in overlay and shared modes, ~/.claude/projects/*/memory
Files writtenThe dsh store, plus Claude Code's memory folders in shared mode only; search indexes in ~/.cache/dsh-unified-memory
ProcessesRuns git rev-parse to find a session's repository root

Memories are plain text on disk. Do not store secrets in them; the injected prompt tells the agent the same.

Configure

Override the memory row in your profile's cordis.patch.yml. The override replaces the row's config wholesale, so restate every field you set.

- id: memory
  config:
    mode: shared
    promptMode: feedback
KeyDefaultMeaning
modeunsetdsh, overlay or shared. Unset follows whatever mem mode last recorded
dshRoot$DSH_HOME/memory, else ~/.dsh/memoryThe dsh store
claudeRoot$CLAUDE_CONFIG_DIR or ~/.claudeClaude Code's home
projectAliases{}Project key to canonical key, so several checkouts share one folder
promptModefullfull injects each folder's MEMORY.md and a file list; feedback injects only the standing feedback rules and relies on search
includeInPrompttrueInject the memory section into the system prompt
maxIndexLines / maxIndexBytes200 / 25000How much of MEMORY.md is injected
maxList200Cap on files listed in full mode
searchLimit5Default hits returned by search
indexDir$XDG_CACHE_HOME/dsh-unified-memorySearch index cache
minResyncIntervalMs60000Minimum time between automatic rescans of a folder for search; dsh's own writes reindex immediately

Setting mode never moves files. The files on disk are in the mode recorded in <dshRoot>/state.json. When the configured mode differs, the plugin stays readable but refuses writes and tells the agent to have you run mem mode.

A fresh install adopts the configured mode (or dsh) on first use, since there is nothing to migrate.

Changing modes: mem mode

mem mode                        # print the current mode
mem mode shared --dry-run       # show exactly what would move
mem mode shared                 # back up, migrate, rebuild search indexes
FromToWhat moves
dshoverlaynothing
overlaydshnothing
dsh or overlayshareddsh's memories move into Claude Code's folders, with their MEMORY.md lines
sharedoverlaymemories dsh created move out to the dsh store
shareddshas above, plus copies of Claude Code's memories, so dsh keeps what it knew; --clean skips the copies

Details that keep this safe:

  • Backups. Every migration first copies the dsh store and each Claude Code memory folder to <dshRoot>/backups/<timestamp>/. Only the memory folders are copied, never Claude Code's session transcripts.
  • Name collisions. An incoming file whose name is taken is renamed with a -dsh (or -claude) suffix, and the dry run shows it.
  • Edits stay with the file. A Claude Code memory that dsh edited stays in Claude Code's folder when you leave shared mode.
  • Returning to shared with copies. An unchanged copy is dropped, because the original is already there. A copy dsh edited is a conflict: rerun with --prefer dsh (dsh's version replaces the original's body and description) or --prefer claude. A copy whose original you deleted is dropped unless you pass --restore-deleted.

Provenance and removal

Files dsh creates carry provenance under 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
---
FieldMeaning
originWho created the file. Absent means Claude Code in Claude Code's folders, and dsh in the dsh store
originSessionIdThe dsh session that created it (Claude Code writes the same field for its own files)
updatedByAdded when dsh edits a file it did not create; origin never changes
copiedFrom, copiedAtOn copies taken when leaving shared mode
mem list --origin dsh           # everything dsh created
mem list --updated-by dsh       # Claude Code memories dsh edited
mem purge --origin dsh --dry-run
mem purge --origin dsh          # back up, then delete dsh's files and their index lines

Purge never removes files dsh only edited; it lists them. When dsh deletes a memory it did not create, a copy goes to <dshRoot>/trash/.

How files are written

  • Claude Code's format. A memory is a markdown file with YAML frontmatter; each folder has a MEMORY.md index with one - [Title](file.md) — hook line per memory.
  • Edits change only what they set. Updating a file rewrites just the frontmatter lines being changed; unknown fields, lists and comments are kept byte for byte. A file that keeps type: at the top level keeps it there.
  • Index edits re-read MEMORY.md first. Claude Code takes no lock, so the plugin reads the index immediately before each change to keep a concurrent edit from being lost.
  • Types: user, feedback, project, reference.

Which folder a session uses

Claude Code keys memory by the git repository root of the directory it was launched from (a worktree maps to its main checkout), or the directory itself outside a repository. The key replaces every non-alphanumeric character with -, so /home/me/dev becomes -home-me-dev; keys over 200 characters are cut and given a hash suffix.

dsh sessions often start deeper than where Claude Code was launched, so the plugin walks from the session's root up to the nearest ancestor that already has a memory folder on either side, stopping at your home directory. Without a match, the root's own key is used. projectAliases apply before the walk.

Search

memory action=search and mem search use a SQLite FTS5 index (built into Node's node:sqlite, no native dependency) with Porter stemming and bm25 ranking, name and description weighted above the body. The markdown files are the only source of truth: the index lives in indexDir, is updated incrementally, and can be deleted at any time.

With promptMode: feedback, only the standing feedback rules are preloaded (about 1k tokens for a hundred memories) and the agent searches for everything else per task, which suits models with small context windows.

The agent's tool

The memory tool offers add, update, delete, search, list and read. add refuses a memory whose name or description closely matches an existing one and lists the matches, so the agent updates one of them instead; force: true saves anyway. The model decides when to save; the injected prompt tells it what is worth keeping.

mem reference

mem status [--cwd DIR]
mem search <keywords...> [-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]

Common options: --dsh-root, --claude-root, and --alias RAW=KEY (repeatable). $DSH_MEMORY_ROOT (else $DSH_HOME/memory) and $CLAUDE_CONFIG_DIR set the defaults.

Upgrading from deepseek-harness-memory 0.1

  • The memoryRoot, scope and importClaudeMemory settings are gone (still accepted, and ignored with a warning). Use mode, dshRoot and claudeRoot.
  • An existing dsh store is treated as dsh mode. Run mem mode <mode> to move to another mode.
  • User-level memories at the top of the old store (~/.dsh/memory/*.md) stay readable but read-only; mem move-legacy --cwd <project> folds them into a project.
  • The import-claude tool action is gone: overlay mode reads Claude Code's memories in place, and mem mode dsh from shared takes copies.
  • The search cache moved from ~/.cache/deepseek-harness-memory to ~/.cache/dsh-unified-memory; the old folder can be deleted.

Format contract for other tools

Anything else that reads or writes a folder shared with dsh-unified-memory and Claude Code should:

  1. Keep one .md file per memory, with YAML frontmatter holding at least name and description, and a type either as top-level type: or as metadata.type.
  2. Keep one - [Title](file.md) — hook line per memory in MEMORY.md, change only its own lines, and re-read the file immediately before writing it.
  3. Preserve every frontmatter field it does not understand.
  4. Mark files it creates with metadata.origin: <tool> and files it edits with metadata.updatedBy: <tool>, never changing another tool's origin.
  5. Write through a temporary file and rename it into place.

Development

ln -s ~/.dsh/profiles/node_modules node_modules   # runtime imports, for the plugin tests
npm test

Credits

dsh-unified-memory began as a fork of deepseek-harness-memory by jzc (MIT). Its frontmatter parsing and a few storage helpers still derive from that work; the storage modes, provenance tracking, migrations, full-text search, Claude Code key resolution, and the mem CLI are new.