Manage tmux sessions for background tasks. Use when user asks about background processes, wants to monitor running tasks, attach to sessions, list active sessions, or kill stuck processes.
Manages tmux sessions for running and monitoring background tasks. Use when user asks to check running processes, attach to sessions, list active tmux sessions, or kill stuck background tasks.
/plugin marketplace add cruzanstx/daplug/plugin install daplug@cruzanstxThis skill is limited to using the following tools:
Create, monitor, and manage tmux sessions for background task execution.
tmux ls
# Find sessions from a specific run
RUN_ID="20241213-153012"
tmux ls 2>/dev/null | grep "$RUN_ID" || echo "No sessions matching $RUN_ID"
# Find prompt-related sessions
tmux ls 2>/dev/null | grep "prompt-" || echo "No prompt sessions found"
# Find codex sessions
tmux ls 2>/dev/null | grep "codex-" || echo "No codex sessions found"
SESSION_NAME="my-task-$(date +%Y%m%d-%H%M%S)"
WORKING_DIR="/path/to/directory"
# Create session with specific working directory
tmux new-session -d -s "$SESSION_NAME" -c "$WORKING_DIR"
# Send commands to the session
tmux send-keys -t "$SESSION_NAME" "echo 'Starting task...'" C-m
tmux send-keys -t "$SESSION_NAME" "your-command-here" C-m
echo "Session started: $SESSION_NAME"
echo "Attach with: tmux attach -t $SESSION_NAME"
SESSION_NAME="claude-task-$(date +%Y%m%d-%H%M%S)"
WORKING_DIR="/path/to/worktree"
tmux new-session -d -s "$SESSION_NAME" -c "$WORKING_DIR"
tmux send-keys -t "$SESSION_NAME" "claude" C-m
sleep 2 # Wait for directory trust prompt
tmux send-keys -t "$SESSION_NAME" C-m # Auto-approve
sleep 2 # Wait for Claude to be ready
tmux send-keys -t "$SESSION_NAME" "Your task instructions here" C-m
echo "Claude session started: $SESSION_NAME"
SESSION_NAME="prompt-005-20241213-153012"
# Check if session exists
if tmux has-session -t "$SESSION_NAME" 2>/dev/null; then
echo "Session $SESSION_NAME is running"
# Capture recent output (last 100 lines)
tmux capture-pane -t "$SESSION_NAME" -p -S -100
else
echo "Session $SESSION_NAME has ended"
fi
SESSION_NAME="my-session"
# Capture visible pane content
tmux capture-pane -t "$SESSION_NAME" -p
# Capture with history (last N lines)
tmux capture-pane -t "$SESSION_NAME" -p -S -500
# Save to file
tmux capture-pane -t "$SESSION_NAME" -p -S -1000 > session-output.txt
# Attach to specific session
tmux attach -t "$SESSION_NAME"
# Detach: Press Ctrl+B, then D
# Kill specific session
tmux kill-session -t "$SESSION_NAME"
# Kill all sessions matching pattern
for session in $(tmux ls -F "#{session_name}" 2>/dev/null | grep "prompt-"); do
tmux kill-session -t "$session"
echo "Killed: $session"
done
SESSION_NAME="my-task"
echo "Waiting for $SESSION_NAME to complete..."
while tmux has-session -t "$SESSION_NAME" 2>/dev/null; do
sleep 5
done
echo "Session $SESSION_NAME has ended"
# List all sessions with their status
echo "Active tmux sessions:"
tmux ls -F "#{session_name}: #{session_windows} windows, created #{session_created_string}" 2>/dev/null || echo "No active sessions"
# Check specific sessions from a run
RUN_ID="20241213-153012"
SESSIONS=("prompt-005-$RUN_ID" "prompt-006-$RUN_ID" "prompt-007-$RUN_ID")
for session in "${SESSIONS[@]}"; do
if tmux has-session -t "$session" 2>/dev/null; then
echo "$session: RUNNING"
else
echo "$session: COMPLETED"
fi
done
declare -A SESSIONS
TASKS=("task1" "task2" "task3")
RUN_ID="$(date +%Y%m%d-%H%M%S)"
for task in "${TASKS[@]}"; do
SESSION_NAME="${task}-${RUN_ID}"
tmux new-session -d -s "$SESSION_NAME"
tmux send-keys -t "$SESSION_NAME" "echo 'Running $task'" C-m
SESSIONS[$task]="$SESSION_NAME"
echo "Started: $SESSION_NAME"
done
echo ""
echo "Monitor with: tmux ls | grep $RUN_ID"
SESSIONS=("session1" "session2" "session3")
echo "Waiting for all sessions to complete..."
all_done=false
while [ "$all_done" = false ]; do
all_done=true
for session in "${SESSIONS[@]}"; do
if tmux has-session -t "$session" 2>/dev/null; then
all_done=false
break
fi
done
[ "$all_done" = false ] && sleep 5
done
echo "All sessions completed"
tmux not installed
# Check installation
which tmux || echo "tmux not installed"
# Install
sudo apt install tmux # Debian/Ubuntu
brew install tmux # macOS
Session not found
# List all sessions to find correct name
tmux ls
# Check if session ended
# (no output means session doesn't exist)
tmux has-session -t "session-name" 2>/dev/null && echo "exists" || echo "not found"
Can't attach (already attached elsewhere)
# Detach other clients first
tmux detach-client -t "session-name"
# Then attach
tmux attach -t "session-name"
Session stuck/frozen
# Force kill
tmux kill-session -t "session-name"
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.