[macOS][migration] Legacy ChatGPTHelper remains KeepAlive after app unification, retaining Option+Space

Open 💬 0 comments Opened Jul 31, 2026 by Bobbyztz

What version of the Codex App are you using (From “About Codex” dialog)?

Unified ChatGPT/Codex desktop app: 26.727.40816 (build 6067)

Legacy ChatGPT Classic installation involved in the migration: 1.2026.160

What subscription do you have?

Not relevant / not provided.

What platform is your computer?

macOS 26.5.2 (25F84), Darwin 25.5.0, Apple Silicon, 64 GB RAM.

What issue are you seeing?

After migrating to the unified ChatGPT/Codex macOS desktop app, the legacy launchd service com.openai.chat-helper remained enabled and running independently of the current app.

The legacy launch agent is configured with:

Label: com.openai.chat-helper
BundleProgram: Contents/Resources/ChatGPTHelper
RunAtLoad: true
KeepAlive: true

It continued loading the helper from the old ChatGPT Classic installation and retained the legacy global shortcut preference:

KeyboardShortcuts_toggleLauncher
carbonKeyCode: 49        # Space
carbonModifiers: 2048    # Option

As a result:

  • Option+Space remained globally registered even though the current app's settings did not expose the legacy shortcut owner.
  • Quitting and reopening the current unified app did not release the shortcut, because the old helper was managed separately by launchd.
  • Another application could not claim Option+Space until the legacy service was disabled and unloaded.
  • The same local migration also retained legacy URL handlers and privacy-permission entries for the old app, which further suggests that the legacy installation was not fully retired.

At inspection time, ps reported that the helper process had been alive for approximately nine days. This is a single-machine observation of the helper's elapsed process time, not a claim that the unified app had been continuously open for nine days and not a claim that every migrated installation is affected. Because the job is KeepAlive, quitting the current app would not necessarily stop or reset it.

There was also a potentially severe resource symptom: immediately after stopping the helper, system-wide available memory increased by close to 20% of a 64 GB machine (approximately 12.8 GB). There was no per-process RSS/physical-footprint sample captured immediately before shutdown, so I cannot prove that all of that memory belonged to ChatGPTHelper. This should be treated as a severity signal that warrants investigation, not as a universal or precisely attributed memory figure.

This report intentionally excludes the separate, already-reported excessive disk-write issue. No claim is made here that ChatGPTHelper caused abnormal disk writes.

This appears distinct from #31925: that issue reports the missing/changed Option+Space Quick Chat behavior after unification, while this report concerns the invisible legacy helper continuing to run, own the shortcut, and survive the new app's lifecycle. #31866 is also relevant as a broader migration/unification issue.

What steps can reproduce the bug?

The exact affected population is likely users who upgraded with a legacy ChatGPT Classic installation whose helper was enabled.

  1. Start with legacy ChatGPT Classic 1.2026.160 on macOS and configure its launcher shortcut as Option+Space.
  2. Install/update to the unified ChatGPT/Codex desktop app.
  3. Quit and reopen the unified app, or use it normally across multiple sessions.
  4. Inspect the legacy service and process:

``bash
launchctl print gui/$(id -u)/com.openai.chat-helper
launchctl print-disabled gui/$(id -u)
ps -axo pid=,ppid=,etime=,rss=,command= | grep ChatGPTHelper
defaults read com.openai.chat KeyboardShortcuts_toggleLauncher
``

  1. Observe that com.openai.chat-helper is still enabled/running with RunAtLoad + KeepAlive, even though the current unified app does not expose the old shortcut setting.
  2. Attempt to register Option+Space in another application; observe that it is unavailable.
  3. Disable and unload only the legacy service:

``bash
launchctl disable gui/$(id -u)/com.openai.chat-helper
launchctl bootout gui/$(id -u)/com.openai.chat-helper
``

  1. Observe that the helper exits and Option+Space becomes available immediately. The service remains disabled after the current unified app is reopened.

What is the expected behavior?

During ChatGPT/Codex desktop app migration, the installer/updater should:

  • detect and unload the legacy com.openai.chat-helper launch agent;
  • remove or disable its RunAtLoad + KeepAlive registration;
  • migrate or explicitly release legacy global shortcuts;
  • ensure the current settings UI accurately reflects any still-active shortcut owner;
  • retire obsolete URL-handler and permission associations where macOS permits, or provide a clear migration/removal prompt;
  • avoid leaving an independently running legacy helper after the old app has been replaced.

If retaining the legacy helper is intentional, its lifecycle, shortcut ownership, and removal control should be visible in the current app.

Additional information

Verified local post-workaround state:

"com.openai.chat-helper" => disabled
launchctl service: not loaded
ChatGPTHelper process: absent
Option+Space Carbon registration probe: succeeds (free)

The old app was subsequently moved to Trash and its old permissions/URL handlers were retired as a reversible cleanup. No current ChatGPT/Codex settings or user data needed to be deleted.

Suggested engineering checks:

  • Add a migration test that starts with com.openai.chat-helper enabled and verifies it is unloaded/disabled after unification.
  • Test migration while the old helper is already running.
  • Test quitting/reopening both old and new app versions during the migration window.
  • Verify that legacy hotkeys are either migrated to a visible current setting or released.
  • Record helper resource usage before shutdown so any long-lived memory growth can be attributed accurately.

View original on GitHub ↗