让 AI 思考时自动弹出短视频窗口,思考结束自动关掉——摸鱼不用记着关,干活不被打扰。

Auto-pop a short-video window while your AI agent is thinking, and auto-close it when the turn ends — slack off without remembering to close the tab, work without being interrupted.

声明在前:这个插件是我本人开发的,已经开源放出来供大家随意使用(MIT 协议)。仓库地址:https://github.com/Jay-R-J/dsh-video-slackingoff。下面把它的安装方法、痛点由来一五一十讲清楚,照着读就能明白怎么零基础上手使用。

如果你读过之前那篇 把 DeepSeek Harness 变成 RPG 工作台,应该对「插件即一行声明、Host / Client 两半架构」这套 DSH 哲学不陌生了。dsh-video-slackingoff 这次走的是另一条路子——不改变 AI 的任何能力,只在它埋头思考的那几十秒里,给你长出一个摸鱼窗口。

说白了,AI Agent 一轮思考动辄几十秒到几分钟。与其盯着 spinner 发呆,不如刷刷短视频。思考一开始自动弹窗,思考结束自动关掉,摸鱼不用记着关,干活不被打扰。这就是这个插件的全部价值。


环境要求

在装之前,先把基础环境对齐:

依赖版本说明
Node.js>= 18构建与运行
DeepSeek Harness CLI任意较新版本必须先全局安装(npm install -g @deepseek-ai/dsh),否则 dsh plugin 等命令不存在
DeepSeek Harnessweb profile插件面向 dsh web 界面
现代浏览器任意较新版本需在地址栏允许本站弹窗(首次自动弹窗会被拦)

关键点:这个插件面向 web 界面,TUI / headless 模式下窗口不会弹出(事件逻辑仍然会跑,但你看不到弹窗)。所以使用场景就是浏览器里开 dsh web。


安装

前置:先全局安装 dsh 命令行工具

没有它就没有 dsh plugin / dsh web 这些命令:

1
npm install -g @deepseek-ai/dsh

如果这步已经做过,直接跳到下一步。

一条命令安装本插件

1
dsh plugin --profile web add dsh-video-slackingoff

dsh plugin add 会自动把包加入 profile 层叠(包声明了 dsh.bundle.patch),无需手写补丁——这是 DSH 插件机制的好处之一,省掉手动改 cordis.patch.yml 的麻烦。

重启 dsh web

安装完成后必须重启 dsh web,界面右下角才会出现药丸:

1
2
# 先 Ctrl+C 停掉旧的 dsh web 进程,然后重新启动
dsh web

卸载

不想要了就一条命令走人:

1
dsh plugin --profile web remove dsh-video-slackingoff

原理速记:插件挂在根上下文监听 session/event 广播,Host 面把 running / enabled 状态通过 webServer 路由暴露给浏览器,客户端 bundle 由 dsh 的 dsh.client 字段扫描自动打包,所以 lib/ 产物 + dsh 两个字段就够用了,不用自己写打包配置。


痛点:等 AI 思考的那几十秒

用 DeepSeek Harness(下面简称 dsh)写代码、查资料,每发一句话,Agent 就埋头思考。短的话十几秒,长的话几分钟。这段时间里我能干啥?

  • 盯着屏幕等 —— 浪费生命
  • 切到别的窗口干别的事 —— 经常忘了回来看,结果 Agent 早想完了,我还在刷手机
  • 主动打开短视频摸鱼 —— 但 Agent 想完了我又忘了关,视频一直在背后响

痛点很清晰:思考期间想摸鱼,但摸完得记得关。

能不能让这件事自动化?思考一开始自动弹个视频窗口出来,思考结束自动关掉。这就是 dsh-video-slackingoff 的由来。


使用方法

面板挂在界面右下角(shell.overlay 插槽),一切都是自动的——AI 一开始思考就弹窗,想完就关窗,完全不用主动点按钮。

状态药丸

右下角的药丸实时反映当前状态:

状态颜色含义
摸鱼中绿AI 正在思考,窗口已弹出
摸鱼 开灰开启状态,AI 没在思考
摸鱼 关灰总开关关了,不弹窗
弹窗被拦黄浏览器拦了,去地址栏允许一次

面板交互

操作效果
点击药丸切换总开关,开 ↔ 关,状态落盘到 $DSH_HOME
点击「选视频」按钮弹出视频源列表(快手 / 抖音)
在列表里点选某个视频源写入 localStorage,下次自动用这个
首次自动弹窗被拦浏览器地址栏允许本站弹窗一次,本轮内自动恢复
用户误关窗口下一轮 tick 自动重开,不会出现剩余时间没窗口

选视频

点「选视频」按钮,列表里点选快手或抖音,存到 localStorage,下次自动用这个。选的是整站首页,独立窗口打开后用户登录态正常,该咋刷咋刷。

弹窗被拦:浏览器的统一规则

window.open 在「非用户手势触发」时会被所有浏览器默认拦截。本插件是 AI 思考时自动弹窗,触发点在 setTimeout 回调里,不是用户点击,首次必然被拦。

这跟浏览器品牌无关,是 Web 安全策略。

解决方案分两步:

  1. 首次被拦 → 用户去地址栏允许一次本站弹窗
  2. 本轮内自动恢复 → 客户端 tick 里检查 popupRef.current === null || popupRef.current.closed,shouldRun 时重试 window.open

关键代码:

1
2
3
4
5
6
7
8
const popupMissing = popupRef.current === null || popupRef.current.closed
if (shouldRun) {
if (popupMissing) openPopup() // 重试
scheduleNext(POLL_RUNNING_MS)
} else {
if (popupRef.current !== null) closePopup()
scheduleNext(POLL_IDLE_MS)
}

这个重试逻辑顺便解决了另一个问题:用户误关窗口后,下一轮 tick 会自动重开,不会出现「本轮思考剩余时间没窗口」的死局。

轮询退避:500ms 还是 2s

最初固定 500ms 轮询。思考可能持续几分钟,500ms 一次 fetch 略密。改成退避:

  • running 时 500ms(接近边沿触发,不延迟)
  • idle 时 2s(省请求)
  • host 不可达时也退避到 2s

用 setTimeout 链式调度替换 setInterval,每次 tick 里决定下次延迟。


License

MIT 协议,可以放心用于个人和商业场景。


开源

代码在 GitHub:https://github.com/Jay-R-J/dsh-video-slackingoff,MIT 协议。

欢迎 issue、PR,也欢迎在此基础上整点别的花活——比如「思考时自动泡茶计时器」「思考时自动放白噪音」之类。思路都是一样的:监听 session/event,状态通过 webServer 路由暴露,客户端按状态做对应的事。

摸鱼愉快。


更新时间: 2026-08-25
作者: Jay


作者本人开发并开源(GitHub 仓库),MIT 协议。愿你在 AI 思考的间隙里,也能摸得明明白白。