
字节笔记本
2026年10月5日 · 约 16 分钟读完
Codex 桌面版费电?一段 prompt 让它干活才耗电
Codex 桌面版费电?一段 prompt 让它干活才耗电
用 Codex 桌面版(Codex App)的朋友可能发现过一件事:明明没在跑任务,Mac 却烫得不行,风扇嗡嗡转,电池哗哗掉。
一位海外开发者也受不了了。他没有干等官方修复,而是直接写了一段 prompt 丢给 Codex,让它自己修自己,结果效果很好。
这段 prompt 精妙在哪?本文就来逐句拆解,它几乎是一份 macOS 电源管理、Codex 配置与 LaunchAgent 的微缩教科书。
一、先搞清楚:为什么 Codex 桌面版会狂耗电
耗电的根源不是"AI 在算",而是几个静默的后台行为让 Mac 始终无法进入低功耗状态:
- 阻止系统睡眠:Codex 默认会持有
PreventUserIdleSystemSleep断言,哪怕你什么都没干,Mac 也不敢睡。 - Computer Use 常驻:浏览器/电脑控制功能在后台保持唤醒,持续占用 GPU 和 WindowServer。
- SQLite 日志狂写:
~/.codex/logs_2.sqlite高频插入日志,磁盘一直转。 - 窗口渲染:透明、动效窗口让 WindowServer 持续合成画面。
四样加起来,Mac 就成了一个"永远醒着、永远在写、永远在画"的状态,掉电是必然的。
验证方法很简单,打开终端敲一行:
pmset -g assertions如果你看到 PreventUserIdleSystemSleep 那一行挂着 Codex 相关进程,而且持续时间不断增长,就是它在作怪。

二、开发者的解法:一段 prompt 让 Codex 自我修复
整段 prompt 的核心思想一句话:让 Mac 只在 Codex 真正干活时保持唤醒,闲下来就让它睡。
这段 prompt 完整保留在下面,可以直接复制粘贴。先看全貌,再逐句拆:
Fix Codex Desktop battery drain on my Mac without reducing active-work performance.
Target behavior:
- Keep Mac awake only while Codex is actively working: streaming, running tools/commands, browser/computer-use, or child processes.
- Let Mac sleep and use near-zero compute when Codex is idle.
- Preserve Computer Use when actually needed.
- Reduce WindowServer/GPU load safely.
Do this:
1. Inspect `~/.codex/config.toml`, Codex processes, and `pmset -g assertions`.
2. Set:
`prevent_idle_sleep = false`
`preventSleepWhileRunning = false`
`keepRemoteControlAwakeWhilePluggedIn = false`
`opaqueWindows = true`
3. Replace unconditional `notify` with a wrapper that only calls `SkyComputerUseClient` if `SkyComputerUseClient mcp` is already running.
4. Add a LaunchAgent power guard that watches Codex session activity/child processes, runs `/usr/bin/caffeinate -dimsu` only while active, then stops it after an idle grace period.
5. Keep/apply the SQLite log insert-blocking trigger if `~/.codex/logs_2.sqlite` is producing heavy writes.
6. Validate TOML, script syntax, LaunchAgent load, wrapper behavior, `caffeinate` behavior, and `pmset` assertions.
7. Report changes, verification results, and undo commands.
Do not quit Codex without asking. Do not delete sessions/auth. Do not disable Computer Use entirely.听起来信息量很大,但拆开看,每一句都对应一个具体的技术动作。
三、逐句拆解:这段 prompt 到底在干什么
第 1 步:先体检,别瞎改
Inspect
~/.codex/config.toml, Codex processes, andpmset -g assertions.
这是最专业的一步。不是上来就改配置,而是先读三样东西:
~/.codex/config.toml:Codex 的主配置文件- Codex 当前跑着的进程
pmset -g assertions:macOS 当前所有电源断言
先看清楚现状,再决定改什么。这跟人类工程师的排查逻辑一模一样。
第 2 步:改四个配置项(核心)
prevent_idle_sleep = false
preventSleepWhileRunning = false
keepRemoteControlAwakeWhilePluggedIn = false
opaqueWindows = true逐个解释:
| 配置项 | 改成 | 作用 |
|---|---|---|
prevent_idle_sleep | false | 不再阻止 Mac 空闲睡眠,这是耗电元凶之一 |
preventSleepWhileRunning | false | 不再因为"Codex 在跑"就强撑着不睡 |
keepRemoteControlAwakeWhilePluggedIn | false | 插电时也不再为远程控制常驻唤醒 |
opaqueWindows | true | 窗口改不透明,省掉 WindowServer 的透明合成开销,GPU 立刻轻松 |
前三项是"放手让 Mac 睡",第四项是"减轻渲染负担",一守一攻。
第 3 步:让 Computer Use 按需启动
Replace unconditional
notifywith a wrapper that only callsSkyComputerUseClientifSkyComputerUseClient mcpis already running.
原来 Codex 的通知机制会无条件触发 Computer Use 客户端,等于后台一直养着一个"待命的浏览器控制"。
改造后:用一个包装器(wrapper),只有当 SkyComputerUseClient mcp 已经在跑时才调用它。没跑就跳过,Computer Use 从"常驻"变成"按需"。
第 4 步:加一个智能电源守卫(最巧妙)
Add a LaunchAgent power guard that watches Codex session activity/child processes, runs
/usr/bin/caffeinate -dimsuonly while active, then stops it after an idle grace period.
这一步是全段的精华。先解释 caffeinate:这是 macOS 自带的命令,作用是"给系统灌咖啡因,阻止它睡":
caffeinate -dimsu
-d 阻止显示器睡眠
-i 阻止系统空闲睡眠
-m 阻止磁盘空闲睡眠
-s 阻止系统睡眠(仅 AC 电源有效)
-u 声明用户活跃关键思路是:不要让 Codex 一直持有"别睡"的断言,而是用一个 LaunchAgent(开机自启的守护进程)来动态控制:
- 它监视 Codex 的会话活动和子进程
- 检测到 Codex 真在干活(streaming、跑命令、浏览器操作),就启动
caffeinate,让 Mac 醒着 - 检测到 Codex 闲下来(超过宽限期),就停掉
caffeinate,Mac 该睡就睡
这就把"全局禁止睡眠"变成了**"干活时清醒,闲时睡觉"**,既不影响使用体验,又堵住了空耗。
LaunchAgent 是什么?它是 macOS 的用户级守护进程,放在 ~/Library/LaunchAgents/ 目录下(一个 .plist 文件),登录后自动加载,等于给 Mac 装了个"电源管家"。

