ディレクトリに戻る

dsh-global-todo

キュレーションリスト掲載メンテナンス: 活発

lugabeeee/dsh-global-todo

Cross-session todo list for DeepSeek Harness: one JSON file a person and an agent both write to, with step plans that ship as a numbered hand-off, session read-back, and a human confirmation before an agent says done.

GitHub で見るホームページ
$ dsh plugin add dsh-global-todo

インストール方法

dsh には中央のインストールコマンドはありません。このプラグインのエントリ(README に記載)をプロファイルまたはパッチ設定に追加し、再起動します。

インストールの仕組み

11

スター

5

フォーク

JavaScript

言語

MIT

ライセンス

2026-10-14

作成日

2026-11-04

最終プッシュ

README

中文 · English

npm listed on dsh.works dsh-xray 能力卡片

dsh-global-todo · 全局待办 全局待办图标:一张打了勾、并有箭头离开的清单卡片

一份跨会话的待办清单:一个属于你的文件,你和 Agent 读写同一份,一键交给某个对话继续干。

三件会话级计划做不到的事——第一件是这个插件最要紧的一条:

  1. Agent 说「做完了」不算数,两个入口都只是声明。它自己在工具里报完成是一种,交给的会话干净收尾、 宿主替它收尾是另一种;两条路都只把记录送进待确认。人点「确认完成」才算完成,点「退回清单」 就回到清单里、完成记录一并清掉。会话级计划没人问这一句:Agent 把表一改,事情就算结束了。
  2. 一个 JSON 文件就是全部。能 cat、能 diff、能提交进仓库、能放 NAS、换机带走——不藏在任何会话日志里。
  3. 交接是一个按钮,不是一段话。四种模式、会先检查工作目录,待办自己的步骤会作为编号计划一起交出去。

面板实况:列表、详情、步骤、待确认、收件箱、提醒、批量选择

dsh plugin add dsh-global-todo

在线主页(22 秒排版演示)· English · 5 分钟上手 · 常见问题 · 每个条件状态都有基线图 · 设计说明 · 交给 Superagent


它补的是哪个缺口

DSH 自带的 todo_write 属于某一个 agent 会话:整表替换、三个状态、会话一关计划就翻篇。 社区里解决这件事的插件分成两派:一派擅长把活派给 Agent(自动续跑、绑定会话), 一派能收真正的文档附件。这个插件把两件事放在同一条记录上:

自带 todo_write dsh-global-todo
归属 一个 agent 会话 你——跨会话、跨工作区
写入方式 整表替换 逐字段,人和 Agent 都能写
加入时间 不记录 createdAt 只写一次,处处可见
上下文 标题 + 状态 描述 + 文档与地址
交给 Agent 无 一键:复用已绑定会话,或新开一个
标成完成 Agent 改了就算 进「待确认」,人点头才算完成
存储 会话事件日志 一个 JSON 文件,能 cat、能手改、能 diff、能备份

完成确认:没有一条记录能自己变成「完成」

这是它最容易被记住的一条,也是它和所有「让 Agent 自己报进度」的清单最不一样的地方: Agent 说「做完了」,只是它说了这句话。 记录写完是 done,同时带上 review: { pending: true };行上有「待确认」徽标,顶部有带计数的筛选,直到人回答为止。

两个入口都受同一条规则管,因为它们同样只是声明:

「做完了」从哪来 记录变成 谁来回答
Agent 调 global_todo_done,或把状态改成 done done + 待确认 人
交给的会话干净收尾,宿主自动收尾(turn/end 是 completed) done + 待确认 人
你自己在面板里点完成 done 已经是人
  • 回答只有两个:「确认完成」清掉标记,动态里记下是谁确认的;「退回清单」回到 open, 清空 doneAt 与完成记录,动态里加一条 reopened。标题、描述、步骤、附件、进展一条不删。
  • 自动收尾也走这个门。宿主替 Agent 写的那份完成记录本来就更薄——只有最后一段回复和这一轮 改过的文件——它更没理由自己算数。
  • 只有干净收尾才是候选:error、aborted、interrupted、max-tokens 一律留着未完成。 一轮失败的任务挂着「完成」标签,是让整份清单不可信的唯一起点。

规则在代码里只有一个实现:completeTodo、applyPatch 和状态改写共用 lib/model.js 里那个 by === 'agent' 判断,面板和十一个工具都走它。

0.9 / 0.10 补了什么(以及再往前两版)

五件这两份 README 一直没讲的能力:会话回读与原话是 0.9 的,Markdown 与本周报告是 0.10 的, 步骤是 0.8 的。每一个都改变了记录能装什么,或者改变了事后能拿它做什么。 (还有一件是 0.7 的「待确认」,它现在就是开头那条规则,不在这里当新功能讲。)

