Hacker News 中文摘要

RSS订阅

Show HN:Adrafinil —— 仅在代理运行时保持合盖Mac唤醒 -- Show HN: Adrafinil – keep a lid-closed Mac awake only while agents work

文章摘要

该项目是一个名为Adrafinil的Mac工具,能在AI编码代理工作时保持电脑唤醒,任务完成后自动让电脑休眠,类似一种提神药物但非咖啡因。

文章总结

好的,这是根据您的要求,对原文主要内容进行的中文重述,保留了关键细节,并删减了与核心主题无关的冗余信息。


项目名称: Adrafinil

核心功能: 一款macOS菜单栏应用,其作用是仅在AI编程代理(Agent)工作时,才阻止Mac进入睡眠状态(包括合盖睡眠)。当没有代理工作时,Mac的睡眠行为不受任何影响,合盖即正常休眠。

设计理念:caffeinate或Amphetamine这类“始终唤醒”的工具相反,Adrafinil只在代理(如Claude Code、Codex、Cursor等)执行任务时介入,任务一结束便立即让出系统控制权,让Mac恢复正常的睡眠策略。

主要特点:

  1. 代理感知,非始终在线: 仅当至少一个代理会话持有“唤醒断言”时,才会阻止睡眠。零会话时,Mac(包括合盖)正常休眠。
  2. 集成9种代理: 提供一键安装器,可将Adrafinil接入Claude Code、Codex、Cursor、Gemini CLI、Aider、Hermes、OpenCode、Cline和Pi的钩子系统。
  3. 低延迟命令行接口: adrafinil acquire / release 命令从代理钩子调用,与守护进程的往返时间低于50毫秒,不会拖慢代理工作流。
  4. 引用计数断言: 多个重叠的会话会正确叠加,只有当最后一个会话释放断言后,才会解除睡眠阻止。
  5. 热保护: 如果合盖状态下机身或CPU温度超过阈值,会强制释放所有断言,防止Mac在包内过热。
  6. 空闲释放: 自动丢弃那些拥有进程已死亡或CPU空闲超过N分钟的断言。
  7. 进程嗅探(可选): 即使未安装钩子,守护进程也能在检测到已知代理二进制文件运行时自动获取断言。
  8. 合盖提示与开盖摘要: 合盖时,若有断言被持有,会发出提示音(屏幕已关,无法显示通知);开盖后,会显示代理运行情况、峰值温度及是否触发过热保护。
  9. 干净卸载: 可移除其在所有代理配置中添加的钩子条目。

工作原理:

代理不直接与Adrafinil通信,而是通过其钩子系统调用内置的命令行工具。例如,Claude Code在提交用户提示时调用adrafinil acquire,在停止时调用adrafinil release。唤醒行为是活动范围的,而非会话范围,因此只有代理实际工作时Mac才保持唤醒,空闲的会话不会阻止睡眠。

系统架构:

应用由三个组件构成,分属三个权限层级:

  • Adrafinil.app (菜单栏应用): 用户界面,负责状态显示、设置、安装和开盖摘要。
  • AdrafinilDaemon (用户级守护进程): 核心逻辑所在,负责引用计数、进程监控、温度监控、合盖状态监听等。它是事实上的状态来源。
  • AdrafinilHelper (根权限辅助进程): 唯一能接触系统睡眠阻止API的组件,功能单一,便于审计。它只暴露一个setSleepBlocked(Bool)接口,所有策略决策都在无特权的守护进程中完成。

已知问题:

  • 公共的IOPMAssertion无法阻止合盖睡眠。Adrafinil v1版本使用pmset disablesleep 1,该命令较为粗暴(也会禁用空闲睡眠),且必须在关机时清除,否则会泄漏。辅助进程会在重启时重置此设置。
  • 守护进程的处理器运行在任意队列上,因此断言注册表和共享状态需要同步处理,修改时需注意并发问题。

许可证: MIT

评论总结

根据评论内容,主要围绕Mac防止睡眠功能展开讨论,观点如下:

1. 现有解决方案已足够(认可度较高) - 多位用户指出macOS内置caffeinate命令即可实现:"I have been using the builtin macOS caffeinate command for this"(作者47) - 第三方App Amphetamine功能更完善:"Amphetamine is what I use. It has a robust set of triggers"(作者exabrial) - 命令行方案简单直接:"sudo pmset -a disablesleep 1"(作者rancar2)

2. 新方案存在争议(认可度中等) - 代码量过大引发质疑:"15k loc for this? holy cow"(作者slopinthebag) - 被批评为"Ridiculous bloat"(作者cyclopeanutopia) - 有用户困惑为何重复造轮子:"I'm just so confused why everyone using ai is reinventing solutions that already exist"(作者dawnerd)

3. 实际使用场景与注意事项(认可度中等) - 散热问题需关注:"your laptop cannot cool inside a backpack, it will overheat"(作者moralestapia) - 合盖运行存在争议:"I've often wondered about the thermal performance or running a MacBook with the lid closed"(作者mr_toad) - 有用户因宠物需求而欢迎此功能:"my cat loves nothing more than to dance on the keyboard"(作者aqme28)

4. 技术实现讨论(认可度较低) - 有用户提供具体代码实现(作者xlii) - 部分用户认为远程开发才是正解:"We need people to rediscover remote development desperately"(作者2001zhaozhao)

总体而言,评论呈现两极分化:支持者认为新方案提供了便利,反对者则认为现有工具已足够且新方案过于臃肿。