我经常用 Claude Code 跑长任务,然后离开一会,回来发现 Mac 睡着了,任务还没做完。后来,我就跑下 caffeinate 让它一直醒着,但有时候出去比较长时间,任务做完了还在一直耗电,而且不能合盖,在外面咖啡厅办公就不是很适合。我希望能够 Claude 干活时醒着(可以合盖),干完活正常 sleep 。有个软件 Amphetamine 是 ok 的,但太重了。
于是写了两个小脚本,cc 帮忙写的,心跳 + 看门狗:
- 心跳:挂在 cc 的 hooks 上,提交 prompt 和每次工具调用后 touch 一个会话状态文件,回合结束删掉。文件新鲜 = 正在干活,多开几个窗口互不干扰。
- 看门狗:LaunchAgent 常驻,每 20 秒看一眼,如果有活跃会话且 CPU 不过热,就 `pmset -a disablesleep 1`,合盖也不睡;否则翻回 0 ,恢复正常睡眠。
状态文件 30 分钟没刷新就按孤儿清掉,所以 Claude 崩了、终端直接关了,机器也不会被永远钉住不睡。过热时看门狗会主动放行睡眠。
跑了一个多月,还挺稳定的。任务跑着的时候可以随时走开,回来时要么它还在干,要么任务结束,该睡就睡,省电。
脚本、安装步骤、已知边界(比如后台命令的盲区)都在 gist 里:
https://gist.github.com/whitefoxx/3579ba4370bdc82eacb0e7ab1f29057b
好奇大家跑长任务是怎么处理睡眠这事的?
于是写了两个小脚本,cc 帮忙写的,心跳 + 看门狗:
- 心跳:挂在 cc 的 hooks 上,提交 prompt 和每次工具调用后 touch 一个会话状态文件,回合结束删掉。文件新鲜 = 正在干活,多开几个窗口互不干扰。
- 看门狗:LaunchAgent 常驻,每 20 秒看一眼,如果有活跃会话且 CPU 不过热,就 `pmset -a disablesleep 1`,合盖也不睡;否则翻回 0 ,恢复正常睡眠。
状态文件 30 分钟没刷新就按孤儿清掉,所以 Claude 崩了、终端直接关了,机器也不会被永远钉住不睡。过热时看门狗会主动放行睡眠。
跑了一个多月,还挺稳定的。任务跑着的时候可以随时走开,回来时要么它还在干,要么任务结束,该睡就睡,省电。
脚本、安装步骤、已知边界(比如后台命令的盲区)都在 gist 里:
https://gist.github.com/whitefoxx/3579ba4370bdc82eacb0e7ab1f29057b
好奇大家跑长任务是怎么处理睡眠这事的?