openai / openai/codex

Computer Use: `SkyComputerUseService` wakes a sleeping display every ~10 minutes while completely idle (no task running)

Open
#42,911 5 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

app bug computer-use
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):

  1. 12:44:29 — baseline recorded: 29 Codex-related processes running.
  2. 12:44:51 — Codex desktop app quit; SkyComputerUseService count = 0. Verified once per minute for the whole test; it never came back.
  3. 12:36:0821:10:388 hours 25 minutes, zero Display is turned on events and zero Codex Computer Use interaction assertions.

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

  • displaysleep is 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 SkyComputerUseService idle-lifecycle issues

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.