AI Agent 凌晨还在跑,Mac 合盖就断?Adrafinil 场景聚焦:让机器只为智能工作保持清醒
凌晨 3 点,你睡着了,但 Claude Code 还在处理一个长构建任务。你合上了 MacBook 的盖子——然后连接断了,Agent 进程被强制终止,留下了一个半成品输出。第二天醒来,你发现不仅构建失败,Agent 花了一整夜做的推理也全部归零。
这是每一个重度 AI 编码 Agent 用户都遇到过的真实场景。macOS 的标准解决方案 caffeinate 或第三方工具 Amphetamine 采取的是”无差别唤醒”策略:只要开着就一直醒着,不管有没有 Agent 在工作。这不仅浪费电,还让 Mac 在背包里过热。
Adrafinil(əˈdræfɪnɪl)正是为解决这个场景而生的——一个 macOS 菜单栏应用,只在 AI Agent 真正工作时保持机器清醒,Agent 空闲或不再运行后,Mac 恢复正常休眠。
场景痛点:Agent 工作流的睡眠黑洞
AI 编码 Agent 的工作模式与传统开发工具有本质区别。一个典型的 Agent 会话可能持续数小时:
- 你在睡前启动了 Claude Code,让它做一个跨模块的重构
- Agent 开始分析代码库、生成修改、运行测试
- 你合上盖子——Mac 进入休眠,Agent 进程被挂起
- 第二天打开盖子——Agent 崩溃或输出不完整
macOS 的合盖休眠是硬件级行为:IOPMAssertionCreateWithName 等标准 API 无法阻止合盖休眠。caffeinate 虽然能防止空闲休眠,但在合盖状态下的效果不可靠,且它会无差别地让 Mac 一直保持唤醒,即使 Agent 已经空闲了几小时。
Adrafinil 的解决方案是:只在你明确需要时保持唤醒,且只在 Agent 真正工作时。它通过 pmset disablesleep 1 控制合盖休眠,并使用引用计数机制——多个 Agent 会话各自独立请求唤醒,只有当全部释放后才恢复睡眠。
安装与快速上手
Adrafinil 需要 macOS Tahoe 26.4 或更新版本。
安装
从 GitHub Releases 下载已签名的磁盘镜像(.dmg),打开后拖入 Applications 文件夹,首次启动会请求管理员权限以注册特权助手。
安装 Agent 钩子
Adrafinil 需要集成到 Agent 的钩子系统才能自动工作。一键安装:
adrafinil install-hooks
这条命令会为 9 种 Agent 安装钩子:Claude Code、Codex、Cursor、Gemini CLI、Aider、Hermes、OpenCode、Cline 和 Pi。每个 Agent 在开始工作时自动调用 adrafinil acquire,结束时调用 adrafinil release。
生命周期示例
adrafinil status adrafinil acquire "claude-refactor-0615" --tool claude-code --reason "cross-module refactor" adrafinil release "claude-refactor-0615"
acquire 和 release 都是亚 50ms 的快速操作,不会拖慢 Agent 的工作流。引用计数确保多个会话叠加时不会提前释放——只有最后一个会话释放后,Mac 才恢复正常休眠。
核心架构:三层安全模型
Adrafinil 的架构设计值得深入看看,它体现了”最小权限原则”在 Agent 工具中的优秀实践。
Adrafinil.app (菜单栏 UI)
↓ XPC
AdrafinilDaemon (LaunchAgent,用户权限)
→ 引用计数断言注册表
→ 进程监视器 (kqueue NOTE_EXIT)
→ 温度监控 (SMC)
→ 合盖状态监控 (IORegistry)
↓ XPC (特权 Mach 服务)
AdrafinilHelper (LaunchDaemon,root 权限)
→ 唯一触碰睡眠 API 的组件
→ 仅暴露 setSleepBlocked(Bool)
→ 验证调用方的代码签名
adrafinil CLI → Daemon socket (<50ms 往返)
三层模型的关键在于:
- Helper(root) 只做一件事:开关睡眠阻塞。不做策略决策、不做引用计数
- Daemon(用户) 做所有策略逻辑:引用计数、温度监控、进程清理、合盖检测
- App(UI) 纯视图层:可以随时重启而不影响正在进行的断言
三个值得注意的高级特性
热切断保护
合盖运行时 Mac 在背包或床上无法散热。Adrafinil 会监控 SMC 温度传感器,当 CPU 温度超过阈值时强制释放所有断言,让 Mac 进入安全休眠状态。这个机制在凌晨无人值守时相当重要——能在过热时自动防止硬件损坏。
空闲自动释放
如果某个 Agent 进程已死亡或 CPU 空闲超过 N 分钟(默认 15 分钟),断言会被自动丢弃。这防止了"Agent 异常退出但断言未释放"的残留问题。
Hold 模式:后台任务场景
Agent 回复完成后,触发的一个后台构建或部署可能需要额外时间。Adrafinil 提供了时间盒定的 hold 模式:
adrafinil hold --for 30m --reason "deploy staging" adrafinil mcp
hold 是时间盒定的——30 分钟后自动释放,不会因为忘记释放而导致 Mac 整夜不眠。
与替代方案的对比
| 方案 | 休眠控制 | Agent 感知 | 引用计数 | 温度保护 | 合盖支持 |
|---|---|---|---|---|---|
caffeinate | 无差别唤醒 | ❌ | ❌ | ❌ | 不可靠 |
| Amphetamine | 无差别唤醒 | ❌ | ❌ | ❌ | ✅ |
| Adrafinil | 智能(仅工作时) | ✅(9 种 Agent) | ✅ | ✅(自动释放) | ✅ |
适用场景与局限性
最佳使用场景:
- 夜间运行长任务的 Claude Code / Codex 会话
- Cursor 中的 long rebuild 或 test suite 运行
- 多 Agent 协同工作时(引用计数确保不提前释放)
- Mac 放在背包/底座中无人值守的开发环境
局限性:
- 仅支持 macOS Tahoe 26.4+(约 2026 年下半年版本),较早的 macOS 版本不支持
- 需要管理员权限安装特权助手(不过这是一次性操作)
- 合盖运行时 Mac 的散热是物理限制——Adrafinil 的热切断只是兜底方案,不建议长期在通风不良的环境中使用
- 仅支持 9 种主流 Agent,自定义 Agent 需要手动集成钩子
写在最后
Adrafinil 代表了一类新兴的"Agent 基础设施"工具——它的功能简单(保持 Mac 唤醒),但解决的问题非常具体(AI Agent 的长时间工作流与 macOS 电源管理的冲突)。这类工具的特点是:不做多,只做对,而且做得足够工程化(引用计数、温度保护、三层架构隔离权限)。
对于每天使用 Claude Code、Codex 或 Cursor 做自动化任务超过 1 小时的开发者来说,Adrafinil 解决的是一个"不遇到就不会想到,遇到了就很痛苦"的问题。它目前 105 个 GitHub Stars 说明社区认可度不错,MIT 许可证也让集成没有任何顾虑。
如果你也遇到过"合盖后 Agent 断连"的困扰,Adrafinil 值得一试。安装就只需要下载拖拽 + adrafinil install-hooks,一分钟就能走完整个设置流程。
相关链接: