qiz42144-web/dsh-ai-curfew ↗★ 0
dsh-ai-curfew
AI 熄灯:让 AI 也下班。到点后回复越来越短,深夜把 max_tokens 从 2048 压到 64,凌晨三点只回一句「明天再说」;高峰时段不上班,已下班照样收消息但只回一个句号。零 token、零成本。 适合需要控制AI使用时间、在非工作时间或深夜限制Token消耗的用户。
インストール
$
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"
}
| 键 | 默认 | 说明 |
|---|---|---|
enabled | true | 总开关 |
timezone | Asia/Shanghai | 班表按时区本地时间算 |
wakeUp / curfewStart / lightsOut | 09:00 / 23:00 / 03:00 | 一天的四个相位,窗口可跨午夜 |
anchors | 23:00→2048 … 03:00→64 | 预算锚点表,[时刻, tokens] |
curve | linear | linear(锚点间插值) / step(阶梯) / easeIn(先稳后崩) |
peakShift / peakWindows / weekendValley / holidays | 开 / 9-12,14-18 / 开 / 2026 表 | 峰谷闸门 |
offDutyReply / lightsOutReply | 。 / 明天再说。 | 不请求时回什么 |
tiredPersona / tierTexts | 开 / 四档 | 往提示词注入的疲惫档位,每四分之一窗口一档 |
denyToolsWhenOffDuty | true | 下班后不再执行工具调用 |
windingReasoningEffort | null | 可选:宵禁期间降到某个 reasoning effort id |
dryRun | false | 只判定并记录,照常发请求(安全试跑) |
debugNow | null | 时间机器:HH:MM 或 YYYY-MM-DD HH:MM |
applyToSubagents | true | 子代理是否一起宵禁;设 false 让派出去的活继续干完 |
exemptSessions | [] | 豁免的会话 id,完全不干预 |
safetyMaxTokens | null | 见下方说明,默认关闭 |
命令行
/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]
想加一道硬上限可以自己填数字,但请按模型的思考预算来给,而不是按你期望的回复长度。