用自动化租约让 AI 智能体和脚本使 Mac 保持唤醒
一个通宵运行长时间任务的智能体,需要在工作时让 Mac 保持唤醒,任务结束后又让它睡眠。单纯的“保持唤醒开”只做到前一半,做不到后一半:如果工具崩溃或忘了关掉它,Mac 就会被永远钉在唤醒状态。自动化租约解决了这个问题。脚本或 AI 智能体会获取一份带时间限制的租约,在工作运行期间不断续期,并在结束时释放它。如果工具在任务中途挂掉,租约会自动到期,Mac 就可以重新睡眠。不会有任何东西意外地把机器一直撑在唤醒状态。
Keepresso 为此提供了完整的一套方案:keepresso lease 命令、任何支持 MCP 的智能体都能调用的 MCP 服务器,以及一个一键即可安装的内置智能体技能。
检测在旁观,租约会开口
Keepresso 已经有一个 AI 智能体触发器,能检测编程智能体何时真正在工作:Claude Code 可以通过一个可选启用的钩子上报它的真实状态,而已知的智能体(claude、codex、gemini 及同类工具)则通过它们自身进程的活动来判断。这一侧完全不需要在智能体里做任何设置,Keepresso 只是在一旁观察。
但检测只能覆盖 Keepresso 知道如何识别的智能体,而新的智能体每周都在出现。租约把方向反了过来:不再由 Keepresso 去猜,而是智能体自己告诉 Keepresso 它何时需要 Mac 保持唤醒、为了什么、持续多久,然后不断证明自己还活着。任何能运行命令或调用 MCP 服务器的工具都能做到,无论它叫什么、内部如何工作。两者配合得很好:检测覆盖那些你没想到的日常会话,租约覆盖那些有意为之的长时间任务,以及一切检测看不到的东西。
为什么用租约而不是 keepresso start
keepresso start 作为手动开关很好用,但自动化需要不同的保证:
- 有界。 租约有一个 TTL,持有者必须不断续期,还有一个最长生命周期(上限 7 天),心跳永远无法把它延长。失控的任务无法让 Mac 保持唤醒超过这个上限。
- 自愈。 没有心跳,就没有保持。崩溃脚本的租约会自行到期。
- 干净地共享。 多个工具可以同时持有租约。Keepresso 会把它们合并起来,在最后一份结束后才让 Mac 睡眠,并在那时才执行你的会话结束动作,而不是提前执行。
- 可见。 每一份有效的租约都会显示在菜单里,各自带有倒计时,并以获取它的工具和任务命名。
租约的生命周期
任务开始时获取一份租约。你自己指定 id(一个 UUID),为工具和任务命名,并以秒为单位设置 TTL:
ID=$(uuidgen)
keepresso lease acquire --id "$ID" --tool my-script --task "nightly render" --ttl 600
在 TTL 过去一半之前发送心跳,只要工作还在运行就循环发送。心跳也可以调整 TTL:
keepresso lease heartbeat --id "$ID" # renew with the same TTL
keepresso lease heartbeat --id "$ID" --ttl 300 # renew and shorten it
任务完成后释放租约,这样 Mac 就不必等完剩下的 TTL:
keepresso lease release --id "$ID"
并列出当前有效的租约,包括你自己的和其他所有人的:
keepresso lease list --json
每个命令都接受 --json 以输出机器可读的结果,退出码也是为脚本准备的:0 表示成功,2 表示应用没有运行,3 表示租约未找到或已结束,4 表示租约在“偏好设置”里被关闭。
租约受**偏好设置的“自动化”**下的一个开关控制,默认开启。关掉它,每一次获取都会以退出码 4 被拒绝,因此自动化永远无法凌驾于你的选择之上。
从菜单里查看并停止它们
有效的租约会显示在菜单面板的状态卡片里,各自带有倒计时。主动权始终在你手里:**“停止”**会一次性结束所有租约,Mac 就可以重新睡眠。
一键教会你的智能体
你不必手动向智能体解释这一切。应用包内附带一个现成的保持唤醒技能,它会把整套协议教给智能体,既包括 keepresso 命令行,也包括 MCP 服务器,还有什么时候该用它:在一次长时间的构建、渲染、下载或通宵运行之前。在**偏好设置的“自动化”**里,可以直接从磁盘把它安装到智能体的技能文件夹中。对于没有技能文件夹的智能体,Keepresso 会改为把完整技能复制成可直接粘贴的说明:把它们粘贴给智能体一次,协议就学会了;或者把它们保存到智能体总会读取的全局配置文件里,例如 CLAUDE.md 或 AGENTS.md,这样以后每一个会话都已经知道如何以及何时让 Mac 保持唤醒。如果你更愿意自己接线,技能也存放在应用包内的 Keepresso.app/Contents/Resources/AgentSkill/keep-awake。
MCP 服务器
对于会说 Model Context Protocol 的智能体,应用包内附带了 keepresso-mcp:
/Applications/Keepresso.app/Contents/Helpers/keepresso-mcp
它提供了获取、心跳、释放和列出租约,读取 Keepresso 状态,以及读取系统唤醒计划的工具。MCP 是一个开放协议,所以这不限于编程智能体:任何支持 MCP 的应用都可以持有自己的租约,在工作期间让 Mac 保持唤醒。**偏好设置的“自动化”**里备好了可直接复制的配置片段,适用于 Claude Code、Gemini CLI、Grok 和 Codex。对于 Claude Code,只需一条命令:
claude mcp add keepresso -- /Applications/Keepresso.app/Contents/Helpers/keepresso-mcp
供自动化使用的唤醒计划(需选择启用)
自动化还可以读取系统下一次计划唤醒的时间,如果你允许,还能修改该计划:
keepresso wake status # always allowed, for anyone
keepresso wake set --at "2026-07-24 07:30" # one-shot wake
keepresso wake set --repeat MTWRF --time 07:30 # repeating wake
keepresso wake clear
读取始终允许。只有当**偏好设置的“自动化”下的“允许自动化修改唤醒计划”**开启时,才能修改计划。它默认关闭,因为定时唤醒是一项由管理员辅助程序执行的系统级更改。MCP 服务器在同样的规则下提供对应的工具。
你需要什么
- Keepresso 1.17 或更新版本。安装步骤:Keepresso 入门指南。
- 若在 DMG 安装下使用 CLI,请链接一次命令。
- 若要修改唤醒计划,需要管理员辅助程序和上面那个需选择启用的开关。
相关
- 从命令行让 Mac 保持唤醒 介绍了
keepressoCLI 的其余部分。 - 在长时间构建期间让 Mac 保持唤醒 展示了针对你自己运行的任务、基于触发器的方法。
- 在常驻运行的 Mac 上跑智能体?MyAgens 为它配备一队 Claude Code 智能体,你可以从 Telegram 指挥它们。
更多「使用 Keepresso」内容
