# Ralph — Autonomous Loop Ralph is Flow-Next's repo-local autonomous harness. It loops over tasks, applies multi-model review gates, and produces production-quality code overnight. > **TL;DR**: External shell loop → fresh Claude session per task → cross-model review gates → receipt-based proof-of-work → iterate until SHIP. --- ## Table of Contents - [Quick Start](#quick-start) - [Architecture](#architecture) - [How It Works](#how-it-works) - [Why Ralph vs ralph-wiggum](#why-ralph-vs-ralph-wiggum) - [Quality Gates](#quality-gates) - [Multi-Model Reviews](#1-multi-model-reviews) - [Plan Review Gate](#plan-review-gate) - [Receipt-Based Gating](#2-receipt-based-gating) - [Review Loops Until SHIP](#3-review-loops-until-ship) - [Memory Capture](#4-memory-capture-opt-in) - [Configuration Reference](#configuration-reference) - [Review Backends](#review-backends) - [RepoPrompt](#repoprompt-integration) - [Codex CLI](#codex-integration) - [Run Artifacts](#run-artifacts) - [Controlling Ralph](#controlling-ralph) - [Testing & Debugging](#testing--debugging) - [Safety & Isolation](#safety--isolation) - [Docker Sandbox](#docker-sandbox) - [DCG (Destructive Command Guard)](#dcg-destructive-command-guard) - [Guard Hooks](#guard-hooks) - [Troubleshooting](#troubleshooting) - [Morning Review Workflow](#morning-review-workflow) --- ## Quick Start ### 1. Initialize ```bash # Inside Claude Code /flow-next:ralph-init # Or from terminal claude -p "/flow-next:ralph-init" ``` Creates `scripts/ralph/` with: | File | Purpose | |------|---------| | `ralph.sh` | Main loop | | `ralph_once.sh` | Single iteration (testing) | | `config.env` | All settings | | `runs/` | Artifacts and logs | ### 2. Configure Edit `scripts/ralph/config.env`: ```bash PLAN_REVIEW=codex # rp, codex, or none WORK_REVIEW=codex # rp, codex, or none ``` ### 3. Test ```bash scripts/ralph/ralph_once.sh ``` > **Always test first.** Runs one iteration then exits. Observe before committing to a full run. ### 4. Run ```bash scripts/ralph/ralph.sh ``` Ralph spawns Claude sessions via `claude -p`, loops until done, and applies review gates. **Watch mode** — see activity in real-time: ```bash scripts/ralph/ralph.sh --watch # Tool calls only scripts/ralph/ralph.sh --watch verbose # Include model responses scripts/ralph/ralph.sh --config alt.env # Use alternate config file ``` ### 5. Monitor (Optional) ```bash bun add -g @gmickel/flow-next-tui flow-next-tui ``` Real-time TUI for task progress, streaming logs, and run state. ![flow-next-tui](../../../assets/tui.png) ### Uninstall Run manually in terminal: ```bash rm -rf scripts/ralph/ ``` --- ## Architecture ### How It Works ``` ┌─────────────────────────────────────────────────────────────┐ │ scripts/ralph/ralph.sh │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ while flowctl next returns work: │ │ │ │ 1. claude -p "/flow-next:plan" or :work │ │ │ │ 2. check review receipts │ │ │ │ 3. if missing/invalid → retry │ │ │ │ 4. if SHIP verdict → next task │ │ │ └────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` ```mermaid flowchart TD A[ralph.sh loop] --> B[flowctl next] B -->|plan needed| C[/flow-next:plan/] C --> D[/flow-next:plan-review/] B -->|work needed| E[/flow-next:work/] E --> F[/flow-next:impl-review/] B -->|completion review needed| K[/flow-next:spec-completion-review/] D --> G{Receipt valid?} F --> G K --> G G -- yes --> H{Verdict = SHIP?} H -- yes --> B H -- no --> I[Fix issues, retry review] I --> G G -- no --> J[Force retry iteration] J --> B ``` ### Why Ralph vs ralph-wiggum Anthropic's official ralph-wiggum uses a Stop hook to keep Claude in the same session. Flow-Next inverts this for production-grade reliability. | Aspect | ralph-wiggum | Ralph | |--------|--------------|-------| | **Session** | Single, accumulating | Fresh per iteration | | **Loop** | Stop hook, same session | External bash, new `claude -p` | | **Context** | Grows until full | Clean slate every time | | **Failed attempts** | Pollute future work | Gone with session | | **Re-anchoring** | None | Every iteration | | **Quality gates** | Tests only | Multi-model reviews | | **Stuck detection** | `--max-iterations` | Auto-block after N failures | | **Auditability** | Session transcript | Logs + receipts + evidence | **The core problems with ralph-wiggum:** 1. **Context pollution** — Failed attempts mislead future iterations 2. **No re-anchoring** — Claude loses sight of the spec as context fills 3. **Single model** — Claude grades its own homework 4. **Binary outcome** — Completion promise or max iterations **Ralph's solution:** Fresh context + multi-model review gates + receipt-based proof-of-work. --- ## Quality Gates Ralph enforces quality through four mechanisms: ### 1. Multi-Model Reviews A second model verifies code. Two models catch what one misses. | Backend | Platform | Context | Recommended | |---------|----------|---------|-------------| | `rp` | macOS (GUI) | Full file context via Builder | Yes | | `codex` | Cross-platform | Heuristic context from changed files | Fallback | | `none` | Any | — | Not for production | Two review types: - **Plan reviews** — Verify architecture before coding starts - **Impl reviews** — Verify implementation meets spec after coding ### Plan Review Gate The plan review gate ensures specs are architecturally sound before any implementation begins. This catches design issues early when they're cheap to fix. #### How It Works ``` ┌─────────────────────────────────────────────────────────────┐ │ flowctl next --require-plan-review │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 1. Find specs with plan_review_status = unknown │ │ │ │ 2. Return status=plan, spec=fn-1 │ │ │ │ 3. Ralph invokes /flow-next:plan-review fn-1 │ │ │ │ 4. Skill loops until SHIP │ │ │ │ 5. flowctl spec set-plan-review-status fn-1 --status ship │ │ │ 6. Next iteration: spec unlocked for work │ │ │ └────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` #### Configuration Both settings are required for plan reviews: ```bash # config.env REQUIRE_PLAN_REVIEW=1 # Gate: don't start work until plans reviewed PLAN_REVIEW=codex # Backend: rp, codex, or export ``` | `REQUIRE_PLAN_REVIEW` | `PLAN_REVIEW` | Behavior | |-----------------------|---------------|----------| | `0` | any | Plans auto-ship, work starts immediately | | `1` | `rp` | Plans reviewed via RepoPrompt | | `1` | `codex` | Plans reviewed via Codex CLI | | `1` | `export` | Context exported for manual review | | `1` | `none` | **Blocked forever** — no backend to review | > **Common mistake:** Setting `REQUIRE_PLAN_REVIEW=1` without a `PLAN_REVIEW` backend. Ralph will block on every spec with no way to proceed. #### The Review Cycle When `flowctl next` returns `status=plan`: 1. **Checkpoint** — Save spec state before review ```bash flowctl checkpoint save --spec fn-1 --json ``` 2. **Review** — Invoke the plan review skill ```bash /flow-next:plan-review fn-1 --review=codex ``` 3. **Fix loop** — If `NEEDS_WORK`: - Parse reviewer feedback - Update spec via `flowctl spec set-plan` - Sync affected task specs via `flowctl task set-spec` - Re-review (same chat for RP, receipt continuity for Codex) - Repeat until `SHIP` 4. **Receipt** — Write proof-of-work ```json {"type":"plan_review","id":"fn-1","mode":"codex","timestamp":"..."} ``` 5. **Unlock** — Set status to ship ```bash flowctl spec set-plan-review-status fn-1 --status ship ``` #### Recovery If context compacts during review cycles: ```bash flowctl checkpoint restore --spec fn-1 --json ``` This restores the spec/task state from before the review started. #### Inspecting Plan Review Status ```bash # Check all specs flowctl specs --json | jq '.specs[] | {id, plan_review_status}' # Check specific spec flowctl show fn-1 --json | jq '.plan_review_status' # Find specs needing review flowctl next --require-plan-review --json ``` #### Plan Review vs Impl Review | Aspect | Plan Review | Impl Review | |--------|-------------|-------------| | **When** | Before coding | After coding | | **Reviews** | Spec + task markdown | Code changes | | **Blocks** | All tasks in spec | Single task | | **Focus** | Architecture, feasibility, scope | Correctness, security, tests | | **Config** | `PLAN_REVIEW` + `REQUIRE_PLAN_REVIEW` | `WORK_REVIEW` | ### Spec-Completion Review Gate The spec-completion review gate ensures implementation matches the spec before closing it. Runs after all tasks complete, checking for requirement gaps. #### How It Works ``` ┌─────────────────────────────────────────────────────────────┐ │ flowctl next --require-completion-review │ │ ┌────────────────────────────────────────────────────────┐ │ │ │ 1. All tasks done, completion_review_status != ship │ │ │ │ 2. Return status=completion_review, spec=fn-1 │ │ │ │ 3. Ralph invokes /flow-next:spec-completion-review fn-1 │ │ │ │ 4. Skill loops until SHIP │ │ │ │ 5. flowctl spec set-completion-review-status fn-1 --status ship │ │ │ 6. Next iteration: spec can close │ │ │ └────────────────────────────────────────────────────────┘ │ └─────────────────────────────────────────────────────────────┘ ``` #### Configuration ```bash # config.env COMPLETION_REVIEW=codex # Backend: rp, codex, or none ``` When `COMPLETION_REVIEW != none`, Ralph passes `--require-completion-review` to the selector. There is no separate `REQUIRE_COMPLETION_REVIEW` flag—the presence of a backend implies the gate is active. | `COMPLETION_REVIEW` | Behavior | |---------------------|----------| | `rp` | Completion reviewed via RepoPrompt | | `codex` | Completion reviewed via Codex CLI | | `none` | No completion review, specs close immediately | #### The Review Cycle When `flowctl next` returns `status=completion_review`: 1. **Review** — Invoke the spec-completion-review skill ```bash /flow-next:spec-completion-review fn-1 --review=codex ``` 2. **Fix loop** — If `NEEDS_WORK`: - Parse reviewer feedback (requirement gaps, missing functionality) - Implement missing requirements inline - Re-review (same chat for RP, receipt continuity for Codex) - Repeat until `SHIP` 3. **Receipt** — Skill writes proof-of-work to `receipts/completion-fn-1.json` ```json {"type":"completion_review","id":"fn-1","mode":"codex","verdict":"SHIP","timestamp":"..."} ``` 4. **Unlock** — Set status to ship ```bash flowctl spec set-completion-review-status fn-1 --status ship ``` 5. **Close** — Spec can now close normally #### What Completion Review Catches | Issue Type | Example | |------------|---------| | **Decomposition gaps** | Spec mentioned rate limiting, no task created | | **Partial implementation** | Task marked done but only covers happy path | | **Cross-task gaps** | Auth task done, logging task done, but no audit trail | | **Missing doc updates** | Spec required README update, not done | #### Completion Review vs Impl Review | Aspect | Impl Review | Completion Review | |--------|-------------|-------------------| | **When** | After each task | After all tasks done | | **Scope** | Single task acceptance | Entire spec | | **Checks** | Code quality, tests | Spec compliance | | **Focus** | "Is this task done right?" | "Did we deliver everything?" | | **Config** | `WORK_REVIEW` | `COMPLETION_REVIEW` | ### 2. Receipt-Based Gating Every review produces a receipt JSON: ```json { "type": "impl_review", "id": "fn-1.1", "mode": "rp", "timestamp": "2026-01-09T..." } ``` **No receipt = no progress.** Ralph retries until receipt exists. This is at-least-once delivery. The agent is untrusted; receipts are proof-of-work. ### 3. Review Loops Until SHIP Reviews block progress until approved: ```xml SHIP ``` Fix → re-review → fix → re-review... until the reviewer approves. **Verdict tags:** | Verdict | Meaning | |---------|---------| | `SHIP` | Approved, proceed | | `NEEDS_WORK` | Fix issues, re-review | | `MAJOR_RETHINK` | Fundamental problems | > **Common failures:** > - Plain text "SHIP" → review skill not used correctly > - Interactive prompt (a/b/c) → backend misconfigured > - No verdict → check iteration log ### 4. Memory Capture (Opt-in) When enabled, NEEDS_WORK reviews auto-capture learnings: ```bash flowctl config set memory.enabled true ``` Builds `.flow/memory/pitfalls.md` — things reviewers catch that models miss. > **Note:** Memory config is in `.flow/config.json`, separate from Ralph's `config.env`. --- ## Configuration Reference Edit `scripts/ralph/config.env`: ### Reviews | Variable | Values | Default | Description | |----------|--------|---------|-------------| | `PLAN_REVIEW` | `rp`, `codex`, `none` | — | Plan review backend | | `WORK_REVIEW` | `rp`, `codex`, `none` | — | Impl review backend | | `COMPLETION_REVIEW` | `rp`, `codex`, `none` | — | Completion review backend | | `REQUIRE_PLAN_REVIEW` | `0`, `1` | `0` | Block work until plan approved | ### Branches | Variable | Values | Default | Description | |----------|--------|---------|-------------| | `BRANCH_MODE` | `new`, `current`, `worktree` | `new` | Branch strategy | - `new` — One branch for entire run (`ralph-`) - `current` — Work on current branch - `worktree` — Git worktrees (advanced) ### Limits | Variable | Default | Description | |----------|---------|-------------| | `MAX_ITERATIONS` | `25` | Total loop iterations | | `MAX_TURNS` | ∞ | Claude turns per iteration | | `MAX_ATTEMPTS_PER_TASK` | `5` | Retries before auto-blocking | | `MAX_REVIEW_ITERATIONS` | `3` | Fix+re-review cycles per review | | `WORKER_TIMEOUT` | `3600` | Seconds before killing stuck worker | ### Scope | Variable | Example | Description | |----------|---------|-------------| | `SPECS` | `fn-1,fn-2` | Limit to specific specs (empty = all). Legacy `EPICS=` is also accepted; the template resolves `SPECS_FILE`/`EPICS_FILE` and `SPECS`/`EPICS` in cascade so existing `config.env` files keep working. | #### `EPICS_FILE` → `SPECS_FILE` (1.0 rename) flow-next 1.0 renamed the config-env knob `EPICS_FILE` to `SPECS_FILE` (and the matching `EPICS` list to `SPECS`). The Ralph init template (`scripts/ralph/config.env`) writes `SPECS_FILE=` / `SPECS=` for fresh installs. For existing repos with `config.env` files written by older templates, both names continue to work. `ralph.sh` resolves the canonical name first and falls back to the legacy name: ```bash SPECS_FILE="${SPECS_FILE:-${EPICS_FILE:-}}" SPECS="${SPECS:-${EPICS:-}}" ``` Externally-set env vars are preserved (the resolver does not clobber `SPECS_FILE` if the user/script set it explicitly). The aliases follow the same telemetry-driven contract as the `flowctl epic` → `flowctl spec` rename: soft-removal target 2.0.0, NOT a hard sunset (R28). To migrate, edit `scripts/ralph/config.env` and rename the keys; no other action is required. ### Permissions | Variable | Default | Description | |----------|---------|-------------| | `YOLO` | `1` | Skip permission prompts | > **Note:** `YOLO=1` is required for unattended runs. Set `YOLO=0` for interactive testing. ### Display | Variable | Default | Description | |----------|---------|-------------| | `RALPH_UI` | `1` | Colored/emoji output | ### Codex-Specific | Variable | Default | Description | |----------|---------|-------------| | `CODEX_SANDBOX` | `auto` | `read-only`, `workspace-write`, `danger-full-access`, `auto` | | `FLOW_CODEX_EMBED_MAX_BYTES` | `500000` | Max bytes embedded in prompts | > **Windows:** Use `auto` or `danger-full-access`. The `read-only` mode blocks all shell commands. --- ## Review Backends ### RepoPrompt Integration When using `PLAN_REVIEW=rp` or `WORK_REVIEW=rp`: ```bash flowctl rp pick-window --repo-root . # Find window flowctl rp builder ... # Build context flowctl rp chat-send ... # Send to reviewer ``` > **Never call `rp-cli` directly in Ralph mode.** Use flowctl wrappers. Window selection is automatic. With RP 1.5.68+, `--create` auto-opens windows. ### Codex Integration When using `PLAN_REVIEW=codex` or `WORK_REVIEW=codex`: ```bash flowctl codex check # Verify available flowctl codex impl-review ... # Run impl review flowctl codex plan-review --files "src/auth.ts,src/config.ts" ``` **Requirements:** ```bash npm install -g @openai/codex && codex auth ``` **Advantages:** - Cross-platform (Windows, Linux, macOS) - Terminal-based (no GUI) - Session continuity via `thread_id` --- ## Run Artifacts Each run creates: ``` scripts/ralph/runs// ├── iter-001.log # Raw Claude output ├── iter-002.log ├── progress.txt # Append-only run log ├── attempts.json # Per-task retry counts ├── branches.json # Branch info ├── receipts/ │ ├── plan-fn-1.json # Plan review receipt │ ├── impl-fn-1.1.json # Impl review receipt │ └── completion-fn-1.json # Completion review receipt └── block-fn-1.2.md # Written when task auto-blocked ``` --- ## Controlling Ralph ### CLI Commands ```bash flowctl status # Spec/task counts + active runs flowctl ralph pause # Pause run flowctl ralph resume # Resume run flowctl ralph stop # Graceful stop flowctl ralph status # Show run state flowctl ralph pause --run # Specify run when multiple active ``` ### Sentinel Files ```bash # Pause touch scripts/ralph/runs//PAUSE # Resume rm scripts/ralph/runs//PAUSE # Stop (kept for audit) touch scripts/ralph/runs//STOP ``` Ralph checks sentinels at iteration boundaries. ### Task Retry/Rollback ```bash flowctl unblock fn-1.2 # Re-enable blocked task flowctl update fn-1.2 --status pending # Reset to pending ``` --- ## Testing & Debugging ### Single Iteration ```bash scripts/ralph/ralph_once.sh ``` Runs one iteration then exits. Verify setup before full runs. ### Watch Mode ```bash scripts/ralph/ralph.sh --watch # Tool calls scripts/ralph/ralph.sh --watch verbose # Include responses ``` Real-time visibility without blocking autonomy. ### Custom Config ```bash scripts/ralph/ralph.sh --config my-codex-config.env scripts/ralph/ralph.sh --watch --config rp-reviews.env ``` Use alternate config files for different platforms or review backends without editing `config.env`. Useful for: - Separate configs for RepoPrompt vs Codex reviews - Platform-specific settings (macOS vs Linux vs Windows) - Testing different `MAX_ITERATIONS` or `WORKER_TIMEOUT` values ### Verbose Logging ```bash FLOW_RALPH_VERBOSE=1 scripts/ralph/ralph.sh ``` Detailed logs → `scripts/ralph/runs//ralph.log` ### Debug Environment Variables Ralph inherits Claude Code's default model (Opus) for both the main session and worker subagents (`model: inherit`). Only set `FLOW_RALPH_CLAUDE_MODEL` if you want to override. ```bash FLOW_RALPH_CLAUDE_MODEL=claude-opus-4-6 # only needed to override default FLOW_RALPH_CLAUDE_DEBUG=hooks FLOW_RALPH_CLAUDE_PERMISSION_MODE=bypassPermissions ``` --- ## Safety & Isolation ### Docker Sandbox Run Ralph inside Docker for isolation: ```bash docker sandbox run claude "scripts/ralph/ralph.sh" docker sandbox run -w ~/my-project claude "scripts/ralph/ralph.sh" ``` See [Docker sandbox docs](https://docs.docker.com/ai/sandboxes/claude-code/). **Community sandbox setups:** - [devcontainer-for-claude-yolo-and-flow-next](https://github.com/Ranudar/devcontainer-for-claude-yolo-and-flow-next) — VS Code devcontainer with Playwright, firewall whitelisting, RepoPrompt MCP bridge - [agent-sandbox](https://github.com/novotnyllc/agent-sandbox) — Docker Sandbox (Desktop 4.50+) with seccomp/namespace isolation ### DCG (Destructive Command Guard) [DCG](https://github.com/Dicklesworthstone/destructive_command_guard) blocks destructive commands before execution. **What it blocks:** | Command | Without DCG | With DCG | |---------|-------------|----------| | `git reset --hard` | Loses work | Blocked | | `rm -rf ./src` | Deletes source | Blocked | | `git push --force` | Overwrites history | Blocked | | `git clean -f` | Deletes files | Blocked | **Install:** ```bash curl -fsSL "https://raw.githubusercontent.com/Dicklesworthstone/destructive_command_guard/master/install.sh?$(date +%s)" | bash -s -- --easy-mode ``` **Compatibility:** DCG uses fail-open design — timeouts allow commands. Flow-next uses safe git patterns and quoted heredocs that DCG handles correctly. > **Note:** DCG will block `rm -rf .flow/` and `rm -rf scripts/ralph/` — this is correct behavior. Uninstall commands should be run manually, not via AI agents. Your specs and tasks are protected. **Verify:** ```bash dcg test 'git reset --hard HEAD' # Should block dcg test 'git checkout -b feature' # Should allow ``` **Uninstall:** ```bash rm ~/.local/bin/dcg # Edit ~/.claude/settings.json to remove dcg hook rm -rf ~/.config/dcg/ ``` **More info:** [DCG GitHub](https://github.com/Dicklesworthstone/destructive_command_guard) · [Pack Reference](https://github.com/Dicklesworthstone/destructive_command_guard/blob/master/docs/packs/README.md) ### Guard Hooks Plugin hooks enforce workflow rules deterministically. > **Only active when `FLOW_RALPH=1`** — zero overhead for non-Ralph users. | Rule | Purpose | |------|---------| | No `--json` on chat-send | Preserve review text output | | No `--new-chat` on re-reviews | Keep conversation context | | Receipt before Stop | Prevent skipping reviews | | Required flags on setup | Ensure proper targeting | **Location:** ``` plugins/flow-next/ hooks/hooks.json # Config scripts/hooks/ralph-guard.py # Logic ``` **Disable temporarily:** Unset `FLOW_RALPH` **Disable permanently:** Delete `hooks/` directory --- ## Troubleshooting ### Plan Review Never Starts **Symptoms:** Ralph exits with `NO_WORK` but specs have `plan_review_status: unknown`. **Check config:** ```bash grep -E "REQUIRE_PLAN_REVIEW|PLAN_REVIEW" scripts/ralph/config.env ``` **Common causes:** | Config | Problem | Fix | |--------|---------|-----| | `REQUIRE_PLAN_REVIEW=0` | Plan gate disabled | Set to `1` | | `PLAN_REVIEW=none` + `REQUIRE_PLAN_REVIEW=1` | No backend to review | Set `PLAN_REVIEW=codex` or `rp` | | `PLAN_REVIEW` unset | Defaults to template placeholder | Set explicitly | **Verify selector sees plan work:** ```bash flowctl next --require-plan-review --json ``` Should return `status: "plan"` if specs need review. ### Plan Review Blocked Forever **Symptoms:** Ralph loops on plan review, never progresses to work. **Check:** ```bash # What's the spec status? flowctl show fn-1 --json | jq '.plan_review_status' # Is there a receipt? ls scripts/ralph/runs/*/receipts/plan-fn-1.json # What verdict did we get? grep -i verdict scripts/ralph/runs/*/iter-*.log | grep plan ``` **Common causes:** - `PLAN_REVIEW=none` with `REQUIRE_PLAN_REVIEW=1` → blocked forever - Review returns `NEEDS_WORK` repeatedly → plan has fundamental issues - No verdict tag in response → backend misconfigured **Fix:** Either set a review backend or disable the gate: ```bash # Option A: Enable codex reviews PLAN_REVIEW=codex # Option B: Disable gate (plans auto-ship) REQUIRE_PLAN_REVIEW=0 ``` ### Dependent Specs Not Starting **Symptoms:** Spec A completes, but Spec B (depends on A) never starts. **Check:** ```bash # Is A actually closed? flowctl show fn-1 --json | jq '.status' # Does B depend on A? flowctl show fn-2 --json | jq '.depends_on_specs' ``` **Common cause:** Race condition — selector runs before `maybe_close_specs()`. Fixed in v0.18.23+. **Workaround for older versions:** ```bash # Manually close the spec flowctl spec close fn-1 --json # Re-run Ralph scripts/ralph/ralph.sh ``` ### Review Gate Loops **Symptoms:** Ralph keeps retrying the same task. **Check receipts:** ```bash ls scripts/ralph/runs/*/receipts/ ``` **Check verdict:** ```bash grep -i verdict scripts/ralph/runs/*/iter-*.log | tail -5 ``` **Common causes:** - No receipt file → review skill not invoked - Wrong verdict format → plain text instead of XML tags - Receipt exists but verdict is NEEDS_WORK → implementation has issues ### Auto-Blocked Tasks After `MAX_ATTEMPTS_PER_TASK` failures: 1. Ralph writes `block-.md` with context 2. Marks task blocked via `flowctl block` 3. Moves to next task **To retry:** ```bash flowctl unblock fn-1.2 ``` ### RepoPrompt Issues **"rp-cli not found":** ```bash # Install RepoPrompt, then: which rp-cli ``` **Window not found:** - RP 1.5.68+: Use `--create` flag - Older: Open RepoPrompt on your repo manually **Alternative:** Switch to Codex backend. ### Codex Issues **"codex not found":** ```bash npm install -g @openai/codex codex auth ``` **Windows "blocked by policy":** ```bash # In config.env: CODEX_SANDBOX=auto ``` The `read-only` sandbox blocks all commands on Windows. ### Run Inspection ```bash # Progress cat scripts/ralph/runs/*/progress.txt # Latest iteration tail -100 scripts/ralph/runs/*/iter-*.log | tail -1 # Blocked tasks ls scripts/ralph/runs/*/block-*.md ``` --- ## Morning Review Workflow After overnight runs, review and merge the work. ### 1. Check Completion ```bash # Run status cat scripts/ralph/runs/*/progress.txt | tail -5 # Blocked tasks ls scripts/ralph/runs/*/block-*.md 2>/dev/null # Pending tasks flowctl ready --json ``` **Partial run?** Review `block-*.md`, fix issues, re-run `ralph.sh` (resumes from pending). ### 2. Review Changes ```bash # Summary cat scripts/ralph/runs/*/progress.txt # All reviews passed ls scripts/ralph/runs/*/receipts/ # Commits git log --oneline ``` ### 3. Review by Spec Commits include task IDs (`feat(fn-1.1): ...`): ```bash git log --oneline --grep="fn-1" git log --oneline --grep="fn-2" ``` ### 4. Merge **All good:** ```bash git checkout main git merge ralph- # Or: gh pr create ``` **One spec is bad — cherry-pick good ones:** ```bash git checkout main git cherry-pick git cherry-pick # Skip fn-3 ``` **One spec is bad — revert and merge:** ```bash git checkout ralph- git revert git checkout main git merge ralph- ``` ### 5. Find Commit SHAs ```bash git log --oneline --grep="fn-1" flowctl show fn-1.1 --json | jq '.evidence.commits' ``` --- ## References - [flowctl CLI](flowctl.md) - [Flow-Next README](../../../README.md) (repo root — canonical) - [flow-next-tui](../../../flow-next-tui/README.md) - Test scripts: `plugins/flow-next/scripts/ralph_e2e_*.sh`