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
|