Auto-detach when all agents in window exit

Add agent-cmd.sh wrapper that detaches the client when all panes in the
current window have exited. This allows multiple agent windows (one per
directory) while automatically returning to the shell when done with a
particular window's agents.

- remain-on-exit keeps panes alive after agent exits to check status
- Wrapper counts running panes and detaches when it's the last one
This commit is contained in:
2026-02-02 11:49:26 +00:00
parent c93f8f2633
commit 688f263323
2 changed files with 22 additions and 4 deletions

View File

@@ -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