1实现原理 · 为什么它能做到
利用 5 小时窗口的起算语义:窗口从『窗口内第一条请求』起算而非固定时刻轮转,所以额度耗尽后没人发消息窗口就不开始计时;重置后立刻由定时任务代发一条极简消息,把窗口计时的起点藏进睡眠时间。
Claude 订阅的 5 小时用量窗口从**窗口内第一条请求**开始计时,而不是按固定时刻轮转。
定时器本体是一条 detached 后台进程链:caffeinate -is 防睡眠撑住等待期 → sleep N 秒 → cd $HOME → claude -p 发『Reply with exactly: ok』单轮消息,由 Bash run_in_background 启动。
caffeinate -is /bin/sh -c 'sleep <SLEEP_SECONDS> && cd "$HOME" && claude -p "Reply with exactly: ok"'
run_in_background 是关键语义:前台 sleep 会被 harness 拦截;后台 detached 进程不依赖会话存活,且退出时会唤醒原会话形成『双保险』。
**必须 run_in_background**:前台 sleep 会被 harness 拦截;后台任务是 detached 进程,且退出时会重新唤醒当前会话(见 Step 5)。
幂等与读回验证:启动前 ps 检查是否已有同款定时器(有则报告并问是否替换);启动后用 ps 验证进程链三行(sh/caffeinate/sleep)都在。
ps -ef | grep -E 'claude -p "Reply with exactly: ok"' | grep -v grep
时间换算公式化:等待分钟数 = 距重置分钟数 + 5 分钟缓冲;绝对时刻早于/等于当前时间按次日同刻理解(深夜跨零点是常态输入);SLEEP_SECONDS = 等待分钟数 × 60。
换算公式(占位符全文统一):`等待分钟数 = 距重置分钟数 + 5`;`SLEEP_SECONDS = 等待分钟数 × 60`。
收尾核实与取消纪律:到点被唤醒后读任务 output 文件,预期 'ok' + '[exited with code 0]';实际触发时刻以 output 文件 mtime 为准(stat -f '%Sm');取消用特征串 pkill 且明令禁止按秒数杀。
**禁止按秒数 `pkill -f 'sleep <SLEEP_SECONDS>'`**:本机长驻脚本的心跳 sleep 可能恰好同秒数,实测发生过误杀
2核心能力
3外部依赖
| 类型 | 依赖 |
|---|---|
| cli | claude(官方 Claude Code CLI;claude -p 单轮 print 模式) |
| cli | caffeinate(macOS 防睡眠) |
| cli | sleep / date / ps / pkill / stat(macOS/BSD 系统工具) |
| cli | 宿主 Bash 的 run_in_background 后台任务 + task-notification 唤醒(harness 能力) |
4风险提醒 风险提醒:黄色 · 留意使用
- pkill 特征串存在误杀面 — pkill -f 'Reply with exactly: ok' 会杀掉本机任何命令行含该串的进程;虽比按秒数杀安全,但误杀概率非零,且取消后需 ps 确认。
- dangerouslyDisableSandbox 建议属安全降级 — 沙箱拦截 caffeinate 时 SKILL.md 指示用 dangerouslyDisableSandbox: true 重试——在宿主沙箱被关闭的情况下执行命令链,用户应清楚该路径的授权含义。
- 计时准确性依赖本机状态 — 机器睡眠/合盖/关机会使触发顺延或失效(caffeinate 防不住物理合盖);时间差超几分钟时新窗口重置时刻要按实际触发时刻重算。
- 消耗真实订阅调用 — 若用户口述重置时刻偏早或缓冲不足,戳到旧窗口会白消耗一次调用且不开新窗口(有补戳 10-15 分钟短定时器的处置,但仍需用户在场判断)。
- 机制依赖宿主后台任务语义 — run_in_background detached + task-notification 唤醒是 Claude Code harness 特性;换宿主(Codex 等)无对应语义时本 skill 的『双保险/唤醒核实』不成立(skill 明示 Claude Code 场景)。
5第二遍独立确认
- [ok] 无自带脚本/资产(纯指令 skill) — glob 确认目录仅 SKILL.md;external_deps/internal_assets 不夸大(asset 列表为空)。
- [ok] caffeinate/sleep/claude -p 命令链存在且为固定模板 — Step 2 代码块逐字存在;命令解剖表逐组件解释;无 shell 拼接注入(数字换算后入占位符)。
- [ok] run_in_background 语义与双保险 — SKILL.md 原文『后台任务是 detached 进程,且退出时会重新唤醒当前会话』与 Step 5『被唤醒本身也是一次 API 请求』一致。
- [ok] 幂等检查与 ps 读回验证 — Step 0 的 ps grep 命令与 Step 3 的三行预期存在;Step 4 交代 output 路径进对话历史。
- [ok] 凭证接触面为零 — token 扫描(API_KEY/token/cookie/secret/Authorization)零命中;无 env/keychain/文件读取。
- [ok] pkill 取消纪律(防误杀) — 禁止按秒数 pkill 的原文与实测误杀背景存在;特征串 pkill 为唯一取消路径。
- [ok] 功能声明 vs 夸大检查 — 『5 小时窗口从窗口内第一条请求起算』是描述性机制声明(对 Claude 订阅语义的表述,标注 2026-08-29 实测);skill 边界(macOS/一次性/不查询重置时刻)自我声明清晰,无越界承诺。
- [ok] 元数据(license/stars/commit) — 仓库级 MIT、stars=1385、pushed_at=2026-09-09T12:33:29Z;本地 HEAD==pin d5c4678cb5d4fd6acc9c922690df035dbd33d247。
6结论
c6f9d07b09144f82…d5c4678cb5