-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
executable file
·94 lines (85 loc) · 2.78 KB
/
Copy pathinstall.sh
File metadata and controls
executable file
·94 lines (85 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/bash
set -euo pipefail
# =============================================================================
# Ralph Installer
# Installs Ralph slash commands and loop script for Claude Code
#
# Usage:
# curl -fsSL https://raw.githubusercontent.com/gididaf/ralph/main/install.sh | bash
#
# Or clone and run locally:
# git clone https://github.com/gididaf/ralph.git && cd ralph && bash install.sh
# =============================================================================
CLAUDE_DIR="$HOME/.claude"
COMMANDS_DIR="$CLAUDE_DIR/commands"
SCRIPTS_DIR="$CLAUDE_DIR/scripts"
REPO_URL="https://github.com/gididaf/ralph.git"
echo ""
echo " ______ _ _ "
echo " | __ | | | | | "
echo " | |__| |__ _| |_ __ | |__ "
echo " | _ / _\` | | '_ \\| '_ \\ "
echo " | | \\ \\ (_| | | |_) | | | |"
echo " |_| \\_\\__,_|_| .__/|_| |_|"
echo " | | "
echo " |_| "
echo ""
echo " Autonomous loop for Claude Code"
echo ""
# Determine source: are we inside the cloned repo, or running via curl?
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}" 2>/dev/null || echo ".")" && pwd)"
if [[ -f "$SCRIPT_DIR/commands/ralph-init.md" ]]; then
REPO_DIR="$SCRIPT_DIR"
CLEANUP=""
else
# Running via curl — clone to temp directory
if ! command -v git &>/dev/null; then
echo "[ralph] ERROR: git is required. Install git first." >&2
exit 1
fi
REPO_DIR=$(mktemp -d)
CLEANUP="$REPO_DIR"
echo "[ralph] Downloading Ralph..."
git clone --quiet --depth 1 "$REPO_URL" "$REPO_DIR"
fi
# Cleanup on exit if we cloned
cleanup() {
if [[ -n "${CLEANUP:-}" ]] && [[ -d "$CLEANUP" ]]; then
rm -rf "$CLEANUP"
fi
}
trap cleanup EXIT
# Create target directories
mkdir -p "$COMMANDS_DIR"
mkdir -p "$SCRIPTS_DIR"
# Install commands
echo "[ralph] Installing slash commands..."
COMMANDS=(ralph-init ralph-run ralph-status ralph-stop ralph-signs)
for cmd in "${COMMANDS[@]}"; do
if [[ -f "$COMMANDS_DIR/$cmd.md" ]]; then
echo " Updating /$cmd"
else
echo " Installing /$cmd"
fi
cp "$REPO_DIR/commands/$cmd.md" "$COMMANDS_DIR/$cmd.md"
done
# Install loop script
echo "[ralph] Installing loop script..."
cp "$REPO_DIR/scripts/ralph-loop.sh" "$SCRIPTS_DIR/ralph-loop.sh"
chmod +x "$SCRIPTS_DIR/ralph-loop.sh"
echo ""
echo "[ralph] Installation complete!"
echo ""
echo " Commands installed:"
echo " /ralph-init - Plan and set up a Ralph loop"
echo " /ralph-run - Launch the loop in tmux"
echo " /ralph-status - Check loop progress"
echo " /ralph-stop - Gracefully stop the loop"
echo " /ralph-signs - Add guardrails from failures"
echo ""
echo " Quick start:"
echo " 1. Open Claude Code in your project"
echo " 2. Run: /ralph-init build a REST API with tests"
echo " 3. Run: /ralph-run"
echo " 4. Watch: /ralph-status"
echo ""