@ritualai/cli 0.25.0 → 0.36.9

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 (61) hide show
  1. package/dist/commands/build.js +89 -0
  2. package/dist/commands/build.js.map +1 -0
  3. package/dist/commands/init.js +93 -109
  4. package/dist/commands/init.js.map +1 -1
  5. package/dist/commands/uninstall.js +6 -1
  6. package/dist/commands/uninstall.js.map +1 -1
  7. package/dist/index.js +18 -0
  8. package/dist/index.js.map +1 -1
  9. package/dist/lib/agents/configure-mcp.js +63 -0
  10. package/dist/lib/agents/configure-mcp.js.map +1 -1
  11. package/dist/lib/agents/launch.js +70 -0
  12. package/dist/lib/agents/launch.js.map +1 -0
  13. package/dist/lib/agents/providers.js +8 -2
  14. package/dist/lib/agents/providers.js.map +1 -1
  15. package/dist/lib/final-cta-box.js +22 -10
  16. package/dist/lib/final-cta-box.js.map +1 -1
  17. package/dist/lib/help-style.js +65 -0
  18. package/dist/lib/help-style.js.map +1 -0
  19. package/dist/lib/onboarding-state.js +9 -8
  20. package/dist/lib/onboarding-state.js.map +1 -1
  21. package/dist/lib/uninstall-plan.js +18 -1
  22. package/dist/lib/uninstall-plan.js.map +1 -1
  23. package/dist/lib/workspace-explainer.js +42 -111
  24. package/dist/lib/workspace-explainer.js.map +1 -1
  25. package/dist/lib/workspace-flow.js +4 -1
  26. package/dist/lib/workspace-flow.js.map +1 -1
  27. package/package.json +1 -1
  28. package/skills/claude-code/ritual/.ritual-bundle.json +3 -2
  29. package/skills/claude-code/ritual/SKILL.md +11 -0
  30. package/skills/claude-code/ritual/references/build-flow.md +474 -414
  31. package/skills/claude-code/ritual/references/cli-output-contract.md +90 -34
  32. package/skills/claude-code/ritual/references/lite-flow.md +484 -421
  33. package/skills/codex/ritual/.ritual-bundle.json +3 -2
  34. package/skills/codex/ritual/SKILL.md +11 -0
  35. package/skills/codex/ritual/references/build-flow.md +474 -414
  36. package/skills/codex/ritual/references/cli-output-contract.md +90 -34
  37. package/skills/codex/ritual/references/lite-flow.md +484 -421
  38. package/skills/cursor/ritual/.ritual-bundle.json +3 -2
  39. package/skills/cursor/ritual/SKILL.md +11 -0
  40. package/skills/cursor/ritual/references/build-flow.md +474 -414
  41. package/skills/cursor/ritual/references/cli-output-contract.md +90 -34
  42. package/skills/cursor/ritual/references/lite-flow.md +484 -421
  43. package/skills/gemini/ritual/.ritual-bundle.json +3 -2
  44. package/skills/gemini/ritual/SKILL.md +11 -0
  45. package/skills/gemini/ritual/references/build-flow.md +474 -414
  46. package/skills/gemini/ritual/references/cli-output-contract.md +90 -34
  47. package/skills/gemini/ritual/references/lite-flow.md +484 -421
  48. package/skills/kiro/ritual/.ritual-bundle.json +3 -2
  49. package/skills/kiro/ritual/SKILL.md +11 -0
  50. package/skills/kiro/ritual/references/build-flow.md +474 -414
  51. package/skills/kiro/ritual/references/cli-output-contract.md +90 -34
  52. package/skills/kiro/ritual/references/lite-flow.md +484 -421
  53. package/skills/vscode/ritual/.ritual-bundle.json +3 -2
  54. package/skills/vscode/ritual/SKILL.md +11 -0
  55. package/skills/vscode/ritual/references/build-flow.md +474 -414
  56. package/skills/vscode/ritual/references/cli-output-contract.md +90 -34
  57. package/skills/vscode/ritual/references/lite-flow.md +484 -421
  58. package/dist/lib/build-flow-explainer.js +0 -226
  59. package/dist/lib/build-flow-explainer.js.map +0 -1
  60. package/dist/lib/persona-picker.js +0 -171
  61. package/dist/lib/persona-picker.js.map +0 -1
@@ -134,19 +134,19 @@ When in doubt, prefer one blank line over none. The cost of a tiny gap is unnoti
134
134
 
