Compare commits

...

3 Commits

View File

@@ -6,18 +6,28 @@ 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+=(gemini)
command -v codex &>/dev/null && agents+=(codex)
if [ ${#agents[@]} -eq 0 ]; then
echo "No agent commands found (claude, opencode, gemini)"
exit 1
fi
# Minimize fzf prompt size while centering it.
width=24
height=$((${#agents[@]} + 6))
hmargin=$((($(tput cols) - width) / 2))
vpad=$((($(tput lines) - height) / 2))
[ $hmargin -lt 0 ] && hmargin=0
[ $vpad -lt 0 ] && vpad=0
tput cup "$vpad" 0
agent=$(printf '%s\n' "${agents[@]}" | fzf \
--prompt='agent> ' \
--reverse \
--border=rounded \
--margin=25%,30% \
--height="$height" \
--margin="0,$hmargin" \
--padding=1)
if [ -n "$agent" ]; then
@@ -27,9 +37,19 @@ fi
# Brief delay to let tmux update pane status
sleep 0.1
# Count panes still running (pane_dead=0)
# Note: our own pane counts as running since this script is executing
running=$(tmux list-panes -F '#{pane_dead}' | grep -c '^0$' || true)
window_id=$(tmux display-message -p '#{window_id}')
my_pane=$(tmux display-message -p '#{pane_id}')
# If we're the only pane still running, all others are dead - detach
[ "$running" -le 1 ] && tmux detach-client
# 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