diff --git a/agent-cmd.sh b/agent-cmd.sh new file mode 100755 index 0000000..07365b2 --- /dev/null +++ b/agent-cmd.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +# Wrapper that runs an agent command, then detaches if all panes in window are dead + +# Run the agent command (don't use set -e, agent may exit non-zero) +"$@" || true + +# 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) + +# If we're the only pane still running, all others are dead - detach +[ "$running" -le 1 ] && tmux detach-client diff --git a/agent.sh b/agent.sh index 9112ac8..1c2fc54 100755 --- a/agent.sh +++ b/agent.sh @@ -2,6 +2,8 @@ set -e +script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + # Check which agent commands are available agents=() command -v claude &>/dev/null && agents+=(claude) @@ -20,11 +22,12 @@ window_name=$dir # Create the agent session if it doesn't exist if ! tmux has-session -t agent; then - tmux new-session -ds agent -c "$dir" -n "$window_name" "${agents[0]}" - [ ${#agents[@]} -gt 1 ] && tmux split-window -h -t agent:0 "${agents[1]}" + tmux new-session -ds agent -c "$dir" -n "$window_name" "$script_dir/agent-cmd.sh" "${agents[0]}" + [ ${#agents[@]} -gt 1 ] && tmux split-window -h -t agent:0 "$script_dir/agent-cmd.sh" "${agents[1]}" # Store the directory in a window option for later matching tmux set-window-option -t agent @agent_dir "$dir" tmux set-option -t agent status off + tmux set-option -t agent remain-on-exit on tmux attach-session -t agent exit 0 fi @@ -44,8 +47,8 @@ if [ -n "$target_window" ]; then tmux select-window -t "$target_window" else # Create a new window with agents - tmux new-window -t agent -c "$dir" -n "$window_name" "${agents[0]}" - [ ${#agents[@]} -gt 1 ] && tmux split-window -h -t agent -c "$dir" "${agents[1]}" + tmux new-window -t agent -c "$dir" -n "$window_name" "$script_dir/agent-cmd.sh" "${agents[0]}" + [ ${#agents[@]} -gt 1 ] && tmux split-window -h -t agent -c "$dir" "$script_dir/agent-cmd.sh" "${agents[1]}" # Store the directory in a window option for later matching tmux set-window-option -t agent @agent_dir "$dir" fi