前言¶
在 DeepSeek Harness(DSH)里跑智能体,常见做法是用对话提醒它「别忘了还有这几步」。新会话一开,同样的清单往往要再说一遍;就算同一会话里,模型也未必每轮都记得当前进度。DSH 的生态思路是「一切皆插件」:能力通过插件挂到 Harness 上,社区目录在 SkillHub 等站点展示,与 DeepSeek / 幻方无官方从属关系。
下面介绍维护者 manny333 的客户端插件 dsh-checklists(GitHub:manny333/dsh-checklists)。它要解决的不是「有没有一张清单」,而是不必每个会话重复口述清单:清单在会话内创建一次,每轮组装提示词时注入紧凑摘要,随工作更新;右侧边栏另有只读页签与之一致。
这是什么¶
dsh-checklists 是面向 DSH 的 Session-scoped 清单插件:智能体把任务维护成树形结构,模型在每次 prompt 组装时总能看到各清单的 digest,侧边栏 Checklist 页签每约 2 秒轮询镜像同一棵树(状态只读)。分类上属于客户端插件(dsh.client 注入侧边栏等)。
若智能体漏勾选项,你可以在聊天里指出,由它调用工具修正。
工作方式概览¶
按 README 描述的顺序,流程可以概括为:
- 智能体创建清单(
checklist_create),可选用模板。 - 每次组装提示词时,为每张清单注入一段紧凑 digest,模型始终知道待办情况。
- 完成项时由智能体标记(
checklist_check)。 - 侧边栏页签展示同一棵树,只读,挂载后约每 2 秒刷新。
智能体工具¶
清单项是纯字符串;每级嵌套在行首加两个空格。例如:
["Deploy to staging", " Smoke tests", " Rollback plan"]
| 工具 | 作用 |
|---|---|
checklist_create |
新建清单,可从模板(release、feature、debug、review)创建 |
checklist_add |
向已有清单追加项,可挂在指定项下 |
checklist_check |
将一项或多项设为 todo · doing · done · blocked |
checklist_next |
返回下一个可执行的叶子项、路径及剩余数量 |
checklist_edit |
修改项文案(不改状态) |
checklist_list |
带 id 与状态的完整树(digest 被截断时用) |
checklist_delete |
按 id 或精确标题删除清单 |
checklist_remove_item |
删除一项及其子树 |
checklist_rename |
重命名清单;会话内标题唯一 |
checklist_template_save |
将当前清单存为可复用模板 |
安装与启用¶
官方从目录安装(README 原文,web profile):
dsh plugin --profile web add dsh-checklists
本地构建或 tarball 安装示例(README 中的 dev profile 与版本号):
npm install
npm run build
npm pack
dsh plugin --profile dev add ./dsh-checklists-0.6.0.tgz
dsh --profile dev --dump-config # the tool-checklist row should appear
建议先在测试 profile 安装。web、headless 与桌面应用的 desktop profile 彼此独立,装在哪套 profile 就只在那套生效。
插件以当前 DSH 进程权限运行;安装前请自行查看 仓库源码 与 MIT 许可证,确认符合你的安全与合规要求。
配置¶
在对应 profile 的 cordis.patch.yml 里覆盖插件项默认值(插件 id 为 tool-checklist,name 为 dsh-checklists):
- id: tool-checklist
name: dsh-checklists
config:
maxDigestLines: 12 # lines of the injected digest
maxItemsPerList: 200 # per-list item cap
pruneDays: 14 # prune untouched sessions after N days (0 = never)
nudge: steer # steer | observe | off — see "Turn-end gate"
# storageRoot: "D:/data/dsh-checklists"
# templates:
# my-flow: ["Step 1", " Sub-step", "Step 2"]
数据落盘¶
数据目录(包名是 dsh-checklists,存储目录前缀仍为 dsh-checklist):
$DSH_HOME/storages/dsh-checklist/
├─ sessions/<sessionId>.json one document per session
└─ templates.json templates shared across sessions
写入采用临时文件加 rename,按会话串行;文档损坏时会降级为空清单而不是整轮失败。
侧边栏 Checklist 页签¶
打开右侧边栏,在 guide(+)里选择 Checklist。
| 操作 | 方式 |
|---|---|
| 折叠 | 点击清单标题,或带子项的 ▾ |
| 新清单出现时 | 其余清单自动折叠,新清单展开 |
| 隐藏已完成 | 有完成项时显示「Hide done」 |
| 复制为 Markdown | 「Copy」,可贴到 PR 或 issue |
| 编辑项文案 | 双击文字;Enter 保存,Esc 取消 |
项的状态只能由智能体改;页签不能勾选完成。唯一写路径是文案编辑,经 POST /dsh-checklist/item 且带 expectedText;若与智能体刚改过的内容冲突,宿主返回 409,避免覆盖。
相关 HTTP 路由(只读状态为 no-store):
| 路由 | 方法 | 用途 |
|---|---|---|
/dsh-checklist/state |
GET | 单会话状态 |
/dsh-checklist/item |
POST | 带冲突保护的文案编辑 |
/dsh-checklist/nudge |
GET | 近期 turn-end gate 决策 |
/dsh-checklist/client-probe |
GET | 客户端加载诊断 |
Turn-end gate(回合结束提醒)¶
清单只有在与事实一致时才有用。回合即将结束时,插件会检查三件事:本回合是否执行了会改动工作区的工具(如 bash、edit、write 等);是否完全未写清单;是否仍有 doing 项。三者同时成立时,回合结束前会给智能体一条短提示,要求用 checklist_check 更新仍标为 doing 的项并说明依据,或明确未做完则保持状态。
nudge: steer 为上述打断式提示;observe 只记录不打断;off 关闭。可通过 GET /dsh-checklist/nudge 查看近期记录。
界面语言与提示词语言¶
面板跟随 Harness 的 locale:es 开头为西班牙语,其余为英语;locale 服务不可用则回退英语。面向模型的工具描述、结果与 digest 固定为英语,作为 prompt 材料不翻译。
典型用法(可复现思路)¶
- 在会话开始让智能体
checklist_create,例如从feature模板拉一份发布前检查项。 - 开发过程中用
checklist_add补子步骤,用checklist_check把当前项标为doing/done/blocked。 - 需要「下一步做什么」时调用
checklist_next。 - 你在侧边栏看树形进度;若与聊天里实际进度不一致,在对话里说明,由智能体更新状态。
- 稳定流程可用
checklist_template_save存模板,下一会话再checklist_create引用。
适用场景与限制¶
适合:多步骤功能开发、发布检查、调试与 review 等需要同一会话内持续对齐进度的场景;希望模型每轮自动看到待办摘要、人眼在侧边栏核对。
注意:
- 插件随 DSH 进程权限访问工作区与存储;安装前审源码与 MIT 许可。
- README 列出的已知限制:无拖拽排序;无「谁何时勾选」历史;面板不能新增清单项(仅智能体与文案双击编辑);文档格式
version: 1,变更需迁移;页签挂载期间约 2 秒轮询(路由只读,属设计选择)。 - Node 引擎要求见包声明:
^22.19.0 || >=24.0.0。
结尾¶
dsh-checklists 把清单绑在会话上:智能体维护树形任务,模型每轮读 digest,侧边栏只读同步。若你已在用 DSH 并希望减少「每轮重复提醒清单」的成本,可按上文命令在对应 profile 安装,并从 cordis.patch.yml 按需调整 digest 行数、nudge 等行为。