135
135
  **Build progress anchor — load-bearing (never omit, render per surface):** Every TOP-LEVEL user-facing message in `/ritual build` and `/ritual resume` MUST begin with a progress anchor before any other content. The anchor is the user's only "where am I in the flow" signal; dropping it silently is worse than printing it redundantly. The agent was historically inferring the rail from examples and squeezing it out under any pressure — this rule makes it explicit, with the exact rendering chosen per surface so the anchor doesn't wrap badly on narrow chat or duplicate a persistent UI stepper.
136
136
 
137
- **Surface-aware rendering** — the canonical five stages stay constant; only the visual changes:
137
+ **Surface-aware rendering** — the canonical six stages stay constant; only the visual changes:
138
138
 
139
139
  | Surface | Rendering | When to use |
140
140
  |---|---|---|
141
- | **CLI / terminal** (current default) | Full two-line rail. `Ritual build` on line 1, `● Scope ○ Discovery ○ Recommendations ○ Build brief ○ Implementation (Your agent)` on line 2. | Terminal scrollback has no persistent UI — the rail IS the anchor. |
142
- | **Mobile chat / narrow chat** | Compact one-line chip. `Ritual build · 1/5 Scope`. Optionally add a second line: `Done: Scope · Next: Recommendations`. | Five-stage rail wraps and looks noisy inside chat bubbles. |
141
+ | **CLI / terminal** (current default) | Full two-line rail. `Ritual build` on line 1, `● Job ○ Scope ○ Discovery ○ Recommendations ○ Build brief ○ Implementation (Your agent)` on line 2. | Terminal scrollback has no persistent UI — the rail IS the anchor. |
142
+ | **Mobile chat / narrow chat** | Compact one-line chip. `Ritual build · 2/6 Scope`. Optionally add a second line: `Done: Job, Scope · Next: Recommendations`. | Six-stage rail wraps and looks noisy inside chat bubbles. |
143
143
  | **Rich app with persistent stepper** | Single-line stage label. `Scope` (or `Phase: Scope`). The app's pinned stepper above the conversation is the primary anchor; messages just need the current label. At phase transitions, resume points, and major decision gates, include the compact mobile-style chip even in rich-app surface for transcript portability. | The persistent UI carries the anchor; redundant chrome in every bubble is noise. |
144
144
 
145
145
  **How the agent picks the surface:**
146
146
 
147
147
  - Default to **CLI / terminal** rendering. This SKILL exists primarily to drive CLI surfaces (Claude Code, Cursor, Codex, etc. in their built-in terminals).
148
148
  - If the host signals a non-terminal surface via context (mobile-app chat embedding, web-app chat UI, etc.), drop to the compact chip.
149
- - The rule is: **progress anchor is mandatory; exact visual rendering is surface-specific.** Do NOT force the full five-stage rail when it will wrap.
149
+ - The rule is: **progress anchor is mandatory; exact visual rendering is surface-specific.** Do NOT force the full six-stage rail when it will wrap.
150
150
 
151
151
  **Applies to:**
152
152
 
@@ -173,74 +173,106 @@ Soft rule of thumb: if the message is a top-level "here's where you are + what t
173
173
  Discovery — area 2 of 4: {matter.name}
174
174
  ```
175
175
 
176
- Or for per-recommendation review in Step 9:
176
+ Or for a single-recommendation drill view in Step 9:
177
177
 
178
178
  ```text
