前言¶
DeepSeek Harness(DSH)里,Agent 通常只在用户发消息或外部事件进来时才跑一轮。若你希望「宿主长时间没有交互时,仍给某个固定会话一次自主行动的机会」——例如偶尔发一条消息、查资料或浏览本地文件——需要在宿主侧单独做空闲判定、概率抽签和会话注入,还要控制日上限与活跃时段,避免静默烧 token。
dsh-self-trigger 是维护者 erty3244 提供的 DSH 工作流类插件:在宿主空闲满足策略时,往指定会话注入一轮带前缀的提示,具体说什么由该轮 Agent 根据人格与上下文决定。插件默认关闭、零第三方依赖,不发任何网络请求;与 IM 桥接、预约提醒无关(后者仍留在 dsh-feishu-bridge 等桥接插件中)。社区目录页见 skillhub.cn,源码在 GitHub。
这是什么¶
一句话:dsh-self-trigger 给 Harness 增加「空闲判定 → 抽签 → 注入一轮」的主动性链路,注入内容只说明本次抽到的动作类型、剩余次数与预算,不替 Agent 写正文。
该仓库从 dsh-feishu-bridge 拆出——维护者认为「聊天桥接」与「空闲自触发」职责不同,独立后更易读、易配。策略文件 policy.json 每次判定时现读,改参数无需重启宿主(启用后仍建议了解宿主何时加载插件目录)。
核心功能¶
判定与注入流程¶
- 按
judgeEveryMinutes(默认 60)周期性判定,配合judgeJitterMinutes(默认 10)抖动。 - 结合
activeFrom/activeTo(默认 9~23.5 点,小时可小数)、idleMinutes(默认 0 表示不校验空闲)、dailyMax(默认每天最多 3 次)等条件。 - 命中后按
weights抽取动作:message/web/files/silent(默认权重 40 / 20 / 20 / 10)。 - 向
targetSessionId指定会话注入一条以【自触发·自由时间】…开头的提示;Agent 自行决定是否响应、如何响应。 failStepPct(默认 10)在落空时提高下次命中概率,命中后归零。
明确不包含的能力¶
- 不发网络请求:无 HTTP 客户端、无长连接;接 IM 需另装桥接插件。
- 不管预约提醒(如「下午四点提醒我」),该能力仍在桥接插件,后续可能迁到独立插件。
- 不写其它插件的状态;仅在本插件目录维护
state.json/usage.json。 - 不代写 Agent 输出;注入只传递策略与记账信息。
开销说明¶
判定本身为本地计算。真正注入会触发目标会话的一轮完整模型调用——花 token 的是被触发的那一轮,而非插件外壳。未启用时零开销;额度由 dailyMax 与 budgetPerActivityCny(单次活动预算,仅记账不阻断)等字段约束。
安装与启用¶
安装命令(来自仓库 README):
dsh plugin add github:erty3244/dsh-self-trigger
默认关闭:policy.json 不存在时按 enabled: false 处理。enabled 只认布尔 true,字符串 "true" / "false" 均视为关闭。
启用步骤:
- 在状态目录编辑
policy.json(默认~/.dsh/self-trigger/,可通过插件apply(ctx, { stateDir })修改)。 - 设置
"enabled": true并填写非空的targetSessionId。 - 重启宿主,或等待下一次判定读取新策略。
主要配置字段(节选,完整表见 README):
| 字段 | 默认 | 说明 |
|---|---|---|
enabled |
false |
总开关 |
targetSessionId |
'' |
注入目标会话;空则无效 |
activeFrom / activeTo |
9 / 23.5 |
活跃时段(小时) |
judgeEveryMinutes |
60 |
判定周期 |
judgeJitterMinutes |
10 |
判定抖动 |
idleMinutes |
0 |
空闲门槛;0 表示不看空闲 |
dailyMax |
3 |
每日最多触发次数 |
failStepPct |
10 |
落空后概率增量(%) |
weights |
message/web/files/silent | 动作权重 |
budgetPerActivityCny |
0.3 |
单次活动预算(记账) |
pricePerMillion |
inputHit/inputMiss/output | 折算单价 |
运行环境:package.json 要求 Node >=22。许可证 MIT。
典型用法¶
下面是一种最小可运行配置思路:指定一个长期存在的会话 ID,在白天时段允许每天最多几次自触发,并限制动作类型比例。
- 安装插件后创建
~/.dsh/self-trigger/policy.json(若目录不存在,按宿主/插件文档确认 state 目录)。 - 写入例如:
{
"enabled": true,
"targetSessionId": "你的会话 ID",
"dailyMax": 3,
"idleMinutes": 30,
"weights": {
"message": 40,
"web": 20,
"files": 20,
"silent": 10
}
}
- 重启 DSH 宿主或等待策略被下一轮判定读取。
- 在目标会话中观察是否出现
【自触发·自由时间】前缀的注入;Agent 可能选择沉默(silent权重)或执行对应动作。
仓库内可用以下命令做规则与外壳测试(README 称 44 项规则测试 + 8 项插件外壳测试):
npm test
适用场景与注意¶
适合:希望在 Harness 内做「低频率、有预算、有活跃时段」的自主试探,又不想把逻辑塞进 IM 桥接插件的开发者;需要纯本地策略、可热读 policy.json 的场景。
不适合:需要插件主动连飞书/微信等(请用桥接插件);需要定时提醒任务(当前不在本插件范围)。
安全与权限:插件以当前 DSH 进程权限运行,注入会消耗目标会话的模型额度。安装前请阅读 GitHub 源码 与 MIT 许可证,自行确认 targetSessionId 与 dailyMax 等参数。DSH 社区目录 skillhub.cn 为独立站点,与 DeepSeek / 幻方无官方从属关系。
结尾¶
dsh-self-trigger 把「空闲自触发」从桥接能力里拆出来:默认关、策略现读、无外链依赖,用 policy.json 控制会话、时段与日上限。若你要给某个固定会话留一点「自由时间」而又不想手写定时脚本,可以按 README 安装并在确认权限与预算后再打开 enabled。
- 目录页:https://www.skillhub.cn/plugins/erty3244/dsh-self-trigger
- GitHub:https://github.com/erty3244/dsh-self-trigger