Computer Use: `SkyComputerUseService` wakes a sleeping display every ~10 minutes while completely idle (no task running)
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 125k
- Forks
- 19.4k
- PR merge metrics
- PR metrics pending
Description
Summary
With the Codex desktop app merely running — no Computer Use task started, no user present — SkyComputerUseService calls IOPMAssertionDeclareUserActivity roughly every 10 minutes. Each call turns a sleeping external display back on for 30 seconds. This repeats indefinitely, all night.
Quitting the Codex desktop app stops it completely. Nothing else on the machine changes.
Environment
| macOS | 26.4.1 (25E253) |
| Hardware | Mac mini (Mac16,11), external display over HDMI |
| Codex desktop app | 26.901.31953 (build 7868), Codex Framework 152.0.7977.64 |
Codex Computer Use.app |
26.831.1000926 |
unified-computer-use plugin |
26.901.31953 |
| Power settings | AC: displaysleep 10, sleep 0 |
Symptom
pmset -g log — the display turns itself on every ~10 minutes, for exactly 30 seconds, for hours:
10:11:01 Display is turned on 10:11:31 Display is turned off
10:21:54 Display is turned on 10:22:25 Display is turned off
10:31:55 Display is turned on 10:32:25 Display is turned off
10:41:56 Display is turned on 10:42:26 Display is turned off
10:51:57 Display is turned on 10:52:27 Display is turned off
11:02:04 Display is turned on 11:02:35 Display is turned off
11:11:55 Display is turned on 11:12:25 Display is turned off
11:21:55 Display is turned on 11:22:25 Display is turned off
11:31:58 Display is turned on 11:32:28 Display is turned off
11:41:55 Display is turned on 11:42:24 Display is turned off
11:51:58 Display is turned on 11:52:29 Display is turned off
12:02:00 Display is turned on 12:02:30 Display is turned off
No user was at the machine. No Computer Use task was running. No automation was scheduled at that cadence (the only two configured automations are daily, at 08:00 and 08:45).
Evidence: what wakes it
Every single wake has the same signature in pmset -g log:
12:35:38 PID 58821(SkyComputerUseService) Created UserIsActive "Codex Computer Use interaction"
12:35:38 PID 58821(SkyComputerUseService) Created PreventUserIdleDisplaySleep "Codex Computer Use interaction"
12:35:38 PID 114(powerd) TurnedOn InternalPreventDisplaySleep "com.apple.powermanagement.delayDisplayOff"
12:35:38 Display is turned on
12:35:38 PID 58821(SkyComputerUseService) Released PreventUserIdleDisplaySleep "Codex Computer Use interaction"
12:35:38 PID 58821(SkyComputerUseService) Released UserIsActive "Codex Computer Use interaction"
12:36:08 Display is turned off
The assertion is created and released within the same second (duration 00:00:00) — the signature of IOPMAssertionDeclareUserActivity, not a held assertion. The 30-second on-time is powerd's standard grace period for a programmatic wake.
The binary does import that API:
$ nm -u ".../Codex Computer Use.app/Contents/MacOS/SkyComputerUseService" | grep IOPM
_IOPMAssertionCreateWithDescription
_IOPMAssertionDeclareUserActivity
_IOPMAssertionRelease
and contains heartbeat machinery (startHeartbeat(), heartbeatTask, lastHeartbeatTime, HeartbeatConfiguration), which is consistent with — though I have not disassembled to prove — a periodic heartbeat performing the declaration.
Controlled experiment
Single-variable isolation, nothing else touched (no reboot, no power-setting change, no other app quit):
12:44:29— baseline recorded: 29 Codex-related processes running.12:44:51— Codex desktop app quit;SkyComputerUseServicecount = 0. Verified once per minute for the whole test; it never came back.12:36:08→21:10:38— 8 hours 25 minutes, zeroDisplay is turned onevents and zeroCodex Computer Use interactionassertions.
That window spans roughly 50 consecutive predicted wakes, not one of which occurred. For scale: the string Codex Computer Use interaction appears 2,352 times in the retained pmset -g log, and zero of those are after the app was quit.
Why this matters
displaysleepis 10 minutes and the heartbeat is ~10 minutes, so with the app running the display can effectively never stay asleep. In a bedroom or a shared room this is a real problem.- No power setting mitigates it: the 30-second on-time is powerd's fixed grace period for programmatic wakes, independent of
displaysleep. - macOS has no per-process mechanism to block power assertions, so there is no user-side workaround short of quitting the app or disabling the plugin.
- It compounds #36776 — each spurious wake is also an opportunity to hit the "Computer Use locks an unlocked Mac after waking a sleeping display" path.
Note for anyone searching for a workaround
Disabling [plugins."computer-history@openai-bundled"] does not help — I tried that first and the wakes continued. The process that creates the assertion belongs to [plugins."computer-use@openai-bundled"], which is a different plugin. Setting that to enabled = false, or quitting the desktop app, are the only things that stop it.
Expected behavior
IOPMAssertionDeclareUserActivity should be called only when Computer Use is actually driving the machine on the user's behalf. An idle heartbeat with no active task should not declare user activity, and should not wake a sleeping display.
Possibly related
- #30503 — Computer Use helper keeps replayd/ReplayKit active and spikes CPU while idle
- #36776 — Computer Use locks an unlocked Mac after waking a sleeping display
- #26415, #29157 — other
SkyComputerUseServiceidle-lifecycle issues
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the Codex Computer Use.app binary, SkyComputerUseService, and its startHeartbeat()/heartbeatTask machinery; inspect where IOPMAssertionDeclareUserActivity is invoked and how the computer-use plugin lifecycle determines whether a task is active. Reproduce with pmset -g log while the app is idle, then confirm that idle heartbeats no longer create Codex Computer Use interaction assertions or wake the display.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- desktop, operating-systems
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Clearly specified
- Newbie friendliness
- 48/100