步骤:待办里的一份计划

一条待办最多 20 个步骤、每步 200 字(lib/model.js 的 LIMITS)。步骤是 { text, done }—— 一条工作里的一行,不是有自己 id 和状态的子任务。

  • 加:新增表单的「更多字段」→ 步骤,一行一步。
  • 勾:详情里每步一个勾选框;行上显示「步骤 2/5」。
  • 交出去:派发提示词会把步骤编号,已完成的加 [已完成] 前缀。
  • 导出:Markdown 里写成缩进的 - [ ],导入时读回来。

原话:这条是从哪句话来的

evidence 是抓取时那条待办来自的原话,逐字引用,最多 300 字。global_todo_capture 会向模型要它, global_todo_add 也收,详情里以引用块显示在「原话」下面;你自己敲的条目没有这一项。

它只为一件事存在:没有出处的一次抓取,过几天看起来就像一句观点。Markdown 导出里也有这一行(原话:)。

会话回读

派发是在另一个对话里开工,所以详情要能回答「它说了什么」,不用切过去。 GET /api/global-todo/session?id= 返回 alive、dir 和最后一条 assistant 消息的 tail; 详情里就是「会话回读」:在跑 / 已休眠、最后一句,以及一个打开该对话的按钮。

tail 有上限、只在内存里:200 个会话、每个 400 字,来自每条 assistant/message。不落盘,宿主一重启就忘。 查不到 tail 是正常情况——这个进程没见那个对话说过话。

Markdown 进与出

JSON 导出是往返格式;Markdown 是拿来读、diff、手改的那份:

- [ ] 标题
      优先级: 高 · 截止: 2026-10-21T18:00 · 标签: 发布, 文档
      原话: …
      描述: 第一行
      - [x] 一步
方向 入口 行为
出 更多操作 → 导出 Markdown,或 GET /export?format=md 按「未完成 / 已完成 / 已归档」分组,元数据缩进在每条下面
入 更多操作 → 导入(选 .md),或 POST /import { markdown } 走正常 create 新建;Markdown 没有 id,所以永远不会覆盖已有记录

解析是容错的:不认识的行直接忽略,日期解析失败就丢掉那一项,整份文件里没有一行 - [ ] 会明确报错。 字段标注固定是中文(优先级 / 截止 / 标签 / 原话 / 描述 / 附件 / #),导入按同一套读。

本周报告

更多操作 → 本周报告(GET /report?days=7)回答「这一周动了什么、有没有落到代码上」。 全部从完成记录推出来,不存任何东西。

字段 含义
finished 窗口内完成的条目,最新在前,带完成者和说明
sessions 这些完成来自多少个不同的对话
created 窗口内新增的条数
pendingReview 已完成但还没人回答的条数
files 触及的文件,按次数排序——列 12 个,fileCount 是总数

days 超过 90 会被压到 90;缺省或非正数按 7 算。

截图

面板:统计胶囊、按紧迫度分组、逾期行有强调

展开一条:就地编辑、附件带「打开 / 复制路径」、动态轨迹

设置:分组字段、说明写在标签下方、底部一行保存

手机宽度 390×844:44px 触摸目标、筛选可横滑、行内动作收成图标

每个「只在特定情况下出现」的面板状态都有一张固定基线图,由同一套预览渲染、同一支工具拍摄,改样式时可以直接对比:

状态 图片
清单为空 panel-empty.png
筛选无结果 panel-filtered.png
收件箱(待确认) panel-inbox.png
待确认(Agent 完成) panel-review.png
到点提醒 panel-reminders.png
批量选择 panel-select.png

图都由 npm run screenshots(内部串起 npm run preview)生成:先把真实的客户端半区渲染成静态 HTML(不依赖宿主、零依赖),再以 1280×720 拍进 docs/screenshots/。Playwright 不是依赖——工具 借的是 DSH profile 里已经装好的那份,或 DSH_PLAYWRIGHT 指向的那份。

手机档同一支工具拍:npm run screenshots:mobile 先按 390×844 渲染同一棵组件(夹具会把面板的 实测宽度答成 390,所以窄屏分支是真的被执行,不是把桌面布局缩小),再拍进 docs/screenshots/mobile/。

每张图显示什么状态、什么时候重新生成,见 docs/screenshots/README.md。

环境要求

GitHub で README 全文を読む →

DSH Plugins は DeepSeek Harness プラグインの独立したコミュニティ ディレクトリです。DeepSeek との提携・公認はありません。サードパーティ製プラグインはセキュリティ監査を受けていません。インストール前にソースコードをご確認ください。

DeepSeek Harnessの新着プラグインを毎週お届け。スパムはありません。