agentsclimarketplace

Workspace ralph orchestrator

Skill T-0-co/t-0-spec-kit-ralph/.agents/skills/workspace-ralph-orchestrator

Ralph Loop with Spec Kit command and control layer

Install
npx -y skills add T-0-co/t-0-spec-kit-ralph --skill workspace-ralph-orchestrator

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 9 stars9 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

Orchestrate Ralph automation loops for spec-driven development. Use when starting, stopping, monitoring, or checking status of Ralph loops. Triggers on Ralph start, Ralph stop, Ralph status, spec automation, task loop, run tasks, check progress, kill Ralph, resume Ralph, or tmux session management.

SKILL.md

13.4 KB, as published. Nobody here has run it

Workspace Ralph Orchestrator

Orchestrate Ralph automation loops via tmux sessions with full control from Claude Code.

Quick Reference

CommandDescription
ralph start <spec_dir>Start Ralph loop (parallel batches enabled by default)
ralph --no-parallel <spec_dir>Run sequentially (disable parallel batches)
ralph stopHard kill Ralph processes
ralph stop --gracefulGraceful stop after current task
ralph status <spec_dir>Show current progress
ralph context <spec_dir> --simple --loopLive dashboard (recommended)
ralph --worktree <spec_dir>Run in isolated worktree

Graceful Stop (Recommended)

Stop Ralph after the current task completes, preserving state:

# Create stop file - Ralph checks this between tasks
touch <spec_dir>/.ralph/.stop

# Example:
touch specs/001-my-feature/.ralph/.stop

Ralph will:

  1. Finish the current task
  2. Update progress.json with final state
  3. Log the graceful stop
  4. Exit cleanly

From Claude Code, use this pattern:

# Graceful stop
SPEC_DIR="specs/001-my-feature"
touch "$SPEC_DIR/.ralph/.stop"
echo "Stop file created - Ralph will stop after current task"

Hard Stop (Immediate)

When you need to stop immediately:

# Kill specific session
tmux kill-session -t ralph-001 2>/dev/null

# Kill all Ralph processes
pkill -f "ralph.sh"
pkill -f "timeout.*claude"

# Kill Playwright tests (if running)
pkill -f "playwright"
pkill -f "npx.*playwright"

# Nuclear option - kills ALL tmux
tmux kill-server

Complete cleanup script:

# Stop everything Ralph-related
tmux kill-session -t ralph-001 2>/dev/null
pkill -f "ralph.sh"
pkill -f "timeout.*claude"
pkill -f "playwright"
pkill -f "npx.*playwright"

Important: After hard stop, manually update progress.json to document state.

Viewing Claude Session Context

Ralph spawns a Claude Code session for each task. Use the included helper script for a complete overview.

Quick Context (Recommended)

# Live dashboard with auto-refresh (recommended)
.claude/skills/workspace-ralph-orchestrator/ralph-context.sh <spec_dir> --simple --loop

# Single snapshot
.claude/skills/workspace-ralph-orchestrator/ralph-context.sh <spec_dir>

# Example:
.claude/skills/workspace-ralph-orchestrator/ralph-context.sh specs/001-my-feature --simple --loop

This shows:

  • Progress: Current task, completed count, status
  • Active Session: Which Claude session is running
  • Claude's Todo List: Subtasks Claude is tracking (from TodoWrite)
  • Skills Used: Any skills invoked in the session
  • Recent Actions: Last 10 tool calls and messages
  • Control: Stop file status
  • Processes: Running Claude processes
  • Docker Containers: Container status and health
  • Port Health: Whether frontend/backend are responding
  • Session Log: Recent Ralph log entries

Manual Inspection

If you need more detail:

