2026年6月28日 1 分钟阅读

AI Agent 凌晨还在跑,Mac 合盖就断?Adrafinil 场景聚焦:让机器只为智能工作保持清醒

tinyash 0 条评论

凌晨 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 会话可能持续数小时:

  1. 你在睡前启动了 Claude Code,让它做一个跨模块的重构
  2. Agent 开始分析代码库、生成修改、运行测试
  3. 你合上盖子——Mac 进入休眠,Agent 进程被挂起
  4. 第二天打开盖子——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"

acquirerelease 都是亚 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,一分钟就能走完整个设置流程。

相关链接

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。