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.
- package/README.md +250 -138
- package/dist/cli.mjs +20370 -21106
- package/dist/manifest.json +17 -19
- package/dist/prompts/_partials/signals-evaluation.md +14 -0
- package/dist/prompts/_partials/signals-task.md +26 -0
- package/dist/prompts/_partials/validation-checklist.md +24 -0
- package/dist/prompts/apply-feedback/template.md +118 -0
- package/dist/prompts/detect-scripts/template.md +118 -0
- package/dist/prompts/detect-skills/template.md +136 -0
- package/dist/prompts/evaluate/template.md +236 -0
- package/dist/prompts/ideate/template.md +172 -0
- package/dist/prompts/implement/template.md +203 -0
- package/dist/prompts/plan/template.md +347 -0
- package/dist/prompts/readiness/template.md +132 -0
- package/dist/prompts/refine/template.md +254 -0
- package/dist/skills/{default/abstraction-first → ralphctl-abstraction-first}/SKILL.md +1 -1
- package/dist/skills/{default/alignment → ralphctl-alignment}/SKILL.md +1 -1
- package/dist/skills/{default/iterative-review → ralphctl-iterative-review}/SKILL.md +1 -1
- package/package.json +25 -28
- package/dist/absolute-path-WUTZQ37D.mjs +0 -8
- package/dist/chunk-6RDMCLWU.mjs +0 -108
- package/dist/chunk-HIU74KTO.mjs +0 -1046
- package/dist/chunk-S3PTDH57.mjs +0 -78
- package/dist/chunk-WV4D2CPG.mjs +0 -26
- package/dist/prompt-adapter-JQICGVX7.mjs +0 -7
- package/dist/prompts/ideate.md +0 -204
- package/dist/prompts/plan-auto.md +0 -182
- package/dist/prompts/plan-common-examples.md +0 -82
- package/dist/prompts/plan-common.md +0 -200
- package/dist/prompts/plan-interactive.md +0 -212
- package/dist/prompts/repo-onboard.md +0 -201
- package/dist/prompts/signals-evaluation.md +0 -6
- package/dist/prompts/signals-planning.md +0 -5
- package/dist/prompts/signals-task.md +0 -10
- package/dist/prompts/sprint-feedback.md +0 -64
- package/dist/prompts/task-evaluation.md +0 -276
- package/dist/prompts/task-execution.md +0 -233
- package/dist/prompts/ticket-refine.md +0 -242
- package/dist/prompts/validation-checklist.md +0 -19
- package/dist/skills/exec/.gitkeep +0 -0
- package/dist/skills/plan/.gitkeep +0 -0
- package/dist/skills/refine/.gitkeep +0 -0
- package/dist/storage-paths-IPNZZM5D.mjs +0 -15
- package/dist/validation-error-QT6Q7FYU.mjs +0 -7
- /package/dist/prompts/{harness-context.md → _partials/harness-context.md} +0 -0
package/README.md
CHANGED
|
@@ -2,50 +2,99 @@
|
|
|
2
2
|
[](https://www.npmjs.com/package/ralphctl)
|
|
3
3
|
[](https://github.com/lukas-grigis/ralphctl/actions/workflows/ci.yml)
|
|
4
4
|
[](./LICENSE)
|
|
5
|
-
[](https://www.typescriptlang.org/)
|
|
6
6
|
[](https://nodejs.org/)
|
|
7
7
|
[](./CONTRIBUTING.md)
|
|
8
|
-
[](https://docs.anthropic.com/en/docs/claude-code)
|
|
9
|
-
[](https://docs.anthropic.com/en/docs/claude-code)
|
|
9
|
+
[](https://github.com/openai/codex)
|
|
10
|
+
[](https://docs.github.com/en/copilot/github-copilot-in-the-cli)
|
|
11
|
+
[](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,
|
|
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)
|
|
17
|
-
|
|
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.
|
|
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
|
-
##
|
|
30
|
+
## What is ralphctl?
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
42
|
+
## Quick Start
|
|
43
43
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
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 │──>│
|
|
59
|
-
│ Sprint │ │ Tickets │ │ (WHAT) │ │(HOW) │ │
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
-
|
|
70
|
-
|
|
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
|
-
|
|
84
|
-
|
|
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
|
-
|
|
87
|
-
|
|
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
|
-
|
|
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
|
-
|
|
98
|
-
ralphctl sprint create --name "my-first-sprint"
|
|
136
|
+
## Provider Status
|
|
99
137
|
|
|
100
|
-
|
|
101
|
-
|
|
138
|
+
> [!IMPORTANT]
|
|
139
|
+
> Not all three AI providers are equally production-ready inside ralphctl.
|
|
102
140
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
-
|
|
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
|
|
120
|
-
|
|
121
|
-
- **Recover from rate limits** —
|
|
122
|
-
|
|
123
|
-
- **Separate the what from the how** — AI clarifies requirements first, then generates implementation
|
|
124
|
-
approval gates
|
|
125
|
-
- **Pick up where you left off** — full state persistence
|
|
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
|
-
|
|
175
|
+
Configure via the TUI `Settings` view or one-shot CLI commands:
|
|
134
176
|
|
|
135
177
|
```bash
|
|
136
|
-
ralphctl
|
|
137
|
-
ralphctl
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
146
|
-
ralphctl
|
|
190
|
+
ralphctl settings set ai.models.implement <model-id>
|
|
191
|
+
ralphctl settings set ai.models.plan <model-id>
|
|
147
192
|
```
|
|
148
193
|
|
|
149
|
-
|
|
194
|
+
**Tune the generator-evaluator loop** (under `harness`):
|
|
150
195
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
226
|
+
## Upgrading from 0.6.x to 0.7.0
|
|
169
227
|
|
|
170
|
-
|
|
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
|
-
|
|
173
|
-
|
|
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
|
|
184
|
-
|
|
|
185
|
-
| `ralphctl`
|
|
186
|
-
| `ralphctl doctor`
|
|
187
|
-
| `ralphctl
|
|
188
|
-
| `ralphctl
|
|
189
|
-
| `ralphctl completion
|
|
190
|
-
|
|
191
|
-
### Project & Sprint
|
|
192
|
-
|
|
193
|
-
| Command
|
|
194
|
-
|
|
|
195
|
-
| `ralphctl project
|
|
196
|
-
| `ralphctl
|
|
197
|
-
| `ralphctl
|
|
198
|
-
| `ralphctl sprint
|
|
199
|
-
| `ralphctl sprint
|
|
200
|
-
| `ralphctl
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
|
205
|
-
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
| `ralphctl sprint
|
|
220
|
-
|
|
221
|
-
|
|
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) (
|
|
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
|
|
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
|
|