diff --git a/agent.sh b/agent.sh new file mode 100755 index 0000000..9f99381 --- /dev/null +++ b/agent.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash + +set -e + +# Get the directory passed as argument (from #{pane_current_path}) +dir="${1:-$HOME}" +# Use the directory basename as window name +window_name="$(basename "$dir")" +session_name="agent" + +# Create the agent session if it doesn't exist +if ! tmux has-session -t "$session_name" 2>/dev/null; then + tmux new-session -ds "$session_name" -c "$dir" -n "$window_name" claude + # Store the directory in a window option for later matching + tmux set-window-option -t "$session_name" @agent_dir "$dir" + tmux attach-session -t "$session_name" + exit 0 +fi + +# Search for an existing window with matching directory +target_window="" +while IFS=$'\t' read -r window_id window_dir; do + if [ "$window_dir" = "$dir" ]; then + target_window="$window_id" + break + fi +done < <(tmux list-windows -t "$session_name" -F '#{window_id} #{@agent_dir}') + +if [ -n "$target_window" ]; then + # Select the existing window + tmux select-window -t "$target_window" +else + # Create a new window with claude + tmux new-window -t "$session_name" -n "$window_name" -c "$dir" claude + # Store the directory in a window option for later matching + tmux set-window-option -t "$session_name" @agent_dir "$dir" +fi + +# Attach to the session +tmux attach-session -t "$session_name" diff --git a/hooks/session-create.sh b/hooks/session-create.sh index 4b7705c..23ac58a 100755 --- a/hooks/session-create.sh +++ b/hooks/session-create.sh @@ -4,6 +4,6 @@ session_name=$(tmux display-message -p '#S') session_layout=~/.local/share/tmux/layouts/session-$session_name if [ -f $session_layout ]; then $session_layout -else +elif [ "$session_name" != "agent" ]; then tmux rename-window home fi diff --git a/tmux.conf b/tmux.conf index 11c7fac..d8b3d15 100644 --- a/tmux.conf +++ b/tmux.conf @@ -75,6 +75,8 @@ if -b '~/.config/tmux/check-version.sh ">" 3.2' { bind P display-popup -B -w 60 -h 10 -E '~/.config/tmux/project.sh' # Open a popup to pick an interpreter then launch it bind I display-popup -S fg=#54546D -b rounded -d '#{pane_current_path}' -E '$SHELL -i ~/.config/tmux/interpreter.sh' + # Open a popup with AI agent session for current directory + bind A display-popup -S fg=#54546D -b rounded -w 90% -h 90% -E '~/.config/tmux/agent.sh "#{pane_current_path}"' } # Restore old next/previous window bindings