What's new in v1.10.11
This is the reliability release. Three classes of failure that could take out real work are now closed: a session's identity could be silently re-bound to the wrong project directory, a single tmux maintenance job could kill an entire fleet of live sessions, and three separate polling paths burned CPU proportional to fleet size. On top of that: a security-clean dependency tree and the largest batch of community contributions this project has had.
๐ Session identity is immutable (data-corruption fix)
project_pathis now fixed at creation, and foreign-cwd candidates are excluded from session binding.project_pathwas writable after creation and the binding candidate search accepted working directories that did not belong to the session, so a session could be silently re-pointed at another project's path. That path is the identity conversation resume, worktree bookkeeping, and group placement all key on, so a bad rebind corrupted all three at once. (#1731, closes #1729)
๐งจ The tmux fleet-death fixes
On 2026-07-26 a maintenance job that matched tmux servers by process name (pgrep -fx "tmux -C") killed the default-socket server and, with it, roughly 65 live sessions at once. The reason it matched: insert mode spawned a bare tmux -C client, and on macOS a process keeps the argv it was exec'd with, so the server auto-started by that client was itself named exactly tmux -C. Two independent flaws, fatal only together.
- Insert mode no longer spawns a bare
tmux -C, and the reaper identifies servers by socket path only. The keysender now attaches explicitly (tmux -C attach-session -t <target>), creates no session, verifies the attach handshake, and tears down its process group on close. A control-mode client with no command falls back tonew-session, so every insert-mode entry used to mint an extra session with a live shell pane and its own pty that close never reaped.scripts/reap-stale-tmux.shnow ships in the repo and probes and kills exclusively throughtmux -S <socket>, neverpgreporpkill, because argv is not identity. (#1736) - An auth-dead session is held instead of flapping the whole fleet. When credentials went bad, the status and revive machinery kept retrying, and every retry churned tmux and the token, turning one broken login into fleet-wide restart flapping that also fed the multi-session OAuth rotation race. Auth-dead sessions now park in an explicit hold state until the credential problem is actually resolved. (#1743)
- New:
agent-deck fleet recover. Sequential, verified, brake-equipped recovery after a fleet-wide death. It restarts eligible sessions one at a time with spacing, confirms each one came back before moving on, and stops on a failure threshold instead of grinding through a broken fleet. (#1742) - Orphaned
tmux -Ccontrol clients are swept server-wide at TUI startup. Previously they were only reaped for sessions a new TUI actively reconnected to, so orphans left by crashed or OOM-killed TUIs accumulated indefinitely. Observed in the wild at 176 orphaned control clients against macOS'skern.tty.ptmx_max=511pty cap, past which no new tmux session or terminal can be allocated at all.
โก CPU and fork storms
- tmux
show-environmentmisses are cached. Every status sweep re-forked a tmux client per session to look up a variable that provably was not there, so steady-state CPU scaled with fleet size. (#1735, closes #1728) - codex: the process-file probe backs off to 30s once the session ID is known, instead of polling at startup cadence forever. Thanks @jwiegley. (#1686, #1552)
- Every cadence tmux command carries a deadline, so a wedged tmux server degrades instead of freezing the poller that called it. Thanks @drmzperx. (#1700)
- The terminal bridge is reaped when its websocket peer dies, instead of leaking one bridge process per dropped browser terminal. Thanks @hfreire. (#1695)
โจ Features
- Claude 5 models in the session pickers. Thanks @scottyallen. (#1730)
- GPT-5.6 models in the Codex session pickers. Thanks @mdrzn. (#1697)
- Reasoning-effort pickers for Claude and Codex, so effort is a choice at creation time rather than a tool default. Thanks @mdrzn. (#1699)
- hermes:
R/restart resumes the hermes session instead of silently doing nothing, which used to look like a hang. Thanks @xcompass. (#1693) - Worktree setup-script failures are surfaced in the TUI instead of failing quietly and leaving a half-prepared worktree. Thanks @Clarity-89. (#1696)
agent-deck session handoff, a read-only handoff prompt builder that summarizes a session's working context without mutating it. Phase 1 of runtime switching. (#1669)[cursor] hooks_enabled, a durable opt-out so uninstalling Cursor hooks is not undone by the next TUI auto-install pass. (#1673, closes #1672)
๐ Fixes
- A clean one-shot exit is no longer red. Status reads the pane exit code, so a command that finished successfully shows as finished. Thanks @p4p3r. (#1725)
session senddetects an unsent multi-line initial prompt whose first line is short, instead of leaving the prompt sitting in the composer. Thanks @p4p3r. (#1724)- A dim prompt autosuggestion is never mistaken for an operator draft, so
sendstops refusing to overwrite greyed-out ghost text. Thanks @thelastguardian. (#1677) - Runtime tool detection prefers the pane command, so a session's agent is identified from what is actually running. Thanks @mdrzn. (#1719, closes #1718)
- SGR state is isolated across incremental row repaints, ending colour bleed between rows. Thanks @mdrzn. (#1716)
- The last visible row of a group renders its
โโconnector correctly when filtering hides rows. Thanks @xcompass. (#1667) - Remote host headers align flush with local root groups. Thanks @xcompass. (#1665)
- The browser terminal translates native terminal keystrokes, so control sequences and navigation keys reach the session. Thanks @dbeaudoin. (#1662)
- Handoff resolution reuses the transcript UUID fallback, so a session whose ID is only recoverable from the transcript resolves. Thanks @vigneshakaviki. (#1740, closes #1671)
- The New Session path cursor parks at the end of the path on reopen, so typing appends instead of splicing into the middle. (#1737, closes #1702)
- A manual session rename survives a reload race. The pending-title queue now carries the lock intent alongside the string, so a user rename is restored locked and the next Claude-name sync cannot overwrite it with the auto-derived folder name.
๐ก๏ธ Security and dependencies
- Go: every open advisory closed, including
golang.org/x/textGO-2026-5970, plusgolang.org/x/cryptoandgolang.org/x/net.govulncheckis clean at this tag. (#1689) - JS: all six open advisories in
tests/webresolved. (#1734) - All remaining third-party GitHub Actions are pinned to commit SHAs. No workflow here resolves a third-party action by mutable tag. (#1668)
๐งช Tests and CI truthfulness
- The Playwright reporter writes a clean JSON report. Non-JSON output was polluting the report file, so downstream parsing of web-test results silently produced nothing and a run could look reported when it was not. Thanks @vigneshakaviki. (#1741)
- The weekly-regression report walks nested suites instead of stopping at the top level and under-reporting; the settings-drawer visual baseline is refreshed. (#1678, closes #1674)
session restart --allJSON output, exit code, and skip reporting are pinned. Thanks @c436zhan. (#1748, closes #1745)- The status lock may no longer be held across a slow tmux probe, pinned by a regression test. Thanks @vigneshakaviki. (#1739, closes #1732)
- Cursor-hooks CLI wiring and the TUI auto-install gate are covered. Thanks @AnayGarodia. (#1680)
- Test tmux servers can no longer strand themselves or reach your real server. Isolation helpers kill every server under a socket dir before removing it (unlinking a socket does not signal its listener), isolation is now sticky so goroutines outliving a suite cannot fall back to the live default server, and the argv factory panics before spawning if a test binary's tmux command would target the user's default socket. One
kill-serveron that path ends every session on the machine, which is exactly the incident above. - Lighthouse
total-byte-weightbudget recalibrated to the current shipped bundle. (#1666) - Action bumps:
actions/setup-go6 โ 7 (#1690),actions/setup-node6 โ 7 (#1691),actions/setup-python6 โ 7 (#1692),goreleaser/goreleaser-action7.2.2 โ 7.2.3 (#1688).
๐ Docs
- Naming and identity standard, plus proactive session-lifecycle design proposals. (#1738, #1703, #1704)
๐ Credits
This release is community-shaped. Thank you to @p4p3r (#1725, #1724), @mdrzn (#1697, #1699, #1719, #1716), @vigneshakaviki (#1741, #1739, #1740), @xcompass (#1693, #1667, #1665), @scottyallen (#1730), @c436zhan (#1748), @Clarity-89 (#1696), @hfreire (#1695), @drmzperx (#1700), @jwiegley (#1686), @thelastguardian (#1677), @AnayGarodia (#1680), and @dbeaudoin (#1662).
Maintainers and contributors are still wanted. If any of the above looks like work you would enjoy, the contributor guide is in CONTRIBUTING.md.
Agent Deck v1.10.11
Terminal session manager for AI coding agents.
Installation
Homebrew (recommended):
brew install asheshgoplani/tap/agent-deckQuick Install:
curl -fsSL https://raw.githubusercontent.com/asheshgoplani/agent-deck/main/install.sh | bashGo Install:
go install github.com/asheshgoplani/agent-deck/cmd/agent-deck@v1.10.11Changelog
- a06e9b2 chore(ci): pin remaining third-party actions to commit SHAs (#1668)
- 992d374 chore(ci): recalibrate lighthouse total-byte-weight budget to 368000 (#1666)
- 82eb17a chore(deps): bump actions/setup-go from 6 to 7 (#1690)
- f8bf960 chore(deps): bump actions/setup-node from 6 to 7 (#1691)
- cc0b6e0 chore(deps): bump actions/setup-python from 6 to 7 (#1692)
- 646a265 chore(deps): bump go-minor-patch group (x/text GO-2026-5970 fix, x/crypto, x/net) (#1689)
- ae7352b chore(deps): bump goreleaser/goreleaser-action (#1688)
- ef758ec chore(deps): fix all open JS dependency advisories in tests/web (#1734)
- 1a4711d chore(release): bump to v1.10.11, update CHANGELOG
- 2c476aa docs(design): naming standard + proactive session lifecycle proposals (#1738)
- 8c08c4e feat(claude): add Claude 5 models to session pickers (#1730)
- a13408b feat(codex): add GPT-5.6 models to session pickers (#1697)
- 6ede29d feat(fleet): add 'agent-deck fleet recover' โ sequential, verified, brake-equipped recovery (#1742)
- 2ba0687 feat(hermes): make R/restart resume the hermes session instead of a silent no-op (#1693)
- 935f645 feat(session): handoff prompt builder + read-only 'session handoff' command (#1669)
- bcc1543 feat(ui): surface worktree setup-script failures in TUI (#1696)
- 14982eb feat: add Claude and Codex reasoning effort pickers (#1699)
- fd1923c fix(auth): hold auth-dead sessions instead of flapping the fleet (#1743)
- d639ae8 fix(ci): weekly-regression report walks nested suites + refreshed settings-drawer baseline (#1678, closes #1674)
- fa3647a fix(ci): write clean Playwright JSON report (#1741)
- 21876ea fix(codex): back off process-file probe to 30s once session ID is known (#1552) (#1686)
- c64b431 fix(cursor): durable hooks opt-out via [cursor] hooks_enabled (#1673, closes #1672)
- 4bf81d5 fix(handoff): reuse transcript UUID fallback in handoff resolution (#1740, closes #1671)
- c966d52 fix(send): detect an unsent multi-line initial prompt with a short first line (#1724)
- d16d2bc fix(send): never treat a dim prompt autosuggestion as an operator draft (#1677)
- eea964a fix(status): read pane exit code so a clean one-shot exit is not an error (#1725)
- 311ebd1 fix(tmux): bound every cadence tmux command with a deadline (#1700)
- 4b72051 fix(tmux): cache show-environment misses to stop per-sweep fork storm (#1735, closes #1728)
- 673a54f fix(tmux): prefer pane command for runtime tool detection (#1719, closes #1718)
- 9ed26c2 fix(tmux): stop spawning bare 'tmux -C', reap stale servers by socket path only (#1736)
- 01d6ba8 fix(ui): align remote host header flush with local root groups (#1665)
- e71de8a fix(ui): isolate SGR state across incremental row repaints (#1716)
- 16e43a9 fix(ui): park New Session path cursor at the end on reopen (#1737, closes #1702)
- 33673cf fix(ui): recompute IsLastInGroup so the last visible group row renders correctly (#1667)
- 82590e6 fix(web): translate native terminal keystrokes in the browser terminal (#1662)
- 1b3ae4d fix: project_path immutable post-creation; foreign-cwd candidates excluded from session binding (#1729) (#1731)
- 23e93ae fix: reap leaked tmux terminal bridge on dead websocket peer (#1695)
- ad252f1 test(status): pin lock drop during slow tmux probe (#1739, closes #1732)
Full Changelog: v1.10.10...v1.10.11