From c62ba73ce46fd07cc17f735b3ac7b3b2aee98621 Mon Sep 17 00:00:00 2001 From: centdix Date: Sun, 22 Feb 2026 14:41:22 +0000 Subject: [PATCH] fix: select claude pane on attach and restart tmux if dead Co-Authored-By: Claude Opus 4.6 --- dev-dashboard/backend/src/terminal.ts | 1 + dev-dashboard/backend/src/workmux.ts | 9 +++++++++ 2 files changed, 10 insertions(+) diff --git a/dev-dashboard/backend/src/terminal.ts b/dev-dashboard/backend/src/terminal.ts index f4fb3ccfb8..202cca8c96 100644 --- a/dev-dashboard/backend/src/terminal.ts +++ b/dev-dashboard/backend/src/terminal.ts @@ -65,6 +65,7 @@ export async function attach( `tmux set-option -t "${gName}" mouse on`, `tmux set-option -t "${gName}" set-clipboard on`, `tmux select-window -t "${gName}:${windowTarget}"`, + `tmux select-pane -t "${gName}:${windowTarget}.0"`, `stty rows ${rows} cols ${cols}`, `exec tmux attach-session -t "${gName}"`, ].join(" && "); diff --git a/dev-dashboard/backend/src/workmux.ts b/dev-dashboard/backend/src/workmux.ts index edf06628b7..12746dcade 100644 --- a/dev-dashboard/backend/src/workmux.ts +++ b/dev-dashboard/backend/src/workmux.ts @@ -142,10 +142,19 @@ function buildSandboxAgentCmd(env: Record, agent: Agent): string return `${envPrefix}workmux sandbox agent -- claude --dangerously-skip-permissions --append-system-prompt '"${innerEscaped}"'`; } +function ensureTmux(): void { + const check = Bun.spawnSync(["tmux", "list-sessions"], { stdout: "pipe", stderr: "pipe" }); + if (check.exitCode !== 0) { + Bun.spawnSync(["tmux", "new-session", "-d", "-s", "0"]); + console.log("[workmux] restarted tmux session"); + } +} + export async function addWorktree( branch: string, opts?: { prompt?: string; profile?: Profile; agent?: Agent } ): Promise { + ensureTmux(); const profile = opts?.profile ?? "full"; const agent = opts?.agent ?? "claude"; const args: string[] = ["workmux", "add", "-b"]; // -b = background (don't switch tmux)