# Title
macOS ChatGPT app: bundled `cua_node` helper processes (`node_repl`, codex-app-tools `server.mjs`, unified-computer-use `launch.mjs`) are never reaped — 335 processes / ~3.5 GB RSS after one day of agent sessions
# Summary
The ChatGPT macOS desktop app leaks helper processes spawned by its bundled `codex app-server`. Every agent-mode / computer-use / code-mode session spawns a set of helper processes, and they are never terminated after the session ends. After roughly one workday of normal use without restarting the app, I accumulated **335 leaked processes consuming ~3.5 GB of RSS**, all parented to a single long-running `codex app-server` process. Quitting and relaunching the app clears them (count drops to ~10), confirming they are app-session leftovers rather than user-launched software.
# Environment
- App: ChatGPT for macOS, version **26.903.71938**
- Bundled agent runtime: `/Applications/ChatGPT.app/Contents/Resources/codex -c features.code_mode_host=true app-server ...` (the "codex app-server")
- Bundled plugins involved: `codex-app-tools` (runs `./server.mjs`), `unified-computer-use` version `26.903.71938` (runs `scripts/launch.mjs`), plus `node_repl` REPL helper processes
- Node runtime used by helpers: `/Applications/ChatGPT.app/Contents/Resources/cua_node/bin/node`
- OS: macOS 26.5.1 (Build 25F80), Apple Silicon (arm64)
# Steps to reproduce
1. Launch the ChatGPT macOS app and keep it running.
2. Use agent mode / computer use / code-mode sessions repeatedly throughout a day (each session spawns helpers such as `server.mjs`, `launch.mjs`, `node_repl`).
3. Inspect the process tree, e.g.:
`ps -axo pid,ppid,lstart,rss,command | grep cua_node`
# Actual behavior
- Helper processes accumulate monotonically over time and are never reaped when their session ends.
- Observed after ~18 hours of app uptime (app launched 2026-09-11 23:43):
- **335** `cua_node` processes in total, of which **249** were direct children of the single `codex app-server` PID
- Breakdown: ~166 × `node_repl`, ~84 × codex-app-tools `server.mjs`, ~83 × unified-computer-use `launch.mjs`
- Combined RSS ≈ **3.5 GB**; per-process CPU time near zero (idle but resident)
- Spawn timestamps spread across the entire day (e.g. 00:28, 03:51, 12:06, 15:51, 17:45 local time), i.e. one leak per session, including sessions finished many hours earlier.
- After quitting and relaunching the app, the count dropped to ~10 processes / ~119 MB, confirming the app-server is the parent and the leak is bounded only by app restarts.
Sample lines (home directory redacted):
```
PID PPID STARTED TIME COMMAND
63203 19921 Fri Sep 12 15:11:00 2026 0:00.32 .../cua_node/bin/node ./server.mjs
63202 19921 Fri Sep 12 15:11:00 2026 0:00.19 .../cua_node/bin/node .../unified-computer-use/26.903.71938/scripts/launch.mjs
63244 63221 Fri Sep 12 15:11:00 2026 0:00.21 .../cua_node/bin/node_repl
```
# Expected behavior
Helper processes should be terminated when the session or tool call that started them ends (e.g. the MCP server exits on client disconnect / stdin EOF, and its children are reaped). Long-running app uptime should not cause unbounded process/memory growth.
# Impact
- ~3.5 GB of wasted memory and hundreds of extra processes within a single workday; each Node.js process also carries ~10 OS threads, so this shows up as heavy thread pressure in Activity Monitor and degrades overall system responsiveness.
- Unbounded growth: the longer the app stays open (common on macOS), the worse it gets.
# Workaround
Periodically quit and relaunch the ChatGPT app, then remove any leftovers with a pattern that only matches the app's own helpers:
```
pkill -f 'ChatGPT.app/Contents/Resou…'
```
(Use with care; it intentionally does not match unrelated `node` processes such as local dev servers.)
# Title
macOS ChatGPT app: bundled `cua_node` helper processes (`node_repl`, codex-app-tools `server.mjs`, unified-computer-use `launch.mjs`) are never reaped — 335 processes / ~3.5 GB RSS after one day of agent sessions
# Summary
The ChatGPT macOS desktop app leaks helper processes spawned by its bundled `codex app-server`. Every agent-mode / computer-use / code-mode session spawns a set of helper processes, and they are never terminated after the session ends. After roughly one workday of normal use without restarting the app, I accumulated **335 leaked processes consuming ~3.5 GB of RSS**, all parented to a single long-running `codex app-server` process. Quitting and relaunching the app clears them (count drops to ~10), confirming they are app-session leftovers rather than user-launched software.
# Environment
- App: ChatGPT for macOS, version **26.903.71938**
- Bundled agent runtime: `/Applications/ChatGPT.app/Contents/Resources/codex -c features.code_mode_host=true app-server ...` (the "codex app-server")
- Bundled plugins involved: `codex-app-tools` (runs `./server.mjs`), `unified-computer-use` version `26.903.71938` (runs `scripts/launch.mjs`), plus `node_repl` REPL helper processes
- Node runtime used by helpers: `/Applications/ChatGPT.app/Contents/Resources/cua_node/bin/node`
- OS: macOS 26.5.1 (Build 25F80), Apple Silicon (arm64)
# Steps to reproduce
1. Launch the ChatGPT macOS app and keep it running.
2. Use agent mode / computer use / code-mode sessions repeatedly throughout a day (each session spawns helpers such as `server.mjs`, `launch.mjs`, `node_repl`).
3. Inspect the process tree, e.g.:
`ps -axo pid,ppid,lstart,rss,command | grep cua_node`
# Actual behavior
- Helper processes accumulate monotonically over time and are never reaped when their session ends.
- Observed after ~18 hours of app uptime (app launched 2026-09-11 23:43):
- **335** `cua_node` processes in total, of which **249** were direct children of the single `codex app-server` PID
- Breakdown: ~166 × `node_repl`, ~84 × codex-app-tools `server.mjs`, ~83 × unified-computer-use `launch.mjs`
- Combined RSS ≈ **3.5 GB**; per-process CPU time near zero (idle but resident)
- Spawn timestamps spread across the entire day (e.g. 00:28, 03:51, 12:06, 15:51, 17:45 local time), i.e. one leak per session, including sessions finished many hours earlier.
- After quitting and relaunching the app, the count dropped to ~10 processes / ~119 MB, confirming the app-server is the parent and the leak is bounded only by app restarts.
Sample lines (home directory redacted):
```
PID PPID STARTED TIME COMMAND
63203 19921 Fri Sep 12 15:11:00 2026 0:00.32 .../cua_node/bin/node ./server.mjs
63202 19921 Fri Sep 12 15:11:00 2026 0:00.19 .../cua_node/bin/node .../unified-computer-use/26.903.71938/scripts/launch.mjs
63244 63221 Fri Sep 12 15:11:00 2026 0:00.21 .../cua_node/bin/node_repl
```
# Expected behavior
Helper processes should be terminated when the session or tool call that started them ends (e.g. the MCP server exits on client disconnect / stdin EOF, and its children are reaped). Long-running app uptime should not cause unbounded process/memory growth.
# Impact
- ~3.5 GB of wasted memory and hundreds of extra processes within a single workday; each Node.js process also carries ~10 OS threads, so this shows up as heavy thread pressure in Activity Monitor and degrades overall system responsiveness.
- Unbounded growth: the longer the app stays open (common on macOS), the worse it gets.
# Workaround
Periodically quit and relaunch the ChatGPT app, then remove any leftovers with a pattern that only matches the app's own helpers:
```
pkill -f 'ChatGPT.app/Contents/Resou…'
```
(Use with care; it intentionally does not match unrelated `node` processes such as local dev servers.)
Update on rate limits in Codex. We do see that for some users the cache hit rate has been worse this week than the stable state the weeks before. This could explain that usage is draining somewhat faster for those users as hitting the cache consistently is an important component
Update on rate limits in Codex. We do see that for some users the cache hit rate has been worse this week than the stable state the weeks before. This could explain that usage is draining somewhat faster for those users as hitting the cache consistently is an important component of being efficient.
We are investigating and will have an update tomorrow.
@abraibrai my account is [email protected]. I haven’t received the reset card yet. Could you please help me with this? I would really appreciate it. Thank you so much!
66K Followers 15K FollowingAmplifying silenced voices from Turkey. Justice, human rights & freedom stories. Independent and uncensored since 2016.
[email protected] 📩
313 Followers 2K FollowingServing the UK since 2000, DataFort partners with our clients to bring technologies usually only available to enterprises within the reach of SMBs
770 Followers 933 FollowingLet's free-up the work! We believe businesses and freelancers deserve a better framework to connect. We are committed to building it.
71 Followers 614 FollowingBienvenue je fais des concours gratuits et vrais car des marques me contact et me donne des produits à vous faire gagner chaque gagnant poste son cadeau reçu 😉
793 Followers 549 FollowingPixel Punk Art Collections (Anno 2024) in 24×24px (Facet) and 12×12px (Ethscribe). Posts by Gerald B, see https://t.co/33NdmckGRG
44K Followers 470 FollowingMember of Technical Staff @ DeepSeek, Harness Team
I'd love to connect with members of international frontier LLM labs! DM is open. Opinions are my own.
8K Followers 3K FollowingSenior Research Scholar @StanfordHAI focused on economics and governance of frontier AI
Previous: Stanford CS PhD @percyliang @jurafsky, Cornell CS
1.3M Followers 3 FollowingSubscribe for the best X experience: ad-free, post edits, content monetization, Grok AI with higher limits, video downloads, long posts, X Pro, and more.
592K Followers 2K FollowingPolyagentmorous ClawFather. Came back from retirement to mess with AI and help a lobster take over the world.
@OpenClaw🦞 + @OpenAI