跳过主要内容
S

dsh-quickjot

spankingsnail/dsh-quickjot

把便签、待办与有具体时间的日程按每条一条 JSON 记录存在本机 DSH 配置里,跨对话共用。三个工具负责列出、创建、修改、完成与删除,也可通过会话增加或移除标签。侧栏页面按天分组日程,在同一上海日期内记住日程导航,折叠过去未完成项,并可显示完成项。未完成且填了到期时间的条目到时在应用内提醒(应用没运行时错过的,再次启动后补标)。可选的微信推送只发往你事先保存好的收件目标,通道来自 DSH-IM,发送成功只记为渠道已接受。

安装

dsh plugin --profile web add github:spankingsnail/dsh-quickjot

README

随手记

开口说一句,就记下了。

License: MIT DeepSeek Harness English

English · 简体中文

记日程最烦的一步,从来不是「想起来」,而是打开、填表、点日期。

随手记是给 DeepSeek Harness 用的本机日历插件,把这一步压成一句话:便签、待办、日程共用一本账,说一句就落进去;到期时在应用里提醒你,按你的确认也可以发到微信。

https://github.com/user-attachments/assets/a22ff3f9-1d85-48d2-b5e3-5d370c5f56a1

数据存在你自己的机器上,逐条 JSON,随时能看、能备份、能带走。

微信推送那一段不是自己实现的:目标管理与消息通道来自 DSH-IM,没有它,提醒只会停在应用内。


为什么需要它

你和 AI 聊出来的东西,大多数都不会被记住。

「明天十点提醒我续签合同」「这个想法先记下来」「下周三之前把方案写完」——这些话说完就消失在对话流里。你需要的不是更聪明的助手,而是一个把话变成事项的地方。

但真正让人放弃记录工具的,往往不是遗忘,是摩擦:为了记一条「明天十点开会」,要打开应用、找到新建、选类型、选日期、选时分、点保存。六步换一条记录,谁都不愿意坚持。

所以随手记的默认姿态是「说一句」:

  • 在任意对话里说一句,Agent 用插件提供的工具把事项写进本机账本;
  • 不想离开当前页面,点页面右上角的「随口记」,也是一段对话框——没有表单,只有输入框和发送键;
  • 想翻、想改、想勾掉,再回侧栏:日历按月列出日程,待办可以勾掉,便签留给还没成形的想法;
  • 到期了它会提醒你——应用内提醒不需要任何额外配置,微信提醒需要你事先选好收件目标。

表单还在,但它是兜底,不是主路径。

它刻意不做几件事:不读取或监听其他对话,不自动执行待办,不从引用和讨论里推断你的授权,不上传内容,不替你做决定。

三个入口,按动作排

不按位置排,按你当下正在做什么排:

你正在入口说明
跟 AI 说话,顺手想起一件事对话里说一句dsh_quickjot_list / dsh_quickjot_write 两个工具;不用切界面,说完继续干
已经在随手记页面上,懒得走开页面右上角「随口记」一段短对话,走 DSH 的模型额度;记录落在同一本账,不需要填表
想整理、想翻、想改侧栏「随手记」日程 / 待办 / 便签三个视图,月历可展开按日期筛选;新建表单在这里

三个入口写的是同一本账。你用哪个,取决于你当时愿不愿意离开手上的事。

界面跟随 DSH 主题;日程与截止时间一律按 Asia/Shanghai 解释,不跟随浏览器时区。

你会注意到的几个设计取舍

「说一句」才是入口,表单是兜底。 在「随口记」里直接说「明天上午十点开会」,助手会拆成事项并追问含糊的地方;时间不明确时它先问,不猜。表单留着,是因为有时候你确实想对着日历点——但不该默认如此。

引用不是授权。 你贴进来的文章、会议记录、别人的话,都只是资料。只有你自己明确要求记录,才会建项。这条写在插件的全局策略里,不靠模型的临场判断。

逐项保存,可能部分成功。 一次写多条时,每条独立落盘并带 revision 乐观锁。不会整表覆盖,也不会把「第二条失败」粉饰成「全部成功」——失败的会逐条告诉你原因。

提醒状态是可核对的。 微信发送前先持久化「发送中」,渠道确认后才记「已发送」;超时或崩溃记「不确定」,不自动重试,避免重复打扰。你可以核对微信后自己决定要不要重发。

它不会假装可靠。 应用退出不提醒;真正睡眠时不能准点发送,恢复后会补一条「错过的提醒」。这不是精确闹钟,是尽力而为的本机提醒——README 把这句话写在显眼处,因为承诺做不到的事比不做更糟。

安装

当前为 v3.3.0,面向桌面版 DSH(0.2.x)。

git clone https://github.com/spankingsnail/dsh-quickjot.git ~/dsh-quickjot
cd ~/dsh-quickjot
npm install
npm run build

然后把本仓库登记进你的 DSH profile(~/.dsh/profiles/<profile>/package.json):

{
  "dependencies": {
    "dsh-quickjot": "link:/Users/you/dsh-quickjot"
  },
  "dsh": {
    "profile": {
      "bundles": ["...其他 bundle...", "dsh-quickjot"]
    }
  }
}

在该 profile 目录执行 pnpm install,重启 DSH。侧栏出现「随手记」即安装成功。插件可随时停用或卸载,停用不会删除已有事项。

