Commit graph

23 commits

Author SHA1 Message Date
frankbria
2cf06b0de2 Implement Phase 1 critical fixes: Response analyzer & circuit breaker
Implements all Phase 1 recommendations from expert panel review:

1. **Response Analysis Pipeline** (Martin Fowler recommendation)
   - New lib/response_analyzer.sh component
   - Parses Claude Code output for completion signals
   - Detects test-only loops and stagnation
   - Updates .exit_signals file with structured data
   - Tracks confidence scores and progress indicators

2. **Circuit Breaker Pattern** (Michael Nygard recommendation)
   - New lib/circuit_breaker.sh component
   - Three-state pattern: CLOSED → HALF_OPEN → OPEN
   - Prevents runaway token consumption
   - Detects: no progress (3 loops), same errors (5 loops)
   - Automatic halt with clear user guidance
   - Manual reset capability

3. **Structured Output Contract** (Sam Newman recommendation)
   - Updated PROMPT.md template with RALPH_STATUS format
   - Defines clear JSON-parseable exit signals
   - SMART criteria for completion detection
   - Concrete examples for all scenarios

4. **Integration & Testing**
   - ralph_loop.sh integration of both components
   - 20 comprehensive BATS integration tests (all passing)
   - Tests cover: signal detection, circuit states, full loop flows
   - Validates Phase 1 implementation correctness

**Impact**: Solves infinite loop problem, enables reliable exit detection,
prevents token waste through systematic stagnation detection.

**Test Results**: 20/20 integration tests passing

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-01 21:11:18 -07:00
frankbria
08fe93e663 Fix infinite retry loop when Claude API 5-hour limit is reached
- Added detection for API 5-hour limit error messages in execute_claude_code()
- Returns special exit code (2) when API limit is detected
- Added interactive prompt for user to choose: wait 60 minutes or exit
- Implements proper countdown timer when waiting for API reset
- Prevents infinite 30-second retry loops on API limit errors
- Improves status tracking with new api_limit and api_limit_exit states
2025-09-06 18:21:04 -07:00
frankbria
0635b652b4 Fix grep -c fallback logic causing syntax error in double bracket test
The original `|| echo 0` fallback was executing even when grep -c succeeded
but returned 0 matches (exit code 1), resulting in "0\n0" being assigned
to variables. This multi-line string caused syntax errors in [[ ]] tests.

Fixed by removing the fallback and explicitly handling empty variables
instead, which properly addresses the root cause of the line 280 error.
2025-09-05 22:49:52 -07:00
frankbria
2ed13c3150 Fix arithmetic expansion for integer comparison in ralph_loop.sh
Ensures total_items and completed_items are explicitly cast to integers
using $((...)) arithmetic expansion to prevent floating point values
from causing syntax errors in double bracket tests at line 280.
2025-09-05 22:43:25 -07:00
frankbria
d6b380236b Fix syntax error in ralph_loop.sh line 280
Remove quotes from echo statements in grep fallback values to ensure
numeric comparisons work correctly in bash arithmetic expressions.
2025-09-05 22:27:19 -07:00
frankbria
dac9629499 Fix exit condition logic in ralph_loop.sh
- Eliminate double function call in should_exit_gracefully check
- Use consistent string return pattern instead of mixed return codes
- Resolves script error on line 280 with exit code handling
2025-09-05 08:37:21 -07:00
frankbria
7b6f71fa93 Add configurable timeout for Claude Code execution
Features added:
- Added --timeout/-t option to set execution timeout in minutes
- Default timeout increased from 10 to 15 minutes
- Validation: timeout must be 1-120 minutes
- Shows timeout in execution start message

Usage examples:
- ralph --monitor                    # 15-minute default timeout
- ralph --monitor --timeout 30      # 30-minute timeout for complex tasks
- ralph --verbose --timeout 5       # 5-minute timeout with progress logs

Benefits:
- Prevents hanging on very complex tasks requiring >15 minutes
- Allows shorter timeouts for simpler tasks to fail faster
- User can adjust based on their specific project complexity
- Clear feedback about configured timeout in logs
2025-08-27 16:54:16 -07:00
frankbria
d480c1eb66 Separate progress updates from logs with --verbose option
Key improvements:
- Added --verbose flag to control 10-second progress updates in logs
- Real-time progress now shows in monitor display only (not logs)
- Created progress.json file for monitor communication
- Monitor shows live Claude Code progress with spinner and elapsed time
- Clean logs by default, detailed progress available with --verbose

