summaryrefslogtreecommitdiff
path: root/dotfiles/common/.local/bin/aix
blob: 35cab64872d23c90a811293622aa1bf5917d4003 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/bin/bash
# Launch tmux session with an LLM in fzf-selected project directories

SESSION="ai"

# If session exists, attach or switch to it
if tmux has-session -t "$SESSION" 2>/dev/null; then
  if [ -n "$TMUX" ]; then
    tmux switch-client -t "$SESSION"
  else
    tmux attach-session -t "$SESSION"
  fi
  exit 0
fi

# Dependency checks
for cmd in fzf tmux claude; do
  if ! command -v "$cmd" &>/dev/null; then
    echo "Error: $cmd is not installed" >&2
    exit 1
  fi
done

# Build candidate directory list
candidates=()
[ -d "$HOME/.emacs.d" ] && candidates+=("~/.emacs.d")
if [ -d "$HOME/code" ]; then
  while IFS= read -r d; do
    candidates+=("~/${d#"$HOME"/}")
  done < <(find "$HOME/code" -maxdepth 1 -mindepth 1 -type d | sort)
fi
if [ -d "$HOME/projects" ]; then
  while IFS= read -r d; do
    candidates+=("~/${d#"$HOME"/}")
  done < <(find "$HOME/projects" -maxdepth 1 -mindepth 1 -type d | sort)
fi

# Present fzf for multi-select
selections=$(printf '%s\n' "${candidates[@]}" | fzf --multi --height=70% --reverse)
[ -z "$selections" ] && exit 0

# Claude command — separated for safe editing
AI_CMD="claude"
AI_INSTRUCTIONS='Read docs/protocols.org and follow all instructions.'

# Read selections into array
selected=()
while IFS= read -r line; do
  selected+=("$line")
done <<<"$selections"

# Create session with first selection
first="${selected[0]}"
dir="${first/#\~/$HOME}"
name="$(basename "$dir")"
tmux new-session -d -s "$SESSION" -n "$name" -c "$dir"
tmux send-keys -t "$SESSION:$name" "$AI_CMD \"$AI_INSTRUCTIONS\"" Enter

# Create remaining windows
for entry in "${selected[@]:1}"; do
  dir="${entry/#\~/$HOME}"
  name="$(basename "$dir")"
  tmux new-window -t "$SESSION" -n "$name" -c "$dir"
  tmux send-keys -t "$SESSION:$name" "$AI_CMD \"$AI_INSTRUCTIONS\"" Enter
done

# Select first window and attach or switch
first_name="$(basename "${selected[0]/#\~/$HOME}")"
tmux select-window -t "$SESSION:$first_name"
if [ -n "$TMUX" ]; then
  tmux switch-client -t "$SESSION"
else
  tmux attach-session -t "$SESSION"
fi