第 5 步:堵住 SQLite 日志狂写
Keep/apply the SQLite log insert-blocking trigger if
~/.codex/logs_2.sqliteis producing heavy writes.
Codex 会把会话日志高频写进 ~/.codex/logs_2.sqlite。这个写操作本身不重,但积少成多会让磁盘一直处于活跃状态,间接阻止睡眠、增加耗电。
解法是加一个 SQLite 触发器,拦截(block)不必要的 insert。这是数据库层面的精细优化:不删日志功能,只挡住高频写入。
第 6 步:全链路验证
Validate TOML, script syntax, LaunchAgent load, wrapper behavior,
caffeinatebehavior, andpmsetassertions.
改完不算完,必须验证六样东西:
- TOML 配置语法对不对
- 脚本语法有没有错
- LaunchAgent 有没有加载成功
- wrapper 行为是否符合预期
caffeinate行为是否正确pmset断言是否真的降下来了
这一步体现了"改了就要验"的工程纪律。 很多人改完配置就以为搞定了,其实可能根本没生效。
第 7 步:出报告和撤销命令
Report changes, verification results, and undo commands.
最后要求 Codex 输出三样:改了什么、验证结果如何、怎么撤销。
尤其"撤销命令",这是给自己留后路。万一改出问题,一条命令就能回到原状。
三条红线:什么不能碰
Do not quit Codex without asking.
Do not delete sessions/auth.
Do not disable Computer Use entirely.- 不擅自退出 Codex
- 不删会话和登录凭证
- 不完全禁用 Computer Use
这三条红线划得很清楚:优化归优化,不能把正常功能搞坏。尤其"不删 sessions/auth",否则你就得重新登录,历史会话也没了。
四、这段 prompt 好在哪:三层精妙
拆完之后,你会发现它不只是"修个 bug",而是一份值得反复学的prompt 工程范本:
第一层:目标先行
开篇先说"Target behavior",先讲清楚希望达到什么状态,而不是"我要你改什么"。这给了 AI 判断空间:如果某个动作反而损害目标,它可以拒绝或调整,比直接列命令高明得多。
第二层:可验证、可撤销
每一步都要求验证,最后还给撤销命令。这不是"让 AI 试试看",而是带工程纪律的委托:改了要验,错了能回。它正是软件工程里"测试"与"审查"两个环节的微型体现。
第三层:守边界
三条红线明确"不能碰什么"。让 AI 优化电源,但不许它动会话、登录、核心功能。授权范围讲死,是给生产环境用的底气。
五、怎么用:三步上手
如果你想试试这个方案:
第一步:备份。 先把现有配置存一份:
cp ~/.codex/config.toml ~/.codex/config.toml.bak第二步:贴 prompt。 打开 Codex 桌面版,把上面那段完整 prompt 贴进去,回车。
第三步:看报告。 Codex 会执行、验证、出报告。重点看它写的"undo commands",存下来,万一要回退直接用。
注意:这段 prompt 涉及修改 Codex 配置、加 LaunchAgent、改 SQLite 触发器,这些都是系统级改动,请确保你看懂了 Codex 给的每一步报告再让它执行。如果某个步骤它判断你的机器上不适用(比如没有
logs_2.sqlite),它会跳过,这是正常的。
六、一个更广的启示:让 AI 修 AI 的耗电
这件事最值得琢磨的地方,不在电量本身,而在方法论:
当某个 AI 工具有让你不爽的行为时,与其等官方修、或者手动一个个改配置,不如直接写一段精确的 prompt,让 AI 自己去诊断、修复、验证、撤销。
这段 prompt 就是这个思路的完美示范。它把一个"Mac 电量问题",转化成了一份目标明确、步骤清晰、边界严格、可验证可撤销的工程任务。
它还和几条经典的工程方法论不谋而合:需求拆解、计划、实现、测试、审查、复盘的标准流程;目标、验证、学习、停止的循环四问;配置即文件、可 diff 可审计的实践。这段 prompt 本质上就是把一次性的抱怨,固化成了一个可复用、可验证、可撤销的微型工作循环。
下次你的 AI 工具有什么让你抓狂的小毛病,不妨也试试这个套路:别抱怨,写 prompt,让它自己修。
本文基于一位海外开发者在 X 平台公开分享的推文思路整理。涉及的 macOS 命令(caffeinate、pmset、LaunchAgent)均为系统原生功能,Codex 配置项以你本地实际版本为准。修改系统配置前请务必备份。



