github asheshgoplani/agent-deck v1.16.17

latest release: v1.16.18
4 hours ago

Agent Deck 1.16.17

Highlights

  • Live Claude sessions are no longer killed by the startup watchdog (#2361, #2369).
  • Session status lights tell the truth: no more false "waiting" from Codex sub-agents, no more false "error" storms from a deck started inside another tmux server, no more "running" for a Claude that only has background shells left.
  • The deck fits every terminal: dialogs, key hints, selected state and overlays at 80x24 and 60x15.
  • Large fleets stay responsive: status work per tick is bounded, and the rows you are looking at refresh first.
  • A 300-session session list now takes 0.1 s instead of 3.2 s.
  • session send to a busy Claude returns at once with an honest verdict instead of waiting and then reporting a false failure.
  • A first core surface for the upcoming Mac app, all off by default or CLI-only. The TUI is untouched by it.

Fixed: session status

  • A Codex sub-agent finishing its turn no longer flips a working session to waiting (each flip used to raise an inbox event for the parent).
  • A deck started inside a private tmux server (for example tmux -L with AGENT_DECK_ALLOW_OUTER_TMUX=1) no longer writes error for every session on the default server. When a session is missing from the server the process can see but present on the default server, its absence is not evidence and the last known status is kept.
  • The startup watchdog no longer respawns a healthy Claude pane. Hook events now clear the startup clock, and an overdue pane is probed for a live prompt or busy indicator before it is expired, using the same frame preparation normal detection uses (#2361; thanks @tarekrached for #2362 and #2364).
  • Status lights across Claude, Codex and pi: a Claude at the prompt with only background shells is waiting; Codex's "Working" line above the composer counts as running but the same text inside its transcript does not; unsent drafts and pi's status line count as a prompt; stale remote rows no longer show full green.
  • Remotes need this update too: a remote row is the remote's own verdict, so remotes still on 1.16.16 keep the old behaviour until they update (agent-deck remote update --all).

Fixed: terminal UI

  • Nothing clips: Edit, Settings, MCP, Skills, Local Search, Recall, Fork and the first-run wizard fit the terminal at 80x24 and 60x15. A dialog that is too tall scrolls its body around the focused field with the title and the key hints pinned; key hints wrap to a second row instead of being dropped.
  • Rows tell the truth: narrow rows keep the complete session name, generated names come before task descriptions, fork badges fit, and the selected group shows a cursor in the gutter.
  • State is visible: the active filter, time range and view are shown, the help footer keeps its hints when a row is selected, an empty filter shows "No sessions match" instead of silently snapping back to All, and a stopped session's preview says "Process Exited" rather than guessing why.
  • One overlay style: jump hints in the gutter, centred overlays, the session switcher no longer bleeds into the preview, an unreachable remote shows its reason first, and search and group numbering match what the list shows. Local Search keeps its top border at every size.
  • The header tally, group preview and filter pills count every row the list draws, including starting and queued rows.
  • Tree connectors are computed from the final visible list, so nested sessions and window rows draw the right branch lines (#2363; thanks @AdamiecRadek).
  • Groups reorder among their siblings, so a root group can move past a group that has subgroups (#2346; thanks @scottyallen).
  • Large session lists: the status readers no longer block behind a tmux probe, Codex ownership is read in one tmux query instead of one per session, and the periodic status sweep is budgeted per tick while visible rows and rows with new hook evidence always refresh on the next pass. On a 136-session fleet the background status tick dropped from about 600 ms to about 220 ms and tmux calls per tick from about 280 to about 70.
  • The update banner no longer offers Ctrl+T while the background update would refuse it; pressing Ctrl+T during the run queues the restart (#2336).
  • The preview of a remote session shows the account it runs on, with usage and poll time, and says plainly when that is unknown.
  • A shared session with two people attached no longer stays frozen at the size of someone who already left.
  • The deck checks every rebuild for a duplicate group or session row and logs it; AGENTDECK_DUMP_ROWS=<file> writes the rows for a bug report.
  • Devanagari and other complex-script text in the preview no longer wraps a row and corrupts the deck; opt-in [tmux] indic_zero_width_marks = true (tmux 3.6+) makes tmux measure Indic vowel signs the way Claude Code does (#2334).
  • Opening the MCP Manager on a tool that does not support it shows a footer notice instead of doing nothing (#2357, #2358; thanks @karaaslanz).

Faster session list

  • Faster session list: session list --json and remote listings no longer probe tmux once per stopped session, so a 300-session list dropped from 3.2 s to 0.1 s. Stopped rows report status_source: cached, refreshed rows status_source: live.

Fixed: sending messages

  • session send to a busy Claude Code session types at once (Claude queues the input) and verifies within about a second, reporting delivered, queued or unknown, never failed without positive evidence. Codex, Pi, shell and unknown harnesses keep the guarded path. A plain session send --json returns in tens of milliseconds with a durable send_id and verdict and still carries the documented success, delivery, submitted and confirmation keys.
  • session send to a Codex session works again after its first turn and at a fresh composer (Codex 0.155's title thread no longer takes over the session identity).
  • Terminal replies such as ?61;4;6;7c no longer leak into the prompt when switching sessions quickly, one reply per attach (#2356; thanks @abaro-net for the report).

Fixed: updates, install, remotes, conductor

  • agent-deck update no longer gives up on a slow connection; the download times out only when it stalls, resumes on retry, shows progress and refuses an oversized file.
  • install.sh reads the latest version from the release tag again (#2359; thanks @jkotzker).
  • The conductor bridge recreates a missing conductor with the agent from its meta.json (for example Codex) instead of Claude, and refuses when that metadata is unusable; an unknown agent or an invalid byte in meta.json no longer hides the conductor (#2352, #2354; thanks @p4p3r).
  • Conductor heartbeats wake only when a local child's waiting or error state or the inbox changes; unchanged ticks send nothing. Teardown stops the timer cleanly, also for an unknown agent (#2348; thanks @bautrey for the report).
  • agent-deck update --check --json reports auto_update_remotes next to auto_install and auto_restart.

Core (for the upcoming Mac app)

All additive, off by default or CLI-only; see docs/macapp-core.md, docs/events.md, docs/recall-timeline.md, docs/core-registry.md and docs/daemon-protocol.md.

  • recall timeline / recall follow return typed rows read straight from the native Claude Code or Codex transcript, with stable native ids, --since/--limit/--tail, and a --status frame from a read-only pane capture (--v1 keeps the old shape). Behind [recall] enabled.
  • events follow carries session.status and session.turn frames behind [macapp] status_events; events publish accepts macapp.* behind [macapp] plugins; events stats counts per kind. A durable event bus and agent-deck daemon serve|status|stop on a 0600 socket, direct mode by default.
  • session send --queue returns a send_id at once and a background worker delivers at most once, never silently; session send-status <id> reports the state; session send --image <path> attaches images for Claude Code and Gemini.
  • Codex sessions track their live rollout after the trust prompt, bound only to their own thread; session show --json gains transcript_path and transcript_ids.
  • New harness list/status --json, limits --json (behind [macapp] plugins), config get/set/schema --json, and a favourites flag (session set <id> favorite true).
  • session start/stop/restart, list and group list run through a typed command registry; output unchanged, --json=envelope opt-in; AGENT_DECK_CORE_REGISTRY=0 restores the previous handlers.

Known issues and what is not in this release

  • Homebrew tap still serves 1.16.10 until the tap token is repaired (#2360). Use agent-deck update, install.sh or go install.
  • SSH ControlMaster channel exhaustion on large fleets (#2355, PR #2365) is held for a field measurement on a loaded host; it lands in the next release.
  • Codex quoted "esc to interrupt" prose (#2351, PR #2353) is held; this release keeps the safe, busy-leaning behaviour.
  • The Help overlay at 60x15 loses its top border (present since before 1.16.16); the Plugin dialog is still cut at 60 columns. Both are in the next TUI round.
  • Windows Terminal field confirmation of the DA1/DA2 fix (#2356) is still wanted from the reporter.

Contributors

Thanks to @tarekrached (#2362, #2364), @AdamiecRadek (#2363), @scottyallen (#2346), @karaaslanz (#2358), @p4p3r (#2354), and to @jkotzker, @abaro-net, @bautrey and @barjatiyasaurabh for the reports.

Don't miss a new agent-deck release

NewReleases is sending notifications on new releases.