Mac 开发者现在会碰到一个很具体的问题:人已经准备合盖走了,Claude Code、Codex、Cursor 或 Aider 还在跑测试、改代码、做构建。

过去合盖基本等于收工。AI 编程代理出现后,合盖可能变成“把一个还在干活的后台工人关灯锁门”。开源项目 Adrafinil 盯上的就是这条缝:只在代理实际工作时阻止 Mac 睡眠,任务结束后再恢复系统默认睡眠。

我更在意的是,它没有把自己做成“永不睡眠”开关。它试图处理的是一个更难的分寸:有活时别断,没活时别硬撑。

它把防睡眠绑定到代理会话

Adrafinil 是一个 macOS 菜单栏工具,也带命令行能力。它通过 agent hooks 接入 AI 编程代理:代理开始工作时执行 adrafinil acquire,空闲或停止时执行 release

目前材料中列出的 hook 集成包括 Claude Code、Codex、Cursor、Gemini CLI、Aider、Hermes、OpenCode、Cline、Pi。它也提供 hold,给长构建、部署这类不完全等同于一次代理回复的任务使用。

关键点是引用计数。

只有存在活动代理会话,或用户显式设置 hold 时,Adrafinil 才阻止睡眠。多个任务重叠,计数叠加。最后一个任务释放后,计数归零,Mac 回到原本的睡眠策略。

这和常见防睡眠工具的差异不小:

工具典型用法合盖场景更适合谁
caffeinate手动给命令加一层防睡眠公共 IOPM assertion 无法解决合盖睡眠这个重点问题偶尔跑一个命令的用户
Amphetamine菜单栏常驻,按用户规则保持唤醒更偏手动规则和通用场景需要成熟通用防睡眠工具的人
Adrafinil代理 hook 自动 acquire/release使用 pmset disablesleep 处理合盖睡眠让 AI 代理跑长任务的 Mac 开发者

所以它的定位不是替代所有防睡眠工具。它更像给 AI 代理补了一层“工作状态开关”。

对经常让代理夜间跑测试、重构、生成补丁的人来说,这会改变使用动作:不用每次手动记得开防睡眠,也不用担心开了以后忘关。团队如果已经在 Mac 上重度使用 Claude Code、Codex 或 Cursor,可以先把它当作开发者个人工具试点,而不是直接写进统一环境配置。

项目还给了一个性能口径:CLI 往返低于 50ms。这个数字只能说明它的目标是不拖慢代理工作流,不能推出稳定性或兼容性结论。

真正的难点是合盖,不是菜单栏

Mac 的合盖睡眠不是普通 idle sleep。项目文档明确提到,公共 IOPMAssertionCreateWithName 这条路,无法让无显示器、合盖状态下的 Mac 继续保持工作。

这也是 Adrafinil 和普通 caffeinate 最大的分界线。

为了处理 clamshell sleep,Adrafinil v1 仍使用 pmset disablesleep。这办法有效,但不是细针绣花,更像一把钝刀:能切开问题,也可能留下状态泄漏风险。

项目的做法是把合盖防睡眠放进 privileged helper。它需要 root 权限,只暴露 setSleepBlocked(Bool)。引用计数、进程监控、温度监控、合盖状态、CLI socket 这些策略逻辑,则放在非特权 daemon 里。

这个拆法比把所有逻辑都塞进 root 进程更克制。但它不等于无风险。

尤其是 pmset disablesleep 这种系统级开关,一旦状态没恢复,影响的就不是某个代理任务,而是整台机器的睡眠行为。项目因此做了重启后的重置:helper 会先执行 disablesleep 0,再按当前状态重设。

安全阀也值得看:

  • 温度过高时,强制释放所有 assertion,避免合盖后放包里继续发热。
  • 拥有任务的进程死亡,或 CPU 空闲超过设定时间后,自动释放。
  • 卸载时清理写入各代理配置的 hooks。

这些机制说明作者知道边界在哪里。合盖不断工很诱人,但 Mac 放在包里发热这件事,没人应该轻描淡写。

适合谁先试,谁该观望

Adrafinil 当前声明的测试环境是 macOS Tahoe 26.4、Xcode 26+。早期 26.x 可能可用,但作者没有确认。更旧 macOS 版本、不同 Mac 机型、不同外接电源状态下的表现,都不能直接外推。

安装路径上,项目提供签名、公证的磁盘镜像。首次启动会请求管理员权限,用于注册 privileged helper。也可以自行用 Xcode 构建。

卸载时不要只拖走 App。更稳妥的动作,是确认 helper 和写入各 AI 代理配置的 hooks 都被清理。否则最烦的不是工具本身,而是配置残留带来的误触发。

最适合尝鲜的是两类人:

人群可以怎么做不建议怎么做
重度使用 AI 编程代理的 Mac 开发者在个人机器上试用,先绑定一两个常用代理,看 acquire/release 是否可靠直接假设所有代理、所有系统版本都稳定
维护开发环境的团队技术负责人延后统一推广,先观察 helper 权限、卸载清理、温控释放是否符合内部要求把它当成普通菜单栏小工具批量下发

接下来最该看的变量很具体。

一是 pmset disablesleep 在不同 macOS 版本上的行为是否稳定。二是温度阈值和强制释放是否足够保守。三是各家 AI 代理的 hook 配置变化,会不会让集成频繁失效。

这三个变量没看清之前,Adrafinil 更适合技术用户小范围试用。它解决的问题是真问题,但解法踩在 macOS 电源管理和 root helper 这条线上,不能只按“好用”两个字下判断。

回到开头那个合盖场景:AI 代理让 Mac 从个人电脑变成了半自动工作节点。Adrafinil 的价值,是让这台机器在有活时醒着,没活时按规矩睡。分寸感,比常醒更重要。