Changelog
All changes, every version.
Latest on Ralph
April 2026
latest
- feat▶planning: Workspace planning mode —
ralph-plan --workspacedrives the selected engine per child repo sequentially and merges tasks into.ralph/fix_plan.mdwhile preserving existing[~]/[x]linesPR #38What it does
- Reuses
discover_workspace_repos()so the same repo set asralph --workspace(execution) is planned - Reads planning context from both
ai/(workbench convention) and.ralph/specs/(ralph-native); concatenates when both exist - Engine writes structured output (
## tasks,## ambiguities,## cross-repo) to.ralph/.workspace_plan/<repo>.out.md, thenworkspace_plan_merge_repo_sectionmerges it back into the per-repo section with trim-compare dedupe against preserved[~]/[x]lines - Cross-repo tasks land in a consolidated
## cross-reposection, deduped --repos a,b,callowlist — unlisted repos are untouched--dry-runruns the planner per repo but does NOT writefix_plan.md; summary still emitted- End-of-run summary: repos planned, new vs preserved tasks, cross-repo count, ambiguities per repo, engine, elapsed time
- Preflight: cwd must be a workspace root (no top-level
.git, one or more child repos with.git/,.ralph/fix_plan.mdpresent). Clean errors otherwise - Sequential execution only for now — parallel workspace planning is a follow-up
Usage
ralph-plan --workspace # default engine (Claude) ralph-plan --workspace --engine devin # via Devin ralph-plan --workspace --repos svc-a,svc-b # plan only two repos ralph-plan --workspace --dry-run # summary only, no writes
New files
lib/workspace_plan.sh— preflight, context collection, engine drive, parse, merge, cross-repo, filtertests/unit/test_workspace_mode.bats— 20 new tests (happy path, state preservation, cross-repo, preflight fail,--repos,--dry-run)
- Reuses
- fix▶worktree: 3-way merge
fix_plan.mdon cleanup — preserves sibling agents'[~]/[x]marks so parallel workers never claim the same taskPR #34What it fixes
worktree_cleanup's unconditionalcp worktree/fix_plan.md → main/fix_plan.mdclobbered sibling parallel agents'[~]/[x]marks underrpc.p/rpd.p/rpx.p, leading to duplicate task picks- The
pick_next_tasklock itself was correct (10 concurrent pickers → 10 distinct picks); the race was at cleanup time
How it works
worktree_create: snapshot baseline copy offix_plan.mdto.ralph/.fix_plan_baseline.mdworktree_cleanup: call new_merge_fix_plan_backinstead of rawcp_merge_fix_plan_back: lock-guarded 3-way merge viagit merge-file(worktree-final × baseline × main-current) under the existing_acquire_task_lockmutex, reused as shared mutex for allfix_plan.mdwriters_merge_fix_plan_status: awk line-level fallback, picks the most-advanced marker per task ([x] > [~] > [ ]) and preserves sibling-added rows; never regresses state- 6 new tests in
tests/unit/test_worktree_merge.bats
- fix▶gates: Timeout-wrap dependency install + stream gate
output live — no more silent "Running quality gates..." hangsPR #30 / #31
What it fixes
_worktree_install_deps(pre-gate) had no timeout, no stdin redirect, no live output; a hungnpm install/pnpm install(private-registry auth, network, interactive prompt) blocked the loop with only "Running quality gates..." visible- Gate output was captured via
gate_output=$(... 2>&1)and replayed after the fact, so operators saw nothing until the gate returned
How it works
WORKTREE_INSTALL_TIMEOUT(default 600s, env/.ralphrcoverridable) wraps the install step; stdin →/dev/nullso registry-auth prompts can't block. Exit 124/137 logged asDEPS_INSTALL: TIMEOUT after Ns- All three engine loops (+ Claude
--qgmode + QG retry loop, 4 sites) replaced the capture with a streaming pipeline:worktree_run_quality_gates 2>&1 | while read; do log_status INFO; done+gate_result=${PIPESTATUS[0]}. Operators now seeDEPS_INSTALL:andQUALITY_GATE[N]:progress in real time - Start log prints the bounds:
Running quality gates (install timeout Ns, per-gate timeout Ns)...
Files
lib/worktree_manager.sh,devin/lib/worktree_manager.sh,codex/lib/worktree_manager.sh—WORKTREE_INSTALL_TIMEOUTand timeout-wrapped installralph_loop.sh(+run_qg_mode+ QG retry loop),devin/ralph_loop_devin.sh,codex/ralph_loop_codex.sh— gate streaming
- feat▶parallel: Per-gate timeout, failure summary, and
rpc.pparity — fixes therpc.int.phang at "Running quality gates..." and makes API-error output actionablePR #29What it does
- Per-gate timeout.
WORKTREE_GATE_TIMEOUT(default 600s, env /.ralphrcoverridable) wraps each detected/configured gate intimeout --foreground "$WORKTREE_GATE_TIMEOUT" bash -c "$cmd" </dev/null(falls back togtimeouton macOS, no-op when neither exists). Stdin redirect prevents TTY-probing commands (npm test watch, prompts) from blocking forever. Exit 124/137 recorded asFAIL: <cmd> (timeout Ns)so the QG fix prompt and PR description carry the real reason - Execution Failed box. The
elsebranch ofif [[ $exec_result -eq 0 ]]now prints a red summary with task name, exit code, preserved worktree branch (worktree_cleanup "false"), session ID, and the engine's resume command. Reverts the[~]marker to[ ]so the task is retryable on the next loop. Wired into all three engine loops rpc.p/rpc.p.bparity. Previouslyrpc.int.pwas the only Claude parallel alias — it forced every run through--live --monitor, whose tmux + stream-json tee/FIFO file descriptors leaked into the synchronous post-loopgate_output=$(... 2>&1)capture and hung the loop at "Running quality gates...". Newrpc.pmirrorsrpd.p(plainralph --parallel, no--live/--monitor);rpc.int.pis now opt-in for the dashboard- Reworded misleading
Retrying with fresh sessionWARN inralph_loop.sh—execute_claude_codereturns immediately afterreset_session, there is no retry within the same invocation
Usage
# Override gate timeout for a flaky test suite WORKTREE_GATE_TIMEOUT=1200 ralph # Or pin it in .ralphrc echo 'WORKTREE_GATE_TIMEOUT=1200' >> .ralphrc # Non-interactive parallel (new default for parity) rpc.p 3 # 3 parallel agents, auto-exit, no streaming rpc.live.p 3 # 3 parallel agents with streaming output (single pane) rpc.int.p 3 # 3 parallel agents with full tmux 3-pane split (opt-in)
- Per-gate timeout.
- fix▶claude: Skip session resume in worktree mode —
fresh Claude session per iteration so
--resumedoesn't hit "No conversation found"PR #28What it fixes
- Claude scopes session IDs by cwd. In worktree mode each iteration has a new worktree cwd, so
claude --resume <id>looked in the new worktree's pool and reported "No conversation found with session ID …", killing the loop rpc.int.p Ncompounded the issue: every agent shared a single.claude_session_idresolved against the main project root; the first save raced/clobbered the rest, and every agent failed on its next iteration
How it works
init_claude_session,save_claude_session, and the stream-mode fallback session-ID writer are now gated onWORKTREE_ENABLED != true- In worktree mode every iteration is a fresh Claude session — the only behaviour consistent with worktree-per-iter cwds
- Non-worktree mode keeps
--resumecontinuity unchanged
- Claude scopes session IDs by cwd. In worktree mode each iteration has a new worktree cwd, so
- featworkspace: Enable Ralph at workspace level
—
ralph-enable --workspace/ralph-enable-ci --workspacebootstraps.ralph/with per-repofix_plan.mdsections, workspace PROMPT.md, andWORKSPACE_MODE=truein.ralphrc - feat▶workspace: Parallel execution across multiple repos
—
ralph --workspace --parallel Nruns tasks in N repos simultaneouslyHow it works
pick_workspace_tasks_parallel()picks up to N tasks (one per repo), skips repos with in-progress tasks and thecross-reposection, atomically marks all[~]run_workspace_tasks_parallel()spawns background workers for each task, waits for completion, marks[x]on success or reverts[ ]on failureget_workspace_parallel_limit()calculates safe parallelism (min of repos with pending tasks and requested count; 0 = auto)- Per-worker log files in
.ralph/logs/parallel/ws_worker_<repo>_<pid>.log
Usage
ralph --workspace --parallel 3 rpc.ws.p 3 # Claude alias rpd.ws.p 3 # Devin alias rpx.ws.p 3 # Codex alias - feataliases: Add
rpc.p,rpc.live.p, andrpc.p.b/rpc.live.p.bvariants — gives Claude engine parity withrpd.p/rpx.int.pplus a streaming-only parallel mode (--live) that skips the--monitortmux 3-pane split5f229ec - feat▶planning: Model + thinking-depth controls —
ralph-plan --model <name>routes Claude/Devin planning to a specific model (Opus, Sonnet, etc.);--thinking <normal|hard|ultra>prepends a thinking preamble and wires Claude--effortdf49710What it does
--model <name>passes--modelthrough to the Claude or Devin CLI (e.g.opus,sonnet,claude-opus-4-7,claude-sonnet-4); Codex ignores with aWARN--thinking hardprepends a "Think hard…" preamble to the planning prompt for every engine; Claude engine also gets--effort high--thinking ultraprepends anultrathinkpreamble; Claude engine also gets--effort max. Devin has no--effortequivalent so it stops at the preamble- Invalid
--thinkingvalues are rejected at parse time with a typed error - Previously
rpc.opus/rpd.opusonly changed the execution-loop model — planning sessions always used the engine default. This closes that gap
Usage
ralph-plan --model opus # Claude + Opus ralph-plan --thinking ultra # ultrathink + --effort max ralph-plan --model opus --thinking ultra --yolo --superpowers # deepest Claude planning ralph-plan --engine devin --model claude-opus-4.6 # Devin + Anthropic model # Aliases (Claude) rpc.plan.opus # --model opus rpc.plan.sonnet # --model sonnet rpc.plan.hard # --thinking hard rpc.plan.ultra # --thinking ultra rpc.plan.opus.ultra # --model opus --thinking ultra rpc.plan.max # --model opus --thinking ultra --yolo --superpowers # Aliases (Devin) rpd.plan.opus # --engine devin --model opus rpd.plan.sonnet # --engine devin --model sonnet rpd.plan.hard # --engine devin --thinking hard rpd.plan.ultra # --engine devin --thinking ultra rpd.plan.opus.ultra # --engine devin --model opus --thinking ultra
Changed files
ralph_plan.sh— flag parsing, validation, prompt preamble injection, Claude--effortwiring, Devin--modelpass-throughALIASES.sh— 6 newrpc.plan.*aliasesdevin/ALIASES.sh— 5 newrpd.plan.*aliasesREADME.md— feature bullets + rpc/rpd alias tables
- fix▶claude worktree: Wrap CLI invocations in
(cd "$work_dir" && ...)subshell so Claude writes to the worktree branch instead of main — parity with Devin/Codex enginespendingWhat it fixes
- Claude engine was creating an isolated git worktree per loop iteration, but the
claudeCLI was being spawned from the main project directory, so all file edits and commits landed on the main branch instead of the feature branch - Devin and Codex engines already wrapped their CLI calls in
(cd "$work_dir" && ...); Claude was the lone outlier
How it works
- All three Claude execution paths in
ralph_loop.shnowcdinto the worktree before invoking the CLI: live mode (line 1439), modern background mode (line 1525), legacy background mode (line 1540) - Paths of
output_file,stderr_file, andPROMPT_FILEare resolved in the parent shell (pre-subshell) so logs still land in the main.ralph/logs/tree - 4 new unit tests in
test_cli_modern.batsguard against regression
- Claude engine was creating an isolated git worktree per loop iteration, but the
- fix▶parallel: Inject picked task info into AI prompt
— prevents agents from working on the wrong task in parallel mode1086032
What it fixes
pick_next_task()correctly picks and locks a task ([~]) infix_plan.md, but the picked task info was never passed to the AI in the prompt- The AI would independently read
fix_plan.mdand choose its own task — causing mismatches, especially in parallel mode where multiple agents run simultaneously
How it works
- All three engine loops (Claude, Devin, Codex) now pass the picked task ID, line number, and
description through their
execute_*_session()functions - A “task assignment directive” is injected at the top of the prompt, telling the AI exactly which task to work on
- The directive includes task ID, line number in
fix_plan.md, and the full task description
- feat▶planning: Fix plan compression mode —
ralph-plan --compressreduces token consumption by collapsing completed items and shortening verbose descriptions while preserving all task IDs and progressWhat it does
- Archives current
fix_plan.mdbefore compression (timestamped backup in.ralph/logs/) - AI collapses completed items into summary lines with task ID lists
- Shortens verbose pending/in-progress descriptions to concise one-liners
- Preserves all task IDs, checkbox states, and dependency annotations
- Shows pre/post compression stats (item count, file size)
Usage
ralph-plan --compress # Claude (default) ralph-plan --engine codex --compress # Codex rpc.compress # Claude alias rpd.compress # Devin alias rpx.compress # Codex alias
New files
lib/compress_plan.sh— core compression logic (find, count, archive, invoke AI)templates/PROMPT_COMPRESS.md— AI prompt template with compression rulestests/unit/test_compress_plan.bats— 33 unit tests
- Archives current
- feat▶planning: File-based planning mode —
ralph-plan --file <path>generatesfix_plan.mdtasks from any MD, JSON, YAML, or plain text documentWhat it does
- Reads a document file and uses AI to extract actionable tasks into
fix_plan.md - Supports Markdown (.md), JSON (.json), YAML (.yml/.yaml), and plain text (.txt) files
- Detects file type and applies format-specific interpretation rules
- Works with all three engines (Claude, Codex, Devin)
- Walk-up search for
fix_plan.md— works from any subdirectory
Usage
ralph-plan --file ./docs/spec.md # Claude (default) ralph-plan --engine codex --file ./api.json # Codex rpc.plan.file ./docs/spec.md # Claude alias rpd.plan.file ./docs/spec.md # Devin alias rpx.plan.file ./docs/spec.md # Codex alias
New files
lib/file_plan.sh— core logic (type detection, walk-up search, AI invocation)templates/PROMPT_FILE_PLAN.md— AI prompt template with per-format rulestests/unit/test_file_plan.bats— 34 unit tests
- Reads a document file and uses AI to extract actionable tasks into
- refactorqg: Extract QG retry into standalone
ralph --qgmode — main loop now always creates PR (withquality-gates-failedlabel on failure); dedicated mode runs retry loop with subagent supportc47b700 - featplanning: Ad-hoc mode returns task ID (e.g.
AH01) for use with
--taskflag; stdout-only output enables piping32f7cae - featplanning: Ad-hoc task mode —
ralph-plan --adhocfor quick bug/task entry intofix_plan.mdvia AI across all 3 engines47a6c49 - featqg:
Quality gate retry uses subagents— superseded byralph --qgstandalone mode (c47b700)514bff8 - featqg:
Quality gate retry loop— superseded byralph --qgstandalone mode (c47b700)47a3a02 - featsummary: Display session/conversation ID in execution summary71c7aac
- featUpdate Codex CLI flags to
--dangerously-bypass-approvals-and-sandbox75084be
Task ID Selection
March 31, 2026
PR #16
- featSupport task ID selection via
--task R05with bold markdown ID matching (case-insensitive)ae9d303
Task Selection & Change Detection
March 30-31, 2026
PR #15
- featAdd
--task NUM|IDflag for specific task execution fromfix_plan.mdce7232c - featChange detection comparing git state before and after executiona15b271
- featExecution summary with files changed, lines added/removedce7232c
- featNo-change early exit reverts
[~]marker back to[ ]for retryce7232c - featAutomatic dependency installation in worktrees (detects package manager from lock files)ce7232c
- docsAdd task-specific execution, change detection, and dependency installation features to READMEbab0f66
Gitignore Injection
March 27, 2026
PR #14
- featInject Ralph
.gitignoreentries instead of copying template — preserves existing content331c2fc
Fix Plan Status & README Rewrite
March 25, 2026
PR #12, #13
- featAdd
lib/fix_plan_status.shwithfind_fix_planandshow_fix_plan_status942a031 - featralph_plan: Add
--statusflag to display fix_plan.md progress32fb7f6 - featAdd
rpc.plan.s/rpx.plan.s/rpd.plan.saliases for fix plan status7800bb6 - docsComprehensive README rewrite for multi-engine fork with full aliases reference11732e2
- testAdd failing tests for fix_plan_status lib (TDD approach)baccd71
Quality Gate Fixes
March 24, 2026
PR #11
- fixpr: Correct misleading ERROR message on quality gate failure and auto-create labels3951b9c
Automatic PR Creation & Worktree Integration
March 22-24, 2026
PR #7, #8, #10
Features
- featpr: Add
pr_manager.shwith preflight check, title builder, description builderb7bf8fb - featpr: Add
worktree_commit_and_prfor end-to-end PR creationc81a3f6 - featpr: Add
worktree_fallback_branch_prfor failed quality gate branchesae26bb2 - featpr: Wire auto-PR flow into Codex and Devin variants with config templates9570ff2
- featpr: Auto-PR replaces merge prompt in main loop2bfc56e
- featpr: Fallback to compare URL when
ghnot available or not authenticatedd5ac0d7 - featinteractive: Restore interactive TUI mode for Devin and Codexf3ddc72
- featdevin,codex: Auto-exit interactive session on RALPH_STATUS detectionb89d2ab
- feataliases: Add engine-specific enable aliases and
rp.installmeta-aliasf5a573d
Fixes
- fixpr: Surface push errors and add remote reachability check5b718f4
- fixdevin,codex: Survive Ctrl+C in interactive mode and always run PR+cleanup8888f3d
- fixenable: Preserve
fix_plan.mdon re-enable to protect work progress2e04bcb - fixinstall: Always create
~/.ralph/libbefore copying shared libsc928edf - refactorloop: Replace while loop with single-run architecture for all enginescc65616
Parallel Agents & Worktree Isolation
March 2026
fork
Features
- featparallel: Add parallel agent spawning and worktree integration for all engines65ede1e
- featparallel: Add IDE terminal tab support for VS Code, Windsurf, and Cursor03337a4
- featparallel: Add
--parallel-bgflag for background mode in any terminal11c4bed - featparallel: Add task claiming and in-progress tracking for parallel loop support261f64a
- featworktree: Sync full
.ralph/directory and add worktree mode context injection8509ca5 - featworktree: Auto-mark tasks complete after merge and
sync
fix_plan.mdstateeaabde9 - featworktree: Interactive merge prompt — ask user yes/no before merging to maine13188f
Fixes
- fixWorktree agents editing main branch instead of worktree — separate worktree directive from loop context1816719
- fixAtomic file locking in
pick_next_taskfor parallel safety1816719 - refactorparallel: Use iTerm2 tabs instead of separate windowse7e985a
Planning Mode
March 2026
fork
- featplanning: Add
ralph-plancommand for PRD-drivenfix_plan.mdgenerationbe04a78 - featplanning: Add PM-OS / DoE-OS auto-detection and
integration for
ralph-plan6744c55 - featplanning: Switch to interactive AI mode for better user visibilityc47856e
- featplanning: Add permission bypass flags
(
--yolo,--superpowers) for Claude149432a - featplanning: Add timeout protection and improve Claude CLI error handlinge0a85d6
Codex CLI Engine
March 2026
fork
- featcodex: Complete Ralph for Codex implementation with full feature parity34d4090
- featGPT-4, GPT-3.5, and Claude model selection34d4090
- featAuto-exit and interactive TUI modes (
--no-codex-auto-exit)34d4090 - feataliases: Create
rpx.*aliases for Codex engine05635e9
Devin CLI Engine
February-March 2026
fork
- featAdd Devin CLI support with parallel command structure3a16332
- featdevin: Add git worktree isolation for parallel development0131d5b
- featdevin: Add interactive live mode support and max loops limitc38f3a1
- featdevin: Cloud session polling with ACU limits3a16332
- featdevin: Opus, Sonnet, SWE, and GPT model selection3a16332
- featdevin: Permission modes (auto, dangerous)69fa73f
- featbeads: Bidirectional sync between beads and
fix_plan.md3575af1 - featdevin: Add
--no-devin-auto-exitflag for interactive TUI moded316a5c - feataliases: Create
rpd.*aliases for Devin engine05635e9
Upstream Sync — frankbria/ralph-claude-code
March 2026
PR #5, #6
- featskills: Add fork-sync agent workflow for upstream synchronization1fb10d2
- mergeSync main with upstream frankbria/ralph-claude-code (v0.11.5)3bd7bb6
v0.11.5
Early 2026
upstream
Features
- fixlive: Show sub-agent progress in tmux live output #216f702543
- fixmonitor: Suppress I/O errors on broken tmux pty #1883fe66f6
- fixloop: Detect Claude Extra Usage quota exhaustion #100f1298b8
- fixloop: Prevent stale exit signals from causing premature exit #19412e4710
- fixloop: Detect productive work on timeout instead of blanket failure #19813e35c4
- fixloop: Detect
is_error:truein JSON output when CLI exits with code 0 #134, #1992cf2bf3 - refactorloop: Remove
set -ein favor of explicit error handling #2088237aa3
v0.11.0 — Question Detection & Session Fixes
2025-2026
upstream
Features
- featanalyzer: Add question pattern detection for headless mode #1907fb4ed7
- featenable: Add
ralph-enablewizard for existing projects #124910f794 - featloop: Validate Claude Code CLI command at startup #974383e99
- featloop: Add version check and auto-update at startup #190170c530
- featdiagnostic: Add
ralph-check-beadscommand for beads integration verification7d0f337
Fixes
- fixloop: Inject corrective guidance when previous loop asked questions #190d69b652
- fixcircuit-breaker: Suppress no-progress counter on question loops #190ffbc034
- fixloop: Separate stderr from live mode JSON stream to fix jq parsing #19013b2413
- fixloop: Persist API call counter immediately, not only on success #1966ff27b4
- fixloop: Prevent
set -efrom killing script on API limit prompt timeout #185117fed7 - fixenable: Avoid early wizard exit when GitHub/beads checks return non-zero2f64c45
v0.10.x — File Protection, Circuit Breaker Recovery, Live Mode
2025
upstream
Features
- featprotection: Prevent Ralph from deleting its own
.ralph/directory #1495ae0d21 - featcircuit-breaker: Add auto-recovery from OPEN state with cooldown timer #160b4b9db6
- featAdd live streaming output mode with real-time Claude Code visibility #1259aa2fef
- featexit: Detect permission denials and halt loop #1013282948
- featstructure: Migrate Ralph files to
.ralph/subfolder #1099b19d70 - featAdd timeout command support for macOS #1080e95f67
Fixes
- fixsetup: Generate
.gitignorefor new projects, enable dotglob so template is copied #1743b22c0e - fixloop: Prevent silent script death on Claude timeout #175fe64f2b
- fixlive-mode: Crash with text output format #1644027ac9
- fixwizard: Redirect prompts to stderr for clean command substitution #13005c5720
- fixImprove permission denial display to show tool names6dc1c2c
- fixProgress detection improvements #141, #144aa753c9
- fixAuto-terminate tmux session when Ralph loop exits #1761233995
v0.9.x — EXIT_SIGNAL Gate, JSON Parsing, Session Management
2025
upstream
Features
- featexit: Use explicit EXIT_SIGNAL instead of confidence threshold — dual-condition gate #132f6fde67
- featsession: Implement session expiration with configurable timeout (24h default) #843dc3479
- featsession: Add session lifecycle management with auto-reset triggersd3310d1
- featanalyzer: Add Claude CLI JSON format support and session managementfdff095
- featcli: Add modern CLI commands with JSON output support (Phase 1.1)da5640e
- featimport: Modernize
ralph_import.shwith JSON output parsing4b1ca9b - featAdd dedicated
uninstall.shscript #453e8d3fd - featloop: Support for non-zero first-window tmux configsda84dbc
- featcircuit-breaker: Allow configuring thresholds via environment variablesc05499c
Fixes
- fixsession: Clear exit signals on session reset #91d63f300
- fixanalyzer: Respect explicit EXIT_SIGNAL:false with STATUS:COMPLETE43bba1b
- fixanalyzer: Handle Claude CLI JSON array output format5ce9bc8
- fixPrevent session hijacking and improve reliability42f5df6
- fiximport: Add
--printflag to preventralph-importhangingfe94cbd - fixmonitor: Forward all CLI parameters to inner ralph loop #12083672d3
- fixsetup: Create
.ralphrcwith consistent tool permissions #137dbb27d8 - fixExtract denied commands from correct JSON path #143627ad7d
Testing
- testcli: Add comprehensive CLI argument parsing testsfffcc26
- testinstall: Add 14 comprehensive installation tests6688c27
- testsetup: Add 36 comprehensive tests for
setup.shc68e484 - testimport: Add 22 comprehensive tests for
ralph_import.shb06d979
Foundation — Core Loop & Infrastructure
Oct-Dec 2025
upstream
Features
- featAutonomous AI development loop with intelligent exit detection5e1d873
- featRate limiting with hourly reset (100 calls/hour, configurable)5e1d873
- featCircuit breaker with advanced error detection and two-stage filtering2cf06b0
- featResponse analyzer with semantic understanding2cf06b0
- featCross-platform date utilities for macOS and Linux3d7db2c
- feattmux integration for live monitoringd815195
- featGlobal command system —
ralph,ralph-monitor,ralph-setup6d64be9 - featPRD import command (
ralph-import) using Claude Code76a8022 - featConfigurable timeout for Claude Code execution7b6f71f
- featVerbose option with separated progress updatesd480c1e
- featComprehensive test infrastructure with BATS8ad49e6
Critical Bug Fixes
- fixFix infinite retry loop when Claude API 5-hour limit is reached08fe93e
- fixFix silent exit bug and improve error messages738e91a
- fixFix exit condition logic in
ralph_loop.shdac9629 - fixFix
loop_countincrement syntax for bash compatibility6bf8cd8 - fixcircuit-breaker: Eliminate JSON field false positives in error detection8fc5375
- fixcircuit-breaker: Fix multi-line error matching in
detect_stuck_loop63590b3 - fixinstall: Add
lib/directory copy forresponse_analyzer.sha98a167
No changelog entries match your search.