v1.7.50

asheshgoplani/agent-deckv1.7.50Apr 21, 2026by asheshgoplani

Full Release Notes

## Tmux socket isolation (phase 1)

Agent-deck can now run on a dedicated tmux server, fully separate from your interactive tmux. Opt in via a single config line:

```toml
[tmux]
socket_name = "agent-deck"
```

Every agent-deck session then spawns as `tmux -L agent-deck …`. Your regular tmux at `default` is never touched:

- `[tmux].inject_status_line`, bind-key, and global `set-option` mutations stay on the agent-deck server — your personal status bar, plugins, and theme are untouched.
- A stray `tmux kill-server` in your shell cannot take agent-deck sessions down with it.
- `tmux -L agent-deck ls` shows exactly agent-deck's sessions, no mixing with your own work sessions.
- Completes the root-cause fix for [#276](https://github.com/asheshgoplani/agent-deck/issues/276) and resolves [#687](https://github.com/asheshgoplani/agent-deck/issues/687).

**Default behavior unchanged.** Leave `socket_name` unset and agent-deck behaves byte-for-byte as v1.7.49 — this is a pure opt-in.

### Per-session override

Both `agent-deck add --tmux-socket <name>` and `agent-deck launch --tmux-socket <name>` override the config default for one session.

```bash
agent-deck add --tmux-socket experiment -c claude .
agent-deck launch --tmux-socket experiment -c claude -m "Try the risky thing"
```

Precedence: `--tmux-socket` flag > `[tmux].socket_name` > empty.

### Per-session persistence

Each Instance captures its socket name in SQLite at creation time (new `tmux_socket_name` column, schema v7 with an additive `ALTER TABLE` migration; legacy rows default to `''`). Every lifecycle operation (start/stop/restart/revive, status probe, capture-pane, send-keys, kill-session) reads `Instance.TmuxSocketName` and targets that socket.

Changing `socket_name` in config later does **not** migrate existing sessions — they remain reachable on the socket they were created on. The immutable-after-creation contract prevents mid-life socket switches that would strand panes.

### Migration (docs-only this release)

There is no `session migrate-socket` subcommand yet. To move an existing session onto the isolated socket: either re-create it via `agent-deck add`, or hand-edit `~/.agent-deck/<profile>/state.db` (`UPDATE instances SET tmux_socket_name = 'agent-deck' WHERE id = '…'`) and restart agent-deck. See the "Socket Isolation" section in README for the full recipe.

A dedicated `session migrate-socket` subcommand, per-conductor sockets, and `-S <socket-path>` support are tracked for phase 2.

### Test coverage

17 new unit tests plus 1 new behavioral eval case (`TestEval_Session_SocketIsolation_RealTmux`) that drives the full `agent-deck add --tmux-socket` + `session start` flow against a real tmux server and asserts the session lands on `-L <name>` and NOT on the user's default server. Every mandatory gate from `CLAUDE.md` (`TestPersistence_*`, `Feedback*`, `Sender_*`, watcher framework, behavioral evaluator harness introduced in v1.7.49) passes unchanged — socket isolation adds a new axis to the tmux-command contract without weakening the session-persistence, systemd-scope, or user-observable-behavior invariants.

See [CHANGELOG.md](https://github.com/asheshgoplani/agent-deck/blob/main/CHANGELOG.md#1750---2026-04-21) for the full detail and [PR #707](https://github.com/asheshgoplani/agent-deck/pull/707) for the diff.

## Agent Deck v1.7.50

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.50
```

## Changelog
* 37a82c0a64dc53ea0548ca3c2ec86adec707d369 feat(tmux): socket isolation phase 1 — isolated tmux server per installation (#687, v1.7.50) (#707)

---

**Full Changelog**: https://github.com/asheshgoplani/agent-deck/compare/v1.7.49...v1.7.50