179
- Recommendations 3 of 7: {recommendation title}
179
+ Recommendations · R{N} {recommendation title}
180
180
  ```
181
181
 
182
182
  The chip's job is "you're still in this phase, this is which item of the series" — orientation without the full chrome.
183
183
 
184
+ **Forward-pointing CTAs (load-bearing):** every advancing option at a `[USER PAUSE]` gate must name its DESTINATION in user language — never a bare "to continue" / "to proceed". Two accepted shapes:
185
+
186
+ - inline parenthetical on the action line: `proceed (generate the {Deliverable})`
187
+ - spelled-out reply line: ``Reply `proceed` to frame the problem (sub-problems + problem statement), or …``
188
+
189
+ Canonical destinations (use these; don't improvise):
190
+
191
+ | Gate | Advancing token | Destination phrase |
192
+ |---|---|---|
193
+ | Job gate (0.7) | `proceed` | frame the problem (sub-problems + problem statement) |
194
+ | Problem frame (5) | `use` | review discovery questions |
195
+ | Suggested-12 landing (7.3.1) | `proceed` | run discovery with these 12 (commits the set; run confirmation follows) |
196
+ | Expert-walk summary (7.4) | `commit` | run discovery → recommendations (~a few minutes) |
197
+ | Run gate (8) | `run` | source answers → generate recommendations |
198
+ | Recommendations (9/9.1) | `proceed` | generate the {Deliverable} (the job's deliverable name from the rail) |
199
+ | Audit gate (9.6.1) | `proceed` | skip the audit and generate the {Deliverable} |
200
+ | Brief gate (10d) | `go` | implement in your agent |
201
+ | Plan handoff (11.0.5) | `ready` | generate the implementation plan |
202
+
203
+ `{Deliverable}` = the rail's stage-5 name (deliverable-named rail). The destination phrase, the rail's next stage, and what actually happens next must tell ONE story.
204
+
205
+ **Universal advance alias:** `proceed` is silently accepted at EVERY advancing gate, mapped to that gate's primary token (`use`, `run`, `commit`, `go`, `ready`, …) — the user only ever needs one word. It is NOT displayed as an extra option. Exception already specified elsewhere: at the discovery pick gate an ambiguous `proceed` means **accept shortlist**, never accept-all. `next` is NOT a universal alias — it has gate-local meaning in the discovery Area walk (expert mode).
206
+
184
207
  **Canonical stage table (single source of truth):**
185
208
 
186
209
  | Stage | Active during… |
187
210
  |--------------------|--------------------------------------------------------------------------------|
188
- | `Scope` | Silent code recon, problem frame + sub-problem generation/selection, until scope is locked |
211
+ | `Job` | The Step 0.7 Job gate server-side classification of the user's raw ask (`classify_work_item`) + the user's confirmation of the job to be done; active until the user proceeds |
212
+ | `Scope` | Problem frame + sub-problem generation/selection, until scope is locked; the silent grounding recon runs at the lock→create boundary |
189
213
  | `Discovery` | Exploration creation, discovery questions, answers, question picking, answer review |
190
214
  | `Recommendations` | Recommendation generation + review |
191
- | `Build brief` | Requirements + build brief generation/review |
192
- | `Implementation (Your agent)` | Coding, branch/PR work, `sync_implementation` |
215
+ | `{Deliverable}` | **Named for the job's deliverable** — the `deliverableTemplate` returned at the Job gate (e.g. `Launch Brief`, `PRD`, `Service Build Brief`; `Build brief` for the generic `build-feature`). Covers requirements + deliverable generation/review. |
216
+ | `Implementation (Your agent)` | **Development-function jobs ONLY.** Coding, branch/PR work, `sync_implementation`. Non-development jobs (e.g. `create-launch-brief`) OMIT this stage — their rail has FIVE stages and ends at the deliverable. |
193
217
 
194
- The FIRST rail stage is `Scope`. **There is no `Context` stage** — workspace pick, resume/start check, template resolution, and **code recon** all happen as **silent plumbing inside Scope**, never as a visible rail stage. Recon runs but is not surfaced to the user by default (see `references/build-flow.md` § Step 3); only narrate repo inspection if the user explicitly asks. Naming hazard: `/ritual recon` was retired as a command surface, so don't reuse `Recon`/`Context` at the rail level.
218
+ The FIRST rail stage is `Job` — the Step 0.7 Job gate (classification + confirmation of the job to be done; on resume paths the gate is skipped and the rail opens with `Job` already `✓`). **There is no `Context` stage** — workspace pick, resume/start check, and template resolution all happen as **silent plumbing inside Scope**, never as a visible rail stage. The grounding **code recon** runs silently AFTER the frame locks (build-flow § Step 5.7) and is not surfaced by default; only narrate repo inspection if the user explicitly asks. Naming hazard: `/ritual recon` was retired as a command surface, so don't reuse `Recon`/`Context` at the rail level.
195
219
 
196
220
  **Canonical ordering (only the active marker moves):**
197
221
 
198
222
  ```
199
- Scope → Discovery → Recommendations → Build brief → Implementation (Your agent)
223
+ Job → Scope → Discovery → Recommendations → {Deliverable} → Implementation (Your agent — development jobs only)
200
224
  ```
201
225
 
226
+ The rail is **deliverable-named and function-shaped** (2026-06-11): stage 5 carries the job's own deliverable name, and stage 6 exists only for development-function jobs. The timeline is the promise — a Launch Brief job promises a Launch Brief, not a code handoff. Before the job is confirmed (the Job gate itself), render the PROPOSED classification's deliverable; a correction updates the rail on the next render.
227
+
202
228
  - Completed stages: `✓`
203
229
  - Current stage: `●`
204
230
  - Future stages: `○`
205
231
 
206
- **Build rail spec (`progressHeader(stage)`) — CLI / terminal rendering:**
232
+ **Build rail spec (`progressHeader(stage, jtbd)`) — CLI / terminal rendering.** `{Deliverable}` below = the job's `deliverableTemplate`; the `Implementation` stage renders only for development-function jobs.
233
+
234
+ Development job (e.g. `build-backend-service` → `Service Build Brief`; generic `build-feature` → `Build brief`):
207
235
 
208
236
  ```text
