Repository navigation
v0.27.0
What's changed
Breaking
- OpenCode 2 is refused. Reinstall OpenCode 1 (see Added).
- Saved settings are rewritten on load. Grok
none/minimaleffort loads aslow, and Copilot Opus 4.5, 4.6
and 4.7 rows load as Opus 5.5.
Added
- Claude Haiku 5.5. Claude Code gains
claude-haiku-5-5(needs Claude Code 2.1.293 or later): $0.10/$0.50 per
MTok ($0.50/$2.50 for prompts over 100K tokens), a 1M context window and all five effort levels.claude-fastandclaude-economicnow run refine,
readiness and PR drafting on it atlow; plan, implement and ideate stay on Sonnet 5.5. It is also the new
bottom step of the Claude Code escalation ladder (Haiku 5.5 → Sonnet 5.5 → Opus 5.5). An older Claude Code CLI
fails the spawn on it — upgrade, or set those rows to Sonnet 5.5. Haiku 4.5 still works for saved settings. - Claude Haiku 5.5 on Copilot.
claude-haiku-5.5is selectable for Copilot rows (needs Copilot CLI 1.0.94 or
later) and escalates to Sonnet 5.5. No preset uses it. - OpenCode 2 is detected at launch. OpenCode 2 installs as the same
opencodecommand but changed the flags
ralphctl uses, so a flow on OpenCode 2 now stops before it starts and says how to get OpenCode 1 back:
brew install sst/tap/opencode(Homebrew's ownopencodeformula is now 2.x), the install script, or
npm install -g opencode-ai@1. Install suggestions for OpenCode now pin the 1.x line. - Security skill for implement. The new bundled
ralphctl-security-and-hardeningskill loads by default for
implement: threat-model first, validate untrusted input, keep secrets out of code and logs, check authorization,
guard destructive file operations, review new dependencies and treat model output as untrusted. Sensitive changes
the task didn't ask for (auth, permissions, new kinds of personal data) are escalated rather than made silently —
the implementing AI blocks the task with a question, and the reviewer flags it. The Skills catalog also suggests
it for plan and PR drafting. - Spec-driven development skill (opt-in).
ralphctl-spec-driven-developmentis available in the Skills catalog
for refine and ideate. It helps turn a vague ticket or idea into sharper requirements — a clear objective, explicit
scope, testable criteria and named open questions — without adding files or approval steps of its own. It is off
by default. - Ten more bundled skills. API and interface design, performance optimisation, frontend UI engineering,
deprecation and migration, code simplification, source-driven development, observability, codebase design,
writing for agents, and a humanizer for PR descriptions and requirements prose. Each is a Skills catalog
suggestion for the phases where it fits and stays off until you enable it, exceptralphctl-writing-for-agents,
which loads by default for readiness because every later AI session reads the context file readiness drafts.
Several existing skills also picked up upstream improvements: debugging builds a fast reproduction loop and ranks
hypotheses before fixing, test-driven development warns about tests that recompute their own expected value, and
code review asks every bug finding to name a concrete failing case. - The README opens with a recording of the loop. A ~10-second capture shows one task going through it: the
evaluator fails round 1 with a critique, the generator applies it, and round 2 passes and commits.
ralphctl demo --scriptreplays the same run with no AI CLI and no tokens.
Changed
- Copilot presets use Opus 5.5. GitHub gives Opus 4.8, 5 and 5.5 to the same Copilot plans, so the Copilot
presets, the Copilot defaults and the top of the Copilot escalation ladder move fromclaude-opus-4.8to the
cheaperclaude-opus-5.5($4/$20 vs $5/$25 per MTok). Saved settings on Opus 4.8 or Opus 5 keep working and now
escalate to 5.5. Applying a preset on an account without 5.5 falls back to Sonnet 5.5. - Copilot gets ready for the 2026-11-16 retirements. GitHub retires
claude-opus-4.8,claude-opus-5and
gpt-5.6-terraon Copilot on 2026-11-16. They stay selectable until then, but ralphctl no longer steers anything
onto them: escalation fromgpt-5.6-lunagoes straight togpt-5.6-sol, and saved settings on the older retired
Opus ids (4.5, 4.6, 4.7) now load asclaude-opus-5.5instead of 4.8. - Claude Code runs without fork subagents. Claude Code 2.1.302 turned fork subagents on by default for
headless runs. ralphctl turns them off for the sessions it starts, which keeps a run's cost the same as before
and keeps read-only sessions from handing work to a copy whose tool limits aren't confirmed. - OpenCode free models refreshed. The free tier now lists
exo-free,ling-3.1-flash-free,
longcat-2.5-preview-free,mimo-v2.6-flash-free,muse-spark-1.3-contributor-free,space-bunny-freeand
step-5-preview-free.hy3-free,mimo-v2.5-freeandmuse-spark-1.2-contributor-freeare gone; saved
settings on the last two switch tomimo-v2.6-flash-freeandmuse-spark-1.3-contributor-free. ralphctl-karpathy-guidelinesnow loads by default for plan only. On implement it overlapped the
ralphctl-surgical-simplicityandralphctl-ponytailskills that already load there, so it moves to a Skills
catalog suggestion for implement. Enable it from the catalog to keep the old behaviour.
Fixed
- Grok effort stays within what each model accepts.
grok-4.5takes effort up tohighandgrok-4.6/
grok-4.7up toxhigh; none takesmax. ralphctl now lowers a higher level to the model's highest, the same way
it already does for Copilot and Codex, so a savedmaxruns atxhighongrok-4.7instead of risking a rejected
spawn.grok-frontiernow usesxhighon plan, implement and ideate, andxhighas its global effort. When
escalating effort ongrok-4.5, ralphctl now raises it tohighinstead ofxhigh. The Grok CLI also refuses
noneandminimal, so they are no longer offered; saved Grok rows using them load aslow. When the Grok CLI
does reject an effort, the task stops once with a message naming the setting to change instead of retrying.
Data safety
- Legacy sprint folders are no longer split or deleted at launch. Existing bare-id sprint directories are merged
into their slugged folder before any side file is written, and a reconcile never deletes one. A failed rename keeps
the sprint's data together, and git worktree links are repaired after a sprint folder moves. - Migration is harder to block and safer to run. Orphan memory dirs no longer stop the gate, unreadable ledgers
and rotated files are kept in the memory merge, a stalelearnings.mdin a drained legacy dir is dropped, a failed
backup removes its partial copy, and symlinks are backed up as links with worktrees skipped. The gate copy no
longer promises a full backup. - A journal that can't be read is never overwritten.
progress.mdis not regenerated over an unreadable
journal, and the quarantine breadcrumb is written under the journal lock. - Concurrent edits survive.
tasks.jsonwrites carry a lock owner,plan/ideatekeep another session's plan
when they commit and refuse when the sprint changed mid-session, and long sessions no longer clobber ticket edits.
Implement runs
- Parallel runs record only what landed. A task is marked done after its branch is folded, a landed fold keeps
its done when a later step fails, attempts survive an abort, and what failed branches persisted is kept. - Dependents are no longer stranded when a prerequisite is unsettled.
- A resume that would exhaust its budget is blocked before the task body runs and no longer stops a serial run.
- Locking. Manual unblock, close-sprint and sprint updates take the sprint lock, and unblock waits out a live run.
Done transitions apply to the sprint as it is on disk, and unblock keys on the sprint's current directory.
Git
- Long hooks are no longer killed at 30 seconds. Hook-running git verbs are bounded separately from network
verbs, a cancel reaches them, their processes are reaped when ralphctl exits, and git never prompts for
credentials inside the TUI. The credential hint appears only for SSH key rejections. - PR and MR bodies go over stdin instead of argv, and the repo path is shell-quoted in the create-pr commands.
The PR body closes only issues whose tasks all landed done.
Providers
- Final error records are no longer lost. Headless spawns settle on
close, so the last stdout records land;
setup and verify scripts settle on exit, a CLI's process group is reaped when it exits cleanly, and a recycled pid
no longer keeps a stale skill install alive. - Codex session resume works again.
- Claude Code effort follows the model. The level is narrowed to what the chosen model accepts.
Settings and domain
- Verify-gate prefixes match a leading
./or/; an empty plan is rejected instead of stranding a planned sprint;
absolute paths containing~or$are accepted; applying a preset keeps skill opt-outs and agent bindings. - Empty values for numeric settings keys are rejected,
settings setrefuses a retired effort or model, an
unexpandedRALPHCTL_HOMEis refused, and an invalidsettings.jsongets a repair hint. - Pre-release users are told when the stable release ships.
TUI
- The Execute tasks panel no longer freezes when its buffer slides and shows attempt, commit and ETA chips. Esc
collapses the narrow layout before popping, and leaves the create-project error step. - Ink owns bracketed paste, so the terminal's paste mode is restored on every exit.
runs prunerejects an empty or non-decimal--keep-last; the create-project wizard rejects duplicate slugs.
Prompts
- The prompt contract outranks skills and context files, with a tighter stop list for autonomous runs. One-shot
sessions keep going until the signals file is written. The evaluator records pre-existing defects instead of
failing a round for them and names recurring patterns. Implement sizes its tests, records assumptions and edits
surgically. PR descriptions ask for literal prose. Inventory also reads Grok and Claude rules directories, and the
bundled generator takes the most directly supported reading of an ambiguous requirement. The plan approval
question may fall back to a numbered list when the AI CLI has no structured question tool, and prompts drop length
caps nothing enforced (an 80-line PR body, ~500-character decisions) along with planning preambles.
Removed
- Retired Codex and Copilot models. Codex retired
gpt-5.5on 2026-10-14 and Copilot retiredgpt-5.5,gpt-5.4,
gpt-5.4-mini,gpt-5-mini,gemini-3.7-flashandgrok-4.5on 2026-10-19, so ralphctl no longer lists them.
Saved settings that use them still load and switch to the replacement models:gpt-5.6-solforgpt-5.5and
Copilot'sgpt-5.4,gpt-5.6-lunaforgpt-5.4-miniandgpt-5-mini,gemini-3.8-flashandgrok-4.6. Codex
rows ongpt-5.2orgpt-5.3-codexnow switch togpt-5.6-soltoo.grok-4.5stays available on the Grok
provider. - Copilot prompt inlining. A Copilot attempt no longer falls back to inlining the prompt when its file can't be
written; it fails with the reason.
Full changelog: v0.27.0...HEAD
npm: https://www.npmjs.com/package/ralphctl/v/0.27.0