# Find most recently modified session files for your current project
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
CLAUDE_PROJECT_PATH="$HOME/.claude/projects/-$(echo "$PROJECT_ROOT" | tr '/' '-' | sed 's/^-//')"
ls -lt "$CLAUDE_PROJECT_PATH"/*.jsonl | head -5

# Check which Claude processes are running
ps aux | grep claude | grep -v grep

Starting a Single Loop

Start Ralph in a tmux session:

# Kill any existing session
tmux kill-session -t ralph 2>/dev/null

# Start new session with spec name
SPEC_NAME="010-feature"
tmux new-session -d -s "ralph-$SPEC_NAME" -c <project_root>

# Run Ralph
tmux send-keys -t "ralph-$SPEC_NAME" '<ralph_path>/ralph.sh start specs/<spec_name>/' Enter

Example:

tmux kill-session -t ralph-001 2>/dev/null
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
tmux new-session -d -s ralph-001 -c "$PROJECT_ROOT"
tmux send-keys -t ralph-001 './ralph start specs/001-my-feature/' Enter

Auto-Open Context Viewer (Default: On)

When starting Ralph, automatically open the context viewer in a separate Warp tab for real-time monitoring. This is enabled by default but can be disabled.

Complete start with context viewer:

# Set variables
SPEC_DIR="specs/001-my-feature"
SPEC_NAME="010"
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
SKILL_PATH="$PROJECT_ROOT/.claude/skills/workspace-ralph-orchestrator"

# Start Ralph in tmux
tmux kill-session -t ralph-$SPEC_NAME 2>/dev/null
tmux new-session -d -s ralph-$SPEC_NAME -c "$PROJECT_ROOT"
tmux send-keys -t ralph-$SPEC_NAME "./ralph start $SPEC_DIR/" Enter

# Auto-open context viewer in new Warp tab (default: on)
OPEN_CONTEXT_VIEWER=${OPEN_CONTEXT_VIEWER:-true}
if [[ "$OPEN_CONTEXT_VIEWER" == "true" ]]; then
  osascript -e 'tell application "Warp" to activate' \
    -e 'delay 0.5' \
    -e 'tell application "System Events" to tell process "Warp" to keystroke "t" using command down' \
    -e 'delay 0.3' \
    -e "tell application \"System Events\" to tell process \"Warp\" to keystroke \"watch -n5 '$SKILL_PATH/ralph-context.sh' '$SPEC_DIR'\"" \
    -e 'tell application "System Events" to tell process "Warp" to key code 36'
fi

To disable auto-open:

OPEN_CONTEXT_VIEWER=false  # Set before starting Ralph

Flags for ralph-context.sh: --loop (auto-refresh, RALPH_CONTEXT_REFRESH_SECS overrides the 1s default), --simple (single-column), --width=N. What it shows: see "Quick Context" above.

Parallel Task Batches

Tasks marked with [P] are automatically batched and executed in parallel using Claude Code subagents:

## Phase 5: Theming Fixes

- [ ] T085 [P] Fix light mode for IconPickerField
- [ ] T086 [P] Fix light mode for URLField
- [ ] T087 [P] Fix Section overlay colors

When Ralph detects consecutive [P] tasks:

  1. Groups them into a batch (up to MAX_PARALLEL_TASKS, default: 5)
  2. Spawns a single Claude session with batch context
  3. Claude launches parallel subagents via the Task tool
  4. Each subagent implements one task independently
  5. After all complete, Ralph verifies build and commits

Configuration (ralph.config):

PARALLEL_ENABLED=true      # Auto-detect [P] tasks (default: true)
MAX_PARALLEL_TASKS=5       # Max tasks per batch
PARALLEL_TIMEOUT=14400     # Batch timeout (4 hours)

Dashboard shows batch progress:

  • Batch section with per-task status icons (✓ completed, ~ running, ○ pending)
  • Progress bar for batch completion
  • Batch timing vs timeout

Recent actions show subagents:

  • → T085: Fix light mode... (purple arrow) - Subagent spawned
  • > Read (blue) - Direct tool calls

Parallel Features with Worktrees

Run multiple Ralph loops on different features simultaneously:

# Loop 1: Feature A (main repo, branch 010)
tmux new-session -d -s ralph-001 -c /path/to/project
tmux send-keys -t ralph-001 './ralph.sh start specs/010-feature-a/' Enter

# Loop 2: Feature B (worktree, branch 012)
tmux new-session -d -s ralph-002 -c /path/to/project
tmux send-keys -t ralph-002 './ralph.sh --worktree start specs/012-feature-b/' Enter

Each loop runs in isolation:

  • Separate git worktree with its own branch
  • Independent commits and pushes
  • Separate tmux sessions (ralph-001, ralph-002)

Worktree Options

# Auto-create worktree based on spec name
./ralph.sh --worktree start specs/012-feature/

# Specify worktree location
./ralph.sh --worktree-base ~/worktrees start specs/012-feature/

# Specify branch name
./ralph.sh --worktree --branch feature-branch start specs/012-feature/

Configuration

Global Config (.specify/ralph/config.sh)

# Enable worktrees for all specs
WORKTREE_ENABLED=true
WORKTREE_BASE="../worktrees"

# Context settings (0 = full, N = truncate to N lines)
RALPH_SPEC_LINES=0      # Include full spec.md
RALPH_PLAN_LINES=0      # Include full plan.md

# Retries and notifications
MAX_RETRIES=3
SLACK_ENABLED=true

Per-Spec Config (<spec_dir>/ralph.config)

# Override branch for this spec
FEATURE_BRANCH="010-schedule-improvements"
MAX_RETRIES=5

Prompt Files (Two-Level Hierarchy)

Ralph injects prompts at two levels:

FileScopePurpose
.specify/ralph/ralph-global.mdWorkspace-globalAll specs - project-wide skill mappings
<spec_dir>/ralph-spec.mdSpec-specificOne feature - patterns for this spec

Example ralph-global.md:

# MANDATORY: Skill Usage

| When Task Involves | YOU MUST USE |
|--------------------|--------------|
| Starting servers | `Skill(skill="hf-app-docker-dev-server")` |
| Running E2E tests | `Skill(skill="hf-app-playwright-runner")` |

Example ralph-spec.md:

## Feature-Specific Context

This is a frontend-only feature. Focus on:
- React components in `components/schedule/`
- Run Playwright tests after UI changes

Do NOT modify backend code.

Monitoring Ralph

Quick Status Check

# Progress JSON
cat <spec_dir>/.ralph/progress.json | jq .

# Session log
tail -20 <spec_dir>/.ralph/session.log

# Git commits from Ralph
git log --oneline -10 | grep "Ralph:"

# Built-in status command
./ralph.sh status specs/010-feature/

Live tmux Output

# Read current tmux output
tmux capture-pane -t ralph-001 -p | tail -20

# Extended history (last 500 lines)
tmux capture-pane -t ralph-001 -p -S -500 | tail -100

# List all Ralph sessions
tmux list-sessions | grep ralph

Monitor Claude's Background Tasks

Ralph's Claude may run commands in background. Check output files:

# List recent task outputs
PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
CLAUDE_TMP_PATH="/private/tmp/claude/-$(echo "$PROJECT_ROOT" | tr '/' '-' | sed 's/^-//')/tasks"
ls -lt "$CLAUDE_TMP_PATH"/*.output | head -5

# Tail active output
tail -f "$CLAUDE_TMP_PATH"/<task_id>.output

Opening View for User

Open tmux in Warp:

osascript -e 'tell application "Warp" to activate' \
  -e 'delay 0.5' \
  -e 'tell application "System Events" to tell process "Warp" to keystroke "t" using command down' \
  -e 'delay 0.3' \
  -e 'tell application "System Events" to tell process "Warp" to keystroke "tmux attach -t ralph-001"' \
  -e 'tell application "System Events" to tell process "Warp" to key code 36'

Workflow: Multiple Features

  1. Start first loop on main branch:

    git checkout 010-feature-branch
    tmux new-session -d -s ralph-001 -c /path/to/project
    tmux send-keys -t ralph-001 './ralph.sh start specs/010-feature/' Enter
    
  2. Start second loop with worktree:

    tmux new-session -d -s ralph-002 -c /path/to/project
    tmux send-keys -t ralph-002 './ralph.sh --worktree start specs/012-feature/' Enter
    
  3. Monitor both:

    # Terminal 1
    tmux attach -t ralph-001
    
    # Terminal 2
    tmux attach -t ralph-002
    
  4. When done:

    # Each loop creates a PR when finished
    gh pr create --base main --head 010-feature-branch
    gh pr create --base main --head 012-feature-branch
    

Troubleshooting

Ralph Stuck / Not Progressing

  1. Check if Claude is running:

    ps aux | grep claude | grep -v grep
    
  2. Check session file activity:

    PROJECT_ROOT="$(git rev-parse --show-toplevel 2>/dev/null || pwd)"
    CLAUDE_PROJECT_PATH="$HOME/.claude/projects/-$(echo "$PROJECT_ROOT" | tr '/' '-' | sed 's/^-//')"
    find "$CLAUDE_PROJECT_PATH" -name "*.jsonl" -mmin -5
    
  3. View Claude's recent actions (see "Viewing Claude Session Context" above)

  4. If stuck, graceful stop and resume:

    touch <spec_dir>/.ralph/.stop
    # Wait for stop, then:
    ./ralph.sh --resume start <spec_dir>
    

Session File Not Updating

Claude may be waiting for:

  • User input (shouldn't happen with --dangerously-skip-permissions)
  • A long-running background task
  • Rate limiting

Check background task output files in /private/tmp/claude/.

Docker/Server Issues

Ralph's Claude often needs running servers. If tests fail:

docker compose -f docker-compose.local.yml down
docker compose -f docker-compose.local.yml up -d --build

Tmux Scrolling Issues (macOS)

If scrolling with trackpad in tmux creates escape sequences like ^[OA^[OA^[[A:

# Enable mouse mode (allows trackpad scrolling)
tmux set -g mouse on

# Make it permanent
echo "set -g mouse on" >> ~/.tmux.conf

This fixes trackpad scrolling in attached tmux sessions.

Resources

speckit-ralph Repository

  • lib/ralph.sh - Main orchestrator
  • lib/context-builder.sh - Prompt assembly
  • lib/task-parser.sh - Parse tasks.md
  • lib/progress-tracker.sh - State management

Project Files

  • .specify/ralph/config.sh - Global config
  • .specify/ralph/ralph-global.md - Workspace-global prompt (skill mappings)
  • <spec>/ralph.config - Per-spec config
  • <spec>/ralph-spec.md - Spec-specific prompt (feature patterns)
  • <spec>/.ralph/progress.json - Task progress state
  • <spec>/.ralph/session.log - Execution log
  • <spec>/.ralph/.stop - Graceful stop trigger file

Skill Files

  • .claude/skills/workspace-ralph-orchestrator/SKILL.md - This documentation
  • .claude/skills/workspace-ralph-orchestrator/ralph-context.sh - Context helper script

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.