Why Separate Bootstrap Scripts Exist for Windows, Linux/macOS, and Kali in Reverse-Skill

Separate bootstrap scripts are required because each platform uses incompatible package managers, shell environments, and privilege escalation mechanisms that cannot be handled reliably by a single cross-platform script.

The reverse-skill repository provides three distinct bootstrap scripts to handle platform-specific installation workflows. This design keeps each script focused, maintainable, and testable without dense conditional branching.

Why a Unified Script Fails in Practice

A single bootstrap script would need to detect and branch for:

  • Shell interpreters: PowerShell on Windows versus Bash on Linux/macOS/Kali
  • Package managers: winget (Windows), apt/brew/pacman (Linux/macOS), and Kali-specific repositories
  • Path conventions: %TEMP% with backslashes versus $TMPDIR with forward slashes
  • Privilege models: UAC prompts on Windows versus sudo on POSIX systems

These differences run deep into the installation logic. Embedding platform detection at every step produces fragile, hard-to-test code.

The Three Bootstrap Scripts

The repository maintains three specialized scripts, each optimized for its target environment.

Windows: PowerShell with Winget

skills/scripts/bootstrap-reverse.ps1 handles Windows installations using native PowerShell capabilities and the winget package manager.

Key Windows-specific features:

  • UTF-8 I/O configuration for consistent encoding
  • Winget-based package resolution via Ensure-WingetPackage
  • Visual Studio Build Tools installation with UAC-aware privilege checks
  • Windows path resolution using $env:TEMP and Get-FirstCommandPath

# From bootstrap-reverse.ps1 – Windows-specific package installation

function Ensure-WingetPackage {
    param([string]$Id, [string]$Label)
    # Resolves winget package, handling Windows-specific installation paths

}

function Get-FirstCommandPath {
    param([string[]]$Names)
    # Returns first available command path on Windows FILESYSTEM

}

# Environment setup using Windows TEMP directory

$TempDir = [System.IO.Path]::GetTempPath()

Linux/macOS: POSIX Shell with Multi-Manager Support

skills/scripts/bootstrap-reverse.sh serves generic Unix-like systems with Bash-based dependency resolution.

This script branches across Linux distributions and macOS:

  • apt-get for Debian/Ubuntu derivatives
  • brew for macOS
  • pacman for Arch-based systems

# Typical Linux/macOS detection pattern (inferred from manifest structure)

if command -v apt-get >/dev/null 2>&1; then
    sudo apt-get update && sudo apt-get install -y python3 nodejs
elif command -v brew >/dev/null 2>&1; then
    brew install python node
elif command -v pacman >/dev/null 2>&1; then
    sudo pacman -S --noconfirm python nodejs
fi

Uses $TMPDIR (macOS) or /tmp (Linux) rather than Windows %TEMP%.

Kali Linux: Security-Focused Customization

kali/scripts/bootstrap-reverse.sh extends the Linux base with penetration-testing-specific adaptations.

Kali requires specialized handling because:

  • Pre-installed security toolchain reduces redundant installations
  • Kali-specific apt repositories provide hardened tool versions
  • Non-interactive defaults prevent automation stalls in testing environments

# Kali-specific package installation (structure inferred from repository layout)

sudo apt-get update
sudo apt-get install -y kali-tools-top10  # Kali's curated pentest bundle

# Disables interactive prompts that would block CI/security testing workflows

export DEBIAN_FRONTEND=noninteractive

Architecture Benefits of Platform Separation

Separating bootstrap logic delivers concrete engineering advantages:

Aspect Benefit
Maintainability Each script stays under 200 lines, readable without scrolling through platform if/else blocks
Testability CI pipelines test Windows, Ubuntu, and Kali jobs in parallel without cross-platform matrix complexity
Evolution Windows team can add winget features without risking Linux stability; Kali security updates stay isolated
Debugging Platform-specific failure logs point directly to the responsible script

How the Manifest Drives Platform Selection

The skills/scripts/bootstrap-manifest.json coordinates which bootstrap script executes, but does not contain the installation logic itself.

{
  "platforms": {
    "windows": {
      "script": "bootstrap-reverse.ps1",
      "interpreter": "powershell"
    },
    "linux": {
      "script": "bootstrap-reverse.sh",
      "interpreter": "bash"
    },
    "kali": {
      "script": "kali/scripts/bootstrap-reverse.sh",
      "interpreter": "bash",
      "inherits": "linux"
    }
  }
}

This separation of manifest (what to install) from bootstrap (how to install) lets the repository define capabilities once while executing them through platform-native mechanisms.

Summary

  • Three bootstrap scripts exist because Windows PowerShell, generic Linux/macOS Bash, and Kali penetration-testing environments have incompatible package managers and system conventions
  • bootstrap-reverse.ps1 uses winget and Windows-specific path handling
  • bootstrap-reverse.sh supports apt/brew/pacman with POSIX environment variables
  • kali/scripts/bootstrap-reverse.sh adds Kali tool repositories and non-interactive defaults
  • bootstrap-manifest.json defines cross-platform capabilities without embedding platform-specific installation code

Frequently Asked Questions

Could the scripts be merged using a cross-platform tool like Python?

Python would add a bootstrap dependency—defeating the purpose of a self-contained installer. The current design uses only tools guaranteed present on each platform: PowerShell on Windows, Bash on Unix-like systems.

Why does Kali need its own script rather than using the generic Linux version?

Kali ships with a curated security toolchain and specialized apt sources. The Kali script skips redundant installations, adds pentest-specific packages like kali-tools-top10, and configures DEBIAN_FRONTEND=noninteractive for automation—changes that would complicate the generic Linux script.

How does the repository detect which bootstrap script to run?

The bootstrap-manifest.json file maps platform identifiers to script paths. The entry point loader inspects the runtime environment and dispatches to the appropriate script without manual user selection.

What happens if a new platform like FreeBSD needs support?

A new bootstrap-freebsd.sh would follow the established pattern: placed in freebsd/scripts/, registered in bootstrap-manifest.json, and implementing FreeBSD's pkg package manager and /usr/local paths. This mirrors how Kali extends the Linux base without modifying existing scripts.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →