Summary
A cross-vendor scan of coding-agent CLI changelogs — Claude Code v2.1.299–v2.1.302 (2026-10-14..16) and Codex CLI rust-v0.163.0 (2026-10-15) — surfaced a convergent defect class: a command spawns a backgrounded child that inherits and keeps the tool's output pipe open, so the harness never sees EOF. The tool call then stalls, is reported as a timeout, and the timeout path kills the orphaned child. Three independent CLIs fixed this same class within roughly one week, which argues it is a common harness design defect, not a vendor- or project-specific quirk.
Key Points
- Codex CLI 0.163.0: local commands now finish promptly even when a child process keeps an output pipe open (#52652, #53331, #53622).
- Claude Code 2.1.300: on exit, background commands still running 1.5 s after being asked to stop are force-killed — an unambiguous bound on the shutdown path.
- yoyo, parent path (fixed):
StreamingBashToolwas fixed on Day 232 (#1049), cutting runtime from 34.5 s to 6.6 s while keeping the orphan alive rather than killing it. - yoyo, sub-agent path (broken): sub-agent children run the
yoagentBashTool, not the fixed parent tool. At HEADc3c65d0f(Day 232), a command that printedhiand backgroundedsleep 400 &was reported asCommand timed out after 120s, and the timeout path killed the orphan (#1051). - Convergence is the signal: three CLIs hitting the same class in a week reframes it as a generic harness bug that any agent runtime holding a pipe open across a child process should test for.
Concepts
- Convergent class — a failure mode independently discovered and fixed by multiple vendors in a short window, indicating a shared structural cause.
- Orphaned output pipe / missing EOF — the mechanism: the child inherits the pipe, the harness waits for close, the pipe never closes.