| name | doey-stop |
| description | Stop a worker by pane number. Use when you need to "stop a worker", "kill a pane", or "halt a task". Kills Claude process, updates status. |
- Team config: !
RD="$(tmux show-environment DOEY_RUNTIME 2>/dev/null | cut -d= -f2-)"; W="${DOEY_WINDOW_INDEX:-0}"; [ -f "$RD/team_${W}.env" ] && cat "$RD/team_${W}.env" 2>/dev/null|| true
- Statuses: !
doey status list --window "${DOEY_WINDOW_INDEX:-0}" 2>/dev/null || true
No pane number → list workers and ask.
RD="$(tmux show-environment DOEY_RUNTIME 2>/dev/null | cut -d= -f2-)"
source "$RD/session.env"; W="${DOEY_WINDOW_INDEX:-0}"
[ -f "$RD/team_${W}.env" ] && source "$RD/team_${W}.env"
TARGET="$PANE_NUMBER"
[ "$TARGET" = "0" ] && { echo "ERROR: Cannot stop Subtaskmaster"; exit 1; }
VALID=false; for i in $(echo "$WORKER_PANES" | tr ',' ' '); do [ "$i" = "$TARGET" ] && VALID=true; done
[ "$VALID" = "false" ] && { echo "ERROR: Not a worker. Valid: ${WORKER_PANES}"; exit 1; }
PANE="${SESSION_NAME}:${W}.${TARGET}"
tmux copy-mode -q -t "$PANE" 2>/dev/null
PANE_PID=$(tmux display-message -t "$PANE" -p '#{pane_pid}')
CHILD=$(pgrep -P "$PANE_PID" 2>/dev/null)
if [ -z "$CHILD" ]; then echo "Already stopped"
else
kill "$CHILD" 2>/dev/null; sleep 3
CHILD=$(pgrep -P "$PANE_PID" 2>/dev/null)
[ -n "$CHILD" ] && { kill -9 "$CHILD" 2>/dev/null; sleep 1; }
[ -n "$(pgrep -P "$PANE_PID" 2>/dev/null)" ] && { echo "ERROR: Failed"; exit 1; }
fi
doey status set --pane "$PANE" --status FINISHED --task "manually stopped"
echo "Stopped ${W}.${TARGET}"
Shell stays alive for restart.