Usage:
- ralph --monitor           # Clean logs, progress in monitor only
- ralph --monitor --verbose # Progress in both monitor and logs
- ralph --verbose           # Just verbose logs without monitor

Monitor now displays:
┌─ Claude Code Progress ──────────────────────────────┐
│ Status:         ⠋ Working (120s elapsed)
│ Output:         Analyzing authentication system...
└─────────────────────────────────────────────────────┘

This keeps logs clean while providing rich real-time feedback in the monitor.
2025-08-27 16:34:08 -07:00
frankbria
6b967bfff3 Add real-time progress monitoring for Claude Code execution
Features added:
- Animated progress spinner (⠋⠙⠹⠸) during Claude Code execution
- Real-time display of last output line from Claude Code
- Timer showing elapsed execution time in 10-second intervals
- 10-minute timeout for Claude Code execution to prevent hanging
- Visual indicators:  starting,  success,  failure

Counter fixes:
- Fixed call counter jumping issue by only incrementing on successful execution
- Counter now accurately reflects actual successful Claude Code calls
- Prevents double-counting on retries or failures

Monitoring improvements:
- Shows 'Claude Code working... (30s elapsed)' with spinner
- Displays last line of output: 'Claude Code: Reading file... (40s)'
- Clear success/failure indicators in logs
- Better visibility into long-running operations
2025-08-27 16:29:46 -07:00
frankbria
9a1124aa4c Use direct 'claude' command instead of npx
- Changed from 'npx @anthropic-ai/claude-code' to 'claude'
- This assumes Claude Code is installed globally with npm install -g
- Updated ralph_loop.sh, ralph_import.sh, and README.md
- Much cleaner and faster execution without npx overhead
2025-08-27 16:18:17 -07:00
frankbria
68e150d8b2 Fix Claude Code package name: @anthropic-ai/claude-code
- Updated from @anthropic/claude-code to @anthropic-ai/claude-code
- This was causing npm 404 errors when trying to execute Claude Code
- Fixed in ralph_loop.sh, ralph_import.sh, install.sh, and README.md
- Ralph should now be able to successfully execute Claude Code commands
2025-08-27 16:13:57 -07:00
frankbria
2a5452c18f Fix critical bug: incorrect return code check in exit logic
The issue was in line 378: if [[ $? -eq 0 ]]
- $? was checking the return code of 'local exit_reason=$(...)'
- This command always succeeds, so $? was always 0
- This caused Ralph to always exit immediately after loop #1

Fixed by:
- Calling should_exit_gracefully directly in the if condition
- Only calling it again to get exit reason if it returns 0 (exit needed)
- This properly checks the function's actual return code
2025-08-27 16:12:09 -07:00
frankbria
a09957c068 Add debug logging for @fix_plan.md completion check
- Add logging to show total_items and completed_items counts
- Add final debug statement to confirm function completion
- This will help identify if the fix_plan completion check is the culprit
2025-08-27 16:09:56 -07:00
frankbria
a3c2b0cec1 Fix silent exit bug: redirect debug logging to stderr
- The debug log_status calls in should_exit_gracefully() were being
  captured as stdout when called with
- This caused the debug messages to be treated as the exit reason
- Fixed by redirecting debug logging to stderr with >&2
- Ralph should now continue past the exit condition check properly
2025-08-27 16:08:17 -07:00
frankbria
6aa5e97436 Add detailed debug logging to should_exit_gracefully function
- Add debug statements to identify which exit condition is triggering
- Log each step of @fix_plan.md parsing and task completion checking
- Add logging for jq operations and file reading
- This should help identify why Ralph immediately exits after loop #1
2025-08-27 16:00:29 -07:00
frankbria
6bf8cd84f2 Fix loop_count increment syntax for bash compatibility 2025-08-27 15:58:02 -07:00
frankbria
4961b9391c Add more debug logging and fix loop_count scope issue 2025-08-27 15:56:16 -07:00
frankbria
31e515ecd1 Add debug logging to identify silent exit issue 2025-08-27 15:53:54 -07:00
frankbria
738e91ad54 Fix silent exit bug and improve error messages in ralph command
🐛 Bug Fix: Silent Exit Issue
- Ralph was silently exiting when PROMPT.md not found (no error shown)
- Added comprehensive error handling with helpful guidance
- Now clearly explains when directory is not a Ralph project

