ralphctl 0.21.0 → 0.23.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 (32) hide show
  1. package/README.md +112 -66
  2. package/dist/{cli-3OPZOXH6.mjs → cli-J3MI4B6A.mjs} +7734 -4281
  3. package/dist/cli.mjs +1 -1
  4. package/dist/manifest.json +9 -2
  5. package/dist/prompts/_partials/autonomous-operation.md +16 -0
  6. package/dist/prompts/_partials/decisions.md +1 -1
  7. package/dist/prompts/_partials/evaluation-checkpoint.md +23 -0
  8. package/dist/prompts/_partials/evaluator-failure-modes.md +13 -0
  9. package/dist/prompts/_partials/evidence-bound.md +6 -0
  10. package/dist/prompts/_partials/parallel-tool-calls.md +7 -0
  11. package/dist/prompts/_partials/task-fields.md +35 -0
  12. package/dist/prompts/_partials/task-sizing.md +26 -0
  13. package/dist/prompts/detect-scripts/template.md +10 -10
  14. package/dist/prompts/distill-learnings/template.md +4 -2
  15. package/dist/prompts/evaluate/template.md +20 -49
  16. package/dist/prompts/evaluate-continuation/template.md +14 -45
  17. package/dist/prompts/ideate/template.md +34 -52
  18. package/dist/prompts/implement/template.md +42 -17
  19. package/dist/prompts/implement-continuation/template.md +63 -25
  20. package/dist/prompts/plan/template.md +52 -102
  21. package/dist/prompts/readiness/template.md +25 -26
  22. package/dist/prompts/reproduce/template.md +3 -3
  23. package/dist/skills/ralphctl-alignment/SKILL.md +4 -3
  24. package/dist/skills/ralphctl-cherny-workflow/SKILL.md +3 -3
  25. package/dist/skills/ralphctl-code-review-and-quality/SKILL.md +18 -11
  26. package/dist/skills/ralphctl-debugging-and-error-recovery/SKILL.md +10 -9
  27. package/dist/skills/ralphctl-iterative-review/SKILL.md +8 -4
  28. package/dist/skills/ralphctl-karpathy-guidelines/SKILL.md +2 -2
  29. package/dist/skills/ralphctl-ponytail/SKILL.md +7 -3
  30. package/dist/skills/ralphctl-surgical-simplicity/SKILL.md +5 -3
  31. package/dist/skills/ralphctl-test-driven-development/SKILL.md +4 -3
  32. package/package.json +20 -17
