前言¶
在 DeepSeek Harness(DSH)里跑编码智能体时,会话内的上下文会随轮次结束而消散;若团队里同时用 oh-my-pi(omp)做同类工作,两边往往各自沉淀「教训」,却读不到对方写进磁盘的那一份。结果是同一仓库里重复踩坑,或 DSH 侧根本不知道 omp 已在 learned.md 里记过什么。
社区插件 omp-memory-dsh(维护者 meisijiya,分类:记忆)的定位,是在 DSH 侧适配 omp 的项目级记忆:向 system prompt 注入 omp 已有的摘要与教训窗口,并提供 learn 把新教训写回同一份 learned.md,同时用「零删除」与默认拒绝封顶淘汰等约束,降低跨 agent 写同一文件时的风险。
这是什么¶
omp-memory-dsh 把 omp 的项目级记忆目录接入 DSH,使 DSH 与 omp 在同一项目键下共用 memory_summary.md 与 learned.md 所承载的教训沉淀。维护者为 meisijiya;社区目录见 SkillHub 条目(当前展示版本 v0.2.0)。源码与发行包托管在 GitHub:meisijiya/omp-memory-dsh。
它不替代 omp 的 autolearn、managed-skills 或 config.yml,也不改写 omp 除 learned.md 以外的记忆产物。
核心功能¶
下面介绍文档中已说明、且与「跨 agent 共享 lessons、零删除红线」一致的能力。
读侧:注入记忆窗口¶
- 会话首次装配 system prompt 时,按项目键读取
memory_summary.md与learned.md。 - 摘要与教训共享约 5000 token 预算;
learned.md采用头尾窗口(约 60% / 40%),中间省略并带截断提示,避免半条 bullet。 - 内容注入到
interpolate: false的 section,并附带 omp 原版规则说明;项目键在会话开始时冻结,避免工作目录变化导致写到别的项目目录。
写侧:learn 与 memory_read¶
learn:把一条持久教训写入本项目共享的learned.md(必填memory,可选context)。写入前经过内容检查、脱敏与长度归一、目录存在性、文件锁、撕裂守卫、封顶策略、写前 CAS 指纹与原子写等闸门;失败会抛错并说明原因(例如默认evictionPolicy: "refuse"下,若写入会触发 omp 的 100 条封顶淘汰,则拒绝写入且文件不变)。memory_read:按行分页只读完整记忆(offset、limit,单次行数受maxPageLines限制),用于查看注入窗口未覆盖的段落。
omp 侧的 learn / autolearn 行为不受本插件影响;两边读取的是同一文件路径下的内容(默认根目录见下文配置)。
安全与「零删除」约束¶
插件会写本地文件系统,且目标文件也由 omp 使用。文档强调的默认保守策略包括:
- 源码层面不调用删除类 API(
rm/unlink/truncate/rmdir等),并由测试扫描约束。 - 唯一可写目标为
join(root, <项目键>, "learned.md");MEMORY.md、memory_summary.md、raw_memories.md、rollout_summaries/、skills/、config.yml等保持只读或不触碰。 - 项目记忆目录不存在时拒绝写入,不替 omp 静默建目录。
writeEnabled: false时对记忆目录零写;enabled: false时不注册、不碰文件系统。
安装与启用¶
安装前请自行审阅仓库源码与许可证(SkillHub 与 GitHub 上的 MIT 等信息以页面为准)。插件以当前 dsh 进程权限运行,能读写你配置的记忆根目录及 sidecar 账本路径。
环境要求(文档声明)¶
| 组件 | 要求 |
|---|---|
| DeepSeek Harness | >=0.2.1-rc.1 <0.3.0-0 |
| Node.js | >=22.6.0 |
| omp (oh-my-pi) | v18.12.2 及以后 |
安装命令¶
推荐从预构建 tarball 安装(无需本地构建):
dsh plugin --profile web add https://github.com/meisijiya/omp-memory-dsh/releases/download/v0.2.0/omp-memory-dsh-0.2.0.tgz
或从 GitHub 源码安装(会执行 prepare 自动构建):
dsh plugin --profile web add github:meisijiya/omp-memory-dsh
本包为 DSH bundle,声明了 dsh.bundle.patch,dsh plugin add 后一般会自动生效。装完后需重启 DSH(插件在进程启动时装载)。
若手动挂到 profile,可在 cordis.patch.yml 中插入(包名而非绝对路径):
- insert:
- id: omp-memory
name: 'omp-memory-dsh'
config:
enabled: true
evictionPolicy: 'refuse'
配置要点¶
所有项均有默认值;不配置也可运行。Linux 上若 omp 使用 $XDG_STATE_HOME/omp/memories,而插件默认为 ~/.omp/agent/memories,须显式设置 root。
| 配置项 | 默认 | 说明 |
|---|---|---|
enabled |
true |
总开关 |
inject |
true |
是否向 system prompt 注入记忆 |
root |
"" → ~/.omp/agent/memories |
记忆根目录 |
writeEnabled |
true |
false 时只读注入、零写 |
evictionPolicy |
"refuse" |
100 条封顶时是否允许淘汰最旧教训;可与 omp 对齐时用 "omp-parity" |
sectionOrder |
950 |
注入 section 排序 |
lockTimeoutMs |
2000 |
写锁等待超时 |
requireApproval |
false |
是否走审批;无审批服务时不应开启 |
ledger |
true |
sidecar 溯源账本(~/.dsh/omp-memory-dsh/ledger/) |
maxPageLines |
200 |
memory_read 单次最大行数 |
典型用法¶
1. 与 omp 并行使用同一仓库¶
- 确保 omp 已在该项目下生成记忆目录(否则 DSH 的
learn会拒绝写入)。 - 在 DSH profile 中安装并启用插件;Linux 按需设置
root。 - 重启 DSH 后开启新会话:应能在 system prompt 中看到来自
memory_summary.md/learned.md的注入片段。 - 在 DSH 中调用
learn写入教训后,可在 omp 同一项目键下验证是否读到相同内容(文档描述为双向一致性验证场景)。
2. 只读注入、禁止 DSH 写入¶
将 writeEnabled 设为 false,保留注入,避免 DSH 改动 learned.md。
3. 查看被窗口省略的教训¶
在会话中调用 memory_read,例如从偏移 0 起分页读取(具体参数以工具 schema 为准):
memory_read(offset=0, limit=50)
适用场景与注意¶
适合谁:已在本地使用 omp 项目级记忆、又希望在 DSH 中复用同一套 lessons,且能接受「DSH 默认不触发 omp 的静默淘汰」这一护栏的团队或个人。
需要注意:
- 只做项目级记忆,不覆盖 omp 的 managed-skills 与 auto-learn 自进化。
- omp 的 100 条教训封顶是上游规则;本插件默认
refuse仅保证 DSH 不加速淘汰,omp 自身写入仍可能淘汰旧条。 - DSH 写侧比 omp 多一层内容护栏(如拒收指令式内容与部分凭据形状),同一条内容可能出现「omp 能写、DSH 不能写」的分叉;读侧为保持字节一致,对 omp 已写入的明文凭据仍可能原样注入。
- 注入是预算窗口,不是全文;大项目需配合
memory_read。 - 安装插件前请检查源码与许可证;社区目录(如 SkillHub)为独立站点,与 DeepSeek / 幻方无官方从属关系, listing 也不等于安全审计。
结尾¶
omp-memory-dsh 解决的是 DSH 与 omp 在同一项目里「教训各写各的、读不到彼此」的割裂:读侧对齐 omp 的注入预算与文件布局,写侧只动 learned.md,并用零删除设计与默认拒绝封顶淘汰,把跨 agent 共写同一记忆文件的风险压到可预期的范围。