🎯 Enhanced User Experience:
- Detects partial Ralph projects vs completely wrong directories
- Provides specific actionable solutions:
  1. ralph-setup my-project (create new)
  2. ralph-import requirements.md (import existing)
  3. Navigate to existing Ralph project
  4. Create PROMPT.md manually
- Updated help text with "IMPORTANT" note about project directories
- Added example workflow in help documentation

🔧 Technical Improvements:
- Better error detection logic
- Informative messages instead of silent failures
- Maintains proper exit codes for scripting
- Clear guidance for different scenarios

This resolves the confusing behavior where ralph would start logging
but then silently exit without explanation when run outside a Ralph project.
2025-08-27 13:38:11 -07:00
frankbria
6d64be9b01 Transform Ralph into global command system
Major architectural change to make Ralph available as global commands:

🌟 New Global Installation System:
- Add install.sh script for global installation to ~/.local/bin
- Creates ralph, ralph-monitor, ralph-setup global commands
- Installs templates and scripts to ~/.ralph/ directory
- Automatic dependency checking and PATH configuration

🚀 Enhanced User Experience:
- ralph-setup my-project (run from anywhere, no directory constraints)
- ralph --monitor (start from any project directory)
- ralph-monitor (global monitoring command)
- No more ../ralph_loop.sh relative path requirements

🔧 Improved Architecture:
- Global template system in ~/.ralph/templates/
- Smart path detection (global commands vs local scripts)
- Maintains backward compatibility during transition
- Clean separation of installation vs project files

📚 Updated Documentation:
- All examples now use global commands (ralph vs ../ralph_loop.sh)
- Clear installation instructions with ./install.sh
- Global command reference in CLAUDE.md
- Streamlined Quick Start workflow

This makes Ralph much more professional and user-friendly by eliminating
directory structure requirements and providing standard Unix command experience.
2025-08-27 09:39:43 -07:00
frankbria
d81519584f Add tmux integration for seamless monitoring experience
- Add --monitor flag to ralph_loop.sh for integrated tmux monitoring
- Automatically creates split-pane session with Ralph loop and monitor
- Include tmux availability check with installation instructions
- Update documentation to recommend tmux workflow
- Add tmux session management commands and controls
- Preserve all existing functionality for users without tmux

New workflow:
  ../ralph_loop.sh --monitor  # Creates split session automatically

Traditional workflow still supported:
  ../ralph_loop.sh           # Terminal 1
  ../ralph_monitor.sh        # Terminal 2

System requirements updated to include tmux (recommended).
2025-08-27 09:33:25 -07:00
frankbria
48bd008701 Fix create_files.sh syntax errors and complete Ralph implementation
- Fix nested EOF heredoc conflicts in update_status() and show_help() functions
- Use unique delimiters (STATUSEOF, HELPEOF) to avoid conflicts
- Complete Ralph for Claude Code implementation with all components:
  - ralph_loop.sh: Main autonomous development loop with rate limiting
  - ralph_monitor.sh: Live monitoring dashboard
  - setup.sh: Project initialization script
  - templates/: Template files for new projects
  - .gitignore: Comprehensive ignore rules

All scripts are now executable and syntax-validated.
2025-08-27 09:15:00 -07:00
frankbria
5e1d8734b1 Add Ralph for Claude Code - autonomous AI development loop
Features:
- Intelligent exit detection (knows when project is done)
- Test limiting (enforces 20% rule to prevent busy work)
- Rate limiting with graceful API usage management
- Live monitoring dashboard with real-time progress
- Auto-generated documentation every 10 iterations
- Specification-driven development approach

Based on Geoffrey Huntley's Ralph technique, adapted for Claude Code.
2025-08-27 09:07:54 -07:00