ralph-teams 0.1.1

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 (44) hide show
  1. package/README.md +450 -0
  2. package/dist/commands/add-epic.d.ts +2 -0
  3. package/dist/commands/add-epic.d.ts.map +1 -0
  4. package/dist/commands/add-epic.js +90 -0
  5. package/dist/commands/add-epic.js.map +1 -0
  6. package/dist/commands/init.d.ts +6 -0
  7. package/dist/commands/init.d.ts.map +1 -0
  8. package/dist/commands/init.js +163 -0
  9. package/dist/commands/init.js.map +1 -0
  10. package/dist/commands/logs.d.ts +4 -0
  11. package/dist/commands/logs.d.ts.map +1 -0
  12. package/dist/commands/logs.js +75 -0
  13. package/dist/commands/logs.js.map +1 -0
  14. package/dist/commands/reset.d.ts +2 -0
  15. package/dist/commands/reset.d.ts.map +1 -0
  16. package/dist/commands/reset.js +25 -0
  17. package/dist/commands/reset.js.map +1 -0
  18. package/dist/commands/run.d.ts +14 -0
  19. package/dist/commands/run.d.ts.map +1 -0
  20. package/dist/commands/run.js +110 -0
  21. package/dist/commands/run.js.map +1 -0
  22. package/dist/commands/status.d.ts +2 -0
  23. package/dist/commands/status.d.ts.map +1 -0
  24. package/dist/commands/status.js +34 -0
  25. package/dist/commands/status.js.map +1 -0
  26. package/dist/commands/summary.d.ts +2 -0
  27. package/dist/commands/summary.d.ts.map +1 -0
  28. package/dist/commands/summary.js +67 -0
  29. package/dist/commands/summary.js.map +1 -0
  30. package/dist/commands/validate.d.ts +2 -0
  31. package/dist/commands/validate.d.ts.map +1 -0
  32. package/dist/commands/validate.js +210 -0
  33. package/dist/commands/validate.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +74 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/prd-utils.d.ts +33 -0
  39. package/dist/prd-utils.d.ts.map +1 -0
  40. package/dist/prd-utils.js +101 -0
  41. package/dist/prd-utils.js.map +1 -0
  42. package/package.json +28 -0
  43. package/prd.json.example +158 -0
  44. package/ralph.sh +327 -0
