Skip to content

Commit b0d45a6

Browse files
Reuben Brooksclaude
andcommitted
feat: add PowerShell install script and Windows instructions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 4d8db68 commit b0d45a6

File tree

2 files changed

+96
-1
lines changed

2 files changed

+96
-1
lines changed

README.md

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,25 @@ Desktop application for visual task management and real-time AI agent control.
2222

2323
## Install
2424

25+
### macOS / Linux
26+
2527
```bash
2628
curl -sSf https://raw.githubusercontent.com/pyrex41/scud/master/install.sh | sh
2729
```
2830

29-
This installs both `scud` (CLI) and `rho-cli` (default AI harness). Works on macOS, Linux, and WSL. Requires Rust — the script will install it via rustup if needed.
31+
### Windows (PowerShell)
32+
33+
```powershell
34+
irm https://raw.githubusercontent.com/pyrex41/scud/master/install.ps1 | iex
35+
```
36+
37+
Or via WSL:
38+
39+
```powershell
40+
wsl curl -sSf https://raw.githubusercontent.com/pyrex41/scud/master/install.sh | sh
41+
```
42+
43+
Installs both `scud` (CLI) and `rho-cli` (default AI harness). Downloads prebuilt binaries when available, falls back to `cargo install`.
3044

3145
### Manual Install
3246

install.ps1

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
# SCUD + Rho Installer for Windows
2+
# irm https://raw.githubusercontent.com/pyrex41/scud/master/install.ps1 | iex
3+
$ErrorActionPreference = "Stop"
4+
5+
$ScudRepo = "pyrex41/scud"
6+
$RhoRepo = "pyrex41/rho"
7+
$InstallDir = if ($env:INSTALL_DIR) { $env:INSTALL_DIR } else { "$env:USERPROFILE\.local\bin" }
8+
9+
function Download-Binary {
10+
param($Repo, $BinName, $AssetPrefix)
11+
12+
$Asset = "$AssetPrefix-windows-x64.exe"
13+
$Dest = "$InstallDir\$BinName.exe"
14+
15+
try {
16+
$Release = Invoke-RestMethod -Uri "https://api.github.com/repos/$Repo/releases/latest"
17+
$Tag = $Release.tag_name
18+
} catch {
19+
Write-Host " Could not fetch latest release for $Repo"
20+
return $false
21+
}
22+
23+
$Url = "https://github.com/$Repo/releases/download/$Tag/$Asset"
24+
Write-Host " Downloading $BinName $Tag (windows/x64)..."
25+
26+
try {
27+
Invoke-WebRequest -Uri $Url -OutFile $Dest -UseBasicParsing
28+
Write-Host " Installed $BinName to $Dest"
29+
return $true
30+
} catch {
31+
Write-Host " Download failed: $_"
32+
return $false
33+
}
34+
}
35+
36+
function Cargo-Fallback {
37+
param($BinName, $CrateName)
38+
39+
Write-Host " Prebuilt binary not available. Installing via cargo..."
40+
if (-not (Get-Command cargo -ErrorAction SilentlyContinue)) {
41+
Write-Host " Rust not found. Install from https://rustup.rs first."
42+
exit 1
43+
}
44+
cargo install $CrateName
45+
}
46+
47+
Write-Host "Installing SCUD CLI + Rho harness..."
48+
Write-Host ""
49+
50+
if (-not (Test-Path $InstallDir)) {
51+
New-Item -ItemType Directory -Path $InstallDir -Force | Out-Null
52+
}
53+
54+
# Install scud
55+
Write-Host "scud:"
56+
if (-not (Download-Binary -Repo $ScudRepo -BinName "scud" -AssetPrefix "scud")) {
57+
Cargo-Fallback -BinName "scud" -CrateName "scud-cli"
58+
}
59+
60+
Write-Host ""
61+
62+
# Install rho-cli
63+
Write-Host "rho-cli:"
64+
if (-not (Download-Binary -Repo $RhoRepo -BinName "rho-cli" -AssetPrefix "rho-cli")) {
65+
Cargo-Fallback -BinName "rho-cli" -CrateName "rho-agent"
66+
}
67+
68+
Write-Host ""
69+
70+
# Check PATH
71+
if ($env:PATH -notlike "*$InstallDir*") {
72+
Write-Host "Add $InstallDir to your PATH:"
73+
Write-Host " [Environment]::SetEnvironmentVariable('PATH', `"$InstallDir;`$env:PATH`", 'User')"
74+
Write-Host ""
75+
Write-Host "Or run this to add it now (current session only):"
76+
Write-Host " `$env:PATH = `"$InstallDir;`$env:PATH`""
77+
Write-Host ""
78+
}
79+
80+
Write-Host "Done! Run 'scud init' in any project to get started."
81+
Write-Host "https://github.com/pyrex41/scud"

0 commit comments

Comments
 (0)