ralphctl 0.6.2 → 0.7.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.
Files changed (45) hide show
  1. package/README.md +250 -138
  2. package/dist/cli.mjs +20370 -21106
  3. package/dist/manifest.json +17 -19
  4. package/dist/prompts/_partials/signals-evaluation.md +14 -0
  5. package/dist/prompts/_partials/signals-task.md +26 -0
  6. package/dist/prompts/_partials/validation-checklist.md +24 -0
  7. package/dist/prompts/apply-feedback/template.md +118 -0
  8. package/dist/prompts/detect-scripts/template.md +118 -0
  9. package/dist/prompts/detect-skills/template.md +136 -0
  10. package/dist/prompts/evaluate/template.md +236 -0
  11. package/dist/prompts/ideate/template.md +172 -0
  12. package/dist/prompts/implement/template.md +203 -0
  13. package/dist/prompts/plan/template.md +347 -0
  14. package/dist/prompts/readiness/template.md +132 -0
  15. package/dist/prompts/refine/template.md +254 -0
  16. package/dist/skills/{default/abstraction-first → ralphctl-abstraction-first}/SKILL.md +1 -1
  17. package/dist/skills/{default/alignment → ralphctl-alignment}/SKILL.md +1 -1
  18. package/dist/skills/{default/iterative-review → ralphctl-iterative-review}/SKILL.md +1 -1
  19. package/package.json +25 -28
  20. package/dist/absolute-path-WUTZQ37D.mjs +0 -8
  21. package/dist/chunk-6RDMCLWU.mjs +0 -108
  22. package/dist/chunk-HIU74KTO.mjs +0 -1046
  23. package/dist/chunk-S3PTDH57.mjs +0 -78
  24. package/dist/chunk-WV4D2CPG.mjs +0 -26
  25. package/dist/prompt-adapter-JQICGVX7.mjs +0 -7
  26. package/dist/prompts/ideate.md +0 -204
  27. package/dist/prompts/plan-auto.md +0 -182
  28. package/dist/prompts/plan-common-examples.md +0 -82
  29. package/dist/prompts/plan-common.md +0 -200
  30. package/dist/prompts/plan-interactive.md +0 -212
  31. package/dist/prompts/repo-onboard.md +0 -201
  32. package/dist/prompts/signals-evaluation.md +0 -6
  33. package/dist/prompts/signals-planning.md +0 -5
  34. package/dist/prompts/signals-task.md +0 -10
  35. package/dist/prompts/sprint-feedback.md +0 -64
  36. package/dist/prompts/task-evaluation.md +0 -276
  37. package/dist/prompts/task-execution.md +0 -233
  38. package/dist/prompts/ticket-refine.md +0 -242
  39. package/dist/prompts/validation-checklist.md +0 -19
  40. package/dist/skills/exec/.gitkeep +0 -0
  41. package/dist/skills/plan/.gitkeep +0 -0
  42. package/dist/skills/refine/.gitkeep +0 -0
  43. package/dist/storage-paths-IPNZZM5D.mjs +0 -15
  44. package/dist/validation-error-QT6Q7FYU.mjs +0 -7
  45. /package/dist/prompts/{harness-context.md → _partials/harness-context.md} +0 -0