从早期版本升级:存储域是 dsh_quickjot / dsh_quickjot_in_app,工具是 dsh_quickjot_list / dsh_quickjot_write / dsh_quickjot_in_app_reminders。

使用

最短的一条路:打开随手记,点右上角「随口记」,说一句。

标题栏可以选择 DSH 已配置的模型,以及该模型支持的推理强度,不占用聊天输入区。选择只用于这一个随口记对话,不修改全局默认。模型读取或切换失败会显示原因,不会自动换成别的模型。

如果留存的随口记对话已归档,页面会明确提示并暂停发送。点击「恢复此随口记对话」后再手动发送;恢复只解除这条对话的归档,不会自动重发旧消息。

  • 「明天上午十点提醒我续签合同」→ 落成日程,并问你要不要发微信
  • 「这个想法先记下来:给周报加一栏风险」→ 落成便签
  • 「下周三之前把方案写完」→ 落成带截止时间的待办
  • 「这周还有什么日程?」→ 问也行,不一定非要记

说不清楚的时候它会追问,不会替你猜时间。便签和普通待办可以没有日期;日程必须有具体日期和时分。

不只新增,也能调整已有事项: 在「随口记」或 DSH 对话中,可以直接说:

  • 「把『续签合同』改到明天上午十一点」
  • 「把『写周报』标为完成」/「重新打开『写周报』」
  • 「给『写周报』加上『工作』『重要』标签」
  • 「移除『写周报』的『临时』标签,其他标签保留」
  • 「把这些待办的『临时』标签改成『工作』」——范围不清楚会先列出候选,请你确认

先查现有事项,再按精确 ID 与最新版本修改;同名或时间不明确时先追问,找不到不会擅自另建一条。改内容、时间或标签不会清空未提到的字段;增加、移除和整体替换标签是不同操作。批量修改逐项保存,可能部分成功;回复应区分成功与失败。改日程时间不等于同步修改微信提醒时间,需要同步时请明确说;完成后重新打开也不会自动重启已取消的微信提醒。

用语音调整: 沿用 DSH 主对话已有的语音输入,转成文字、核对后发送即可;微信仅处理渠道已经转成文字的语音,不保证所有原始语音都能识别。「随口记」本身不新增麦克风或录音,转写后的文字与键盘输入走同一套编辑工具。引用、转述、示例和讨论不是修改授权。

在对话里也一样: 任何对话中直接说「帮我记一条……」或「把……改成……」,Agent 会调用 dsh_quickjot_list / dsh_quickjot_write。不用先切到插件页面。

日程多了以后: 默认「接下来」只列今天起的未完成日程,跨月也不会漏掉;往期未完成单独折叠,已完成可勾选显示。顶部导航滚动时保持可见,可切「今天」「近七天」「查看整月」,也可以直接选日期。同一天切回页面或结束编辑时,会恢复各视图上次的阅读位置;跨上海日期后回到「接下来」。这些只是显示方式,不会自动完成或删除事项。

要点表单的时候: 页面里点「+ 新建便签 / 待办 / 日程」。这条路还在,只是不再是默认。

提醒: 有时间的未完成待办和日程会自动进入应用内提醒——右下角「提醒 N」打开未读列表,到期时最多弹 3 条。想让某些提醒也发到微信,先在「设置 → IM机器人 → 微信」测试并保存目标,再在页面里选为默认。

数据与隐私

  • 事项在 DSH 的存储域 dsh_quickjot(version 1,逐条记录);提醒未读状态在 dsh_quickjot_in_app。后端是逐条 JSON 文件,路径由 DSH 决定(本机通常在 ~/.dsh/storages/ 下)。
  • 事项账本保存事项、标签、提醒状态和你选定的收件目标 ID;不保存对话内容、通讯录、微信 token。页面另在本机浏览器的 sessionStorage 暂存视图、搜索词与滚动锚点,不上传、不写入事项账本;存储不可用时仍可浏览。
  • 微信投递只调用已接入的 dshIm 服务里你已经保存过的目标,不创建目标、不读取凭据、不主动给未知联系人发消息。
  • 插件不另建服务器或账本云同步服务,也不新增录音或音频存储。AI 对话仍使用你在 DSH 选定的模型;语音转文字由 DSH/微信已有能力处理,可能涉及相应服务提供方。转写文字与键盘输入一样,按会话配置交给模型处理。

致谢

  • DSH-IM(@xmanrui/dsh-im)——这个插件的微信推送,完全是借它的技术才做到的。目标管理、IM 投递通道和发送回执都由 DSH-IM 提供;随手记只在它之上做三件事:从你已经保存的目标里选一个、把发送状态记进本机、让你能核对结果。没有 DSH-IM,就不会有「微信提醒」这个功能。
  • dsh-plugin-control-your-schedule(HaoyanZhang123,MIT)——本项目的上游。数据结构、提醒状态机和「引用不是授权」的策略延续自它。
  • DeepSeek Harness——插件框架、UI 插槽、存储域与模型额度。
  • Zod(MIT)是唯一声明的运行时依赖;React 来自 DSH 的模块表。

License

MIT。保留上游版权与来源说明,见 THIRD_PARTY_NOTICES.md。

相关插件