dsh-self-trigger:宿主空闲时由 Agent 自行决定是否注入一轮

前言

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 每次判定时现读,改参数无需重启宿主(启用后仍建议了解宿主何时加载插件目录)。

核心功能

判定与注入流程

  1. 按 judgeEveryMinutes(默认 60)周期性判定,配合 judgeJitterMinutes(默认 10)抖动。
  2. 结合 activeFrom / activeTo(默认 9~23.5 点,小时可小数)、idleMinutes(默认 0 表示不校验空闲)、dailyMax(默认每天最多 3 次)等条件。
  3. 命中后按 weights 抽取动作:message / web / files / silent(默认权重 40 / 20 / 20 / 10)。
  4. 向 targetSessionId 指定会话注入一条以 【自触发·自由时间】… 开头的提示;Agent 自行决定是否响应、如何响应。
  5. 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" 均视为关闭。

启用步骤:

  1. 在状态目录编辑 policy.json(默认 ~/.dsh/self-trigger/,可通过插件 apply(ctx, { stateDir }) 修改)。
  2. 设置 "enabled": true 并填写非空的 targetSessionId。
  3. 重启宿主,或等待下一次判定读取新策略。

主要配置字段(节选,完整表见 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,在白天时段允许每天最多几次自触发,并限制动作类型比例。

  1. 安装插件后创建 ~/.dsh/self-trigger/policy.json(若目录不存在,按宿主/插件文档确认 state 目录)。
  2. 写入例如:
{
  "enabled": true,
  "targetSessionId": "你的会话 ID",
  "dailyMax": 3,
  "idleMinutes": 30,
  "weights": {
    "message": 40,
    "web": 20,
    "files": 20,
    "silent": 10
  }
}
  1. 重启 DSH 宿主或等待策略被下一轮判定读取。
  2. 在目标会话中观察是否出现 【自触发·自由时间】 前缀的注入;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
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye