为 DeepSeek Harness agent 提供持久化专注板:在会话工作区维护目标、约束与决策笔记,跨压缩与会话存活,支持自动注入上下文、清空归档与可选 Web 面板。
安装
# GitHub 源码(首次需按提示配置 allowBuilds 构建授权后重试)
dsh plugin --profile web add github:863683348/dsh-plugin-focus
装任何插件都等于在你的机器上跑第三方代码,权限和你本人一样大——能读你的文件、用你的凭据、访问网络,工具审批管不到它。GitHub 来源的插件还会在安装时执行构建脚本。请只安装可信来源,并尽量锁定 commit(github:owner/repo#sha)。
README
一个真实可安装的 DSH 插件(DeepSeek Harness / Cordis profile bundle):给 agent 一个 focus 工具和一块持久化专注板(默认 .dsh/focus.md,位于会话工作区),钉住目标、硬约束、已做的决定——跨上下文压缩、跨同工作区的新会话都能存活。todo 列表管"下一步做什么";专注板管"为什么做、不能违背什么"。
功能
| 功能 | 状态 |
|---|---|
focus 工具 —— set / get / append / clear |
✅ 稳定 |
提示词指引段落(focus:instructions) |
✅ 稳定 |
| 自动注入 —— 每轮开始及板子变化时自动把专注板放回模型上下文 | ✅ 稳定 |
clear 归档 —— 清空时旧板子归档到 .dsh/focus.md.bak(可累积) |
✅ 稳定 |
focusBoard 会话投影(供 UI 读取) |
✅ 稳定 |
| 只读 Web 面板(输入框上方 dock) | 🧪 实验性(手写 loader 格式 client bundle,未在运行中的 web 实例上验证) |
工作原理
- 板子是纯文本、追加友好的文件;条目带时间戳按序排列;
get最新在前、按字符上限截断(渲染永不删文件)。 - 单个 Cordis 插件、两面一体:宿主面(
lib/index.js)注册工具/投影/自动注入,浏览器面(lib/client.js)渲染面板;同一组合行通过包的dsh.bundle+dsh.clientmanifest 同时覆盖两面。 - 所有文件访问走宿主
ctx.fs服务,且每个解析出的路径都做会话工作区 containment 校验——板子永远逃不出工作区。 - 自动注入复刻内置
dsh-time-context机制:agent/pre-stepwaterfall 监听器追加一条携带板子文本的 plugin snapshot 消息(每轮 step 1,以及中途板子文本变化时)。会话恢复后第一步就会把板子带回来。
安装
包声明了 "dsh": { "bundle": { "patch": "./cordis.patch.yml" } },走 DSH 官方插件管理:
# 从本地目录安装(等价于 pnpm add <路径> + 自动 reconcile bundles 列表)
dsh plugin --profile <profile名> add /path/to/dsh-plugin-focus
# 或发布到 npm 后
dsh plugin --profile <profile名> add dsh-plugin-focus
重启 DSH。focus 工具宿主级注册;web profile 的界面上会出现只读面板。
备选:只挂到某个 agent preset
- 复制内置 preset 到
$DSH_HOME/.agent-presets/<id>/(不要改部署自带的 preset——升级会被覆盖)。 - 在
agent.cordis.yml追加:
- id: focus
name: 'dsh-plugin-focus'
config:
file: '.dsh/focus.md'
- 确保
dsh-plugin-focus可解析(装在 profile 的node_modules或模块回退目录)。
模型侧用法
| action | 参数 | 行为 |
|---|---|---|
set |
note(必填) |
追加一条"当前焦点/约束" |
append |
note(必填) |
追加日志条目(决定、发现、反转) |
get |
— | 读整块板(最新在前,截断并注明省略数) |
clear |
— | 清空板子;旧板子归档到归档文件 |
插件还会注入 focus:instructions 提示词段落(可用 personaSection: false 关闭),并自动把板子放回上下文(可用 autoInject: false 关闭)。
配置
组合行 config 全部可选:
| 键 | 默认 | 说明 |
|---|---|---|
file |
.dsh/focus.md |
板文件路径,相对会话工作区;禁止逃逸工作区(运行时强制) |
archiveFile |
.dsh/focus.md.bak |
clear 的归档路径 |
archive |
true |
clear 是否先归档 |
maxEntries |
60 |
磁盘最多保留条目数(最旧丢弃) |
maxChars |
8000 |
get / 自动注入的渲染上限(仅视图截断) |
autoInject |
true |
每轮开始/板子变化时自动注入上下文 |
personaSection |
true |
注册提示词指引段落 |
sectionOrder |
5 |
提示词段落顺序(persona 为 0,升序) |
文件格式
# Focus Board
<!-- dsh-plugin-focus v1 -->
## [2026-08-14T23:12:00.000Z] set
<note,可多行>
## [2026-08-14T23:13:00.000Z] append
<另一条>
清空时向归档文件追加一段带清空时间的归档块,历史得以累积。
设计
- 纯逻辑与运行时分离:
lib/board.js零 DSH/Cordis 依赖(解析/渲染/变更/归档),可独立单测;lib/index.js才是 Cordis 插件。 - 安全:路径经
ctx.fs解析,并用ctx.fs.contains对会话工作区做 containment 校验。 - 生命周期:工具、投影、注入监听、提示词段落全部由 Cordis scope 管理,插件停止/移除自动清理。
- 两面一行:宿主加载
.,浏览器加载./client(经dsh.clientmanifest);focusBoard会话投影(事件focus/write)是未来任何 UI 的数据接缝,可用useProjection('focusBoard')读取。
测试
node --test test/
卸载
dsh plugin --profile <profile名> remove dsh-plugin-focus
Roadmap
- 在运行中的 web 实例上验证面板并迭代 slot UI。
- 面板直接提供编辑/清空操作。
- 可选:把板子挂到
turn/start事件上获得显式快照语义。
License
MIT
常见问题
- 新会话里板子是空的——之前的板子去哪了? 板子按工作区(workspace)存储,不按会话:如果该会话工作区已有
.dsh/focus.md,focus set会接着读已有条目。每个 agent 会话按自己的session.header.cwd解析板子路径。 - 自动注入费 token 吗? 板子每轮开始注入一次(中途仅在文本变化时再次注入),并以
maxChars截断;空板不注入任何内容。 - 板子能逃出我的工作区吗? 不能。所有路径都经
ctx.fs解析,并强制做会话工作区 containment 校验;配置了工作区外的路径会直接报错。 - Web 面板为什么标记为实验性? client bundle 是无打包器的手写 loader 格式,尚未在运行中的 web 实例上验证。
- 如何发布到 npm? 执行
npm publish(已内置prepublishOnly测试)。之后dsh plugin add dsh-plugin-focus即可免构建安装。
链接
同类插件
volcengine/OpenViking#examples/dsh-memory-plugin★ 28649
面向 DeepSeek Harness 的 OpenViking 记忆与上下文插件:pre-step 自动召回与画像注入、会话捕获、`viking://` URI 防护,以及对接 OpenViking 服务端的 recall/write 记忆工具。
vectorize-io/hindsight#coding-agents★ 20034
Hindsight:会学习的 Agent 长期记忆系统,自动召回/保存、知识页、深度反思与按仓库隔离的记忆银行。
dsh-engramory★ 154
把 Engramory 策展式记忆纪律做成可安装插件([npm: dsh-engramory](https://www.npmjs.com/package/dsh-engramory)):通过 `ctx.tools.guard()` 对 `MEMORY.md` 索引施加确定性的 200 行 / 25KB 上限(增长即拒、缩小的重写一律放行),并把协议注册为运行时 skill。记忆库是纯 markdown、一条事实一个文件,与 Claude Code、Codex、Kiro、OpenClaw 共用。
bowenliang123/dsh-context★ 107
上下文洞察面板:一眼看清模型上下文窗口的组成与变化——构成对照窗口大小、按请求历史趋势、压缩/注入事件、消息级 token 统计。
Co-Engram/Co-Engram★ 68
自进化团队记忆,以纯 Markdown 存于 Git:原生 Cordis 插件注册 38 个裸名记忆工具,并按每次组装动态注入 prompt-signals 段;含 RPE 强化、衰减与睡眠巩固;与 Claude Code(MCP)、OpenClaw 宿主共享同一数据仓;已对 DSH 0.1.0-rc.6 实测。
omdsh-dev/dsh-mnemon★ 55
由 Mnemon 驱动的 DeepSeek Harness(DSH)跨 Agent、本地优先的持久记忆插件。它可在支持 Mnemon 的 Agent 之间共享长期记忆,并提供运行时记忆、可检索项目档案、语义召回、知识图谱和 Sidebar UI。