Display project status dashboard and optionally continue the Ralph Loop. Use when checking progress, viewing status, or when user says "ralph status", "show progress", or "how is it going".
Display project status and offer to continue autonomous development if tasks remain.
# Detect operating system
if [[ "$OSTYPE" == "msys" ]] || [[ "$OSTYPE" == "win32" ]] || [[ -n "$WINDIR" ]]; then
PLATFORM="windows"
else
PLATFORM="unix"
fi
Unix:
sqlite3 --version 2>/dev/null || echo "SQLite not found"
Windows:
sqlite3 --version 2>$null
if (-not $?) { Write-Host "SQLite not found" }
If SQLite not available:
SQLite is required. Install it:
- Windows: winget install SQLite.SQLite
- macOS: brew install sqlite3
- Linux: sudo apt install sqlite3
# Check for ralph.db
if [[ -f "ralph.db" ]]; then
echo "Database found"
else
echo "Database not found"
fi
If not found:
Ralph database not found.
Run /ralph-new to create a new project, or
Run /ralph-enhance to add features to an existing project.
Get task counts:
PLANNED=$(sqlite3 ralph.db "SELECT COUNT(*) FROM tasks WHERE status='planned';")
IN_PROGRESS=$(sqlite3 ralph.db "SELECT COUNT(*) FROM tasks WHERE status='in-progress';")
COMPLETED=$(sqlite3 ralph.db "SELECT COUNT(*) FROM tasks WHERE status='completed';")
FAILED=$(sqlite3 ralph.db "SELECT COUNT(*) FROM tasks WHERE status='failed';")
TOTAL=$((PLANNED + IN_PROGRESS + COMPLETED + FAILED))
Get current work:
sqlite3 ralph.db "SELECT task_id, name, started_at FROM tasks WHERE status='in-progress';"
Get next up:
sqlite3 ralph.db "SELECT task_id, name, priority FROM tasks WHERE status='planned' ORDER BY priority, created_at LIMIT 5;"
Get recent activity:
sqlite3 ralph.db "SELECT datetime(created_at, 'localtime'), task_id, outcome FROM iterations ORDER BY created_at DESC LIMIT 10;"
Get blockers (3+ failures):
sqlite3 ralph.db "SELECT t.task_id, t.name, t.iteration_count FROM tasks t WHERE t.status='failed' OR t.iteration_count >= 3;"
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā RALPH PROJECT STATUS ā
ā [Project Name] ā
ā āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā£
TASK SUMMARY
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā In Progress: [N]
ā Planned: [N]
ā Completed: [N]
ā Failed: [N]
āāāāāāāāāāāāāāāāā
Total: [N]
PROGRESS
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
[āāāāāāāāāāāāāāāāāāāāāāāāāāāāāā] [XX]% Complete
Iterations: [N] total | [N] success | [N] failed
Success Rate: [XX]%
CURRENTLY WORKING ON
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
š [US-XXX]: [Task name]
Started: [timestamp] | Iterations: [N]
NEXT UP
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
1. [US-XXX]: [Task name] Priority: [N]
2. [US-XXX]: [Task name] Priority: [N]
BLOCKERS (if any)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā ļø [US-XXX]: [Task name] - Failed [N] times
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
If there are pending or in-progress tasks, ask:
Tasks remaining: [N] planned, [N] in-progress
Would you like to:
A) Continue development (run Ralph Loop automatically)
B) View web dashboard (Kanban board)
C) Exit (status only)
Use AskUserQuestion tool for this.
If A) Continue development:
Automatically start the Ralph Loop inline:
WHILE there are pending tasks:
1. Get next task from database
2. Mark as in-progress
3. Implement the task
4. Run Playwright tests
5. If pass: mark complete, commit
6. If fail: log learnings, increment failure count
7. Continue to next task
END WHILE
When complete, output:
<promise>COMPLETE</promise>
If B) View web dashboard:
Generate dashboard data and start HTTP server:
Unix:
# Generate dashboard JSON
./scripts/ralph-db.sh dashboard
# Start HTTP server (runs in background)
echo "Starting HTTP server on port 8080..."
python3 -m http.server 8080 &
SERVER_PID=$!
echo ""
echo "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
echo " Dashboard running at: http://localhost:8080/dashboard.html"
echo " Press Ctrl+C to stop the server"
echo "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
Windows:
# Generate dashboard JSON
.\scripts\ralph-db.ps1 dashboard
# Start HTTP server
Write-Host ""
Write-Host "Starting HTTP server on port 8080..."
Write-Host ""
Write-Host "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
Write-Host " Dashboard running at: http://localhost:8080/dashboard.html"
Write-Host " Press Ctrl+C to stop the server"
Write-Host "āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā"
python -m http.server 8080
After starting the server, open http://localhost:8080/dashboard.html in the browser.
If C) Exit: Just show status, no further action.
If all tasks are completed:
š ALL TASKS COMPLETE!
Summary:
- Total tasks: [N]
- Completed: [N]
- Failed: [N]
- Success rate: [XX]%
Final verification recommended:
- Run full test suite
- Review git log
- Check for any cleanup needed
Output:
<promise>COMPLETE</promise>
| Action | Windows (PowerShell) | Unix (Bash) |
|---|---|---|
| Check file exists | Test-Path "file" |
[[ -f file ]] |
| Run SQLite | sqlite3 ralph.db "query" |
sqlite3 ralph.db "query" |
| Run dashboard script | .\scripts\ralph-db.ps1 dashboard |
./scripts/ralph-db.sh dashboard |
| Count in variable | $count = sqlite3 ... |
COUNT=$(sqlite3 ...) |
# View CLI status
./scripts/ralph-db.sh status # Unix
.\scripts\ralph-db.ps1 status # Windows
# List all tasks
./scripts/ralph-db.sh list
# List by status
./scripts/ralph-db.sh list planned
./scripts/ralph-db.sh list failed
# View recent activity
./scripts/ralph-db.sh log
# Generate web dashboard
./scripts/ralph-db.sh dashboard
The dashboard.html provides: