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

Open
#36,394 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
macos

Research direction

Start by tracing the macOS migration or updater path that handles the legacy com.openai.chat-helper launch agent; no source file or test is named in the report. Reproduce with launchctl print, launchctl print-disabled, and the provided process checks. Done means migration unloads or disables the legacy helper and releases Option+Space, with coverage for an already-running helper.

Written by the indexing model from the issue text.

Description

app bug performance
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:

    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
    
  5. 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.

  6. Attempt to register Option+Space in another application; observe that it is unavailable.

  7. Disable and unload only the legacy service:

    launchctl disable gui/$(id -u)/com.openai.chat-helper
    launchctl bootout gui/$(id -u)/com.openai.chat-helper
    
  8. 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.
Dominant language
Rust
Stars
125k
Forks
19.5k
Avg merge
1m
Merged PRs (30d)
1k

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.

More from openai/codex

All issues in openai/codex

Similar issues

More Rust issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.