#!/usr/bin/env bash # Detect available agents, prompt with fzf, run the selected one. # Detaches the client if all panes in the window are dead afterwards. agents=() command -v claude &>/dev/null && agents+=(claude) command -v opencode &>/dev/null && agents+=(opencode) command -v gemini &>/dev/null && agents+=(gemini) command -v codex &>/dev/null && agents+=(codex) if [ ${#agents[@]} -eq 0 ]; then echo "No agent commands found (claude, opencode, gemini)" exit 1 fi agent=$(printf '%s\n' "${agents[@]}" | fzf \ --prompt='agent> ' \ --reverse \ --border=rounded \ --margin=25%,30% \ --padding=1) if [ -n "$agent" ]; then "$agent" || true fi # Brief delay to let tmux update pane status sleep 0.1 window_id=$(tmux display-message -p '#{window_id}') my_pane=$(tmux display-message -p '#{pane_id}') # Count live sibling panes (not us, not dead) other_live=$(tmux list-panes -t "$window_id" -F '#{pane_id} #{pane_dead}' \ | awk -v me="$my_pane" '$1 != me && $2 == "0"' | wc -l | tr -d ' ') if [ "$other_live" -eq 0 ]; then # No live siblings — close the popup and kill the window # (also cleans up any dead siblings). tmux detach-client tmux kill-window -t "$window_id" 2>/dev/null || true else # User has split off other live panes — only kill ours, keep popup open. tmux kill-pane 2>/dev/null || true fi