Files
SuperCharged-Claude-Code-Up…/install-windows.ps1
uroma fa41790682 Fix Windows backup: Handle reserved device names (nul, con, prn, etc.)
Windows has reserved device names that cannot be used as file names:
- CON, PRN, AUX, NUL
- COM1-9, LPT1-9

Changed backup function from Copy-Item to Robocopy which properly
handles these reserved names. This fixes the error when backing up
.claude directories that contain files with these names.

Robocopy exit codes:
- 0-7 = Success
- 8+ = Errors

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-22 19:11:06 +00:00

497 lines
20 KiB
PowerShell

#!/usr/bin/env pwsh
################################################################################
# SuperCharge Claude Code - Windows PowerShell Installer
################################################################################
# This script transforms any Claude Code installation into a supercharged
# version with all customizations, skills, agents, plugins, and integrations.
#
# Usage:
# pwsh -ExecutionPolicy Bypass -File install-windows.ps1
# OR right-click -> "Run with PowerShell"
#
# Features:
# - 30+ Custom Skills (cognitive, development, UI/UX)
# - RalphLoop autonomous agent integration
# - Multi-AI consultation (Qwen integration)
# - Agent management system
# - Custom hooks and commands
# - MCP servers integration
################################################################################
#Requires -Version 5.1
[CmdletBinding()]
param()
# Colors for output
function Write-ColorOutput {
param(
[Parameter(Mandatory=$true)]
[string]$Message,
[Parameter(Mandatory=$false)]
[ValidateSet("Info", "Success", "Warning", "Error", "Step")]
[string]$Type = "Info"
)
$colors = @{
"Info" = "Cyan"
"Success" = "Green"
"Warning" = "Yellow"
"Error" = "Red"
"Step" = "Magenta"
}
$prefixes = @{
"Info" = "[INFO]"
"Success" = "[SUCCESS]"
"Warning" = "[WARN]"
"Error" = "[ERROR]"
"Step" = "==>"
}
Write-Host "$($prefixes[$Type]) $Message" -ForegroundColor $colors[$Type]
}
function Show-Banner {
Write-Host @"
Windows PowerShell Installer
"@ -ForegroundColor Cyan
}
function Test-ClaudeCode {
Write-ColorOutput "Checking for Claude Code installation..." -Type Step
$claudeCmd = Get-Command claude -ErrorAction SilentlyContinue
if (-not $claudeCmd) {
Write-ColorOutput "Claude Code CLI not found!" -Type Warning
Write-Host ""
Write-Host "Claude Code is required to use these customizations." -ForegroundColor Yellow
Write-Host ""
Write-Host "Installation options:" -ForegroundColor White
Write-Host " 1. Install Claude Code with npm (requires Node.js)"
Write-Host " 2. Install manually later"
Write-Host " 3. Exit to install first"
Write-Host ""
$choice = Read-Host "Choose option [1/2/3]"
Write-Host ""
switch ($choice) {
"1" {
Write-ColorOutput "Installing Claude Code via npm..." -Type Info
try {
npm install -g @anthropic-ai/claude-code
if ($LASTEXITCODE -eq 0) {
Write-ColorOutput "Claude Code installed successfully!" -Type Success
} else {
Write-ColorOutput "Claude Code installation failed. Please install manually." -Type Error
exit 1
}
} catch {
Write-ColorOutput "npm install failed: $_" -Type Error
Write-ColorOutput "Please install Node.js from https://nodejs.org/ and try again." -Type Info
exit 1
}
}
"2" {
Write-ColorOutput "Skipping Claude Code installation." -Type Warning
Write-ColorOutput "You can install it later with: npm install -g @anthropic-ai/claude-code" -Type Info
return $false
}
"3" {
Write-ColorOutput "Please install Claude Code first:" -Type Info
Write-Host " npm install -g @anthropic-ai/claude-code" -ForegroundColor White
exit 1
}
default {
Write-ColorOutput "Invalid choice." -Type Error
exit 1
}
}
}
# Refresh path and check again
$claudeCmd = Get-Command claude -ErrorAction SilentlyContinue
if ($claudeCmd) {
$version = & claude --version 2>$null
Write-ColorOutput "Claude Code found: $version" -Type Success
return $true
}
return $false
}
function Backup-ExistingConfig {
Write-ColorOutput "Backing up existing configuration..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$backupDir = Join-Path $env:USERPROFILE ".claude-backup-$(Get-Date -Format 'yyyyMMdd_HHmmss')"
if (Test-Path $claudeDir) {
# Use Robocopy to handle reserved device names (nul, con, prn, etc.)
$robocopyResult = robocopy $claudeDir $backupDir /E /R:0 /W:0 /NFL /NDL /NJH /NJS 2>&1
if ($LASTEXITCODE -lt 8) {
Write-ColorOutput "Backup created at: $backupDir" -Type Success
} else {
Write-ColorOutput "Backup had some issues (continued anyway)." -Type Warning
}
} else {
Write-ColorOutput "No existing configuration to backup." -Type Info
}
}
function Install-Dependencies {
Write-ColorOutput "Checking dependencies..." -Type Step
# Check Node.js
$nodeCmd = Get-Command node -ErrorAction SilentlyContinue
if ($nodeCmd) {
$version = & node --version
Write-ColorOutput "Node.js found: $version" -Type Success
} else {
Write-ColorOutput "Node.js not found. Some features may not work." -Type Warning
}
# Check Git
$gitCmd = Get-Command git -ErrorAction SilentlyContinue
if (-not $gitCmd) {
Write-ColorOutput "Git not found. Please install Git from https://git-scm.com/" -Type Error
exit 1
} else {
$version = & git --version
Write-ColorOutput "Git found: $version" -Type Success
}
# Check Python (optional)
$pythonCmd = Get-Command python -ErrorAction SilentlyContinue
if (-not $pythonCmd) {
$pythonCmd = Get-Command python3 -ErrorAction SilentlyContinue
}
if ($pythonCmd) {
$version = & $pythonCmd --version
Write-ColorOutput "Python found: $version" -Type Success
# Try to install Ralph Orchestrator
Write-ColorOutput "Installing Ralph Orchestrator..." -Type Info
try {
& $pythonCmd -m pip install ralph-orchestrator 2>$null
if ($LASTEXITCODE -eq 0) {
Write-ColorOutput "Ralph Orchestrator installed." -Type Success
}
} catch {
Write-ColorOutput "Could not install Ralph Orchestrator (optional)." -Type Warning
}
} else {
Write-ColorOutput "Python not found. Some features may not work." -Type Warning
}
}
function Download-Repository {
Write-ColorOutput "Downloading SuperCharge Claude Code package..." -Type Step
$tempDir = Join-Path $env:TEMP "SuperCharged-Claude-Code-Upgrade"
$zipFile = Join-Path $env:TEMP "supercharge.zip"
$repoUrl = "https://github.rommark.dev/admin/SuperCharged-Claude-Code-Upgrade/archive/refs/heads/main.zip"
# Clean up any existing download
if (Test-Path $tempDir) {
Remove-Item -Path $tempDir -Recurse -Force -ErrorAction SilentlyContinue
}
if (Test-Path $zipFile) {
Remove-Item -Path $zipFile -Force -ErrorAction SilentlyContinue
}
# Download the repository
try {
Write-ColorOutput "Downloading from: $repoUrl" -Type Info
Invoke-WebRequest -Uri $repoUrl -OutFile $zipFile -UseBasicParsing
# Extract the zip
Write-ColorOutput "Extracting files..." -Type Info
Expand-Archive -Path $zipFile -DestinationPath $env:TEMP -Force
# Rename the extracted folder
$extractedDir = Join-Path $env:TEMP "SuperCharged-Claude-Code-Upgrade-main"
if (Test-Path $extractedDir) {
Move-Item -Path $extractedDir -Destination $tempDir -Force
}
Write-ColorOutput "Repository downloaded to: $tempDir" -Type Success
return $tempDir
} catch {
Write-ColorOutput "Failed to download repository: $_" -Type Error
return $null
}
}
function Copy-DirectoryContent {
param(
[string]$Source,
[string]$Destination
)
if (Test-Path $Source) {
# Create destination if it doesn't exist
if (-not (Test-Path $Destination)) {
New-Item -Path $Destination -ItemType Directory -Force | Out-Null
}
# Copy all items
Get-ChildItem -Path $Source -Force | ForEach-Object {
Copy-Item -Path $_.FullName -Destination $Destination -Recurse -Force -ErrorAction SilentlyContinue
}
return $true
}
return $false
}
function Install-Skills {
param([string]$SourceDir)
Write-ColorOutput "Installing custom skills..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$skillsDir = Join-Path $SourceDir "skills"
$destDir = Join-Path $claudeDir "skills"
if (Copy-DirectoryContent -Source $skillsDir -Destination $destDir) {
$count = (Get-ChildItem -Path $destDir -Filter "SKILL.md" -Recurse -ErrorAction SilentlyContinue).Count
Write-ColorOutput "Installed $count custom skills." -Type Success
} else {
Write-ColorOutput "Skills directory not found in source." -Type Warning
}
}
function Install-Agents {
param([string]$SourceDir)
Write-ColorOutput "Installing agent management system..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$agentsDir = Join-Path $SourceDir "agents"
$destDir = Join-Path $claudeDir "agents"
if (Copy-DirectoryContent -Source $agentsDir -Destination $destDir) {
Write-ColorOutput "Agent management system installed." -Type Success
} else {
Write-ColorOutput "Agents directory not found in source." -Type Warning
}
}
function Install-Hooks {
param([string]$SourceDir)
Write-ColorOutput "Installing custom hooks..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$hooksDir = Join-Path $SourceDir "hooks"
$destDir = Join-Path $claudeDir "hooks"
if (Copy-DirectoryContent -Source $hooksDir -Destination $destDir) {
Write-ColorOutput "Custom hooks installed." -Type Success
} else {
Write-ColorOutput "Hooks directory not found in source." -Type Warning
}
}
function Install-Commands {
param([string]$SourceDir)
Write-ColorOutput "Installing custom commands..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$commandsDir = Join-Path $SourceDir "commands"
$destDir = Join-Path $claudeDir "commands"
if (Copy-DirectoryContent -Source $commandsDir -Destination $destDir) {
$count = (Get-ChildItem -Path $destDir -ErrorAction SilentlyContinue).Count
Write-ColorOutput "Installed $count custom commands." -Type Success
} else {
Write-ColorOutput "Commands directory not found in source." -Type Warning
}
}
function Install-Plugins {
param([string]$SourceDir)
Write-ColorOutput "Installing plugin references..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$pluginsDir = Join-Path $SourceDir "plugins"
$destDir = Join-Path $claudeDir "plugins"
if (Copy-DirectoryContent -Source $pluginsDir -Destination $destDir) {
$count = (Get-ChildItem -Path $destDir -Directory -ErrorAction SilentlyContinue).Count
Write-ColorOutput "Installed $count plugin references." -Type Success
} else {
Write-ColorOutput "Plugins directory not found in source." -Type Warning
}
}
function Install-Scripts {
param([string]$SourceDir)
Write-ColorOutput "Installing utility scripts..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$scriptsDir = Join-Path $SourceDir "scripts"
$destDir = Join-Path $claudeDir "scripts"
if (Copy-DirectoryContent -Source $scriptsDir -Destination $destDir) {
Write-ColorOutput "Utility scripts installed." -Type Success
} else {
Write-ColorOutput "Scripts directory not found in source." -Type Warning
}
}
function Install-Templates {
param([string]$SourceDir)
Write-ColorOutput "Installing configuration templates..." -Type Step
$claudeDir = Join-Path $env:USERPROFILE ".claude"
$templatesDir = Join-Path $SourceDir "templates"
if (Test-Path $templatesDir) {
# Install config.json if not exists
$configJson = Join-Path $templatesDir "config.json"
if ((Test-Path $configJson) -and -not (Test-Path (Join-Path $claudeDir "config.json"))) {
Copy-Item -Path $configJson -Destination (Join-Path $claudeDir "config.json") -Force
Write-ColorOutput "config.json installed." -Type Success
}
# Install hooks.json if not exists
$hooksJson = Join-Path $templatesDir "hooks.json"
if ((Test-Path $hooksJson) -and -not (Test-Path (Join-Path $claudeDir "hooks.json"))) {
Copy-Item -Path $hooksJson -Destination (Join-Path $claudeDir "hooks.json") -Force
Write-ColorOutput "hooks.json installed." -Type Success
}
# Install settings.local.json if not exists
$settingsLocalJson = Join-Path $templatesDir "settings.local.json"
if ((Test-Path $settingsLocalJson) -and -not (Test-Path (Join-Path $claudeDir "settings.local.json"))) {
Copy-Item -Path $settingsLocalJson -Destination (Join-Path $claudeDir "settings.local.json") -Force
Write-ColorOutput "settings.local.json installed." -Type Success
}
} else {
Write-ColorOutput "Templates directory not found." -Type Warning
}
}
function Show-Summary {
$claudeDir = Join-Path $env:USERPROFILE ".claude"
Write-Host ""
Write-Host "╔═══════════════════════════════════════════════════════════════╗" -ForegroundColor Green
Write-Host "║ INSTALLATION COMPLETE! ║" -ForegroundColor Green
Write-Host "╚═══════════════════════════════════════════════════════════════╝" -ForegroundColor Green
Write-Host ""
Write-Host "Your Claude Code installation is now SUPERCHARGED!" -ForegroundColor Green
Write-Host ""
Write-Host "Installed Features:" -ForegroundColor Cyan
Write-Host " [OK] 30+ Custom Skills (cognitive, development, UI/UX)" -ForegroundColor Green
Write-Host " [OK] RalphLoop Autonomous Agent Integration" -ForegroundColor Green
Write-Host " [OK] Multi-AI Consultation (Qwen)" -ForegroundColor Green
Write-Host " [OK] Agent Management System" -ForegroundColor Green
Write-Host " [OK] Custom Hooks & Commands" -ForegroundColor Green
Write-Host " [OK] Plugin Marketplace Setup" -ForegroundColor Green
Write-Host ""
Write-Host "New Commands Available:" -ForegroundColor Cyan
Write-Host " /ralph - Autonomous 'Tackle Until Solved' agent" -ForegroundColor Yellow
Write-Host " /brainstorm - Multi-AI brainstorming session" -ForegroundColor Yellow
Write-Host " /write-plan - Create implementation plans" -ForegroundColor Yellow
Write-Host " /execute-plan - Execute written plans" -ForegroundColor Yellow
Write-Host ""
Write-Host "Quick Start:" -ForegroundColor Cyan
Write-Host " 1. Close and reopen your terminal" -ForegroundColor White
Write-Host " 2. Run Claude Code: claude" -ForegroundColor Yellow
Write-Host " 3. Try: /ralph 'Design a microservices architecture'" -ForegroundColor Yellow
Write-Host ""
Write-Host "Configuration:" -ForegroundColor Cyan
Write-Host " Config dir: $claudeDir" -ForegroundColor Yellow
Write-Host ""
Write-Host "Enjoy your supercharged Claude Code experience!" -ForegroundColor Green
Write-Host ""
}
################################################################################
# Main Installation
################################################################################
function Main {
Show-Banner
# Check for Claude Code
$claudeInstalled = Test-ClaudeCode
if (-not $claudeInstalled) {
Write-Host ""
Write-Host "Customizations installed. Install Claude Code to use them." -ForegroundColor Cyan
Write-Host ""
Write-Host "Install Claude Code:" -ForegroundColor Cyan
Write-Host " npm install -g @anthropic-ai/claude-code" -ForegroundColor White
Write-Host ""
return
}
# Run installation steps
Backup-ExistingConfig
Install-Dependencies
# Download the repository
$repoDir = Download-Repository
if (-not $repoDir) {
Write-ColorOutput "Failed to download repository. Installation aborted." -Type Error
exit 1
}
# Install all components
Install-Skills -SourceDir $repoDir
Install-Agents -SourceDir $repoDir
Install-Hooks -SourceDir $repoDir
Install-Commands -SourceDir $repoDir
Install-Plugins -SourceDir $repoDir
Install-Scripts -SourceDir $repoDir
Install-Templates -SourceDir $repoDir
# Clean up
Write-ColorOutput "Cleaning up temporary files..." -Type Info
$zipFile = Join-Path $env:TEMP "supercharge.zip"
if (Test-Path $zipFile) {
Remove-Item -Path $zipFile -Force -ErrorAction SilentlyContinue
}
Show-Summary
}
# Run main function
try {
Main
} catch {
Write-ColorOutput "Installation failed: $_" -Type Error
exit 1
}