v1.7.43
asheshgoplani/agent-deckv1.7.43Apr 21, 2026by asheshgoplani
Full Release Notes
## Fixed **Zombie tmux clients and MCP subprocesses no longer accumulate in long-running agent-deck TUI and web processes** ([#677](https://github.com/asheshgoplani/agent-deck/issues/677)). Four `exec.Cmd.Start()` call sites paired `cmd.Wait()` only with their manual-shutdown path, so any child that exited on its own became a zombie process-table entry that was never reaped. On one live conductor this week: **10 zombies on the TUI** (all `npm exec` / `uv` MCP children from `broadcastResponses`) plus **43 zombies across web/TUI** cascades earlier the same day. Per-zombie memory is tiny but growth is unbounded: over a week-long session with an attached MCP pool and active watcher triage this bloats the process table and eventually trips the per-UID process limit, manifesting as `fork/exec` failures far from the real cause. Four fix sites: 1. **`internal/tmux/controlpipe.go`** — `reader()` saw stdout EOF on tmux subprocess death but never reaped. Added `sync.Once`-guarded `reap()` called from both `reader()` defer (natural EOF) and `Close()` (manual shutdown). 2. **`internal/mcppool/socket_proxy.go`** — `broadcastResponses` saw MCP stdout EOF, flipped status to `StatusFailed`, but never called `Wait()`. Zombie lingered until `Stop()`/`RestartProxy()` which for idle MCPs may be never. Same `waitOnce`/`reap()` pattern wired into all three paths (EOF, Stop, socket-create fallback). 3. **`internal/watcher/triage.go`** — `AgentDeckLaunchSpawner.Spawn()` was fire-and-forget. Every triage event produced one zombie. Added async reaper goroutine after `Start()`. Regression coverage: - `TestControlPipe_NoZombie_*` (20 kill-session cycles, asserts zombie count doesn't grow) - `TestSocketProxy_NoZombie_OnProcessExit` (15 MCP death cycles) - `TestAgentDeckLaunchSpawner_NoZombie` (25 triage spawns) Each test reads `/proc/<pid>/status` for `State: Z (zombie)` — RED before fix printed exactly N zombies per N cycles (linear growth); GREEN after fix holds at zero. **Upgrade notes:** restart any long-running `agent-deck` TUI or web process to pick up the fix. Existing zombies reaped by the OS once the parent exits. Changelog: [CHANGELOG.md](https://github.com/asheshgoplani/agent-deck/blob/main/CHANGELOG.md#1743---2026-04-21) ## Agent Deck v1.7.43 Terminal session manager for AI coding agents. ### Installation **Homebrew (recommended):** ```bash brew install asheshgoplani/tap/agent-deck ``` **Quick Install:** ```bash curl -fsSL https://raw.githubusercontent.com/asheshgoplani/agent-deck/main/install.sh | bash ``` **Go Install:** ```bash go install github.com/asheshgoplani/agent-deck/cmd/agent-deck@v1.7.43 ``` ## Changelog * d00799198a0966b488a27043b8ef43d959802cb3 fix(lifecycle): reap tmux + MCP + triage subprocesses to kill zombie leak (#677, v1.7.43) --- **Full Changelog**: https://github.com/asheshgoplani/agent-deck/compare/v1.7.42...v1.7.43