v1.10.11
asheshgoplani/agent-deckv1.10.11Jul 26, 2026by asheshgoplani
AI Summary
A reliability release addressing critical data corruption and fleet-wide crashes. It fixes session identity immutability and prevents maintenance jobs from killing live sessions by identifying tmux servers by socket path instead of process name.
Key Highlights
- Reliability: Session identity is now immutable; `project_path` is fixed at creation to prevent silent re-binding.
- Fleet Safety: A maintenance job previously killed ~65 sessions; this is fixed by identifying tmux servers by socket path.
- Auth Handling: Auth-dead sessions are now held in a parked state instead of flapping the entire fleet.
- Recovery: New `agent-deck fleet recover` command for sequential, verified recovery.
- Performance: `show-environment` misses are cached to stop CPU scaling with fleet size.
New Features
- New `agent-deck fleet recover` command.
- New Claude 5 and GPT-5.6 models.
- `session handoff` command.
- Reasoning-effort pickers for Claude and Codex.
Full Release Notes
## 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_path` is now fixed at creation, and foreign-cwd candidates are excluded from session binding.** `project_path` was 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](https://github.com/asheshgoplani/agent-deck/pull/1731), closes [#1729](https://github.com/asheshgoplani/agent-deck/issues/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 to `new-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.sh` now ships in the repo and probes and kills exclusively through `tmux -S <socket>`, never `pgrep` or `pkill`, because argv is not identity. ([#1736](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/pull/1742)) - **Orphaned `tmux -C` control 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's `kern.tty.ptmx_max=511` pty cap, past which no new tmux session or terminal can be allocated at all. ### โก CPU and fork storms - **tmux `show-environment` misses 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](https://github.com/asheshgoplani/agent-deck/pull/1735), closes [#1728](https://github.com/asheshgoplani/agent-deck/issues/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](https://github.com/asheshgoplani/agent-deck/pull/1686), [#1552](https://github.com/asheshgoplani/agent-deck/issues/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](https://github.com/asheshgoplani/agent-deck/pull/1700)) - **The terminal bridge is reaped when its websocket peer dies**, instead of leaking one bridge process per dropped browser terminal. Thanks **@hfreire**. ([#1695](https://github.com/asheshgoplani/agent-deck/pull/1695)) ### โจ Features - **Claude 5 models in the session pickers.** Thanks **@scottyallen**. ([#1730](https://github.com/asheshgoplani/agent-deck/pull/1730)) - **GPT-5.6 models in the Codex session pickers.** Thanks **@mdrzn**. ([#1697](https://github.com/asheshgoplani/agent-deck/pull/1697)) - **Reasoning-effort pickers for Claude and Codex**, so effort is a choice at creation time rather than a tool default. Thanks **@mdrzn**. ([#1699](https://github.com/asheshgoplani/agent-deck/pull/1699)) - **hermes: `R`/restart resumes the hermes session** instead of silently doing nothing, which used to look like a hang. Thanks **@xcompass**. ([#1693](https://github.com/asheshgoplani/agent-deck/pull/1693)) - **Worktree setup-script failures are surfaced in the TUI** instead of failing quietly and leaving a half-prepared worktree. Thanks **@Clarity-89**. ([#1696](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/pull/1669)) - **`[cursor] hooks_enabled`**, a durable opt-out so uninstalling Cursor hooks is not undone by the next TUI auto-install pass. ([#1673](https://github.com/asheshgoplani/agent-deck/pull/1673), closes [#1672](https://github.com/asheshgoplani/agent-deck/issues/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](https://github.com/asheshgoplani/agent-deck/pull/1725)) - **`session send` detects an unsent multi-line initial prompt whose first line is short**, instead of leaving the prompt sitting in the composer. Thanks **@p4p3r**. ([#1724](https://github.com/asheshgoplani/agent-deck/pull/1724)) - **A dim prompt autosuggestion is never mistaken for an operator draft**, so `send` stops refusing to overwrite greyed-out ghost text. Thanks **@thelastguardian**. ([#1677](https://github.com/asheshgoplani/agent-deck/pull/1677)) - **Runtime tool detection prefers the pane command**, so a session's agent is identified from what is actually running. Thanks **@mdrzn**. ([#1719](https://github.com/asheshgoplani/agent-deck/pull/1719), closes [#1718](https://github.com/asheshgoplani/agent-deck/issues/1718)) - **SGR state is isolated across incremental row repaints**, ending colour bleed between rows. Thanks **@mdrzn**. ([#1716](https://github.com/asheshgoplani/agent-deck/pull/1716)) - **The last visible row of a group renders its `โโ` connector correctly** when filtering hides rows. Thanks **@xcompass**. ([#1667](https://github.com/asheshgoplani/agent-deck/pull/1667)) - **Remote host headers align flush with local root groups.** Thanks **@xcompass**. ([#1665](https://github.com/asheshgoplani/agent-deck/pull/1665)) - **The browser terminal translates native terminal keystrokes**, so control sequences and navigation keys reach the session. Thanks **@dbeaudoin**. ([#1662](https://github.com/asheshgoplani/agent-deck/pull/1662)) - **Handoff resolution reuses the transcript UUID fallback**, so a session whose ID is only recoverable from the transcript resolves. Thanks **@vigneshakaviki**. ([#1740](https://github.com/asheshgoplani/agent-deck/pull/1740), closes [#1671](https://github.com/asheshgoplani/agent-deck/issues/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](https://github.com/asheshgoplani/agent-deck/pull/1737), closes [#1702](https://github.com/asheshgoplani/agent-deck/issues/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/text` GO-2026-5970**, plus `golang.org/x/crypto` and `golang.org/x/net`. `govulncheck` is clean at this tag. ([#1689](https://github.com/asheshgoplani/agent-deck/pull/1689)) - **JS: all six open advisories in `tests/web` resolved.** ([#1734](https://github.com/asheshgoplani/agent-deck/pull/1734)) - **All remaining third-party GitHub Actions are pinned to commit SHAs.** No workflow here resolves a third-party action by mutable tag. ([#1668](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/pull/1678), closes [#1674](https://github.com/asheshgoplani/agent-deck/issues/1674)) - **`session restart --all` JSON output, exit code, and skip reporting are pinned.** Thanks **@c436zhan**. ([#1748](https://github.com/asheshgoplani/agent-deck/pull/1748), closes [#1745](https://github.com/asheshgoplani/agent-deck/issues/1745)) - **The status lock may no longer be held across a slow tmux probe**, pinned by a regression test. Thanks **@vigneshakaviki**. ([#1739](https://github.com/asheshgoplani/agent-deck/pull/1739), closes [#1732](https://github.com/asheshgoplani/agent-deck/issues/1732)) - **Cursor-hooks CLI wiring and the TUI auto-install gate are covered.** Thanks **@AnayGarodia**. ([#1680](https://github.com/asheshgoplani/agent-deck/pull/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-server` on that path ends every session on the machine, which is exactly the incident above. - **Lighthouse `total-byte-weight` budget recalibrated** to the current shipped bundle. ([#1666](https://github.com/asheshgoplani/agent-deck/pull/1666)) - Action bumps: `actions/setup-go` 6 โ 7 ([#1690](https://github.com/asheshgoplani/agent-deck/pull/1690)), `actions/setup-node` 6 โ 7 ([#1691](https://github.com/asheshgoplani/agent-deck/pull/1691)), `actions/setup-python` 6 โ 7 ([#1692](https://github.com/asheshgoplani/agent-deck/pull/1692)), `goreleaser/goreleaser-action` 7.2.2 โ 7.2.3 ([#1688](https://github.com/asheshgoplani/agent-deck/pull/1688)). ### ๐ Docs - **Naming and identity standard, plus proactive session-lifecycle design proposals.** ([#1738](https://github.com/asheshgoplani/agent-deck/pull/1738), [#1703](https://github.com/asheshgoplani/agent-deck/issues/1703), [#1704](https://github.com/asheshgoplani/agent-deck/issues/1704)) ### ๐ Credits This release is community-shaped. Thank you to **@p4p3r** ([#1725](https://github.com/asheshgoplani/agent-deck/pull/1725), [#1724](https://github.com/asheshgoplani/agent-deck/pull/1724)), **@mdrzn** ([#1697](https://github.com/asheshgoplani/agent-deck/pull/1697), [#1699](https://github.com/asheshgoplani/agent-deck/pull/1699), [#1719](https://github.com/asheshgoplani/agent-deck/pull/1719), [#1716](https://github.com/asheshgoplani/agent-deck/pull/1716)), **@vigneshakaviki** ([#1741](https://github.com/asheshgoplani/agent-deck/pull/1741), [#1739](https://github.com/asheshgoplani/agent-deck/pull/1739), [#1740](https://github.com/asheshgoplani/agent-deck/pull/1740)), **@xcompass** ([#1693](https://github.com/asheshgoplani/agent-deck/pull/1693), [#1667](https://github.com/asheshgoplani/agent-deck/pull/1667), [#1665](https://github.com/asheshgoplani/agent-deck/pull/1665)), **@scottyallen** ([#1730](https://github.com/asheshgoplani/agent-deck/pull/1730)), **@c436zhan** ([#1748](https://github.com/asheshgoplani/agent-deck/pull/1748)), **@Clarity-89** ([#1696](https://github.com/asheshgoplani/agent-deck/pull/1696)), **@hfreire** ([#1695](https://github.com/asheshgoplani/agent-deck/pull/1695)), **@drmzperx** ([#1700](https://github.com/asheshgoplani/agent-deck/pull/1700)), **@jwiegley** ([#1686](https://github.com/asheshgoplani/agent-deck/pull/1686)), **@thelastguardian** ([#1677](https://github.com/asheshgoplani/agent-deck/pull/1677)), **@AnayGarodia** ([#1680](https://github.com/asheshgoplani/agent-deck/pull/1680)), and **@dbeaudoin** ([#1662](https://github.com/asheshgoplani/agent-deck/pull/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](https://github.com/asheshgoplani/agent-deck/blob/main/CONTRIBUTING.md). ## Agent Deck v1.10.11 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.10.11 ``` ## Changelog * a06e9b28d89004577763e2248aa08514e077cb9c chore(ci): pin remaining third-party actions to commit SHAs (#1668) * 992d3741f1a1b5e283f43071da202b16775a36f2 chore(ci): recalibrate lighthouse total-byte-weight budget to 368000 (#1666) * 82eb17a3822a57fd3ff7ed1323ea6e808ffba0a4 chore(deps): bump actions/setup-go from 6 to 7 (#1690) * f8bf960fef762f5c473424eb2fd5edc5856caa97 chore(deps): bump actions/setup-node from 6 to 7 (#1691) * cc0b6e0683ea64b291a4441f76b8945091683029 chore(deps): bump actions/setup-python from 6 to 7 (#1692) * 646a265c01de37c1e5bea664517c31142e02dc7e chore(deps): bump go-minor-patch group (x/text GO-2026-5970 fix, x/crypto, x/net) (#1689) * ae7352b9616af86345a1aa3e6cf83ce5237525e2 chore(deps): bump goreleaser/goreleaser-action (#1688) * ef758ec2568a9b65d75775de3b33dbc6f4c11e02 chore(deps): fix all open JS dependency advisories in tests/web (#1734) * 1a4711dea3e053a1fdef3217e6814476e12ee630 chore(release): bump to v1.10.11, update CHANGELOG * 2c476aadf7265f13510c1f5b04df9f319e99922e docs(design): naming standard + proactive session lifecycle proposals (#1738) * 8c08c4e3ba4a31e2cb8232bd4d47c1b3294aaeb8 feat(claude): add Claude 5 models to session pickers (#1730) * a13408b45184089de6c5dd9a4081892b1d14961b feat(codex): add GPT-5.6 models to session pickers (#1697) * 6ede29db6b66398489d51f8fec3130988ceeeac9 feat(fleet): add 'agent-deck fleet recover' โ sequential, verified, brake-equipped recovery (#1742) * 2ba0687871bec18616d3b85138a9c3f9fffdc92e feat(hermes): make R/restart resume the hermes session instead of a silent no-op (#1693) * 935f6453d955ec09870078b3b7de714c3d337dff feat(session): handoff prompt builder + read-only 'session handoff' command (#1669) * bcc1543af132b2c89a90ffac64a92b1c1ebff66b feat(ui): surface worktree setup-script failures in TUI (#1696) * 14982eb75e88835f210ed2bc2a46bdd76d57a1bb feat: add Claude and Codex reasoning effort pickers (#1699) * fd1923c7105b08d104f692096dfdaf977e6ad702 fix(auth): hold auth-dead sessions instead of flapping the fleet (#1743) * d639ae83b7a40a761666a74f006f3c428cf6998b fix(ci): weekly-regression report walks nested suites + refreshed settings-drawer baseline (#1678, closes #1674) * fa3647a25214bb4585cdadd7c266badddf165586 fix(ci): write clean Playwright JSON report (#1741) * 21876eae0eba51d66d0d4552fa7b23af3a8e6c31 fix(codex): back off process-file probe to 30s once session ID is known (#1552) (#1686) * c64b431d7145de8b3cd1288df0473d61575ceff6 fix(cursor): durable hooks opt-out via [cursor] hooks_enabled (#1673, closes #1672) * 4bf81d513483534b7e271aba4f0d82e7304d6706 fix(handoff): reuse transcript UUID fallback in handoff resolution (#1740, closes #1671) * c966d5290010c89ef2be584a5943e460b737f8f5 fix(send): detect an unsent multi-line initial prompt with a short first line (#1724) * d16d2bc9849536ab4c7f4490d629153305140ff8 fix(send): never treat a dim prompt autosuggestion as an operator draft (#1677) * eea964af45259b6c0a9cdfa12b4733608b90f052 fix(status): read pane exit code so a clean one-shot exit is not an error (#1725) * 311ebd1abeeb1beda26402d4e403b39f1b773679 fix(tmux): bound every cadence tmux command with a deadline (#1700) * 4b72051ff0fd20e89b081e35f8ce6fd2d4d86077 fix(tmux): cache show-environment misses to stop per-sweep fork storm (#1735, closes #1728) * 673a54f9265eeb7abb0cfe50186a6f6ffbb6ff23 fix(tmux): prefer pane command for runtime tool detection (#1719, closes #1718) * 9ed26c287f8cd952a9d5a53e05961de4c4be57bf fix(tmux): stop spawning bare 'tmux -C', reap stale servers by socket path only (#1736) * 01d6ba8103364e5bc67a64a45ee489ab7f0c0406 fix(ui): align remote host header flush with local root groups (#1665) * e71de8a9bf317cdaaf8cc74401fda0c31316fd7e fix(ui): isolate SGR state across incremental row repaints (#1716) * 16e43a95410fccedce93a20294150571271a326c fix(ui): park New Session path cursor at the end on reopen (#1737, closes #1702) * 33673cfaac882c159f4b3f8e652c02c9e16bcb45 fix(ui): recompute IsLastInGroup so the last visible group row renders correctly (#1667) * 82590e68d0b004433ecdacda1519511ed3f3a732 fix(web): translate native terminal keystrokes in the browser terminal (#1662) * 1b3ae4df4af6f0a3db7c09e308c02a3ecd7e7837 fix: project_path immutable post-creation; foreign-cwd candidates excluded from session binding (#1729) (#1731) * 23e93aee76ab677b80d862225ca08fb9e2724c4f fix: reap leaked tmux terminal bridge on dead websocket peer (#1695) * ad252f1d3064bd5d986a11fa1d795f1e4e31773d test(status): pin lock drop during slow tmux probe (#1739, closes #1732) --- **Full Changelog**: https://github.com/asheshgoplani/agent-deck/compare/v1.10.10...v1.10.11