Codex for Mac: crash/exit + multiple Dock icons; GPU disable triggers unhandled promise and app behaves as if --disable-software-rasterizer is set even when not provided

Environment

  • Device: MacBook Air (Apple Silicon, arm64)

  • App: Codex for Mac (latest as of Feb 9, 2026)

  • Bundle ID: com.openai.codex

  • Notarization: accepted, “Notarized Developer ID”, ticket stapled

  • Install path: /Applications/Codex.app

Symptoms

  1. App frequently ends up with multiple Codex icons in the Dock and no window opens.

  2. App may crash/exit shortly after launch (sometimes without a .crash report).

  3. Attempts to run a “GPU-off fallback” are unreliable: the app logs an error and IPC breaks (EPIPE, “Object has been destroyed”, worker exit).

Expected

  • Single Dock icon

  • App opens reliably and stays running

  • Running with --disable-gpu should not cause unhandled promise rejections or self-termination

Actual

  • Multiple Dock icons; sometimes no UI appears

  • App exits or becomes non-functional (IPC errors)

  • When launching with --disable-gpu, app logs:

    • Error: GPU access not allowed. Reason: GPU access is disabled through commandline switch --disable-gpu and --disable-software-rasterizer.

    • even though --disable-software-rasterizer was not provided by the launcher script.

Repro steps

  1. Install Codex.app to /Applications.

  2. Launch normally: open -a /Applications/Codex.app
    (Sometimes results in multiple Dock icons and no window)

  3. Launch from terminal with logging:

    /Applications/Codex.app/Contents/MacOS/Codex --enable-logging=stderr --v=1
    
    
  4. Launch with GPU disabled:

    /Applications/Codex.app/Contents/MacOS/Codex --disable-gpu --disable-gpu-compositing --enable-logging=stderr --v=1
    
    

    Observe error stating both --disable-gpu and --disable-software-rasterizer are active.

Logs

Gatekeeper/signing is OK:

  • spctl --assess => accepted, source=Notarized Developer ID

  • codesign -dv --verbose=4 shows Developer ID Application: OpenAI, L.L.C. and notarization stapled

GPU disable path produces unhandled promise + IPC breakage:

This error originated either by throwing inside of an async function without a catch block...
Error: GPU access not allowed. Reason: GPU access is disabled through commandline switch --disable-gpu and --disable-software-rasterizer.
...
[IpcRouter] Socket error (error(name=Error,code=EPIPE))
[worker-manager] Worker exited { code: 1 }
Error occurred in handler for 'codex_desktop:message-from-view': TypeError: Object has been destroyed

Troubleshooting already done

  • Verified notarization/signing OK via spctl + codesign

  • Removed quarantine recursively:

    sudo xattr -r -d com.apple.quarantine /Applications/Codex.app
    
    
  • Reset user state:

    • ~/Library/Application Support/Codex

    • ~/Library/Preferences/com.openai.codex.plist

  • Dock cleanup / killed Dock to remove stale pins

Hypothesis

  • Dock multi-instance / no-window behavior might be related to Electron multiple-instance handling and/or stale launch services state.

  • GPU disable path appears to treat --disable-software-rasterizer as enabled even when not passed, leading to a broken rendering/IPC pipeline.

Request

  • Please advise recommended workaround OR ship a patch.

  • Specifically: ensure GPU disable path doesn’t trigger unhandled promise rejection and clarify why --disable-software-rasterizer is considered active when not provided.