claude-code-ultimate-guide/examples/scripts/fresh-context-loop.sh
Florian BRUNIAUX 6f968dbfc5 fix(sync): update landing sync script for new directory structure
- Change examples.html → examples/index.html
- Change quiz.html → quiz/index.html
- Add fresh-context-loop.sh script

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-17 15:42:03 +01:00

96 lines
3 KiB
Bash
Executable file

#!/usr/bin/env bash
# Fresh Context Loop - Ralph Wiggum pattern for Claude Code
#
# Solves context rot by spawning fresh Claude instances per task iteration.
# State persists via TASK.md, PROGRESS.md, and git commits.
#
# Usage: ./fresh-context-loop.sh [max_iterations] [task_file] [progress_file]
#
# Sources:
# - Pattern: https://block.github.io/goose/docs/tutorials/ralph-loop/
# - Research: https://research.trychroma.com/context-rot
set -euo pipefail
MAX_ITERATIONS=${1:-10}
TASK_FILE=${2:-"TASK.md"}
PROGRESS_FILE=${3:-"PROGRESS.md"}
# Validate prerequisites
if [[ ! -f "$TASK_FILE" ]]; then
echo "❌ Missing $TASK_FILE"
echo ""
echo "Create a TASK.md with:"
echo " ## Current Focus"
echo " [Single atomic task]"
echo ""
echo " ## Acceptance Criteria"
echo " - [ ] Tests pass"
echo " - [ ] Build succeeds"
exit 1
fi
# Create progress file if missing
[[ ! -f "$PROGRESS_FILE" ]] && touch "$PROGRESS_FILE"
echo "🔄 Fresh Context Loop"
echo " Max iterations: $MAX_ITERATIONS"
echo " Task file: $TASK_FILE"
echo " Progress file: $PROGRESS_FILE"
echo ""
for i in $(seq 1 "$MAX_ITERATIONS"); do
echo "═══════════════════════════════════════"
echo " Iteration $i/$MAX_ITERATIONS"
echo "═══════════════════════════════════════"
echo ""
# Fresh context each iteration (no -c flag = new session)
claude -p "$(cat "$TASK_FILE" "$PROGRESS_FILE")
---
INSTRUCTIONS FOR THIS ITERATION:
1. Read the task and progress above carefully
2. Complete the NEXT incomplete task only (one at a time)
3. Run tests/build to verify your changes work
4. Update $PROGRESS_FILE with:
- What you completed
- Any blockers encountered
- What should be done next
5. If ALL tasks are complete and verified, add this exact line to $PROGRESS_FILE:
LOOP_COMPLETE
IMPORTANT:
- Focus on ONE task per iteration
- Always verify before marking complete
- Commit your changes before the iteration ends"
echo ""
# Check completion marker
if grep -q "LOOP_COMPLETE" "$PROGRESS_FILE" 2>/dev/null; then
echo ""
echo "✅ All tasks completed in $i iterations"
exit 0
fi
# Auto-commit progress if changes exist
if ! git diff --quiet "$PROGRESS_FILE" 2>/dev/null; then
git add "$PROGRESS_FILE"
git commit -m "chore: update progress (iteration $i)" --no-verify 2>/dev/null || true
fi
# Auto-commit any other staged changes
if ! git diff --cached --quiet 2>/dev/null; then
git commit -m "feat: iteration $i progress" --no-verify 2>/dev/null || true
fi
echo ""
echo "─────────────────────────────────────────"
echo ""
done
echo "⚠️ Max iterations ($MAX_ITERATIONS) reached without completion"
echo " Check $PROGRESS_FILE for status"
exit 1