lovezi0/dsh-memory-palace
把 WorkBuddy 的文件式记忆系统移植进 [DeepSeek Harness](https://www.deepseek.com/harness/) —— 为 Harness 提供**跨会话持久化、人类可直接编辑的 Markdown 记忆**。
Listed
1
Memory
Bundle verified
Preview
What it does
Human-readable Markdown memory for DeepSeek Harness: user-level (~/.deepseek-harness/MEMORY.md) + workspace-level memory injected every turn, auto daily-log writing with distillation, bridges existing WorkBuddy/CodeBuddy memory dirs, memory_note / memory_note_user / memory_read tools with built-in dedup, and a bilingual settings page. Plain-text storage, no database.
Best for
- Users who want editable Markdown memory shared across sessions at both user and workspace levels.
- Workflows that need automatic daily logs, periodic distillation, deduplicated memory tools, or reuse of existing WorkBuddy/CodeBuddy memory directories.
Not ideal for
- Workflows that require database-backed, structured, or transactional memory rather than plain Markdown files.
- Privacy-sensitive sessions where persistent conversation-derived memory or per-turn prompt injection is inappropriate, unless those features are disabled or carefully configured.
README
dsh-memory-palace
把 WorkBuddy 的文件式记忆系统移植进 DeepSeek Harness —— 为 Harness 提供跨会话持久化、人类可直接编辑的 Markdown 记忆。
记忆就是普通文本文件,用记事本就能改。AI 每轮对话把它读进上下文,对话结束后把新内容追加进日志——不依赖任何私有格式、不落 JSON、不锁数据。
特性
-
人类可读的真源:记忆全部存储在 Markdown 文件中(
MEMORY.md+ 每日日志YYYY-MM-DD.md),任何编辑器可直接修改,数据永远属于你。 -
双层记忆:用户级(跨项目个人偏好,默认
~/.deepseek-harness/MEMORY.md)+ 工作区级(项目约定,默认<cwd>/.deepseek-harness/memory/)。 - 自动读写:每轮对话将记忆注入系统提示词(同步读盘,零异步竞态);每轮结束自动把轻量记录追加进当日日志(主路径由 agent 主动记,自动记录作兜底)。
-
日志蒸馏:超过保留天数(默认 30 天)的每日日志自动蒸馏进
MEMORY.md后删除,长期记忆持续沉淀。 -
WorkBuddy / CodeBuddy 桥接:项目已存在
.workbuddy/memory或.codebuddy/memory时直接读写这些目录,无需重复维护记忆。 -
记忆工具:
memory_note(项目级写入)、memory_note_user(用户级写入)、memory_read(聚合读取)、memory_delete(按内容删除,两阶段确认 + 原生确认弹窗),全部内置去重,防止重复追加。 - 设置页集成:DSH 设置中内置「记忆」面板(中英双语),所有配置均可图形化调整,无需改配置文件。
-
主动记忆(主路径,插件模式):注入「记忆公民指令」引导 agent 在「修复 bug/根因+绕过」「验证 build/test 通过」「完成里程碑/关键决策」「用户表达偏好/约束」时主动调
memory_note/memory_note_user落档——零额外 LLM 调用、模型上下文完整,对标 WorkBuddy 的”智能记一笔”手感。 -
智能模式(LLM 智能会话摘要,可切换):两种记忆模式在设置页「自动记录」卡片切换(默认插件模式,切换需重启 dsh)。智能模式下,每轮命中防闲聊闸门后由 harness 的
ctx.llm.stream()把本会话新增对话增量(按 session 事件 seq 断点)提炼成摘要——summary写每日日志(带[smart]标记)+ durable 事实写 MEMORY.md(- [smart] <fact>,按 user/project 分层去重);摘要模型默认复用当前会话,可在设置页固定;失败自动降级轻量条目不丢记忆。 - 轻量兜底记录(可开关):每轮结束对「有实质内容/工具/错误/明确记一笔」的轮次自动写轻量记录到每日日志(不调 LLM);纯闲聊/无价值轮次不写。
-
自动错误捕获(可开关):对话中出错时自动将「错误现象」按层级写入对应
MEMORY.md(用户级/项目级);「根因/方案」由 agent 按记忆公民指令主动记;可在设置中关闭,默认开、关闭无需重启。 -
标准 npm 插件包:经
dsh plugin一键装入 profile,cordis.patch.yml声明 bundle patch,零手动改动 harness。
记忆文件布局
~/.deepseek-harness/
└── MEMORY.md # 用户级记忆(跨项目个人偏好)
<项目根>/
├── .workbuddy/memory/ # 桥接 WorkBuddy 记忆(已存在时,按序优先)
│ ├── MEMORY.md # 项目级约定
│ └── 2026-08-16.md # 每日工作日志
├── .codebuddy/memory/ # 桥接 CodeBuddy 记忆(已存在时)
└── .deepseek-harness/memory/ # 回退目录(无 buddy 目录时自动创建)
├── MEMORY.md
└── 2026-08-16.md
桥接规则:
bridgeBuddyMemory开启时,只要项目里存在任一 buddy 记忆目录,就只读写这些目录,不再创建.deepseek-harness/memory/;全部不存在时才回退到 dsh 目录。buddy 目录绝不被主动创建。
工作原理
读取(每轮对话)——systemPrompt.section 同步读盘,把以下内容拼进系统提示词:
用户级 MEMORY.md
+ 工作区 MEMORY.md
+ 今日日志 YYYY-MM-DD.md
→ 注入 system prompt,让 AI 跨会话保持一致
写入(每轮结束)——监听 session/event 的 turn/end,经「防闲聊闸门」判定后异步追加:
turn/end ──► 轻量兜底闸门
│ 有工具调用 / 有错误 / agent 主动记 / 命中偏好·决策关键词 → 放行
│ 否则:跳过(不写、不调 LLM)
├─► 轻量条目写入 YYYY-MM-DD.md(全部目标目录;可关)
├─► 若本轮出错且开启「对话出错自动记录」→ 「错误现象」写入对应 MEMORY.md
└─► prune:超过 dailyLogRetentionDays 的日志蒸馏进 MEMORY.md 后删除
工具——AI 在对话中按需调用:
| 工具 | 层级 | 作用 |
|---|---|---|
memory_note |
项目级 | 把约定/偏好写入当前项目全部目标 MEMORY.md(去重) |
memory_note_user |
用户级 | 把跨项目偏好写入 ~/.deepseek-harness/MEMORY.md(去重) |
memory_read |
聚合 | 一次性读取用户级 + 项目级记忆、今日日志与最近 3 份历史日志 |
memory_delete |
用户级/项目级/每日级 | 按内容删除记忆条目(两阶段确认:先预览匹配位置与内容,用户确认后再删;删除动作经 harness 原生确认弹窗硬闸门,真人点允许才真正执行) |
安装
前置要求:已安装 DeepSeek Harness 及其 CLI(dsh 命令可用)。
方式一:直接通过 GitHub 安装(推荐,lib/ 构建产物已随仓库分发,装即用)
dsh plugin --profile web add github:lovezi0/dsh-memory-palace
# 锁定版本:dsh plugin --profile web add github:lovezi0/dsh-memory-palace#v1.1.4
方式二:clone 后本地安装(开发 / 修改源码场景)
git clone https://github.com/lovezi0/dsh-memory-palace.git
cd dsh-memory-palace
npm install
npm run build # src/ → lib/(纯复制,零外部构建依赖)
dsh plugin --profile web add . # 装入 web profile(profile 名按你的实际配置调整)
卸载:
dsh plugin --profile web remove dsh-memory-palace
配置
可在 DSH 设置 →「记忆」面板中调整,或通过 profile 配置注入:
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 总开关 | true |
总开关,关闭后不注入、不写入 |
| 用户级记忆路径 | ~/.deepseek-harness/MEMORY.md |
用户级记忆文件路径(支持 ~ 展开) |
| 工作区记忆目录 | .deepseek-harness/memory |
无 buddy 目录时回退的项目记忆目录 |
| 日志保留天数 | 30 |
每日日志保留天数,过期蒸馏进 MEMORY.md
|
| 用户级记忆字数上限 | 4000 |
注入系统提示词的用户级记忆长度上限(字符) |
| 工作区级记忆字数上限 | 3000 |
注入系统提示词的工作区级记忆长度上限(字符) |
| 桥接 Buddy 记忆 | true |
检测并直接读写 WorkBuddy / CodeBuddy 项目记忆目录 |
| Buddy 记忆目录列表 | [".workbuddy/memory", ".codebuddy/memory"] |
要桥接的 buddy 目录列表(按优先级,已存在的全部同步写入) |
自动记录(设置页「记忆 → 自动记录」卡片)
| 配置项 | 默认值 | 说明 |
|---|---|---|
| 记忆模式 | plugin |
两种互斥模式:plugin=记忆公民指令+轮次轻量+错误捕获(默认);smart=LLM 智能会话摘要(summary→每日日志 + durable→MEMORY.md,带 [smart] 标记)。切换需重启 dsh 生效
|
| 轮次结束自动记录 | true |
插件模式下:它是「agent 主动记忆」主路径失效时的安全网,保证实质工作不丢,代价是只留原始文本、不做总结。智能模式下该开关仍为总闸门 |
| 摘要模型 |
""(空=复用当前会话模型) |
智能模式专用:留空自动复用当前会话 provider/model;填 provider/model(如 deepseek/deepseek-chat)固定廉价模型省 token |
| 对话出错自动记录 | true |
插件模式下:自动捕获 in-session 错误并写入「错误现象」到对应 MEMORY.md;「根因/方案」由 agent 主动记;默认开启,关闭无需重启 dsh。智能模式下错误由 LLM 摘要统一提炼 |
设置保存(v1.1.4 起):设置页保存已真正落盘——插件注册了自有同源 route
/memory-palace/api(服务端ctx.webServer),前端 fetch 该 route、服务端直写 settings-file(settings.yaml出现memory-palace:段),不再依赖 dsh 的settingsScope(非 loopback 连接下其set()是 no-op)与 apiproxy 的 allowlist。保存无需重启即热生效;切换记忆模式仍按提示重启 dsh 更稳妥。历史方案(仍可用作兜底):直接在 profile 的
cordis.patch.yml注入配置(id-targeted config override,与插件 bundle insert 的 id 一致):- id: memory-palace name: 'dsh-memory-palace' config: memoryMode: smart summaryModel: ''修改后重启 dsh 生效。
开发
目录结构、构建与测试、技术要点见 DEVELOPMENT.md。
版本历史
-
1.1.4 — 智能模式摘要上线(LLM 智能会话摘要,与插件模式可切换):摘要调用参考 dsh-sideband 加固(指令入
system参数、AbortSignal.timeout超时、finish.kind细化);修复设置-记忆保存不生效(自有同源 route/memory-palace/api直写 settings-file,参考 dsh-better-sidebar,不动 harness);修复长工具型任务不写记忆(turnBuffer 溢出误关闸门:上限 6k→30k、溢出保留尾部、闸门改 session 增量兜底) -
1.1.2 — 修复设置页「保存后自动切回插件模式」(save() 不再用保存前旧快照重置 draft);说明 dsh web 端(非 loopback 连接)设置页保存为 memory 模式不落盘,关键配置请经 profile
cordis.patch.yml注入(见配置节) -
1.1.1 — 每日日志格式简化:文件头写当天日期(
# YYYY-MM-DD),条目不再每条带时间戳([ERROR]/[smart]作条目前缀;旧文件自动补头) -
1.1.0 — 新增「智能模式」(LLM 智能会话摘要):与插件模式在设置页切换、默认插件模式;智能模式经
session.events增量提炼 summary→每日日志 + durable→MEMORY.md(带[smart]标记);摘要模型默认复用当前会话、可固定;失败降级轻量条目不丢记忆;切换需重启 dsh - 1.0.0 — 防闲聊闸门 / 记忆公民指令 / 新增删除记忆工具
- outdated(0.x) — 双层 Markdown 记忆读写 / 设置页集成等 0.x 历史,见 CHANGELOG.md
废弃方案
插件侧 LLM 自动摘要(ctx.llm.stream() 路线)曾在 v0.7.1 因 4 个契约/时机坑废弃;v1.1.0 已重新论证并以「智能模式」可选形态复活——经 session.events / deriveEventMessage / requestHeader()?.config 根除旧坑,默认仍为插件模式。见 废弃方案:为什么不用 LLM 自动摘要。
参考与致谢
v1.1 的智能模式与设置保存链路,深度参考了以下两个开源项目(本包实现为各自机制的简化落地,不含其完整功能):
-
dsh-better-sidebar(omdsh-dev)——设置真保存机制:插件自带同源 HTTP route + 服务端
settings直写 settings-file,绕开 dshsettingsScope(非 loopback 下set()no-op)与 apiproxy allowlist 两层限制,全程无需改动 harness。 -
dsh-sideband(ishuowang)——LLM 会话摘要的调用范式:摘要指令放
system参数、AbortSignal.timeout超时保护、finish.kind细分(error/aborted/max-tokens)、流循环内中断检查。
License
Frequently Asked QuestionsFAQ
Use the verified command dsh plugin --profile default add github:lovezi0/dsh-memory-palace in a DSH-enabled shell. The command resolves the public package metadata and keeps the plugin attached to the catalog identity shown on this page.
Compatibility follows the bundle and profile status shown above. If a profile is not detected, keep the plugin disabled there and check the repository documentation before enabling it in production.
The GitHub link and activity metadata are the source of truth for releases and maintenance. Revisit this page after a new release to confirm the catalog has observed the latest version.