github asheshgoplani/agent-deck v1.7.50

latest releases: v1.10.10, v1.10.9, v1.9.73...
3 months ago

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:

[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 and resolves #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.

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 for the full detail and PR #707 for the diff.

Agent Deck v1.7.50

Terminal session manager for AI coding agents.

Installation

Homebrew (recommended):

brew install asheshgoplani/tap/agent-deck

Quick Install:

curl -fsSL https://raw.githubusercontent.com/asheshgoplani/agent-deck/main/install.sh | bash

Go Install:

go install github.com/asheshgoplani/agent-deck/cmd/agent-deck@v1.7.50

Changelog

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

Full Changelog: v1.7.49...v1.7.50

Don't miss a new agent-deck release

NewReleases is sending notifications on new releases.