#!/usr/bin/env bash # shellcheck shell=bash # - - - - - - - - - - - - - - - - - - - - - - - - - # Claude Code CLI wrapper with automatic screen session management # - - - - - - - - - - - - - - - - - - - - - - - - - # This wrapper transparently manages screen sessions for Claude Code CLI # When run interactively, it automatically attaches to or creates a screen session # - - - - - - - - - - - - - - - - - - - - - - - - - # Path to the real claude binary (installed by native installer) REAL_CLAUDE="/root/.local/bin/claude" SCREEN_SESSION_NAME="claude" # Check if real claude exists if [ ! -f "$REAL_CLAUDE" ]; then echo "Error: Claude Code CLI not found at $REAL_CLAUDE" >&2 echo "Please ensure Claude Code is properly installed" >&2 exit 1 fi # If not running in an interactive terminal, just pass through to real claude if [ ! -t 0 ] || [ ! -t 1 ]; then exec "$REAL_CLAUDE" "$@" fi # Check if screen is available if ! command -v screen >/dev/null 2>&1; then echo "Warning: screen not found, running claude directly" >&2 exec "$REAL_CLAUDE" "$@" fi # Check if a screen session named "claude" already exists if screen -list 2>/dev/null | grep -q "\.${SCREEN_SESSION_NAME}[[:space:]]"; then # Session exists - attach to it echo "Attaching to existing Claude screen session..." echo "To detach: Ctrl+A then D" echo "" exec screen -r "$SCREEN_SESSION_NAME" else # No session exists - create one echo "Starting Claude in a new screen session..." echo "To detach: Ctrl+A then D" echo "To reattach: docker exec -it claude" echo "" # Start claude in a new screen session exec screen -S "$SCREEN_SESSION_NAME" -t claude "$REAL_CLAUDE" "$@" fi