209
- progressHeader("scope") =>
237
+ progressHeader("job") =>
210
238
  Ritual build
211
- ● Scope ○ Discovery ○ Recommendations ○ Build brief ○ Implementation (Your agent)
239
+ Job ○ Scope ○ Discovery ○ Recommendations ○ {Deliverable} ○ Implementation (Your agent)
212
240
 
213
- progressHeader("discovery") =>
241
+ progressHeader("deliverable") =>
214
242
  Ritual build
215
- ✓ Scope Discovery Recommendations Build brief ○ Implementation (Your agent)
243
+ Job ✓ Scope Discovery Recommendations {Deliverable} ○ Implementation (Your agent)
216
244
 
217
- progressHeader("recommendations") =>
245
+ progressHeader("implementation") =>
218
246
  Ritual build
219
- ✓ Scope ✓ Discovery Recommendations Build brief Implementation (Your agent)
247
+ Job ✓ Scope ✓ Discovery Recommendations {Deliverable} Implementation (Your agent)
248
+ ```
220
249
 
221
- progressHeader("build-brief") =>
222
- Ritual build
223
- ✓ Scope ✓ Discovery ✓ Recommendations ● Build brief ○ Implementation (Your agent)
250
+ Non-development job (e.g. `create-launch-brief` → `Launch Brief`) — FIVE stages, no Implementation:
224
251
 
225
- progressHeader("implementation") =>
252
+ ```text
253
+ progressHeader("deliverable") =>
226
254
  Ritual build
227
- ✓ Scope ✓ Discovery ✓ Recommendations ✓ Build brief Implementation (Your agent)
255
+ Job ✓ Scope ✓ Discovery ✓ Recommendations ● Launch Brief
228
256
  ```
229
257
 
258
+ Intermediate stages (scope/discovery/recommendations) advance the markers identically in both shapes.
259
+
230
260
  **Compact chip spec — mobile chat / narrow chat:**
231
261
 
232
262
  ```text
233
- compactChip("scope") => Ritual build · 1/5 Scope
234
- compactChip("discovery") => Ritual build · 2/5 Discovery
235
- compactChip("recommendations")=> Ritual build · 3/5 Recommendations
236
- compactChip("build-brief") => Ritual build · 4/5 Build brief
237
- compactChip("implementation")=> Ritual build · 5/5 Implementation (Your agent)
263
+ development job (N/6): non-development job (N/5):
264
+ compactChip("job") => Ritual build · 1/6 Job | 1/5 Job
265
+ compactChip("scope") => Ritual build · 2/6 Scope | 2/5 Scope
266
+ compactChip("discovery") => Ritual build · 3/6 Discovery | 3/5 Discovery
267
+ compactChip("recommendations")=> Ritual build · 4/6 Recommendations | 4/5 Recommendations
268
+ compactChip("deliverable") => Ritual build · 5/6 {Deliverable} | 5/5 {Deliverable}
269
+ compactChip("implementation") => Ritual build · 6/6 Implementation (Your agent) (dev only)
238
270
  ```
239
271
 
240
272
  Optional second line at phase transitions, resumes, and decision gates:
241
273
 
242
274
  ```text
