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
58 lines
1.9 KiB
Bash
Executable File
58 lines
1.9 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -e
|
|
|
|
script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
|
|
# Check which agent commands are available
|
|
agents=()
|
|
command -v claude &>/dev/null && agents+=(claude)
|
|
command -v opencode &>/dev/null && agents+=(opencode)
|
|
command -v gemini &>/dev/null && agents+=(gemini)
|
|
|
|
if [ ${#agents[@]} -eq 0 ]; then
|
|
echo "No agent commands found (claude, gemini)"
|
|
exit 1
|
|
fi
|
|
|
|
# Use the current directory (set via display-popup -d)
|
|
dir="${PWD:-$HOME}"
|
|
# Use the directory basename as window name
|
|
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" "$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
|
|
|
|
# Search for an existing window with matching directory
|
|
target_window=""
|
|
for window_id in $(tmux list-windows -t agent -F '#{window_id}'); do
|
|
window_dir=$(tmux show-window-option -t "$window_id" -v @agent_dir 2>/dev/null || true)
|
|
if [ "$window_dir" = "$dir" ]; then
|
|
target_window="$window_id"
|
|
break
|
|
fi
|
|
done
|
|
|
|
if [ -n "$target_window" ]; then
|
|
# Select the existing window
|
|
tmux select-window -t "$target_window"
|
|
else
|
|
# Create a new window with agents
|
|
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
|
|
|
|
# Attach to the session
|
|
tmux attach-session -t agent
|