package/README.md CHANGED
@@ -9,6 +9,7 @@
9
9
  [![GitHub Copilot CLI](https://img.shields.io/badge/GitHub_Copilot_CLI-supported-000?style=flat&logo=githubcopilot&logoColor=white)](https://docs.github.com/en/copilot/github-copilot-in-the-cli)
10
10
  [![OpenAI Codex CLI](https://img.shields.io/badge/OpenAI_Codex_CLI-supported-412991?style=flat&logo=openai&logoColor=white)](https://github.com/openai/codex)
11
11
  [![OpenCode](https://img.shields.io/badge/OpenCode-supported-f59e0b?style=flat&logo=opencollective&logoColor=white)](https://opencode.ai/)
12
+ [![Grok Build CLI](https://img.shields.io/badge/Grok_Build_CLI-supported-000?style=flat)](https://docs.x.ai/build/overview)
12
13
  [![Built with Donuts](https://img.shields.io/badge/%F0%9F%8D%A9-Built_with_Donuts-ff6f00?style=flat)](https://github.com/lukas-grigis/ralphctl)
13
14
 
14
15
  <p align="center">
@@ -20,7 +21,8 @@
20
21
  **A ralph harness for long-running AI coding tasks — a hardened ralph loop that drives your coding agent of choice
21
22
  ([Claude Code](https://docs.anthropic.com/en/docs/claude-code),
22
23
  [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli),
23
- [OpenAI Codex CLI](https://github.com/openai/codex), or [OpenCode](https://opencode.ai/)) across one or more
24
+ [OpenAI Codex CLI](https://github.com/openai/codex), [OpenCode](https://opencode.ai/), or
25
+ [Grok Build CLI](https://docs.x.ai/build/overview)) across one or more
24
26
  repositories.**
25
27
 
26
28
  > _"I'm helping!"_ — Ralph Wiggum
@@ -48,7 +50,7 @@ plan → generate → evaluate → verify loop turns one-shot prompting into a r
48
50
 
49
51
  AI coding agents are powerful but lose context on long tasks, need babysitting when things break, and have no way to
50
52
  coordinate changes across multiple repositories. ralphctl wraps your chosen AI CLI — Claude Code, GitHub Copilot CLI,
51
- OpenAI Codex CLI, or OpenCode — in a
53
+ OpenAI Codex CLI, OpenCode, or Grok Build CLI — in a
52
54
  structured harness that decomposes your work into dependency-ordered tasks, drives each one through
53
55
  a [generator-evaluator loop](https://www.anthropic.com/engineering/harness-design-long-running-apps) that catches issues
54
56
  before moving on, and persists context across sessions so nothing gets lost.
@@ -74,12 +76,13 @@ ralphctl demo
74
76
 
75
77
  Otherwise, install one of the supported CLIs and authenticate it:
76
78
 
77
- | CLI | Install | Auth |
78
- | ---------------------------------------------------------------------------------- | ------------------------------------ | --------------------- |
79
- | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | `npm i -g @anthropic-ai/claude-code` | Anthropic account |
80
- | [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) | `npm i -g @github/copilot` | GitHub Copilot seat |
81
- | [OpenAI Codex CLI](https://github.com/openai/codex) | `npm i -g @openai/codex` | ChatGPT / OpenAI |
82
- | [OpenCode](https://opencode.ai/) | `npm i -g opencode-ai` | your own key, or none |
79
+ | CLI | Install | Auth |
80
+ | ---------------------------------------------------------------------------------- | ------------------------------------ | -------------------------- |
81
+ | [Claude Code](https://docs.anthropic.com/en/docs/claude-code) | `npm i -g @anthropic-ai/claude-code` | Anthropic account |
82
+ | [GitHub Copilot CLI](https://docs.github.com/en/copilot/github-copilot-in-the-cli) | `npm i -g @github/copilot` | GitHub Copilot seat |
83
+ | [OpenAI Codex CLI](https://github.com/openai/codex) | `npm i -g @openai/codex` | ChatGPT / OpenAI |
84
+ | [OpenCode](https://opencode.ai/) | `npm i -g opencode-ai` | your own key, or none |
85
+ | [Grok Build CLI](https://docs.x.ai/build/overview) | `npm i -g @xai-official/grok` | xAI account (`grok login`) |
83
86
 
84
87
  Then confirm ralphctl can see it:
85
88
 
@@ -89,7 +92,8 @@ ralphctl doctor # checks your provider CLI is on PATH — and reports auth fo
89
92
 
90
93
  `doctor`'s auth check is only as honest as each CLI lets it be: Claude Code and OpenAI Codex answer locally via their own
91
94
  `auth status` / `login status` verbs, OpenCode reports whether it has a saved credential (its free tier works with zero),
92
- and GitHub Copilot has no non-interactive auth-status command at all — that row always reports `unknown`, not a guess.
95
+ and GitHub Copilot and Grok expose no non-interactive auth-status command at all — those rows always report `unknown`,
96
+ not a guess. Sign in to Grok with `grok login`.
93
97
 
94
98
  When `doctor` is green, launch:
95
99
 
@@ -121,10 +125,12 @@ ralphctl sprint progress <sprint-id>
121
125
  # Add / inspect tickets
122
126
  ralphctl ticket add --title "<title>"
123
127
  ralphctl ticket list
128
+ ralphctl ticket publish <ticket-id>
124
129
 
125
130
  # Manage sprint state
126
131
  ralphctl sprint activate <sprint-id>
127
- ralphctl sprint close <sprint-id> # review → done
132
+ ralphctl sprint close <sprint-id> [-y] # review → done (-y skips the blocked-task confirm)
133
+ ralphctl sprint reopen <sprint-id> # done → review (makes blocked work reachable again)
128
134
  ralphctl sprint remove <sprint-id>
129
135
 
130
136
  # Open a PR for the sprint branch
@@ -136,7 +142,7 @@ ralphctl export-context --sprint <id> --project <id> --output <path>
136
142
 
137
143
  # Settings
138
144
  ralphctl settings show
139
- ralphctl settings apply-preset claude-only # or mixed / copilot-only / codex-only / opencode-only / *-economic / *-strong-gate / *-fast / *-frontier
145
+ ralphctl settings apply-preset claude-only # or mixed / copilot-only / codex-only / opencode-only / grok-only / *-economic / *-strong-gate / *-fast / *-frontier
140
146
  ralphctl settings set ai.implement.generator.provider claude-code
141
147
  ralphctl settings set ai.implement.generator.model <model-id>
142
148
  ralphctl settings set ai.implement.generator.effort high
@@ -216,38 +222,67 @@ Key properties:
216
222
  For the full architectural picture see [`.claude/docs/ARCHITECTURE.md`](./.claude/docs/ARCHITECTURE.md) and [
217
223
  `.claude/docs/REQUIREMENTS.md`](./.claude/docs/REQUIREMENTS.md).
218
224
 
225
+ ### GitHub and GitLab issues
226
+
227
+ ralphctl can create a GitHub or GitLab issue from a local ticket, and can post approved requirements as a
228
+ comment on a linked issue. Both writes are opt-in. Neither rewrites the issue body.
229
+
230
+ **Create on add.** The TUI add-ticket wizard asks whether to create a tracker issue (default **No**) when the
231
+ new ticket has no link and the project's first configured repository resolves to GitHub or GitLab. Yes creates
232
+ the issue with that ticket's title and body and stores the returned URL as the ticket's link.
233
+ `ralphctl ticket add` saves the ticket locally and does not ask.
234
+
235
+ **Comment on approval.** Refine can post approved requirements as a comment (default **No**, only when the
236
+ ticket has a link). The approval menu default is **Approve**. **Post as comment** appears only for a linked
237
+ ticket; choosing it posts the approved requirements as a new comment on that linked issue. Repeating the same
238
+ approved text does not add another comment.
239
+
240
+ **Retry with publish.** `ralphctl ticket publish <ticketId>` and sprint-detail `p` run the same write with no
241
+ second prompt: create when the ticket has no link, comment when it already has a link and approved
242
+ requirements. Create uses the first configured repository origin. Comments use the ticket's existing link.
243
+
219
244
  ---
220
245
 
221
246
  ## Providers
222
247
 
223
- ralphctl drives four AI coding CLIs. All four run every flow and are supported first-class. Pick one per
248
+ ralphctl drives five AI coding CLIs. All five run every flow and are supported first-class. Pick one per
224
249
  flow — or mix them, say plan with one and implement with another — through a [preset](#configuration) or
225
250
  per-row settings.
226
251
 
227
- | Provider | CLI | Install | Auth | Context file |
228
- | ----------------------------------------- | ---------- | ------------------------------------ | --------------------- | --------------------------------- |
229
- | **Claude Code** (`claude-code`) | `claude` | `npm i -g @anthropic-ai/claude-code` | Anthropic account | `CLAUDE.md` |
230
- | **GitHub Copilot CLI** (`github-copilot`) | `copilot` | `npm i -g @github/copilot` | GitHub Copilot seat | `.github/copilot-instructions.md` |
231
- | **OpenAI Codex CLI** (`openai-codex`) | `codex` | `npm i -g @openai/codex` | ChatGPT / OpenAI | `AGENTS.md` |
232
- | **OpenCode** (`opencode`) | `opencode` | `npm i -g opencode-ai` | your own key, or none | `AGENTS.md` |
252
+ | Provider | CLI | Install | Auth | Context file |
253
+ | ----------------------------------------- | ---------- | ------------------------------------ | -------------------------- | --------------------------------- |
254
+ | **Claude Code** (`claude-code`) | `claude` | `npm i -g @anthropic-ai/claude-code` | Anthropic account | `CLAUDE.md` |
255
+ | **GitHub Copilot CLI** (`github-copilot`) | `copilot` | `npm i -g @github/copilot` | GitHub Copilot seat | `.github/copilot-instructions.md` |
256
+ | **OpenAI Codex CLI** (`openai-codex`) | `codex` | `npm i -g @openai/codex` | ChatGPT / OpenAI | `AGENTS.md` |
257
+ | **OpenCode** (`opencode`) | `opencode` | `npm i -g opencode-ai` | your own key, or none | `AGENTS.md` |
258
+ | **Grok Build CLI** (`xai-grok`) | `grok` | `npm i -g @xai-official/grok` | xAI account (`grok login`) | `AGENTS.md` |
259
+
260
+ Codex, OpenCode, and Grok share one repo-root `AGENTS.md`. Readiness for more than one of them writes
261
+ that file in sequence; each later pass keeps the previous body at `AGENTS.md.bak.<timestamp>`.
233
262
 
234
263
  **Which one?**
235
264
 
236
265
  - **Claude Code** — read-only flows deny the edit, shell and network tools at the CLI level, the finest-grained
237
- gate of the four.
266
+ gate of the five.
238
267
  - **GitHub Copilot CLI** — no extra billing relationship if you already have a seat. Read-only flows deny the
239
268
  shell tool; file writes stay open, bounded by path scope.
240
269
  - **OpenAI Codex CLI** — a natural fit inside the ChatGPT/OpenAI ecosystem. Its sandbox has two modes only,
241
270
  so path scope is the fine-grained safety envelope.
242
271
  - **OpenCode** — vendor-neutral: it fronts 75+ providers and local runtimes on a bring-your-own-key model, so
243
272
  you can run a specific model, a local model, or no account at all.
244
-
245
- On every backend the `Write` tool stays open by design — the harness's `signals.json` lands through it — so
246
- path scope (cwd + mounted roots) is always part of the safety envelope. See the
273
+ - **Grok Build CLI** — xAI's coding CLI (`grok-4.7` / `grok-4.6`). Read-only flows deny edit and shell by
274
+ permission rule (`--deny 'Edit(./**)'`, cwd-rooted, plus `--deny 'Bash(*)'` and both shell tool ids); Grok
275
+ has no separate `write` tool, so creating `signals.json` outside the denied path stays possible. Both Grok
276
+ surfaces pass `--trust`, since the `AGENTS.md` and `.grok/skills` it loads at startup are files ralphctl
277
+ wrote itself. Extra roots are a named over-grant — Grok has no `--add-dir` and `--sandbox off` is forced.
278
+
279
+ On every backend the agent can always create the harness's `signals.json` — four keep the `Write` tool open,
280
+ and Grok, which has no `write` tool, scopes its edit deny rule to `--cwd` instead — so path scope (cwd +
281
+ mounted roots) is always part of the safety envelope. See the
247
282
  [provider reference](./docs/providers.md#permission-model-per-backend) for the exact mapping.
248
283
 
249
- Bundled skill injection and forensic capture work on all four; only the on-disk skills directory differs
250
- (`.claude/` / `.github/` / `.agents/` / `.opencode/`). Parallel execution is provider-agnostic. Claude Code
284
+ Bundled skill injection and forensic capture work on all five; only the on-disk skills directory differs
285
+ (`.claude/` / `.github/` / `.agents/` / `.opencode/` / `.grok/`). Parallel execution is provider-agnostic. Claude Code
251
286
  has the most real-world mileage simply because it came first — the others are equally supported, with
252
287
  correspondingly less of it.
253
288
 
@@ -256,9 +291,9 @@ model ids, mixing backends, and known limitations.
256
291
 
257
292
  Hit a rough edge with any provider? Please [open an issue](https://github.com/lukas-grigis/ralphctl/issues).
258
293
 
259
- One-shot configuration: `ralphctl settings apply-preset <name>` where `<name>` is one of 21 presets —
294
+ One-shot configuration: `ralphctl settings apply-preset <name>` where `<name>` is one of 26 presets —
260
295
  `standard`, `economic`, `strong-gate`, `fast`, and `frontier` families, each in `mixed` / `claude-only` /
261
- `copilot-only` / `codex-only` variants, plus `opencode-only`.
296
+ `copilot-only` / `codex-only` / `grok-*` variants, plus `opencode-only` in the standard family.
262
297
 
263
298
  ---
264
299
 
@@ -280,7 +315,7 @@ One-shot configuration: `ralphctl settings apply-preset <name>` where `<name>` i
280
315
  first — the crashed attempt is settled as aborted (kept in history) and a fresh attempt opens automatically
281
316
  - **Pair or let it run** — work alongside your AI agent interactively, or let it execute unattended
282
317
  - **Zero-memorization start** — run `ralphctl` with no args for a guided menu
283
- - **Bring your own model** — four backends to choose from, one of which (OpenCode) is vendor-neutral, so the
318
+ - **Bring your own model** — five backends to choose from, one of which (OpenCode) is vendor-neutral, so the
284
319
  harness reaches hosted, aggregated, and local models alike
285
320
 
286
321
  ---
@@ -293,7 +328,7 @@ Configure via the TUI `Settings` view or one-shot CLI commands.
293
328
  `apply-preset`.
294
329
 
295
330
  <details>
296
- <summary>All 21 presets</summary>
331
+ <summary>All 26 presets</summary>
297
332
 
298
333
  ```bash
299
334
  # Standard — flagship model per flow
@@ -302,38 +337,47 @@ ralphctl settings apply-preset claude-only # every flow on Claude Code
302
337
  ralphctl settings apply-preset copilot-only # every flow on GitHub Copilot CLI
303
338
  ralphctl settings apply-preset codex-only # every flow on OpenAI Codex CLI
304
339
  ralphctl settings apply-preset opencode-only # every flow on OpenCode's free tier (no auth)
340
+ ralphctl settings apply-preset grok-only # every flow on Grok Build CLI
305
341
 
306
342
  # Economic — implement starts one tier below flagship; escalation ladder climbs only on plateau
307
343
  ralphctl settings apply-preset mixed-economic
308
344
  ralphctl settings apply-preset claude-economic
309
345
  ralphctl settings apply-preset copilot-economic
310
346
  ralphctl settings apply-preset codex-economic
347
+ ralphctl settings apply-preset grok-economic
311
348
 
312
349
  # Strong-gate — cheap generator, permanently-flagship evaluator gate
313
350
  ralphctl settings apply-preset mixed-strong-gate
314
351
  ralphctl settings apply-preset claude-strong-gate
315
352
  ralphctl settings apply-preset copilot-strong-gate
316
353
  ralphctl settings apply-preset codex-strong-gate
354
+ ralphctl settings apply-preset grok-strong-gate
317
355
 
318
356
  # Fast — cheapest viable tier at low effort; plateau settles rather than escalating (escalateOnPlateau=false)
319
357
  ralphctl settings apply-preset mixed-fast
320
358
  ralphctl settings apply-preset claude-fast
321
359
  ralphctl settings apply-preset copilot-fast
322
360
  ralphctl settings apply-preset codex-fast
361
+ ralphctl settings apply-preset grok-fast
323
362
 
324
- # Frontier — flagship everywhere at max effort
363
+ # Frontier — the vendor's top model on plan/implement at max effort; light flows stay below max.
364
+ # Claude/Codex step up to Fable 5.1 / gpt-6-astra (Fable 5.1 needs a non-ZDR org);
365
+ # Copilot/Grok keep their flagship (Opus 4.8 / grok-4.7).
325
366
  ralphctl settings apply-preset mixed-frontier
326
367
  ralphctl settings apply-preset claude-frontier
327
368
  ralphctl settings apply-preset copilot-frontier
328
369
  ralphctl settings apply-preset codex-frontier
370
+ ralphctl settings apply-preset grok-frontier
329
371
  ```
330
372
 
331
- Twenty-one presets ship, all equally first-class — none is marked default. `opencode-only` sits outside the
332
- five-family grid on purpose: every free-tier model is at the same (zero) price point, so `economic` / `frontier`
333
- variants of it would differ in name only. Applying a
334
- preset stamps the entire `ai` section plus `harness.escalateOnPlateau` in one transaction (`fast` stamps it
335
- `false` so a plateau settles; all others stamp it `true`). On a fresh install the welcome view silently
336
- auto-seeds a preset based on which provider CLIs it detects on `PATH`.
373
+ Twenty-six presets ship, all equally first-class — none is marked default. `opencode-only` stays a
374
+ single preset in the standard family: every free-tier model is at the same (zero) price point, so
375
+ `economic` / `frontier` variants of it would differ in name only. Grok has a variant in every family
376
+ (`grok-4.5` / `grok-4.6` / `grok-4.7`). Mixed presets stay a cross-provider split (Claude author,
377
+ Codex critic) and were not rerouted onto Grok. Applying a preset stamps the entire `ai` section plus
378
+ `harness.escalateOnPlateau` in one transaction (`fast` stamps it `false` so a plateau settles; all
379
+ others stamp it `true`). On a fresh install the welcome view silently auto-seeds a preset based on
380
+ which provider CLIs it detects on `PATH`.
337
381
 
338
382
  </details>
339
383
 
@@ -431,43 +475,45 @@ readiness / create sprint) stay TUI-only by design. The CLI exposes inspection +
431
475
 
432
476
  ### Getting Started
433
477
 
434
- | Command | Description |
435
- | --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
436
- | `ralphctl` | Interactive TUI (primary surface) |
437
- | `ralphctl demo` | Seed a throwaway sandbox project and launch straight into it — zero setup, no provider CLI required to look around (`--no-launch` to seed only, `--home <dir>` to relocate) |
438
- | `ralphctl doctor` | Check environment health |
439
- | `ralphctl settings show` | Print current settings |
440
- | `ralphctl settings set <key> <value>` | Set a single settings key |
441
- | `ralphctl settings apply-preset <name>` | Stamp the entire `ai` section — 21 presets: `standard` / `economic` / `strong-gate` / `fast` / `frontier` families, each in `mixed` / `*-only` variants, plus `opencode-only` |
442
- | `ralphctl completion <shell>` | Print shell tab-completion script |
443
- | `ralphctl agents list` | List bundled + operator agent definitions and the implement role each is bound to |
444
- | `ralphctl skills list` | List bundled + manually-dropped skills — tier, enabled flows, provenance |
478
+ | Command | Description |
479
+ | --------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
480
+ | `ralphctl` | Interactive TUI (primary surface) |
481
+ | `ralphctl demo` | Seed a throwaway sandbox project and launch straight into it — zero setup, no provider CLI required to look around (`--no-launch` to seed only, `--home <dir>` to relocate) |
482
+ | `ralphctl doctor` | Check environment health |
483
+ | `ralphctl settings show` | Print current settings |
484
+ | `ralphctl settings set <key> <value>` | Set a single settings key |
485
+ | `ralphctl settings apply-preset <name>` | Stamp the entire `ai` section — 26 presets: `standard` / `economic` / `strong-gate` / `fast` / `frontier` families, each in `mixed` / `*-only` variants (Grok included), plus `opencode-only` |
486
+ | `ralphctl completion <shell>` | Print shell tab-completion script |
487
+ | `ralphctl agents list` | List bundled + operator agent definitions and the implement role each is bound to |
488
+ | `ralphctl skills list` | List bundled + manually-dropped skills — tier, enabled flows, provenance |
445
489
 
446
490
  ### Project & Sprint Inspection
447
491
 
448
- | Command | Description |
449
- | ------------------------------------- | ----------------------------------------------------------------------------------- |
450
- | `ralphctl project list` | List registered projects |
451
- | `ralphctl project show <id>` | Show one project (incl. repositories) |
452
- | `ralphctl project remove <id>` | Delete a project registration |
453
- | `ralphctl sprint list` | List all sprints |
454
- | `ralphctl sprint show <id>` | Show one sprint (tickets, status, branch) |
455
- | `ralphctl sprint progress <id>` | Sprint progress with blocker diagnostics |
456
- | `ralphctl sprint set-current <id>` | Switch the current sprint pointer |
457
- | `ralphctl ticket add --title <title>` | Add a ticket to the current sprint (`--sprint`, `--description`, `--link` optional) |
458
- | `ralphctl ticket list / show <id>` | Inspect tickets |
459
- | `ralphctl ticket remove <id>` | Remove a ticket from a draft sprint |
460
- | `ralphctl task list / show <id>` | Inspect tasks (planning generates them) |
461
- | `ralphctl task evaluation <id>` | Print the latest evaluator verdict (`evaluation.md`) for the task's last attempt |
462
- | `ralphctl task unblock <id>` | Reset a blocked task to `todo` |
492
+ | Command | Description |
493
+ | ------------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
494
+ | `ralphctl project list` | List registered projects |
495
+ | `ralphctl project show <id>` | Show one project (incl. repositories) |
496
+ | `ralphctl project remove <id>` | Delete a project registration |
497
+ | `ralphctl sprint list` | List all sprints |
498
+ | `ralphctl sprint show <id>` | Show one sprint (tickets, status, branch) |
499
+ | `ralphctl sprint progress <id>` | Sprint progress with blocker diagnostics |
500
+ | `ralphctl sprint set-current <id>` | Switch the current sprint pointer |
501
+ | `ralphctl ticket add --title <title>` | Add a ticket to the current sprint (`--sprint`, `--description`, `--link` optional); does not ask to create a tracker issue |
502
+ | `ralphctl ticket list / show <id>` | Inspect tickets |
503
+ | `ralphctl ticket publish <id>` | Create a tracker issue or post the approved-requirements comment (`--sprint` optional); no second prompt |
504
+ | `ralphctl ticket remove <id>` | Remove a ticket from a draft sprint |
505
+ | `ralphctl task list / show <id>` | Inspect tasks (planning generates them) |
506
+ | `ralphctl task evaluation <id>` | Print the latest evaluator verdict (`evaluation.md`) for the task's last attempt |
507
+ | `ralphctl task unblock <id>` | Reset a blocked task to `todo` |
463
508
 
464
509
  ### Sprint Lifecycle
465
510
 
466
- | Command | Description |
467
- | ------------------------------- | ------------------------------- |
468
- | `ralphctl sprint activate <id>` | Flip a draft sprint to `active` |
469
- | `ralphctl sprint close <id>` | Transition `review` → `done` |
470
- | `ralphctl sprint remove <id>` | Delete a sprint permanently |
511
+ | Command | Description |
512
+ | --------------------------------- | ----------------------------------------------------------------------------------------------------------- |
513
+ | `ralphctl sprint activate <id>` | Flip a draft sprint to `active` |
514
+ | `ralphctl sprint close <id> [-y]` | Transition `review` → `done`; confirms first when any task is still blocked (`-y`/`--yes` skips the prompt) |
515
+ | `ralphctl sprint reopen <id>` | Reopen a closed sprint `done` → `review` so its blocked work is reachable again (idempotent) |
516
+ | `ralphctl sprint remove <id>` | Delete a sprint permanently |
471
517
 
472
518
  ### Export & PR
473
519