package/README.md CHANGED
@@ -2,50 +2,99 @@
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
4
  [![License: MIT](https://img.shields.io/badge/license-MIT-blue?style=flat&logo=opensourceinitiative&logoColor=white)](./LICENSE)
5
- [![TypeScript](https://img.shields.io/badge/TypeScript-5.9-3178c6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-6.0-3178c6?style=flat&logo=typescript&logoColor=white)](https://www.typescriptlang.org/)
6
6
  [![Node.js](https://img.shields.io/badge/node-%E2%89%A5_24-5fa04e?style=flat&logo=nodedotjs&logoColor=white)](https://nodejs.org/)
7
7
  [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen?style=flat&logo=git&logoColor=white)](./CONTRIBUTING.md)
8
- [![Claude Code](https://img.shields.io/badge/Claude_Code-191919?style=flat&logo=anthropic&logoColor=white)](https://docs.anthropic.com/en/docs/claude-code)
9
- [![GitHub Copilot](https://img.shields.io/badge/GitHub_Copilot-000?style=flat&logo=githubcopilot&logoColor=white)](https://docs.github.com/en/copilot/github-copilot-in-the-cli)
8
+ [![Claude Code](https://img.shields.io/badge/Claude_Code-stable-191919?style=flat&logo=anthropic&logoColor=white)](https://docs.anthropic.com/en/docs/claude-code)
9
+ [![OpenAI Codex](https://img.shields.io/badge/OpenAI_Codex-preview-412991?style=flat&logo=openai&logoColor=white)](https://github.com/openai/codex)
10
+ [![GitHub Copilot](https://img.shields.io/badge/GitHub_Copilot-preview-000?style=flat&logo=githubcopilot&logoColor=white)](https://docs.github.com/en/copilot/github-copilot-in-the-cli)
11
+ [![Built with Donuts](https://img.shields.io/badge/%F0%9F%8D%A9-Built_with_Donuts-ff6f00?style=flat)](https://github.com/lukas-grigis/ralphctl)
10
12
 
11
13
  <p align="center">
12
- <img src="./.github/assets/home.png" alt="ralphctl home screen — Ralph donut banner, sprint pipeline, keybinding footer" width="900" />
14
+ <img src="./.github/assets/home.png" alt="ralphctl v0.7.0 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" />
13
15
  </p>
14
16
 
15
17
  **Agent harness for long-running AI coding tasks —
16
- orchestrates [Claude Code](https://docs.anthropic.com/en/docs/claude-code) & [GitHub Copilot](https://docs.github.com/en/copilot/github-copilot-in-the-cli)
17
- across repositories.**
18
+ orchestrates [Claude Code](https://docs.anthropic.com/en/docs/claude-code) across repositories,
19
+ with [GitHub Copilot](https://docs.github.com/en/copilot/github-copilot-in-the-cli) and
20
+ [OpenAI Codex](https://github.com/openai/codex) available in preview.**
18
21
 
19
22
  > _"I'm helping!"_ — Ralph Wiggum
20
23
 
21
24
  > [!NOTE]
22
- > **Active development** — new features and polish ship regularly. Setup is quick, so upgrading is low-friction. See
23
- > [CHANGELOG](./CHANGELOG.md).
25
+ > **Active development** — new features and polish ship regularly. Setup is quick, so upgrading is low-friction.
26
+ > See [CHANGELOG](./CHANGELOG.md).
24
27
 
25
28
  ---
26
29
 
27
- ## Upgrading from 0.5.x to 0.6.0
30
+ ## What is ralphctl?
28
31
 
29
- The rewrite changes the on-disk layout under `~/.ralphctl/`. Existing 0.5.x data is **not migrated automatically**.
30
- Before upgrading:
31
-
32
- 1. Back up your existing data: `mv ~/.ralphctl ~/.ralphctl.0.5-backup`
33
- 2. Install 0.6.0 (`pnpm install ralphctl@0.6.0` or via your package manager)
34
- 3. Run `ralphctl project add` to register your projects in the new layout
35
- 4. (Optional) Re-create sprints from your backup as needed
32
+ AI coding agents are powerful but lose context on long tasks, need babysitting when things break, and have no way to
33
+ coordinate changes across multiple repositories. ralphctl wraps your chosen AI CLI — currently Claude Code — in a
34
+ structured harness that decomposes your work into dependency-ordered tasks, drives each one through
35
+ a [generator-evaluator loop](https://www.anthropic.com/engineering/harness-design-long-running-apps) that catches issues
36
+ before moving on, and persists context across sessions so nothing gets lost.
36
37
 
37
- ralphctl will detect a legacy layout on first launch and refuse to start until you back up + reset, with
38
- instructions printed.
38
+ You describe what to build. ralphctl handles the rest or works alongside you, whichever you prefer.
39
39
 
40
40
  ---
41
41
 
42
- ## Why ralphctl?
42
+ ## Quick Start
43
43
 
44
- AI coding agents are powerful but lose context on long tasks, need babysitting when things break, and have no way to
45
- coordinate changes across multiple repositories. RalphCTL decomposes your work into dependency-ordered tasks, runs each
46
- one through a [generator-evaluator loop](https://www.anthropic.com/engineering/harness-design-long-running-apps) that
47
- catches issues before moving on, and persists context across sessions so nothing gets lost. You describe what to build —
48
- ralphctl handles the rest.
44
+ ```bash
45
+ npm install -g ralphctl
46
+ ```
47
+
48
+ Install [Claude Code](https://docs.anthropic.com/en/docs/claude-code) (or a preview provider — see below), authenticate
49
+ it, then:
50
+
51
+ ```bash
52
+ ralphctl
53
+ ```
54
+
55
+ That's it. The TUI launches, walks you through registering a project, refining your first ticket, generating a task
56
+ plan, and kicking off implementation. Press `n` from the home screen to start a new sprint, or follow the
57
+ `press r to open Sprints` hint on your project tile. No commands to memorize.
58
+
59
+ **Requirements:** [Node.js](https://nodejs.org/) ≥ 24, [Git](https://git-scm.com/), and one supported AI CLI in `PATH`
60
+ and authenticated.
61
+
62
+ <details>
63
+ <summary>Prefer the CLI for inspection + one-shot operations?</summary>
64
+
65
+ Interactive flows (refine / plan / ideate / implement / readiness / create sprint) are TUI-only. The CLI covers
66
+ inspection and one-shot operations:
67
+
68
+ ```bash
69
+ # Inspect projects + sprints
70
+ ralphctl project list
71
+ ralphctl sprint list
72
+ ralphctl sprint show <sprint-id>
73
+ ralphctl sprint progress <sprint-id>
74
+
75
+ # Add / inspect tickets
76
+ ralphctl ticket add
77
+ ralphctl ticket list
78
+
79
+ # Manage sprint state
80
+ ralphctl sprint activate <sprint-id>
81
+ ralphctl sprint close <sprint-id> # review → done
82
+ ralphctl sprint remove <sprint-id>
83
+
84
+ # Open a PR for the sprint branch
85
+ ralphctl create-pr --sprint <sprint-id>
86
+
87
+ # Export sprint artifacts
88
+ ralphctl export-requirements --sprint <id> --output <path>
89
+ ralphctl export-context --sprint <id> --project <id> --output <path>
90
+
91
+ # Settings
92
+ ralphctl settings show
93
+ ralphctl settings set ai.provider claude-code
94
+ ralphctl settings set ai.models.implement <model-id>
95
+ ```
96
+
97
+ </details>
49
98
 
50
99
  ---
51
100
 
@@ -54,59 +103,51 @@ ralphctl handles the rest.
54
103
  ```
55
104
  You describe what to build ralphctl handles the rest
56
105
  ───────────────────────── ─────────────────────────────────
57
- ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────┐ ┌─────────┐
58
- │ Create │──>│ Add │───────>│ Refine │──>│ Plan │──>│ Execute
59
- │ Sprint │ │ Tickets │ │ (WHAT) │ │(HOW) │ │ Loop
60
- └──────────┘ └──────────┘ └────────┘ └──────┘ └─────────┘
61
- │ │
106
+ ┌──────────┐ ┌──────────┐ ┌────────┐ ┌──────┐ ┌───────────┐
107
+ │ Create │──>│ Add │───────>│ Refine │──>│ Plan │──>│ Implement
108
+ │ Sprint │ │ Tickets │ │ (WHAT) │ │(HOW) │ │ Loop
109
+ └──────────┘ └──────────┘ └────────┘ └──────┘ └───────────┘
110
+ │ │
62
111
  AI clarifies AI generates AI implements
63
112
  requirements task graph + AI reviews
64
113
  with you from specs each task
65
114
  ```
66
115
 
67
- - **Dependency-ordered execution** tasks run strictly one at a time in topological order; the evaluator's read-only
68
- `git status` check catches dirty trees so work doesn't compound on a broken state
69
- - **Generator-evaluator cycle** an independent AI reviewer checks each task against its spec; if it fails, the
70
- generator gets feedback and iterates
71
- - **Context persistence** — sprint state, progress history, and task context survive across sessions; interrupted work
72
- resumes where it left off
116
+ **Refine** is implementation-agnostic: the AI clarifies requirements with you, ticket by ticket, and flips each one from
117
+ `pending` to `approved`. **Plan** requires every ticket approved the AI explores the affected repos and generates a
118
+ dependency-ordered task graph. **Implement** drives those tasks one at a time through a generator-evaluator cycle: a
119
+ second AI pass reviews each task against its spec before the harness marks it done and moves to the next.
73
120
 
74
- ---
75
-
76
- ## Quick Start
77
-
78
- ```bash
79
- npm install -g ralphctl
80
- ralphctl
81
- ```
121
+ Key properties:
82
122
 
83
- That's it. Launches the interactive TUI walks you through project setup, ticket refinement, task planning, and
84
- execution. No commands to memorize.
123
+ - **Dependency-ordered execution** tasks run strictly one at a time in topological order; no task starts until its
124
+ blockers are done
125
+ - **Generator-evaluator cycle** — an independent AI reviewer checks each task; if it fails, the generator gets the
126
+ critique and iterates (up to `harness.maxAttempts` tries before the task is flagged `blocked`)
127
+ - **Context persistence** — sprint state, branch, progress history, and per-task context survive across sessions;
128
+ interrupted runs resume automatically
129
+ - **Multi-repo support** — one sprint can span several repositories with per-repo setup and check scripts
85
130
 
86
- Requires [Node.js](https://nodejs.org/) >= 24, [Git](https://git-scm.com/), and
87
- either [Claude CLI](https://docs.anthropic.com/en/docs/claude-code)
88
- or [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) installed and authenticated.
131
+ For the full architectural picture see [`.claude/docs/ARCHITECTURE.md`](./.claude/docs/ARCHITECTURE.md) and [
132
+ `.claude/docs/REQUIREMENTS.md`](./.claude/docs/REQUIREMENTS.md).
89
133
 
90
- <details>
91
- <summary>Prefer explicit commands?</summary>
92
-
93
- ```bash
94
- # 1. Register a project (points to your repo)
95
- ralphctl project add
134
+ ---
96
135
 
97
- # 2. Create a sprint
98
- ralphctl sprint create --name "my-first-sprint"
136
+ ## Provider Status
99
137
 
100
- # 3. Add a ticket
101
- ralphctl ticket add --project my-app --title "Add user authentication"
138
+ > [!IMPORTANT]
139
+ > Not all three AI providers are equally production-ready inside ralphctl.
102
140
 
103
- # 4. Let AI refine requirements, plan tasks, and execute
104
- ralphctl sprint refine
105
- ralphctl sprint plan
106
- ralphctl sprint start
107
- ```
141
+ | Provider | Status | Headless flag | Native context file |
142
+ | ----------------------------------------- | --------------------------------------- | ------------------------------------- | --------------------------------- |
143
+ | **Claude Code** (`claude-code`) | **Stable — primary verified provider** | `--permission-mode bypassPermissions` | `CLAUDE.md` at repo root |
144
+ | **GitHub Copilot CLI** (`github-copilot`) | Preview — not officially verified by us | `--allow-all-tools` | `.github/copilot-instructions.md` |
145
+ | **OpenAI Codex** (`openai-codex`) | Preview — not officially verified by us | per-session approval flow | `AGENTS.md` |
108
146
 
109
- </details>
147
+ "Preview" means the integration exists and the TUI lets you select it, but end-to-end harness behaviour against those
148
+ providers has not been formally verified. Copilot and Codex no-op some features (bundled skill injection, `bodyFile`
149
+ forensic artifacts). If you hit a rough edge on a preview provider,
150
+ please [open an issue](https://github.com/lukas-grigis/ralphctl/issues).
110
151
 
111
152
  ---
112
153
 
@@ -116,13 +157,14 @@ ralphctl sprint start
116
157
  - **Catch mistakes before they compound** — independent AI review after each task, iterating until quality passes or
117
158
  budget is exhausted
118
159
  - **Coordinate across repositories** — one sprint can span multiple repos with automatic dependency tracking
119
- - **Branch per sprint** — optional shared branch across every affected repo, with `sprint close --create-pr` to open
120
- pull requests when you're done
121
- - **Recover from rate limits** — automatic session resume across rate-limit pauses keeps the in-flight task's full
122
- context when the provider restarts
123
- - **Separate the what from the how** — AI clarifies requirements first, then generates implementation tasks, with human
124
- approval gates
125
- - **Pick up where you left off** — full state persistence across sessions; interrupted work resumes automatically
160
+ - **Branch per sprint** — optional shared branch across every affected repo; `ralphctl create-pr --sprint <id>` opens a
161
+ PR / MR via `gh` or `glab` when you're done
162
+ - **Recover from rate limits** — exponential backoff and session resume keep the in-flight task's full context when the
163
+ provider restarts
164
+ - **Separate the what from the how** — AI clarifies requirements first (Refine), then generates the implementation
165
+ plan (Plan), with human approval gates between
166
+ - **Pick up where you left off** — full state persistence; interrupted Implement runs reset in-progress tasks and
167
+ re-enter the queue on next launch
126
168
  - **Pair or let it run** — work alongside your AI agent interactively, or let it execute unattended
127
169
  - **Zero-memorization start** — run `ralphctl` with no args for a guided menu
128
170
 
@@ -130,95 +172,160 @@ ralphctl sprint start
130
172
 
131
173
  ## Configuration
132
174
 
133
- RalphCTL supports **Claude Code** and **GitHub Copilot** as AI backends.
175
+ Configure via the TUI `Settings` view or one-shot CLI commands:
134
176
 
135
177
  ```bash
136
- ralphctl config set provider claude # Use Claude Code
137
- ralphctl config set provider copilot # Use GitHub Copilot
178
+ ralphctl settings set ai.provider claude-code # Use Claude Code (stable)
179
+ ralphctl settings set ai.provider github-copilot # Use GitHub Copilot (preview)
180
+ ralphctl settings set ai.provider openai-codex # Use OpenAI Codex (preview)
138
181
  ```
139
182
 
140
- Auto-prompts on first AI command if not set. Both CLIs must be in your PATH and authenticated.
183
+ The selected provider's CLI must be in your `PATH` and authenticated. The TUI prompts you on first launch if no provider
184
+ is configured.
141
185
 
142
- Tune the generator-evaluator loop:
186
+ **Per-flow model selection.** Each chain (`refine`, `plan`, `implement`, `ideate`, `readiness`) carries its own model
187
+ from the configured provider's catalog:
143
188
 
144
189
  ```bash
145
- ralphctl config set evaluationIterations 2 # Up to 2 fix attempts per task (default: 1)
146
- ralphctl config set evaluationIterations 0 # Disable evaluation entirely
190
+ ralphctl settings set ai.models.implement <model-id>
191
+ ralphctl settings set ai.models.plan <model-id>
147
192
  ```
148
193
 
149
- `sprint start --no-evaluate` skips evaluation for a single run without touching the global setting.
194
+ **Tune the generator-evaluator loop** (under `harness`):
150
195
 
151
- <details>
152
- <summary>Provider differences</summary>
153
-
154
- | Feature | Claude Code | GitHub Copilot |
155
- | --------------------------- | ------------------------------------ | -------------------------------------------------------------------- |
156
- | Status | GA | Public preview |
157
- | Headless execution | `-p --output-format json` | `-p --output-format json --autopilot --no-ask-user` |
158
- | Session IDs | In JSON output (`session_id`) | In JSON output (`session_id`), `--share` file as fallback |
159
- | Session resume (`--resume`) | Full support | Full support |
160
- | Per-tool permissions | Settings files + `--permission-mode` | `--allow-all-tools` (all-or-nothing by default) |
161
- | Fine-grained tool control | `allow`/`deny` in settings files | `--allow-tool`, `--deny-tool` flags (not yet used) |
162
- | Rate limit detection | Validated patterns | Borrowed from Claude — not yet validated against real Copilot errors |
196
+ ```bash
197
+ ralphctl settings set harness.maxAttempts 2 # Cap fix attempts per task (1–10, default 1)
198
+ ralphctl settings set harness.maxTurns 8 # Generator-evaluator turns per attempt (1–10)
199
+ ralphctl settings set harness.rateLimitRetries 3 # Adapter-side 429 retries (0–10)
200
+ ```
163
201
 
164
- </details>
202
+ ### Data directory
203
+
204
+ All state lives in `~/.ralphctl/` by default (settings under `config/`, sprints + projects under `data/`, advisory locks
205
+ under `state/`). Override the root with:
206
+
207
+ ```bash
208
+ export RALPHCTL_HOME="/path/to/custom/dir"
209
+ ```
210
+
211
+ ### Environment variables
212
+
213
+ | Variable | Default | Purpose |
214
+ | ---------------------------- | -------------- | --------------------------------------------------------------------- |
215
+ | `RALPHCTL_HOME` | `~/.ralphctl/` | Override application root (data + config + state) |
216
+ | `RALPHCTL_LOCK_TIMEOUT_MS` | `30000` | Stale lock threshold for concurrent-access detection (1–3600000 ms) |
217
+ | `RALPHCTL_SKIP_LEGACY_CHECK` | unset | Bypass the v0.6.x legacy-layout detector at boot |
218
+ | `RALPHCTL_LOG_LEVEL` | `info` | Filter structured-log output (`silent`/`debug`/`info`/`warn`/`error`) |
219
+ | `RALPHCTL_NO_TUI` | unset | Force the plain-text CLI fallback even on a TTY |
220
+ | `RALPHCTL_JSON` | unset | Force JSON log output (one object per line) regardless of TTY |
221
+ | `NO_COLOR` | unset | Suppress ANSI colors |
222
+ | `CI` | auto-detected | Disables Ink mount and implicit interactive prompts |
165
223
 
166
224
  ---
167
225
 
168
- ## Data Directory
226
+ ## Upgrading from 0.6.x to 0.7.0
169
227
 
170
- All data lives in `~/.ralphctl/` by default. Override with:
228
+ > [!IMPORTANT]
229
+ > **0.7.0 is a structural rewrite.** Internal architecture, on-disk schema, and several CLI
230
+ > commands all changed. **There is no automatic migration from 0.6.x** — sprints, projects,
231
+ > and settings written by 0.6.x will not be read by 0.7.0, even though the data directory
232
+ > path is the same.
233
+ >
234
+ > If you launch 0.7.0 with v0.6.x data still in `~/.ralphctl/`, the harness detects the
235
+ > legacy layout, **refuses to start**, and prints the exact backup command you need to run.
236
+ > No data is touched. The steps below are what the safeguard will tell you.
171
237
 
172
- ```bash
173
- export RALPHCTL_ROOT="/path/to/custom/data-dir"
174
- ```
238
+ ### Before upgrading
239
+
240
+ 1. **Back up your 0.6.x data**:
241
+
242
+ ```bash
243
+ mv ~/.ralphctl ~/.ralphctl.0.6-backup
244
+ ```
245
+
246
+ 2. Install ralphctl (the latest published version is `0.7.x` — pin only if you need a specific patch):
247
+
248
+ ```bash
249
+ npm install -g ralphctl
250
+ ```
251
+
252
+ 3. Launch the TUI and re-register your projects:
253
+
254
+ ```bash
255
+ ralphctl
256
+ ```
257
+
258
+ 4. (Optional) Re-create sprints by hand from the backup — `~/.ralphctl.0.6-backup/data/sprints/<id>/` still holds the
259
+ original ticket bodies, plan output, and progress notes for reference.
260
+
261
+ ### What changed
262
+
263
+ - **On-disk schema is incompatible.** Each sprint now spans three files — `sprint.json` (planning), `execution.json` (
264
+ branch / PR / setup audit), `tasks.json` (the task list) — instead of the single 0.6.x `sprint.json`. Override the
265
+ data root with `RALPHCTL_HOME=<absolute-path>` if you need a separate location.
266
+ - **`settings.json` schema changed.** Per-flow model selection replaces the single global `model`; each chain picks its
267
+ own. 0.6.x settings files are rejected on read — re-run `ralphctl settings` to reconfigure.
268
+ - **CLI surface intentionally smaller.** These commands were removed in favour of the TUI: `sprint feedback / edit`,
269
+ `ticket approve / edit`, `project repo add / remove`, all `task add / edit / edit-status / remove`, and
270
+ `sessions list / attach / detach / kill`. Switch to the interactive TUI or to `ralphctl sprint show <id>` / the
271
+ relevant flow command.
272
+ - **OpenAI Codex provider added** (preview) alongside Claude Code and GitHub Copilot — pick via `ralphctl settings`.
273
+
274
+ See [CHANGELOG.md](./CHANGELOG.md#070---2026-05-17) for the full list, including non-breaking improvements (
275
+ cross-project sprint lock, idle-stdout watchdog, resume-aborted runs, persistent `<sprintDir>/chain.log`, exponential
276
+ rate-limit backoff).
175
277
 
176
278
  ---
177
279
 
178
280
  <details>
179
281
  <summary><strong>CLI Command Reference</strong></summary>
180
282
 
283
+ The CLI surface is deliberately smaller than v0.6.x — interactive flows (refine / plan / ideate / implement /
284
+ readiness / create sprint) stay TUI-only by design. The CLI exposes inspection + one-shot operations.
285
+
181
286
  ### Getting Started
182
287
 
183
- | Command | Description |
184
- | ------------------------------------------------ | ----------------------------------- |
185
- | `ralphctl` | Interactive menu mode (recommended) |
186
- | `ralphctl doctor` | Check environment health |
187
- | `ralphctl config set provider <claude\|copilot>` | Set AI provider |
188
- | `ralphctl config show` | Show current configuration |
189
- | `ralphctl completion install` | Enable shell tab-completion |
190
-
191
- ### Project & Sprint Setup
192
-
193
- | Command | Description |
194
- | ----------------------------- | -------------------------------- |
195
- | `ralphctl project add` | Register a project and its repos |
196
- | `ralphctl sprint create` | Create a new sprint (draft) |
197
- | `ralphctl sprint list` | List all sprints |
198
- | `ralphctl sprint show` | Show current sprint details |
199
- | `ralphctl sprint set-current` | Switch the current sprint |
200
- | `ralphctl ticket add` | Add a work item to a sprint |
201
-
202
- ### AI-Assisted Planning
203
-
204
- | Command | Description |
205
- | ------------------------------ | --------------------------------------- |
206
- | `ralphctl sprint refine` | Clarify requirements with AI (WHAT) |
207
- | `ralphctl sprint plan` | Generate tasks from requirements (HOW) |
208
- | `ralphctl sprint ideate` | Quick single-session refine + plan |
209
- | `ralphctl sprint requirements` | Export refined requirements to markdown |
210
-
211
- ### Execution & Monitoring
212
-
213
- | Command | Description |
214
- | -------------------------- | ------------------------------------------------------ |
215
- | `ralphctl sprint start` | Execute tasks with AI (`--branch` for a sprint branch) |
216
- | `ralphctl sprint progress` | Sprint progress with blocker / stale-task diagnostics |
217
- | `ralphctl task list` | List tasks in the current sprint |
218
- | `ralphctl sprint close` | Close an active sprint (`--create-pr` for PRs) |
219
- | `ralphctl sprint remove` | Delete a sprint permanently |
220
-
221
- Run `ralphctl <command> --help` for details on any command.
288
+ | Command | Description |
289
+ | ------------------------------------- | --------------------------------- |
290
+ | `ralphctl` | Interactive TUI (primary surface) |
291
+ | `ralphctl doctor` | Check environment health |
292
+ | `ralphctl settings show` | Print current settings |
293
+ | `ralphctl settings set <key> <value>` | Set a single settings key |
294
+ | `ralphctl completion <shell>` | Print shell tab-completion script |
295
+
296
+ ### Project & Sprint Inspection
297
+
298
+ | Command | Description |
299
+ | ---------------------------------- | ----------------------------------------- |
300
+ | `ralphctl project list` | List registered projects |
301
+ | `ralphctl project show <id>` | Show one project (incl. repositories) |
302
+ | `ralphctl project remove <id>` | Delete a project registration |
303
+ | `ralphctl sprint list` | List all sprints |
304
+ | `ralphctl sprint show <id>` | Show one sprint (tickets, status, branch) |
305
+ | `ralphctl sprint progress <id>` | Sprint progress with blocker diagnostics |
306
+ | `ralphctl sprint set-current <id>` | Switch the current sprint pointer |
307
+ | `ralphctl ticket add` | Add a ticket to the current sprint |
308
+ | `ralphctl ticket list / show <id>` | Inspect tickets |
309
+ | `ralphctl ticket remove <id>` | Remove a ticket from a draft sprint |
310
+ | `ralphctl task list / show <id>` | Inspect tasks (planning generates them) |
311
+
312
+ ### Sprint Lifecycle
313
+
314
+ | Command | Description |
315
+ | ------------------------------- | ------------------------------- |
316
+ | `ralphctl sprint activate <id>` | Flip a draft sprint to `active` |
317
+ | `ralphctl sprint close <id>` | Transition `review` → `done` |
318
+ | `ralphctl sprint remove <id>` | Delete a sprint permanently |
319
+
320
+ ### Export & PR
321
+
322
+ | Command | Description |
323
+ | ---------------------------------------------------------------------- | -------------------------------------------------------------- |
324
+ | `ralphctl export-requirements --sprint <id> --output <path>` | Render approved-ticket requirements to markdown |
325
+ | `ralphctl export-context --sprint <id> --project <id> --output <path>` | Render harness context (sprint + project + tasks) to markdown |
326
+ | `ralphctl create-pr --sprint <id> [--base <branch>] [--draft]` | Open a PR/MR via `gh` or `glab`, persist the URL on the sprint |
327
+
328
+ Run `ralphctl <command> --help` for flag-level detail.
222
329
 
223
330
  </details>
224
331
 
@@ -233,9 +340,14 @@ Run `ralphctl <command> --help` for details on any command.
233
340
  | [Contributing](./CONTRIBUTING.md) | Dev setup, code style, PR process |
234
341
  | [Changelog](./CHANGELOG.md) | Version history |
235
342
 
236
- **Blog posts:** [Building ralphctl](https://lukasgrigis.dev/blog/building-ralphctl) (backstory) | [From task CLI to agent harness](https://lukasgrigis.dev/blog/ralphctl-agent-harness/) (evaluator deep-dive)
343
+ **Blog posts:** [Building ralphctl](https://lukasgrigis.dev/blog/building-ralphctl) (
344
+ backstory) | [From task CLI to agent harness](https://lukasgrigis.dev/blog/ralphctl-agent-harness/) (evaluator
345
+ deep-dive)
237
346
 
238
- **Further reading:** [Harness Engineering for Coding Agent Users](https://martinfowler.com/articles/harness-engineering.html) — Martin Fowler (April 2026) | [Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps) — Anthropic Engineering
347
+ **Further reading:
348
+ ** [Harness Engineering for Coding Agent Users](https://martinfowler.com/articles/harness-engineering.html) — Martin
349
+ Fowler (April 2026) | [Harness Design for Long-Running Application Development](https://www.anthropic.com/engineering/harness-design-long-running-apps) —
350
+ Anthropic Engineering
239
351
 
240
352
  ---
241
353