#!/usr/bin/env bash ################################################################################ # Claude Code Customizations - Master Control Script # Provides an interactive menu for all setup operations ################################################################################ # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' BOLD='\033[1m' NC='\033[0m' SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" # Script paths INSTALL_SCRIPT="$SCRIPT_DIR/install-claude-customizations.sh" EXPORT_SCRIPT="$SCRIPT_DIR/export-claude-customizations.sh" PACKAGE_SCRIPT="$SCRIPT_DIR/create-complete-package.sh" VERIFY_SCRIPT="$SCRIPT_DIR/verify-claude-setup.sh" # Helper functions print_header() { clear echo -e "${CYAN}╔══════════════════════════════════════════════════════════════════╗${NC}" echo -e "${CYAN}║${NC} ${BOLD}Claude Code Customizations - Setup Manager${NC} ${CYAN}║${NC}" echo -e "${CYAN}╚══════════════════════════════════════════════════════════════════╝${NC}" echo "" } print_menu() { print_header echo -e "${BOLD}Main Menu:${NC}" echo "" echo -e " ${GREEN}1${NC}) 📦 Create Complete Package (recommended for distribution)" echo -e " ${GREEN}2${NC}) 📥 Install Customizations (on new machine)" echo -e " ${GREEN}3${NC}) 📤 Export Customizations (backup/transfer)" echo -e " ${GREEN}4${NC}) ✅ Verify Installation" echo -e " ${GREEN}5${NC}) 📋 Show Package Contents" echo -e " ${GREEN}6${NC}) 📖 View Documentation" echo -e " ${GREEN}7${NC}) 🧹 Clean Backup Files" echo "" echo -e " ${YELLOW}0${NC}) 🚪 Exit" echo "" echo -ne "${CYAN}Select an option: ${NC}" } check_script() { local script="$1" local name="$2" if [ ! -f "$script" ]; then echo -e "${RED}✗ Error: $name not found at $script${NC}" return 1 fi if [ ! -x "$script" ]; then echo -e "${YELLOW}⚠ Making $name executable...${NC}" chmod +x "$script" fi return 0 } create_package() { print_header echo -e "${BOLD}Create Complete Package${NC}" echo "═══════════════════════════════════════════════════════════" echo "" echo "This will create a complete package with all agents, plugins," echo "and configurations ready for distribution." echo "" read -p "Continue? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then return fi if check_script "$PACKAGE_SCRIPT" "Package Script"; then echo "" bash "$PACKAGE_SCRIPT" fi echo "" read -p "Press Enter to continue..." } install_customizations() { print_header echo -e "${BOLD}Install Customizations${NC}" echo "═══════════════════════════════════════════════════════════" echo "" echo "This will install Claude Code customizations on this machine." echo "" echo "Note: If you're creating a complete package, use option 1 instead." echo "" if check_script "$INSTALL_SCRIPT" "Install Script"; then echo "" bash "$INSTALL_SCRIPT" fi echo "" read -p "Press Enter to continue..." } export_customizations() { print_header echo -e "${BOLD}Export Customizations${NC}" echo "═══════════════════════════════════════════════════════════" echo "" echo "This will export your current customizations to a package" echo "for backup or transfer to another machine." echo "" read -p "Continue? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then return fi if check_script "$EXPORT_SCRIPT" "Export Script"; then echo "" bash "$EXPORT_SCRIPT" fi echo "" read -p "Press Enter to continue..." } verify_installation() { print_header if check_script "$VERIFY_SCRIPT" "Verify Script"; then bash "$VERIFY_SCRIPT" fi echo "" read -p "Press Enter to continue..." } show_contents() { print_header echo -e "${BOLD}Package Contents${NC}" echo "═══════════════════════════════════════════════════════════" echo "" CLAUDE_DIR="$HOME/.claude" if [ ! -d "$CLAUDE_DIR" ]; then echo -e "${RED}No Claude Code directory found at $CLAUDE_DIR${NC}" echo "" read -p "Press Enter to continue..." return fi echo -e "${CYAN}Agent Categories:${NC}" for category in engineering marketing product studio-operations project-management testing design bonus; do if [ -d "$CLAUDE_DIR/agents/$category" ]; then count=$(ls -1 "$CLAUDE_DIR/agents/$category"/*.md 2>/dev/null | wc -l) if [ $count -gt 0 ]; then printf " %-25s %2d agents\n" "$category" "$count" fi fi done echo "" echo -e "${CYAN}Configuration Files:${NC}" echo " settings.json" echo " settings.local.json" echo " plugins/installed_plugins.json" echo "" echo -e "${CYAN}MCP Tools:${NC}" echo " • zai-mcp-server (vision analysis)" echo " • web-search-prime" echo " • web-reader" echo " • zread (GitHub)" echo "" echo -e "${CYAN}Skills:${NC}" echo " • glm-plan-bug:case-feedback" echo " • glm-plan-usage:usage-query" echo "" read -p "Press Enter to continue..." } view_documentation() { print_header echo -e "${BOLD}Documentation${NC}" echo "═══════════════════════════════════════════════════════════" echo "" DOCS=( "SCRIPTS-GUIDE.md:Script usage guide" "CLAUDE-CUSTOMIZATIONS-README.md:Complete feature documentation" ) echo "Available documentation:" echo "" for doc in "${DOCS[@]}"; do file="${doc%%:*}" desc="${doc##*:}" if [ -f "$SCRIPT_DIR/$file" ]; then echo -e " ${GREEN}✓${NC} $file" echo " $desc" else echo -e " ${RED}✗${NC} $file (not found)" fi done echo "" echo "Would you like to view a document?" echo " 1) SCRIPTS-GUIDE.md" echo " 2) CLAUDE-CUSTOMIZATIONS-README.md" echo " 0) Back" echo "" read -p "Select: " doc_choice case $doc_choice in 1) if [ -f "$SCRIPT_DIR/SCRIPTS-GUIDE.md" ]; then less "$SCRIPT_DIR/SCRIPTS-GUIDE.md" fi ;; 2) if [ -f "$SCRIPT_DIR/CLAUDE-CUSTOMIZATIONS-README.md" ]; then less "$SCRIPT_DIR/CLAUDE-CUSTOMIZATIONS-README.md" fi ;; esac } clean_backups() { print_header echo -e "${BOLD}Clean Backup Files${NC}" echo "═══════════════════════════════════════════════════════════" echo "" # Find backup directories BACKUPS=$(find "$HOME" -maxdepth 1 -name ".claude-backup-*" -type d 2>/dev/null) PACKAGES=$(find "$HOME" -maxdepth 1 -name "claude-customizations-*.tar.gz" -type f 2>/dev/null) EXPORT_DIRS=$(find "$HOME" -maxdepth 1 -name "claude-*-export" -type d 2>/dev/null) BACKUP_COUNT=$(echo "$BACKUPS" | grep -c "^" || echo 0) PACKAGE_COUNT=$(echo "$PACKAGES" | grep -c "^" || echo 0) EXPORT_COUNT=$(echo "$EXPORT_DIRS" | grep -c "^" || echo 0) echo "Found:" echo " • $BACKUP_COUNT backup directories" echo " • $PACKAGE_COUNT package archives" echo " • $EXPORT_COUNT export directories" echo "" if [ $((BACKUP_COUNT + PACKAGE_COUNT + EXPORT_COUNT)) -eq 0 ]; then echo -e "${GREEN}No backup files to clean${NC}" echo "" read -p "Press Enter to continue..." return fi read -p "Clean all backup files? (y/N): " confirm if [[ ! "$confirm" =~ ^[Yy]$ ]]; then return fi echo "" echo "Cleaning..." if [ -n "$BACKUPS" ]; then echo "$BACKUPS" | while read -r backup; do echo " Removing: $backup" rm -rf "$backup" done fi if [ -n "$PACKAGES" ]; then echo "$PACKAGES" | while read -r package; do echo " Removing: $package" rm -f "$package" done fi if [ -n "$EXPORT_DIRS" ]; then echo "$EXPORT_DIRS" | while read -r export_dir; do echo " Removing: $export_dir" rm -rf "$export_dir" done fi echo "" echo -e "${GREEN}✓ Cleanup complete${NC}" echo "" read -p "Press Enter to continue..." } # Main loop main() { while true; do print_menu read -r choice echo "" case $choice in 1) create_package ;; 2) install_customizations ;; 3) export_customizations ;; 4) verify_installation ;; 5) show_contents ;; 6) view_documentation ;; 7) clean_backups ;; 0) echo "Goodbye!" exit 0 ;; *) echo -e "${RED}Invalid option. Please try again.${NC}" sleep 1 ;; esac done } # Run main function main