44 lines
1.7 KiB
Bash
44 lines
1.7 KiB
Bash
#!/usr/bin/env sh
|
|||
|
|
# Headless loop script for overnight Claude Code automation.
|
||
|
|
# Set CLAUDE_AUTONOMOUS=1 for Ralph Wiggum (Stop hook blocks until plan is complete).
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
PROJECT_DIR="${CLAUDE_PROJECT_DIR:-$(cd "$(dirname "$0")/.." && pwd)}"
|
||
|
|
PROMPT_FILE="${PROMPT_FILE:-$PROJECT_DIR/loop/prompt.md}"
|
||
|
|
LOG_FILE="${LOG_FILE:-$PROJECT_DIR/loop/loop.log}"
|
||
|
|
ITERATION_COUNT="${ITERATION_COUNT:-1}"
|
||
|
|
ITERATION_DELAY="${ITERATION_DELAY:-600}"
|
||
|
|
CLAUDE_BIN="${CLAUDE_BIN:-claude}"
|
||
|
|
|
||
|
|
cd "$PROJECT_DIR"
|
||
|
|
|
||
|
|
echo "=== Overnight loop started $(date '+%Y-%m-%dT%H:%M:%S' 2>/dev/null || date) ===" | tee -a "$LOG_FILE"
|
||
|
|
echo " PROMPT_FILE=$PROMPT_FILE" | tee -a "$LOG_FILE"
|
||
|
|
echo " CLAUDE_AUTONOMOUS=${CLAUDE_AUTONOMOUS:-0}" | tee -a "$LOG_FILE"
|
||
|
|
echo " ITERATION_COUNT=$ITERATION_COUNT" | tee -a "$LOG_FILE"
|
||
|
|
echo "" | tee -a "$LOG_FILE"
|
||
|
|
|
||
|
|
i=1
|
||
|
|
while [ "$i" -le "$ITERATION_COUNT" ]; do
|
||
|
|
echo "--- Iteration $i/$ITERATION_COUNT @ $(date '+%Y-%m-%dT%H:%M:%S' 2>/dev/null || date) ---" | tee -a "$LOG_FILE"
|
||
|
|
export CLAUDE_PROJECT_DIR="$PROJECT_DIR"
|
||
|
|
export CLAUDE_AUTONOMOUS="${CLAUDE_AUTONOMOUS:-1}"
|
||
|
|
|
||
|
|
# Run Claude with autonomous permissions; prompt from file
|
||
|
|
if [ -f "$PROMPT_FILE" ]; then
|
||
|
|
"$CLAUDE_BIN" -p --dangerously-skip-permissions --output-format=stream-json \
|
||
|
|
< "$PROMPT_FILE" 2>&1 | tee -a "$LOG_FILE" || true
|
||
|
|
else
|
||
|
|
echo "Error: $PROMPT_FILE not found" | tee -a "$LOG_FILE"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
i=$((i + 1))
|
||
|
|
if [ "$i" -le "$ITERATION_COUNT" ] && [ "$ITERATION_DELAY" -gt 0 ]; then
|
||
|
|
echo "Waiting ${ITERATION_DELAY}s before next iteration..." | tee -a "$LOG_FILE"
|
||
|
|
sleep "$ITERATION_DELAY"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
echo "=== Loop complete $(date '+%Y-%m-%dT%H:%M:%S' 2>/dev/null || date) ===" | tee -a "$LOG_FILE"
|