Summary
Buzz Desktop 0.4.23 defaults every managed local agent to parallelism: 24 and manual agent starts eagerly initialize the full pool. With Codex ACP, each worker is a multi-process adapter/app-server chain, so a few agents can create hundreds of idle processes, consume double-digit GiB of RAM, and populate Codex Recents with [Base] You are operating inside the Buzz platform... sessions.
This initially looked like an orphan cleanup leak, but controlled shutdown and source inspection show that cleanup works. The problem is the default pool size plus eager manual startup.
Environment
- Buzz Desktop: 0.4.23
- macOS: 26.5.2 (25F84)
- Architecture: arm64
- Hardware: Apple M4 Max
- Agent runtime: bundled
@agentclientprotocol/codex-acp
- Model:
gpt-5.6-sol
Reproduction
- Create three local Codex-backed agents using the default parallelism.
- Create one additional local agent with parallelism set to 1.
- Start all four agents from Buzz Desktop.
- Inspect the Buzz-owned process tree and local Codex Recents/state.
Actual behavior
The four agents were configured as 24 + 24 + 24 + 1 = 73 worker slots.
A live process snapshot showed:
- 4
buzz-acp roots owned by buzz-desktop
- approximately 220
codex-acp / Codex app-server descendants
- 226 total Buzz-related processes
- 14,359.8 MiB combined RSS
- approximately 0% combined CPU while idle
The process count matches the configuration: 73 worker slots, with roughly three OS processes per Codex ACP worker.
The local Codex state database also contained 40 visible threads titled [Base] You are operating inside the Buzz platform...:
- all 40 had
has_user_event = 0
- 17,721,356 cumulative tokens were recorded across those threads
- threads were created across repeated Buzz agent starts over three days
The token field is reported as supporting evidence of substantial session activity; actual billed usage may differ due to caching/accounting semantics.
Quitting Buzz gracefully removed all 226 processes. Reopening Buzz without starting agents produced one buzz-desktop process at approximately 146 MiB. This confirms the process-tree shutdown path works and this is not an orphan-process report.
Source-level cause
At tag v0.4.23:
desktop/src-tauri/src/managed_agents/types.rs sets DEFAULT_AGENT_PARALLELISM to 24.
desktop/src-tauri/src/managed_agents/runtime.rs exports that value as BUZZ_ACP_AGENTS.
start_managed_agent_process calls spawn_agent_child(..., false, ...), disabling lazy-pool startup for the manual start path.
crates/buzz-acp/src/lib.rs immediately calls initialize_agent_pool(...) when lazy_pool is false.
- In contrast, launch-time restore already uses
spawn_agent_child(..., true, ...), with a comment explaining that eager restore would create “N idle brains.”
Relevant code:
Expected behavior
Starting a normally configured local agent should not eagerly allocate 24 model-adapter workers or create user-visible Codex sessions before work arrives.
Suggested fix
- Change the desktop default parallelism from 24 to 1.
- Use lazy-pool startup for manual starts, matching launch-time restore.
- Avoid creating visible Codex Recents entries for idle ACP workers, or archive/reuse them as internal sessions.
- Make higher parallelism an explicit advanced setting with a clear resource-cost warning.
- Add a regression test proving that manual start with default settings does not spawn the full worker pool until the first event arrives.
Even if parallelism 24 remains available for high-throughput deployments, it is unsafe as the default for a desktop installation using Codex ACP.
Summary
Buzz Desktop 0.4.23 defaults every managed local agent to
parallelism: 24and manual agent starts eagerly initialize the full pool. With Codex ACP, each worker is a multi-process adapter/app-server chain, so a few agents can create hundreds of idle processes, consume double-digit GiB of RAM, and populate Codex Recents with[Base] You are operating inside the Buzz platform...sessions.This initially looked like an orphan cleanup leak, but controlled shutdown and source inspection show that cleanup works. The problem is the default pool size plus eager manual startup.
Environment
@agentclientprotocol/codex-acpgpt-5.6-solReproduction
Actual behavior
The four agents were configured as
24 + 24 + 24 + 1 = 73worker slots.A live process snapshot showed:
buzz-acproots owned bybuzz-desktopcodex-acp/ Codex app-server descendantsThe process count matches the configuration: 73 worker slots, with roughly three OS processes per Codex ACP worker.
The local Codex state database also contained 40 visible threads titled
[Base] You are operating inside the Buzz platform...:has_user_event = 0The token field is reported as supporting evidence of substantial session activity; actual billed usage may differ due to caching/accounting semantics.
Quitting Buzz gracefully removed all 226 processes. Reopening Buzz without starting agents produced one
buzz-desktopprocess at approximately 146 MiB. This confirms the process-tree shutdown path works and this is not an orphan-process report.Source-level cause
At tag
v0.4.23:desktop/src-tauri/src/managed_agents/types.rssetsDEFAULT_AGENT_PARALLELISMto 24.desktop/src-tauri/src/managed_agents/runtime.rsexports that value asBUZZ_ACP_AGENTS.start_managed_agent_processcallsspawn_agent_child(..., false, ...), disabling lazy-pool startup for the manual start path.crates/buzz-acp/src/lib.rsimmediately callsinitialize_agent_pool(...)whenlazy_poolis false.spawn_agent_child(..., true, ...), with a comment explaining that eager restore would create “N idle brains.”Relevant code:
Expected behavior
Starting a normally configured local agent should not eagerly allocate 24 model-adapter workers or create user-visible Codex sessions before work arrives.
Suggested fix
Even if parallelism 24 remains available for high-throughput deployments, it is unsafe as the default for a desktop installation using Codex ACP.