243
- Done: Scope · Next: Recommendations
275
+ Done: Job, Scope · Next: Recommendations
244
276
  ```
245
277
 
246
278
  **Rich-app spec — persistent stepper:**
@@ -274,16 +306,40 @@ When you need to wait for async server work (requirements generation, build brie
274
306
 
275
307
  This rule applies to: Step 9.5 (`get_requirement_set_status`), Step 10b (`get_build_brief_status` on timeout), and any future status-poll surface.
276
308
 
309
+ <!-- skill-options:no-gate-change: pulse render gains a delta + next-lift line; no decision gate, option, or pause is added or changed -->
310
+
277
311
  #### Inline pulses — surface reasoning readiness climbing as context debt drops
278
312
 
279
313
  After **Steps 3, 5, 7.4, 8, 9, and 10**, emit a one-line **context pulse** showing how the score moved. This is the visible encouragement loop — the user watches **reasoning readiness** climb (or equivalently, **context debt** drop) with each step instead of just feeling like the agent is asking for more inputs.
280
314
 
281
315
  The pulse rule and visual specs live in the [§ /ritual context-pulse](#ritual-context-pulse) section below — see *Step CP5 — visual modes*. TL;DR:
282
316
 
283
- - **Compact (single line)** is the default. Use the full capitalized labels `Reasoning Readiness` and `Context Debt` NOT lowercase `readiness` / `debt`:
284
- - `Pulse: Reasoning Readiness 72% · Context Debt 28% · +24% (decision resolution)`
285
- - **Full (with bars + Reasoning Readiness / Context Debt / Context Surface labels)** when crossing a state-tier boundary, jumping ≥15%, or regressing
286
- - The pulse line goes BEFORE the existing "next step" prompt for that step — it's an additive line, not a replacement
317
+ The pulse has TWO parts, and they sit in DIFFERENT places — the score at the top of the message (status: where you are), and the **lift bridge** immediately above the action line (motivation: why your next move matters).
318
+
319
+ ```text
320
+ Pulse: Reasoning Readiness 58% · Context Debt 42% · +3% (scope locked)
321
+
322
+ {…the step's content…}
323
+
324
+ Most of the gap left is unsettled design decisions — that's exactly what
325
+ the next step, discovery, resolves.
326
+ Reply proceed (run discovery → recommendations) · expert · pause
327
+ ```
328
+
329
+ - **Score line** (top of the message). Full capitalized labels — `Reasoning Readiness` and `Context Debt`, NOT lowercase. The **`· +N%` delta is MANDATORY** on every pulse after the first (the first pulse has no prior, so it shows just the baseline + reason). The delta is the visible-progress signal — never drop it. Show `+0%` honestly if a step didn't move the score, and `−N%` on a regression (rare; render full then).
330
+ - **Lift bridge** (ONE sentence, immediately ABOVE the action/CTA line — NOT under the score). This is the load-bearing piece: it turns the score into a reason to proceed. Three requirements:
331
+ 1. **Plain language for the gap — NEVER the internal dimension name.** The lowest dimension from `score_context_pulse`'s breakdown picks the message, but the user sees what it MEANS, not the label:
332
+ | lowest dimension (internal) | what the user reads (plain) |
333
+ |---|---|
334
+ | `decisionResolution` | the design decisions aren't settled yet |
335
+ | `repoGrounding` | the plan isn't grounded in your code yet |
336
+ | `assumptionSafety` | some assumptions are still unverified |
337
+ | `featureClarity` | what exactly to build is still fuzzy |
338
+ 2. **Name the NEXT STEP as the resolver, explicitly.** The bridge must make clear that the action the user is about to take is what closes the gap — `that's exactly what the next step, discovery, resolves` / `code recon next grounds it` / `the build brief locks those down`. The bridge and the forward-CTA below it name the SAME move — one story.
339
+ 3. **Terse + declarative** — no `now let me help you improve this` assistant/affect register (`cli-experience-tenets.md`).
340
+ On the LAST scoreable step (Step 10, implementation-ready), there's no further lift — the bridge becomes the readiness statement: `The brief is your build path — implement when ready.`
341
+ - **Full (with bars + Reasoning Readiness / Context Debt / Context Surface labels)** when crossing a state-tier boundary, jumping ≥15%, or regressing. Full mode keeps the same `+N%` delta on the score line and the same lift bridge above the CTA.
342
+ - The score line goes near the top of the step's message; the lift bridge goes right before the action line. Both are additive, not replacements.
287
343
  - Prefer `mcp__ritual__score_context_pulse` (one canonical server-side call, persisted for trend reporting); fall back to deterministic agent-side counts only if the tool errors. No LLM call in the hot path either way.
288
344
 
289
345
  **Why full labels (load-bearing):** Users read `28% debt` as a vague accounting number. They read `Context Debt 28%` as a named concept with weight — the same name they'd see in `/ritual context-pulse`'s full view, in the score breakdown, in the docs. Consistency across compact and full forms means the user doesn't have to translate.
@@ -335,7 +391,7 @@ For no-arg `/ritual build` with zero explorations, do not frame `/ritual context
335
391
 
336
392
  ```text
337
393
  Ritual build
338
- ● Scope ○ Discovery ○ Recommendations ○ Build brief ○ Implementation (Your agent)
394
+ ✓ Job ● Scope ○ Discovery ○ Recommendations ○ Build brief ○ Implementation (Your agent)
339
395
 
340
396
  Using workspace: {workspaceName}.
341
397