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