前言¶
在 DeepSeek Harness(DSH)里做同一仓库的多轮协作时,模型往往只能依赖当前会话的上下文。架构约定、调试踩坑、部署约束这类「代码里推不出来」的知识,会话结束就断了;下次新开进程或新窗口,又要从头解释一遍。
社区里已有把 ZCode 项目记忆思路迁到 DSH 的做法。下面介绍维护者 ffyfox 发布的 dsh-zcode-project-memory:按项目隔离、落在磁盘上的长效记忆,装好后通过工具写入,并在新会话开场自动把索引带进上下文。分类为「记忆」,当前 GitHub 星标为 0;这是非官方社区移植,与 Z.AI(ZCode)及 DeepSeek 无隶属关系。
这是什么¶
dsh-zcode-project-memory 是 Cordis 插件:注册 save_project_memory 工具,并向 system prompt 注入两段内容——记忆使用指引(何时写、格式、如何删)与 MEMORY.md 索引快照。机制以 zai-org/ZCode 为准复刻,DSH 侧接口以 DeepSeek Harness 官方文档 为准。
记忆按项目维度隔离:目录名由项目根目录规范绝对路径经 sha256 派生,同一项目在不同进程、不同会话命中同一份数据;不同项目互不可见。数据默认写在 ~/.dsh,不进项目仓库。
核心功能¶
插件在运行时做三件事(资料原文归纳):
- 注册
save_project_memory—— 写一条记忆(独立 Markdown 文件 + 维护索引)。 - 注入记忆指引 —— 通过
ctx.systemPrompt.section(),说明何时保存、正文格式、删除方式。 - 注入记忆索引 —— 通过
ctx.systemPrompt.context(),新会话开场即带上既有记忆的目录行。
装好后无需额外配置即可使用;可选配置见下文「配置项」。插件 inject 了 tools 与 systemPrompt,由 dsh-base 提供,web / headless / tui 等继承 dsh-base 的 profile 均可生效;缺少这两项服务的部署里插件会停留在 PENDING,不产生副作用。
记忆类型在 frontmatter 里分为四种:user、feedback、project、reference。同一条记忆重复保存会替换对应文件与索引行,不会堆叠重复条目。索引超过 200 行或 25000 字符时会被截断,注入时带提示。
未默认挂载的部分:仓库在 src/subsystems/ 提供了 manifest 扫描、自动抽取、后台总结等子系统模块,供单独导入;默认行为仅是「工具 + 两处注入」,不会每轮自动触发抽取或后台 Agent,以避免 token 与并发压力(见 README「与 ZCode 的差异」)。
安装与启用¶
从 npm 安装(命令来自 README):
dsh plugin --profile <你的 profile> add dsh-zcode-project-memory
dsh plugin add 会把参数转发给 profile 目录下的 pnpm;包内声明了 dsh.bundle.patch,插件会自动加入 profile 的 bundle 层。
若要在本地改源码并即时生效,可用绝对路径安装(须绝对路径,pnpm 会建符号链接):
dsh plugin --profile <你的 profile> add /绝对路径/dsh-zcode-project-memory
运行时要求 Node.js >=20(见 package.json 的 engines)。包版本在资料中为 0.1.0,许可证为 MIT AND Apache-2.0。
安装插件会以当前 dsh 进程的用户权限读写 ~/.dsh/memories/;安装前建议在 GitHub 查看源码与 NOTICE.md,确认符合你的安全与合规要求。
典型用法¶
日常用法是正常对话,不必记专用 CLI。下面示例话术来自 README。
让模型记住¶
直接说明,或由模型在遇到非显而易见的约定、架构决策、调试坑时主动保存:
记住:这个项目的 migration 必须先在 staging 跑满 24 小时才能上生产。
模型调用 save_project_memory 后,会写入单条 .md 并更新 MEMORY.md 索引。指引明确排除:临时任务状态、以及仓库里已有的事实(代码结构、git 历史、AGENTS.md 等)。
在新会话里回忆¶
索引已在开场注入,可直接问:
这个项目的长效记忆里有什么?
上次说的那个 migration 约束是什么?
模型根据索引行按需读取对应记忆文件;跨会话、跨进程有效,因为数据在磁盘上。
让模型忘记¶
没有单独的删除工具。按 README,可以说:
忘掉关于 migration 的那条记忆。
模型应删除记忆文件,并从 MEMORY.md 去掉对应行。只删文件会留下悬空索引,需两行一并处理。
人工查看与清理¶
记忆是纯 Markdown:
M=~/.dsh/memories/projects/<项目基名>-<哈希>/memory
cat "$M/MEMORY.md"
ls "$M"
清空某项目记忆可删除整个 memory/ 目录;目录不存在时插件安静降级。
可选 profile 配置(非法值在加载期失败,不静默降级):
- id: project-memory
config:
indexLineLimit: 200
indexCharacterLimit: 25000
maxMemoryChars: 8000
端到端手工验证(需可用模型凭据,来自 README):
cd /your/project
dsh --profile headless "把这条教训存进项目记忆:<...>,然后回复 DONE"
dsh --profile headless "这个项目的长效记忆里说了什么?引用索引行原文。"
适用场景与注意¶
适合:长期维护同一 DSH 工作区、希望把「教训与约定」沉淀在项目维度、又不想把记忆文件 commit 进仓库的团队或个人。
与 ZCode 保存路径的差异(资料已说明):本插件用 save_project_memory 统一写入并由代码维护 MEMORY.md,索引并发采用排队与文件锁,避免 ZCode 侧乐观并发导致的一次保存失败;索引不会塞进 # agentsMd 标题(DSH 侧由 dsh-agent-instructions 负责指令块)。
注意:
- 非官方项目,包名中的
zcode仅说明实现来源。 - 记忆是增强能力:读失败时注入空串,拿不到项目目录时工具返回
saved: false,不应拖垮会话。 - 读取拒绝符号链接与非普通文件,单文件 5 MiB 上限;写入侧采用原子 rename 与文件锁,降低并发丢条目风险。
- DSH 生态是「一切皆插件」;SkillHub 等社区目录为独立站点,并非 DeepSeek / 幻方官方应用商店。
链接¶
- 社区目录页:https://www.skillhub.cn/plugins/ffyfox/dsh-zcode-project-memory
- 源码与完整说明:https://github.com/ffyfox/dsh-zcode-project-memory
经过上面的步骤,你可以在 DSH profile 里装上该插件,用对话完成「写入—跨会话召回—按需遗忘」,并把项目级知识留在 ~/.dsh 而不污染 git 工作树。