diff --git a/agent-cmd.sh b/agent-cmd.sh index 07365b2..d7754a0 100755 --- a/agent-cmd.sh +++ b/agent-cmd.sh @@ -1,8 +1,28 @@ #!/usr/bin/env bash -# Wrapper that runs an agent command, then detaches if all panes in window are dead +# Detect available agents, prompt with fzf, run the selected one. +# Detaches the client if all panes in the window are dead afterwards. -# Run the agent command (don't use set -e, agent may exit non-zero) -"$@" || true +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) + +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 diff --git a/agent.sh b/agent.sh index 1c2fc54..e7eb913 100755 --- a/agent.sh +++ b/agent.sh @@ -4,17 +4,6 @@ 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 @@ -22,16 +11,16 @@ 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]}" + tmux new-session -ds agent -c "$dir" -n "$window_name" "$script_dir/agent-cmd.sh" # 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 +# Apply session options on every invocation so updates propagate to live sessions +tmux set-option -t agent status off +tmux set-option -t agent remain-on-exit on +tmux set-option -t agent default-command "$script_dir/agent-cmd.sh" + # Search for an existing window with matching directory target_window="" for window_id in $(tmux list-windows -t agent -F '#{window_id}'); do @@ -46,9 +35,8 @@ 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]}" + # Create a new window; default-command runs agent-cmd.sh + tmux new-window -t agent -c "$dir" -n "$window_name" # Store the directory in a window option for later matching tmux set-window-option -t agent @agent_dir "$dir" fi