multiple tmux sessions
This commit is contained in:
@@ -1,9 +1,79 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
# Start or attach to tmux agent session (Claude on-demand)
|
# Start, attach, kill, detach, or list tmux agent sessions
|
||||||
|
#
|
||||||
|
# Usage:
|
||||||
|
# ./start-agent.sh # attach/create session 1 (default)
|
||||||
|
# ./start-agent.sh 1|2|3 # attach/create session by number
|
||||||
|
# ./start-agent.sh kill [1|2|3] # kill a session
|
||||||
|
# ./start-agent.sh detach [1|2|3] # detach all clients from a session
|
||||||
|
# ./start-agent.sh list # list all tmux sessions
|
||||||
|
|
||||||
SESSION_NAME="agent"
|
|
||||||
WORKDIR="/workspace"
|
WORKDIR="/workspace"
|
||||||
|
|
||||||
|
# ---- Helper: map number to session name ----
|
||||||
|
session_name() {
|
||||||
|
case "${1:-1}" in
|
||||||
|
1) echo "agent" ;;
|
||||||
|
2) echo "agent2" ;;
|
||||||
|
3) echo "agent3" ;;
|
||||||
|
*) return 1 ;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# ---- Parse arguments ----
|
||||||
|
ACTION="start"
|
||||||
|
SESSION_NUM="1"
|
||||||
|
|
||||||
|
case "$1" in
|
||||||
|
kill|detach|list)
|
||||||
|
ACTION="$1"
|
||||||
|
SESSION_NUM="${2:-1}"
|
||||||
|
;;
|
||||||
|
1|2|3|"")
|
||||||
|
ACTION="start"
|
||||||
|
SESSION_NUM="${1:-1}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Usage: $0 [1|2|3|kill|detach|list] [1|2|3]"
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
# ---- Handle 'list' early (no session needed) ----
|
||||||
|
if [ "$ACTION" = "list" ]; then
|
||||||
|
tmux ls 2>/dev/null || echo "No tmux sessions running."
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- Resolve session name ----
|
||||||
|
SESSION_NAME=$(session_name "$SESSION_NUM")
|
||||||
|
if [ -z "$SESSION_NAME" ]; then
|
||||||
|
echo "Invalid session number: $SESSION_NUM (use 1, 2, or 3)"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- Handle kill ----
|
||||||
|
if [ "$ACTION" = "kill" ]; then
|
||||||
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
||||||
|
tmux kill-session -t "$SESSION_NAME"
|
||||||
|
echo "Killed session: $SESSION_NAME"
|
||||||
|
else
|
||||||
|
echo "Session not found: $SESSION_NAME"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# ---- Handle detach ----
|
||||||
|
if [ "$ACTION" = "detach" ]; then
|
||||||
|
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
|
||||||
|
tmux detach-client -s "$SESSION_NAME"
|
||||||
|
echo "Detached all clients from: $SESSION_NAME"
|
||||||
|
else
|
||||||
|
echo "Session not found: $SESSION_NAME"
|
||||||
|
fi
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
# ---- NVM bootstrap (available, not forced) ----
|
# ---- NVM bootstrap (available, not forced) ----
|
||||||
export NVM_DIR="$HOME/.nvm"
|
export NVM_DIR="$HOME/.nvm"
|
||||||
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
|
||||||
@@ -39,4 +109,4 @@ tmux split-window -h -t "$SESSION_NAME:1" -c "$WORKDIR"
|
|||||||
|
|
||||||
# ---- Focus left pane & attach ----
|
# ---- Focus left pane & attach ----
|
||||||
tmux select-pane -t "$SESSION_NAME:1.1"
|
tmux select-pane -t "$SESSION_NAME:1.1"
|
||||||
tmux attach-session -t "$SESSION_NAME"
|
tmux attach-session -t "$SESSION_NAME"
|
||||||
|
|||||||
Reference in New Issue
Block a user