ralphctl 0.13.1 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,6 +1,7 @@
1
1
  [![npm version](https://img.shields.io/npm/v/ralphctl?style=flat&logo=npm&logoColor=white&color=cb3837)](https://www.npmjs.com/package/ralphctl)
2
2
  [![npm downloads](https://img.shields.io/npm/dm/ralphctl?style=flat&logo=npm&logoColor=white&color=cb3837)](https://www.npmjs.com/package/ralphctl)
3
3
  [![CI](https://github.com/lukas-grigis/ralphctl/actions/workflows/ci.yml/badge.svg)](https://github.com/lukas-grigis/ralphctl/actions/workflows/ci.yml)
4
+ [![codecov](https://codecov.io/gh/lukas-grigis/ralphctl/graph/badge.svg)](https://codecov.io/gh/lukas-grigis/ralphctl)
4
5
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat&logo=opensourceinitiative&logoColor=white)](./LICENSE)
5
6
  [![TypeScript](https://img.shields.io/badge/TypeScript-6.0-3178c6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6
7
  [![Node.js](https://img.shields.io/badge/node-%E2%89%A5_24-5fa04e?style=flat&logo=nodedotjs&logoColor=white)](https://nodejs.org/)
@@ -11,10 +12,12 @@
11
12
  [![Built with Donuts](https://img.shields.io/badge/%F0%9F%8D%A9-Built_with_Donuts-ff6f00?style=flat)](https://github.com/lukas-grigis/ralphctl)
12
13
 
13
14
  <p align="center">
14
- <img src="./.github/assets/home.png" alt="ralphctl home screen — Ralph donut banner with 'The pointy kitty took it!' tagline, demo project tile, WORK / OBSERVE / SYSTEM menus with keybindings, bottom footer" width="900" />
15
+ <img src="./.github/assets/home.png" alt="ralphctl home screen — Ralph donut banner with 'The pointy kitty took it!' tagline, WORK / OBSERVE / SYSTEM menus with keybindings, bottom footer" width="900" />
15
16
  </p>
16
17
 
17
- **Agent harness for long-running AI coding tasks —
18
+ # ralphctl
19
+
20
+ **A ralph harness for long-running AI coding tasks — a hardened ralph loop that
18
21
  orchestrates [Claude Code](https://docs.anthropic.com/en/docs/claude-code) across repositories,
19
22
  with [GitHub Copilot](https://docs.github.com/en/copilot/github-copilot-in-the-cli) and
20
23
  [OpenAI Codex](https://github.com/openai/codex) available in preview.**
@@ -30,6 +33,17 @@ with [GitHub Copilot](https://docs.github.com/en/copilot/github-copilot-in-the-c
30
33
 
31
34
  ---
32
35
 
36
+ ## What is a ralph harness?
37
+
38
+ The "Ralph" technique comes from Geoffrey Huntley's [Ralph Wiggum as a software engineer](https://ghuntley.com/ralph/):
39
+ point a coding agent at a task and run it in a loop until the work is done. The bare version
40
+ (`while :; do cat PROMPT.md | claude-code; done`) loops blindly — it re-runs the same prompt and hopes each pass lands.
41
+ ralphctl is a ralph harness around that idea: instead of blind repetition it runs a generator-evaluator loop, where one
42
+ pass writes the change and a second independent pass reviews it against the task spec before the loop advances. Same
43
+ loop, with a verification gate on every step.
44
+
45
+ ---
46
+
33
47
  ## What is ralphctl?
34
48
 
35
49
  AI coding agents are powerful but lose context on long tasks, need babysitting when things break, and have no way to
@@ -49,8 +63,16 @@ You describe what to build. ralphctl handles the rest — or works alongside you
49
63
  npm install -g ralphctl
50
64
  ```
51
65
 
52
- Install [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (or a preview provider — see below), authenticate
53
- it, then:
66
+ > Needs [Node.js](https://nodejs.org/) ≥ 24 — `mise use node@24` or `nvm install 24`.
67
+
68
+ Install [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (or a preview provider — see below) and
69
+ authenticate it, then confirm ralphctl can see it:
70
+
71
+ ```bash
72
+ ralphctl doctor # verifies your provider CLI is installed + authenticated — the #1 first-run failure
73
+ ```
74
+
75
+ When `doctor` is green, launch:
54
76
 
55
77
  ```bash
56
78
  ralphctl
@@ -194,7 +216,11 @@ One-shot configuration for any provider: `ralphctl settings apply-preset <name>`
194
216
 
195
217
  Configure via the TUI `Settings` view or one-shot CLI commands.
196
218
 
197
- **Quickest path — apply a preset:**
219
+ **Quickest path — apply a preset.** Presets auto-seed from your detected CLIs on first run; override later with
220
+ `apply-preset`.
221
+
222
+ <details>
223
+ <summary>All 20 presets across five families</summary>
198
224
 
199
225
  ```bash
200
226
  # Standard — flagship model per flow
@@ -233,6 +259,8 @@ preset stamps the entire `ai` section plus `harness.escalateOnPlateau` in one tr
233
259
  `false` so a plateau settles; all others stamp it `true`). On a fresh install the welcome view silently
234
260
  auto-seeds a preset based on which provider CLIs it detects on `PATH`.
235
261
 
262
+ </details>
263
+
236
264
  **Per-flow settings.** Each flow carries its own `{provider, model, effort?}` row: `refine`, `plan`, `readiness`,
237
265
  `ideate`, and `createPr`. The `implement` flow instead splits into a nested `generator` / `evaluator` pair
238
266
  (`ai.implement.generator.*` and `ai.implement.evaluator.*`), each its own `{provider, model, effort?}` row. Edit
@@ -383,16 +411,17 @@ Run `ralphctl <command> --help` for flag-level detail.
383
411
 
384
412
  ## Documentation
385
413
 
386
- | Resource | Description |
387
- | ---------------------------------------------- | ------------------------------------------------- |
388
- | [Architecture](./.claude/docs/ARCHITECTURE.md) | Data models, file storage, error reference |
389
- | [Requirements](./.claude/docs/REQUIREMENTS.md) | Acceptance criteria and feature checklist |
390
- | [Contributing](./CONTRIBUTING.md) | Dev setup, code style, PR process |
391
- | [Migration](./MIGRATION.md) | Per-version upgrade context for big version jumps |
392
- | [Changelog](./CHANGELOG.md) | Version history |
414
+ | Resource | Description |
415
+ | ------------------------------------------------ | -------------------------------------------------------- |
416
+ | [Architecture](./ARCHITECTURE.md) | Data models, harness loop, file storage, error reference |
417
+ | [Adding a provider](./docs/adding-a-provider.md) | Extension guide: wire a new AI CLI into the harness |
418
+ | [Requirements](./.claude/docs/REQUIREMENTS.md) | Acceptance criteria and feature checklist |
419
+ | [Contributing](./CONTRIBUTING.md) | Dev setup, code style, PR process |
420
+ | [Migration](./MIGRATION.md) | Per-version upgrade context for big version jumps |
421
+ | [Changelog](./CHANGELOG.md) | Version history |
393
422
 
394
423
  **Blog posts:** [Building ralphctl](https://lukasgrigis.dev/blog/building-ralphctl) (
395
- backstory) | [From task CLI to agent harness](https://lukasgrigis.dev/blog/ralphctl-agent-harness/) (evaluator
424
+ backstory) | [From task CLI to ralph harness](https://lukasgrigis.dev/blog/ralphctl-agent-harness/) (evaluator
396
425
  deep-dive)
397
426
 
398
427
  **Further reading: