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