package/README.md ADDED
@@ -0,0 +1,450 @@
1
+ # ralph-teams
2
+
3
+ `ralph-teams` is a CLI for running Ralph Teams: a shell-based orchestrator that reads a `prd.json`, loops through epics, and spawns AI coding agent teams to implement work story by story.
4
+
5
+ ## What It Does
6
+
7
+ The system has two layers:
8
+
9
+ - `ralph.sh` acts as the project manager. It validates the PRD, checks epic dependencies, loops through ready epics, records results, and updates progress files.
10
+ - A backend agent session handles one epic at a time using a small team:
11
+ - `team-lead` coordinates the epic
12
+ - `planner` creates the implementation plan
13
+ - `builder` makes changes and runs tests
14
+ - `validator` verifies the result independently
15
+
16
+ Ralph never writes code itself. It only schedules work, tracks results, and updates project state.
17
+
18
+ Current backends:
19
+
20
+ - `claude` via the `claude` CLI and `.claude/agents/*.md`
21
+ - `copilot` via `gh copilot` and `.github/agents/*.agent.md`
22
+
23
+ ## Flow
24
+
25
+ ```mermaid
26
+ flowchart TB
27
+ U[User runs CLI] --> C[run command]
28
+ C --> S[ralph.sh]
29
+ S --> V[Validate PRD and tools]
30
+ V --> E[Read next epic from PRD]
31
+ E --> B{Epic ready}
32
+ B -->|No| K[Skip epic]
33
+ B -->|Yes| TL
34
+
35
+ subgraph CS[Agent session: team agents for one epic]
36
+ direction TB
37
+ TL[Team lead]
38
+ P[Planner creates plan]
39
+ Q{Story already passed}
40
+ BU[Builder implements]
41
+ VA[Validator checks]
42
+ R{Validation passed}
43
+ W[Mark story passed in PRD]
44
+ F[Record failure]
45
+ M{More stories}
46
+ RF[Write result file]
47
+
48
+ TL --> P
49
+ P --> Q
50
+ Q -->|Yes| M
51
+ Q -->|No| BU
52
+ BU --> VA
53
+ VA --> R
54
+ R -->|Yes| W
55
+ R -->|Retry left| BU
56
+ R -->|No retry left| F
57
+ W --> M
58
+ F --> M
59
+ M -->|Yes| Q
60
+ M -->|No| RF
61
+ end
62
+
63
+ K --> ME{More epics}
64
+ RF --> P2[Update epic status]
65
+ P2 --> L[Append progress log]
66
+ L --> ME
67
+ ME -->|Yes| E
68
+ ME -->|No| D[Finish run]
69
+ ```
70
+
71
+ ## Requirements
72
+
73
+ - Node.js 18+
74
+ - `jq` in `PATH`
75
+ - Git available if you want Ralph to switch/create the target branch
76
+
77
+ Backend-specific requirements:
78
+
79
+ - Claude backend:
80
+ - `claude` CLI in `PATH`
81
+ - Copilot backend:
82
+ - `gh` CLI in `PATH`
83
+ - GitHub Copilot CLI available through `gh copilot`
84
+
85
+ Install `jq` on macOS:
86
+
87
+ ```bash
88
+ brew install jq
89
+ ```
90
+
91
+ ## Install
92
+
93
+ Install globally:
94
+
95
+ ```bash
96
+ npm install -g ralph-teams
97
+ ```
98
+
99
+ Or use it locally from this repo:
100
+
101
+ ```bash
102
+ npm install
103
+ npm run build
104
+ npm link
105
+ ```
106
+
107
+ Then verify:
108
+
109
+ ```bash
110
+ ralph-teams --help
111
+ ```
112
+
113
+ ## Quick Start
114
+
115
+ 1. Create a PRD:
116
+
117
+ ```bash
118
+ ralph-teams init
119
+ ```
120
+
121
+ 2. Validate it:
122
+
123
+ ```bash
124
+ ralph-teams validate
125
+ ```
126
+
127
+ 3. Inspect the planned work:
128
+
129
+ ```bash
130
+ ralph-teams summary
131
+ ralph-teams status
132
+ ```
133
+
134
+ 4. Run Ralph:
135
+
136
+ ```bash
137
+ ralph-teams run
138
+ ```
139
+
140
+ 5. Check progress:
141
+
142
+ ```bash
143
+ ralph-teams logs
144
+ ```
145
+
146
+ Run `ralph.sh` directly when you want to choose a backend:
147
+
148
+ ```bash
149
+ ./ralph.sh prd.json --backend claude
150
+ ./ralph.sh prd.json --backend copilot
151
+ ./ralph.sh prd.json --backend copilot --max-epics 1
152
+ ```
153
+
154
+ ## Commands
155
+
156
+ ### `ralph-teams init`
157
+
158
+ Creates a new `prd.json` interactively in the current directory by launching an AI PRD-creator session.
159
+
160
+ ```bash
161
+ ralph-teams init
162
+ ralph-teams init --backend claude
163
+ ralph-teams init --backend copilot
164
+ ```
165
+
166
+ Flow:
167
+
168
+ 1. `init` launches an interactive agent session
169
+ 2. the agent discusses the product with you directly
170
+ 3. the agent asks follow-up questions until the requirements are clear
171
+ 4. the agent generates the full `prd.json` with project metadata, epics, and user stories
172
+ 5. the agent writes `./prd.json`
173
+
174
+ Notes:
175
+
176
+ - `init` is grounded by `prd.json.example`
177
+ - the agent generates epics and user stories automatically
178
+ - the agent should aim for about 5 user stories per epic when the scope supports it
179
+ - `--backend` controls whether the interview/generation uses `claude` or `copilot`
180
+ - the discussion itself is handled by the agent, not by a hardcoded questionnaire in the CLI
181
+
182
+ ### `ralph-teams run [path]`
183
+
184
+ Runs Ralph against a PRD file. Default path is `./prd.json`.
185
+
186
+ ```bash
187
+ ralph-teams run
188
+ ralph-teams run ./my-prd.json
189
+ ```
190
+
191
+ Behavior:
192
+
193
+ - validates that the default backend dependencies, `jq`, and the PRD are available
194
+ - locates bundled `ralph.sh`
195
+ - streams Ralph output directly to the terminal
196
+ - exits with Ralph's exit code
197
+
198
+ Notes:
199
+
200
+ - the CLI currently runs `ralph.sh` with its default backend
201
+ - if you want to force `claude` or `copilot`, run `ralph.sh` directly with `--backend`
202
+
203
+ ### `ralph-teams status [path]`
204
+
205
+ Shows epic and story pass/fail state from a PRD.
206
+
207
+ ```bash
208
+ ralph-teams status
209
+ ralph-teams status ./my-prd.json
210
+ ```
211
+
212
+ ### `ralph-teams logs [--tail N]`
213
+
214
+ Shows `progress.txt` with light colorization.
215
+
216
+ ```bash
217
+ ralph-teams logs
218
+ ralph-teams logs --tail 20
219
+ ```
220
+
221
+ ### `ralph-teams reset <epicId> [path]`
222
+
223
+ Resets one epic to `pending` and sets all of its stories back to `passes: false`.
224
+
225
+ ```bash
226
+ ralph-teams reset EPIC-002
227
+ ```
228
+
229
+ ### `ralph-teams add-epic [path]`
230
+
231
+ Interactively appends a new epic to an existing PRD.
232
+
233
+ ```bash
234
+ ralph-teams add-epic
235
+ ```
236
+
237
+ This command:
238
+
239
+ - creates the next `EPIC-###` id
240
+ - creates globally unique `US-###` ids across the PRD
241
+ - lets you choose dependencies from existing epics
242
+
243
+ ### `ralph-teams validate [path]`
244
+
245
+ Validates PRD structure and dependency integrity.
246
+
247
+ ```bash
248
+ ralph-teams validate
249
+ ```
250
+
251
+ Checks include:
252
+
253
+ - required fields
254
+ - valid epic status values
255
+ - duplicate epic IDs
256
+ - duplicate story IDs
257
+ - unknown `dependsOn` references
258
+ - circular epic dependencies
259
+
260
+ ### `ralph-teams summary [path]`
261
+
262
+ Prints a dependency-oriented overview of epics.
263
+
264
+ ```bash
265
+ ralph-teams summary
266
+ ```
267
+
268
+ Shows:
269
+
270
+ - dependency arrows
271
+ - epic status
272
+ - story pass counts
273
+ - blocked epics
274
+
275
+ ## Backends
276
+
277
+ ### Claude Backend
278
+
279
+ Uses:
280
+
281
+ - `claude` CLI
282
+ - `.claude/agents/`
283
+ - structured JSON streaming from the Claude CLI
284
+
285
+ Example:
286
+
287
+ ```bash
288
+ ./ralph.sh prd.json --backend claude
289
+ ```
290
+
291
+ ### Copilot Backend
292
+
293
+ Uses:
294
+
295
+ - `gh copilot`
296
+ - `.github/agents/`
297
+ - PTY-backed execution so live Copilot output is visible during runs
298
+
299
+ Example:
300
+
301
+ ```bash
302
+ ./ralph.sh prd.json --backend copilot
303
+ ```
304
+
305
+ Notes:
306
+
307
+ - Copilot live output is routed through a PTY wrapper in `ralph.sh`
308
+ - without the PTY wrapper, `gh copilot` may not show incremental output in pipe mode
309
+
310
+ ## PRD Format
311
+
312
+ Example:
313
+
314
+ ```json
315
+ {
316
+ "project": "MyApp",
317
+ "branchName": "ralph/my-feature",
318
+ "description": "Short description of the project",
319
+ "epics": [
320
+ {
321
+ "id": "EPIC-001",
322
+ "title": "Authentication",
323
+ "description": "Add login and session handling",
324
+ "status": "pending",
325
+ "dependsOn": [],
326
+ "userStories": [
327
+ {
328
+ "id": "US-001",
329
+ "title": "Login form",
330
+ "description": "As a user, I want to sign in",
331
+ "acceptanceCriteria": [
332
+ "User can submit email and password",
333
+ "Validation errors are shown clearly"
334
+ ],
335
+ "priority": 1,
336
+ "passes": false
337
+ }
338
+ ]
339
+ }
340
+ ]
341
+ }
342
+ ```
343
+
344
+ Important fields:
345
+
346
+ - `epics[].status`: `pending` | `completed` | `partial` | `failed`
347
+ - `epics[].dependsOn`: epic IDs that must be completed first
348
+ - `userStories[].passes`: whether the story is currently marked as passing
349
+
350
+ Authoring guideline:
351
+
352
+ - aim for about 5 user stories per epic when the scope can be split cleanly
353
+ - use fewer only when the epic is genuinely small or further splitting would be artificial
354
+
355
+ The `init` command uses `prd.json.example` as schema and style guidance when generating a new PRD.
356
+
357
+ ## Files Ralph Produces
358
+
359
+ During a run, Ralph writes:
360
+
361
+ - `progress.txt`: high-level run log
362
+ - `plans/plan-EPIC-xxx.md`: planner output for an epic
363
+ - `results/result-EPIC-xxx.txt`: final pass/partial/fail result per epic
364
+ - `logs/epic-EPIC-xxx-<timestamp>.log`: raw Claude session log
365
+
366
+ Ralph also updates the original `prd.json` in place as story and epic state changes.
367
+
368
+ The team lead agent log for each epic is written to `logs/` regardless of backend.
369
+
370
+ ## Runtime Rules
371
+
372
+ The current execution contract is:
373
+
374
+ - Ralph loops through epics in PRD order
375
+ - blocked epics are skipped until dependencies are complete
376
+ - the backend team processes one epic per session
377
+ - stories run sequentially inside that epic
378
+ - already-passed stories are skipped
379
+ - each story gets at most two build/validate cycles
380
+ - the validator checks output independently from the builder's reasoning
381
+
382
+ ## Troubleshooting
383
+
384
+ ### `zsh: command not found: ralph-teams`
385
+
386
+ Install or relink the package:
387
+
388
+ ```bash
389
+ npm install -g ralph-teams
390
+ ```
391
+
392
+ Or from this repo:
393
+
394
+ ```bash
395
+ npm link
396
+ ```
397
+
398
+ ### `Error: 'claude' CLI not found`
399
+
400
+ Install Claude Code and ensure `claude` is on your `PATH`.
401
+
402
+ ### `Error: 'gh' CLI not found`
403
+
404
+ Install GitHub CLI and ensure `gh` is on your `PATH`.
405
+
406
+ ### `Error: GitHub Copilot CLI not available`
407
+
408
+ Make sure `gh copilot` is installed and working:
409
+
410
+ ```bash
411
+ gh copilot -- --version
412
+ ```
413
+
414
+ ### Copilot backend runs but shows no live output
415
+
416
+ This repo runs Copilot through a PTY wrapper in `ralph.sh` because plain pipe mode does not reliably stream visible output from `gh copilot`.
417
+
418
+ If output still looks stuck, test the backend directly:
419
+
420
+ ```bash
421
+ ./ralph.sh prd.json --backend copilot --max-epics 1
422
+ ```
423
+
424
+ If that still does not stream, the issue is likely in the local `gh copilot` environment rather than the CLI wrapper.
425
+
426
+ Install Claude Code and ensure `claude` is on your `PATH`.
427
+
428
+ ### `Error: 'jq' not found`
429
+
430
+ Install `jq`:
431
+
432
+ ```bash
433
+ brew install jq
434
+ ```
435
+
436
+ ### Ralph cannot switch branches
437
+
438
+ `ralph.sh` refuses to switch branches if the worktree is dirty. Commit or stash your changes first.
439
+
440
+ ## Development
441
+
442
+ Useful commands in this repo:
443
+
444
+ ```bash
445
+ npm run build
446
+ npm run typecheck
447
+ npm link
448
+ ```
449
+
450
+ The packaged CLI entrypoint is `dist/index.js`, and the runtime orchestrator is `ralph.sh`.
@@ -0,0 +1,2 @@
1
+ export declare function addEpicCommand(prdPath: string): Promise<void>;
2
+ //# sourceMappingURL=add-epic.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-epic.d.ts","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"AAGA,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA6FnE"}
@@ -0,0 +1,90 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.addEpicCommand = addEpicCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const prd_utils_1 = require("../prd-utils");
9
+ async function addEpicCommand(prdPath) {
10
+ const { prd, resolved } = (0, prd_utils_1.loadPrd)(prdPath);
11
+ const rl = (0, prd_utils_1.createRl)();
12
+ // Auto-generate next epic ID
13
+ let maxEpicNum = 0;
14
+ for (const epic of prd.epics) {
15
+ const match = epic.id.match(/^EPIC-(\d+)$/);
16
+ if (match) {
17
+ const num = parseInt(match[1], 10);
18
+ if (num > maxEpicNum)
19
+ maxEpicNum = num;
20
+ }
21
+ }
22
+ const epicId = `EPIC-${String(maxEpicNum + 1).padStart(3, '0')}`;
23
+ // Auto-generate next story ID (scan ALL epics globally)
24
+ let maxStoryNum = 0;
25
+ for (const epic of prd.epics) {
26
+ for (const story of epic.userStories) {
27
+ const match = story.id.match(/^US-(\d+)$/);
28
+ if (match) {
29
+ const num = parseInt(match[1], 10);
30
+ if (num > maxStoryNum)
31
+ maxStoryNum = num;
32
+ }
33
+ }
34
+ }
35
+ console.log(chalk_1.default.bold(`\nAdding epic ${epicId}\n`));
36
+ const epicTitle = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('Epic title: '));
37
+ const epicDescription = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('Epic description: '));
38
+ // Show existing epics for dependency selection
39
+ let dependsOn = [];
40
+ if (prd.epics.length > 0) {
41
+ console.log(chalk_1.default.dim('\nExisting epics:'));
42
+ for (const e of prd.epics) {
43
+ console.log(chalk_1.default.dim(` ${e.id}: ${e.title}`));
44
+ }
45
+ const depsInput = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('\nDependencies (comma-separated epic IDs, or Enter for none): '));
46
+ if (depsInput.trim() !== '') {
47
+ dependsOn = depsInput.split(',').map(d => d.trim()).filter(d => d !== '');
48
+ }
49
+ }
50
+ // Collect user stories
51
+ const userStories = [];
52
+ let storyIndex = maxStoryNum + 1;
53
+ console.log(chalk_1.default.bold('\nAdd user stories to this epic.\n'));
54
+ console.log(chalk_1.default.dim('Target about 5 user stories for an epic when the scope supports it.\n'));
55
+ while (true) {
56
+ const storyId = `US-${String(storyIndex).padStart(3, '0')}`;
57
+ console.log(chalk_1.default.bold(`Story ${storyId}:`));
58
+ const storyTitle = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan(' Title: '));
59
+ const storyDescription = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan(' Description: '));
60
+ const criteria = await (0, prd_utils_1.askMultiline)(rl, chalk_1.default.cyan(' Acceptance criteria'));
61
+ userStories.push({
62
+ id: storyId,
63
+ title: storyTitle,
64
+ description: storyDescription,
65
+ acceptanceCriteria: criteria,
66
+ priority: userStories.length + 1,
67
+ passes: false,
68
+ });
69
+ storyIndex++;
70
+ const another = await (0, prd_utils_1.ask)(rl, chalk_1.default.cyan('\nAdd another story? (y/n): '));
71
+ if (another.toLowerCase() !== 'y')
72
+ break;
73
+ console.log('');
74
+ }
75
+ const newEpic = {
76
+ id: epicId,
77
+ title: epicTitle,
78
+ description: epicDescription,
79
+ status: 'pending',
80
+ dependsOn,
81
+ userStories,
82
+ };
83
+ prd.epics.push(newEpic);
84
+ (0, prd_utils_1.savePrd)(resolved, prd);
85
+ rl.close();
86
+ console.log(chalk_1.default.green(`\nAdded ${epicId}: ${epicTitle}`));
87
+ console.log(chalk_1.default.dim(` ${userStories.length} stories added`));
88
+ console.log(chalk_1.default.dim(` Saved to ${resolved}\n`));
89
+ }
90
+ //# sourceMappingURL=add-epic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-epic.js","sourceRoot":"","sources":["../../src/commands/add-epic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface InitOptions {
2
+ backend?: string;
3
+ }
4
+ export declare function initCommand(options?: InitOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AA8ED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD1E"}