qiz42144-web/dsh-ai-curfew ↗★ 0

dsh-ai-curfew

AI 熄灯:让 AI 也下班。到点后回复越来越短,深夜把 max_tokens 从 2048 压到 64,凌晨三点只回一句「明天再说」;高峰时段不上班,已下班照样收消息但只回一个句号。零 token、零成本。 适合需要控制AI使用时间、在非工作时间或深夜限制Token消耗的用户。

パッケージ
dsh-ai-curfew
互換性
未検証
バージョン
0.1.0
ライセンス
MIT
最終更新
2026/10/08

インストール

$npx -p @deepseek-ai/dsh dsh plugin --profile web add github:qiz42144-web/dsh-ai-curfew

ドキュメント

README 全文を読む ↗

配置

配置是 $DSH_HOME/dsh-ai-curfew/config.json,改完即生效(按 mtime 热读,不用重启)。 文件里只写你想改的键,其余走默认值:

{
  "curfewStart": "23:00",
  "lightsOut": "03:00",
  "wakeUp": "09:00",
  "peakShift": true,
  "offDutyReply": "。",
  "lightsOutReply": "明天再说。",
  "debugNow": "01:30"
}
键默认说明
enabledtrue总开关
timezoneAsia/Shanghai班表按时区本地时间算
wakeUp / curfewStart / lightsOut09:00 / 23:00 / 03:00一天的四个相位,窗口可跨午夜
anchors23:00→2048 … 03:00→64预算锚点表,[时刻, tokens]
curvelinearlinear(锚点间插值) / step(阶梯) / easeIn(先稳后崩)
peakShift / peakWindows / weekendValley / holidays开 / 9-12,14-18 / 开 / 2026 表峰谷闸门
offDutyReply / lightsOutReply。 / 明天再说。不请求时回什么
tiredPersona / tierTexts开 / 四档往提示词注入的疲惫档位,每四分之一窗口一档
denyToolsWhenOffDutytrue下班后不再执行工具调用
windingReasoningEffortnull可选:宵禁期间降到某个 reasoning effort id
dryRunfalse只判定并记录,照常发请求(安全试跑)
debugNownull时间机器:HH:MM 或 YYYY-MM-DD HH:MM
applyToSubagentstrue子代理是否一起宵禁;设 false 让派出去的活继续干完
exemptSessions[]豁免的会话 id,完全不干预
safetyMaxTokensnull见下方说明,默认关闭

命令行

/curfew                    看班表:当前判定、预算与依据
/curfew overtime 30m       强制加班 30 分钟(宵禁暂停,期间正常上班)
/curfew off                立刻下班
/curfew auto               恢复自动班表(加班 / 强制下班 / 时间机器 全部取消)
/curfew debug 01:30        时间机器,随时试任何时段
/curfew debug clear        回到真实时间

命令不经过模型,所以下班状态下也能用 —— 这是「把自己关在门外」的逃生口。

为什么是「加班」不是「请假」:请假的主语是 AI,是它在请求不上班;但 /curfew overtime 实际发生的是你命令它加班。同理 off 只管「AI 下班」这一件事,不再兼职表示「宵禁关掉」。

关于 safetyMaxTokens

默认关闭,这是有意的。下班由 llm/stream 短路保证,所以第二道上限在它有用的地方都是多余的; 而在它不该管的地方反而有害 —— reasoning 模型会把很小的预算全花在思考上,于是既没有正文也没有 工具调用,供应商直接判这一轮失败:

Command Code reached the output token limit without producing answer text or a tool call
(finish_reason=length, max_tokens=16, outputTokens=16, reasoningTokens=16)  [OUTPUT_TOKEN_LIMIT]

想加一道硬上限可以自己填数字,但请按模型的思考预算来给,而不是按你期望的回复长度。