diff --git a/internal/cmd/start.go b/internal/cmd/start.go index bb52fe26..b0b0436a 100644 --- a/internal/cmd/start.go +++ b/internal/cmd/start.go @@ -263,7 +263,20 @@ func startConfiguredCrew(t *tmux.Tmux, townRoot string) { for _, crewName := range crewToStart { sessionID := crewSessionName(r.Name, crewName) if running, _ := t.HasSession(sessionID); running { - fmt.Printf(" %s %s/%s already running\n", style.Dim.Render("○"), r.Name, crewName) + // Session exists - check if Claude is still running + if !t.IsClaudeRunning(sessionID) { + // Claude has exited, restart it + fmt.Printf(" %s %s/%s session exists, restarting Claude...\n", style.Dim.Render("○"), r.Name, crewName) + claudeCmd := config.BuildCrewStartupCommand(r.Name, crewName, r.Path, "gt prime") + if err := t.SendKeys(sessionID, claudeCmd); err != nil { + fmt.Printf(" %s %s/%s restart failed: %v\n", style.Dim.Render("○"), r.Name, crewName, err) + } else { + fmt.Printf(" %s %s/%s Claude restarted\n", style.Bold.Render("✓"), r.Name, crewName) + startedAny = true + } + } else { + fmt.Printf(" %s %s/%s already running\n", style.Dim.Render("○"), r.Name, crewName) + } } else { if err := startCrewMember(r.Name, crewName, townRoot); err != nil { fmt.Printf(" %s %s/%s failed: %v\n", style.Dim.Render("○"), r.Name, crewName, err)