@mthanhlm/autodev 0.1.1 → 0.2.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 (51) hide show
  1. package/PUBLISH.md +1 -1
  2. package/README.md +21 -6
  3. package/agents/autodev-codebase-domain.md +16 -0
  4. package/agents/autodev-codebase-quality.md +16 -0
  5. package/agents/autodev-codebase-runtime.md +16 -0
  6. package/agents/autodev-codebase-structure.md +16 -0
  7. package/agents/autodev-review-integration.md +21 -0
  8. package/agents/autodev-review-polish.md +21 -0
  9. package/agents/autodev-review-quality.md +21 -0
  10. package/agents/autodev-review-security.md +21 -0
  11. package/autodev/bin/autodev-tools.cjs +406 -90
  12. package/autodev/templates/codebase/domain.md +13 -0
  13. package/autodev/templates/codebase/quality.md +13 -0
  14. package/autodev/templates/codebase/runtime.md +13 -0
  15. package/autodev/templates/codebase/structure.md +13 -0
  16. package/autodev/templates/codebase/summary.md +13 -0
  17. package/autodev/templates/config.json +6 -1
  18. package/autodev/templates/plan.md +4 -0
  19. package/autodev/templates/project-state.md +11 -0
  20. package/autodev/templates/project.md +3 -0
  21. package/autodev/templates/requirements.md +2 -0
  22. package/autodev/templates/review.md +24 -0
  23. package/autodev/templates/roadmap.md +3 -3
  24. package/autodev/templates/state.md +5 -4
  25. package/autodev/templates/summary.md +3 -1
  26. package/autodev/templates/track-state.md +12 -0
  27. package/autodev/templates/track.md +17 -0
  28. package/autodev/templates/uat.md +5 -2
  29. package/autodev/workflows/autodev.md +62 -0
  30. package/autodev/workflows/cleanup.md +45 -0
  31. package/autodev/workflows/execute-phase.md +15 -6
  32. package/autodev/workflows/explore-codebase.md +57 -0
  33. package/autodev/workflows/help.md +45 -12
  34. package/autodev/workflows/new-project.md +41 -14
  35. package/autodev/workflows/plan-phase.md +19 -8
  36. package/autodev/workflows/progress.md +3 -1
  37. package/autodev/workflows/review-phase.md +59 -0
  38. package/autodev/workflows/verify-work.md +17 -7
  39. package/bin/install.js +61 -16
  40. package/commands/autodev/cleanup.md +23 -0
  41. package/commands/autodev/execute-phase.md +2 -2
  42. package/commands/autodev/explore-codebase.md +33 -0
  43. package/commands/autodev/help.md +1 -1
  44. package/commands/autodev/index.md +35 -0
  45. package/commands/autodev/new-project.md +6 -4
  46. package/commands/autodev/plan-phase.md +2 -2
  47. package/commands/autodev/progress.md +1 -1
  48. package/commands/autodev/review-phase.md +29 -0
  49. package/commands/autodev/verify-work.md +2 -2
  50. package/hooks/autodev-session-state.sh +1 -1
  51. package/package.json +5 -2
@@ -1,5 +1,5 @@
1
1
  <purpose>
2
- Create one practical phase plan. Keep it concrete, small enough to execute, and free of git-write steps.
2
+ Create one practical phase plan for the active track. Keep it concrete, small enough to execute, and free of git-write steps.
3
3
  </purpose>
4
4
 
5
5
  <rules>
@@ -16,15 +16,18 @@ Create one practical phase plan. Keep it concrete, small enough to execute, and
16
16
  node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init plan-phase "$ARGUMENTS"
17
17
  ```
18
18
 
19
- 2. If `.autodev/ROADMAP.md` does not exist, stop and tell the user to run `/autodev-new-project`.
19
+ 2. If there is no active track or no roadmap for it, stop and tell the user to run `/autodev`.
20
20
 
21
21
  3. If no phase is found, tell the user all phases already have plans and show `/autodev-progress`.
22
22
 
23
23
  4. Read:
24
24
  - `.autodev/PROJECT.md`
25
- - `.autodev/REQUIREMENTS.md`
26
- - `.autodev/ROADMAP.md`
27
25
  - `.autodev/STATE.md`
26
+ - `.autodev/codebase/summary.md` if it exists
27
+ - `.autodev/tracks/<active-track>/TRACK.md`
28
+ - `.autodev/tracks/<active-track>/REQUIREMENTS.md`
29
+ - `.autodev/tracks/<active-track>/ROADMAP.md`
30
+ - `.autodev/tracks/<active-track>/STATE.md`
28
31
  - the target phase section
29
32
  - any existing code relevant to this phase
30
33
 
@@ -33,10 +36,11 @@ node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init plan-phase "$ARGUMENTS"
33
36
  6. Create the phase directory if missing:
34
37
 
35
38
  ```text
36
- .autodev/phases/NN-name/
39
+ .autodev/tracks/<active-track>/phases/NN-type-name/
37
40
  ```
38
41
 
39
42
  7. Write or replace `NN-PLAN.md` from the template. The plan must include:
43
+ - phase type
40
44
  - goal
41
45
  - concrete implementation steps
42
46
  - likely files to touch
@@ -44,11 +48,18 @@ node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init plan-phase "$ARGUMENTS"
44
48
  - manual checks
45
49
  - explicit git read-only reminder
46
50
 
47
- 8. Update `.autodev/STATE.md` so it points to:
51
+ 8. Update the active track `STATE.md` so it points to:
48
52
  - `Current Phase: N`
53
+ - `Current Phase Type: <type>`
49
54
  - `Current Step: planned`
50
- - `Next Command: /autodev-execute-phase N`
55
+ - `Next Command: /autodev`
51
56
  - current ISO timestamp
52
57
 
53
- 9. End with a short summary and direct the user to `/autodev-execute-phase N`.
58
+ 9. Update `.autodev/STATE.md` so it points to:
59
+ - `Active Track: <slug>`
60
+ - `Current Step: planned`
61
+ - `Next Command: /autodev`
62
+ - current ISO timestamp
63
+
64
+ 10. End with a short summary and direct the user to `/autodev`. Mention `/autodev-execute-phase N` as the manual shortcut.
54
65
  </process>
@@ -11,5 +11,7 @@ node "$HOME/.claude/autodev/bin/autodev-tools.cjs" progress table
11
11
 
12
12
  2. Output the table directly.
13
13
 
14
- 3. If a project exists, add one short line after the table with the next recommended command.
14
+ 3. If a project exists, add one short line after the table with:
15
+ - `/autodev` as the default next command
16
+ - the routed manual shortcut from the table when useful
15
17
  </process>
@@ -0,0 +1,59 @@
1
+ <purpose>
2
+ Run the automatic review bundle after execution so the user sees code quality, security, integration, and polish risks before manual verification.
3
+ </purpose>
4
+
5
+ <rules>
6
+ - Always spawn four review agents in parallel.
7
+ - Review findings should be concrete and evidence-based.
8
+ - Do not edit repository code in this step unless the user explicitly asks for fixes.
9
+ - Write one consolidated review artifact for the phase.
10
+ </rules>
11
+
12
+ <process>
13
+ 1. Run:
14
+
15
+ ```bash
16
+ node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init review-phase "$ARGUMENTS"
17
+ ```
18
+
19
+ 2. If no executed phase is found, stop and direct the user to `/autodev-execute-phase`.
20
+
21
+ 3. Read:
22
+ - `.autodev/STATE.md`
23
+ - the active track `STATE.md`
24
+ - `NN-PLAN.md`
25
+ - `NN-SUMMARY.md`
26
+ - relevant source files and tests
27
+
28
+ 4. Spawn four parallel review agents:
29
+ - `autodev-review-quality`
30
+ - `autodev-review-security`
31
+ - `autodev-review-integration`
32
+ - `autodev-review-polish`
33
+
34
+ 5. Tell each review agent:
35
+ - it is not alone in the codebase
36
+ - it should stay read-only and return findings only
37
+ - it should focus on clear issues, not generic commentary
38
+ - it should report severity, evidence, and suggested action
39
+
40
+ 6. Synthesize the four agent responses into `NN-REVIEW.md` from the template with:
41
+ - grouped findings
42
+ - blockers vs non-blockers
43
+ - what looks solid
44
+ - a final recommendation
45
+
46
+ 7. If blockers are found:
47
+ - set project and track state back to `Current Step: execution`
48
+ - keep `Next Command: /autodev`
49
+ - make the recommendation point back to the same phase
50
+
51
+ 8. If blockers are not found:
52
+ - set project and track state to `Current Step: verification`
53
+ - keep `Next Command: /autodev`
54
+
55
+ 9. End with a short review result:
56
+ - ready for verification, or
57
+ - return to execution
58
+ - include the manual shortcut command
59
+ </process>
@@ -1,9 +1,9 @@
1
1
  <purpose>
2
- Run lightweight user acceptance testing and keep the next action obvious.
2
+ Run lightweight user acceptance testing after review and keep the next action obvious, including a clean fix-return path when verification fails.
3
3
  </purpose>
4
4
 
5
5
  <rules>
6
- - Verify against what the phase plan and summary claim.
6
+ - Verify against what the phase plan, summary, and review claim.
7
7
  - Keep the interaction concise and test-oriented.
8
8
  - Do not auto-generate a new plan unless a real gap appears.
9
9
  </rules>
@@ -15,11 +15,12 @@ Run lightweight user acceptance testing and keep the next action obvious.
15
15
  node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init verify-work "$ARGUMENTS"
16
16
  ```
17
17
 
18
- 2. If no executed phase is found, stop and direct the user to `/autodev-execute-phase`.
18
+ 2. If no reviewed phase is found, stop and direct the user to `/autodev-review-phase`.
19
19
 
20
20
  3. Read:
21
21
  - `NN-PLAN.md`
22
22
  - `NN-SUMMARY.md`
23
+ - `NN-REVIEW.md`
23
24
  - relevant code or UI files
24
25
 
25
26
  4. Present a short manual verification flow. Keep it one check at a time when user input is needed.
@@ -30,10 +31,19 @@ node "$HOME/.claude/autodev/bin/autodev-tools.cjs" init verify-work "$ARGUMENTS"
30
31
  - bugs or follow-up
31
32
  - recommended next step
32
33
 
33
- 6. Update `.autodev/STATE.md`:
34
- - if verification passed, move to the next phase and set `Next Command` to `/autodev-plan-phase <next>`
35
- - if verification failed, keep the same phase active and set `Next Command` to `/autodev-execute-phase N`
34
+ 6. If verification fails, add a `Fix Return` section to `NN-UAT.md` with:
35
+ - exact failed behaviors
36
+ - reproduction notes
37
+ - the smallest acceptable fix target
38
+
39
+ 7. Update the active track `STATE.md`:
40
+ - if verification passed and another phase remains, move to the next phase and set `Current Step: planning`
41
+ - if verification passed and no phase remains, set `Current Step: complete`
42
+ - if verification failed, keep the same phase active and set `Current Step: execution`
43
+ - always set `Next Command: /autodev`
36
44
  - always refresh the ISO timestamp
37
45
 
38
- 7. End with the verification result and the next command.
46
+ 8. Update `.autodev/STATE.md` with the matching project-level status and refreshed timestamp.
47
+
48
+ 9. End with the verification result and the next command. Mention the manual shortcut only if it helps.
39
49
  </process>
package/bin/install.js CHANGED
@@ -11,6 +11,7 @@ const cyan = '\x1b[36m';
11
11
  const reset = '\x1b[0m';
12
12
 
13
13
  const MANAGED_PREFIX = 'autodev-';
14
+ const ROOT_COMMAND = 'autodev';
14
15
  const HOOK_FILES = [
15
16
  'autodev-context-monitor.js',
16
17
  'autodev-git-guard.js',
@@ -191,19 +192,26 @@ function copyTextTree(srcDir, destDir, transform) {
191
192
  }
192
193
  }
193
194
 
195
+ function commandNameFromSourceFile(fileName) {
196
+ const baseName = fileName.replace(/\.md$/, '');
197
+ return baseName === 'index' ? ROOT_COMMAND : `${ROOT_COMMAND}-${baseName}`;
198
+ }
199
+
200
+ function skillNameFromSourceFile(fileName, prefix) {
201
+ const baseName = fileName.replace(/\.md$/, '');
202
+ return baseName === 'index' ? prefix : `${prefix}-${baseName}`;
203
+ }
204
+
194
205
  function copyCommandsAsLocal(srcDir, destDir, transform) {
195
- if (fs.existsSync(destDir)) {
196
- fs.rmSync(destDir, { recursive: true, force: true });
197
- }
198
206
  fs.mkdirSync(destDir, { recursive: true });
199
207
 
200
208
  for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
201
- const srcPath = path.join(srcDir, entry.name);
202
- const destPath = path.join(destDir, entry.name);
203
- if (entry.isDirectory()) {
204
- copyCommandsAsLocal(srcPath, destPath, transform);
209
+ if (!entry.isFile() || !entry.name.endsWith('.md')) {
205
210
  continue;
206
211
  }
212
+
213
+ const srcPath = path.join(srcDir, entry.name);
214
+ const destPath = path.join(destDir, `${commandNameFromSourceFile(entry.name)}.md`);
207
215
  let content = fs.readFileSync(srcPath, 'utf8');
208
216
  content = transform(content);
209
217
  fs.writeFileSync(destPath, content, 'utf8');
@@ -214,7 +222,7 @@ function copyCommandsAsGlobalSkills(srcDir, skillsDir, prefix, transform) {
214
222
  fs.mkdirSync(skillsDir, { recursive: true });
215
223
 
216
224
  for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
217
- if (entry.isDirectory() && entry.name.startsWith(`${prefix}-`)) {
225
+ if (entry.isDirectory() && (entry.name === prefix || entry.name.startsWith(`${prefix}-`))) {
218
226
  fs.rmSync(path.join(skillsDir, entry.name), { recursive: true, force: true });
219
227
  }
220
228
  }
@@ -224,8 +232,7 @@ function copyCommandsAsGlobalSkills(srcDir, skillsDir, prefix, transform) {
224
232
  continue;
225
233
  }
226
234
 
227
- const baseName = entry.name.replace(/\.md$/, '');
228
- const skillName = `${prefix}-${baseName}`;
235
+ const skillName = skillNameFromSourceFile(entry.name, prefix);
229
236
  const skillDir = path.join(skillsDir, skillName);
230
237
  fs.mkdirSync(skillDir, { recursive: true });
231
238
 
@@ -236,6 +243,25 @@ function copyCommandsAsGlobalSkills(srcDir, skillsDir, prefix, transform) {
236
243
  }
237
244
  }
238
245
 
246
+ function copyAgents(srcDir, destDir, transform) {
247
+ if (!fs.existsSync(srcDir)) {
248
+ return;
249
+ }
250
+
251
+ fs.mkdirSync(destDir, { recursive: true });
252
+ for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
253
+ if (!entry.isFile()) {
254
+ continue;
255
+ }
256
+
257
+ const srcPath = path.join(srcDir, entry.name);
258
+ const destPath = path.join(destDir, entry.name);
259
+ let content = fs.readFileSync(srcPath, 'utf8');
260
+ content = transform(content);
261
+ fs.writeFileSync(destPath, content, 'utf8');
262
+ }
263
+ }
264
+
239
265
  function removeManagedSettings(settings) {
240
266
  if (settings.statusLine?.command && settings.statusLine.command.includes('autodev-statusline')) {
241
267
  delete settings.statusLine;
@@ -380,6 +406,15 @@ function removeInstalledFiles(targetDir, isGlobal) {
380
406
  fs.rmSync(supportDir, { recursive: true, force: true });
381
407
  }
382
408
 
409
+ const agentsDir = path.join(targetDir, 'agents');
410
+ if (fs.existsSync(agentsDir)) {
411
+ for (const entry of fs.readdirSync(agentsDir, { withFileTypes: true })) {
412
+ if (entry.isFile() && entry.name.startsWith(MANAGED_PREFIX) && entry.name.endsWith('.md')) {
413
+ fs.rmSync(path.join(agentsDir, entry.name), { force: true });
414
+ }
415
+ }
416
+ }
417
+
383
418
  const hooksDir = path.join(targetDir, 'hooks');
384
419
  for (const hookName of HOOK_FILES) {
385
420
  const hookPath = path.join(hooksDir, hookName);
@@ -392,20 +427,28 @@ function removeInstalledFiles(targetDir, isGlobal) {
392
427
  const skillsDir = path.join(targetDir, 'skills');
393
428
  if (fs.existsSync(skillsDir)) {
394
429
  for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
395
- if (entry.isDirectory() && entry.name.startsWith(MANAGED_PREFIX)) {
430
+ if (entry.isDirectory() && (entry.name === ROOT_COMMAND || entry.name.startsWith(MANAGED_PREFIX))) {
396
431
  fs.rmSync(path.join(skillsDir, entry.name), { recursive: true, force: true });
397
432
  }
398
433
  }
399
434
  }
400
435
  } else {
401
- const commandsDir = path.join(targetDir, 'commands', 'autodev');
436
+ const commandsDir = path.join(targetDir, 'commands');
402
437
  if (fs.existsSync(commandsDir)) {
403
- fs.rmSync(commandsDir, { recursive: true, force: true });
438
+ for (const entry of fs.readdirSync(commandsDir, { withFileTypes: true })) {
439
+ if (entry.isFile() && entry.name.startsWith(ROOT_COMMAND) && entry.name.endsWith('.md')) {
440
+ fs.rmSync(path.join(commandsDir, entry.name), { force: true });
441
+ }
442
+ }
443
+ }
444
+ const legacyCommandsDir = path.join(commandsDir, ROOT_COMMAND);
445
+ if (fs.existsSync(legacyCommandsDir)) {
446
+ fs.rmSync(legacyCommandsDir, { recursive: true, force: true });
404
447
  }
405
448
  const skillsDir = path.join(targetDir, 'skills');
406
449
  if (fs.existsSync(skillsDir)) {
407
450
  for (const entry of fs.readdirSync(skillsDir, { withFileTypes: true })) {
408
- if (entry.isDirectory() && entry.name.startsWith(MANAGED_PREFIX)) {
451
+ if (entry.isDirectory() && (entry.name === ROOT_COMMAND || entry.name.startsWith(MANAGED_PREFIX))) {
409
452
  fs.rmSync(path.join(skillsDir, entry.name), { recursive: true, force: true });
410
453
  }
411
454
  }
@@ -450,12 +493,13 @@ function install(options = {}) {
450
493
  } else {
451
494
  copyCommandsAsLocal(
452
495
  path.join(srcRoot, 'commands', 'autodev'),
453
- path.join(targetDir, 'commands', 'autodev'),
496
+ path.join(targetDir, 'commands'),
454
497
  transform
455
498
  );
456
499
  }
457
500
 
458
501
  copyTextTree(path.join(srcRoot, 'autodev'), path.join(targetDir, 'autodev'), transform);
502
+ copyAgents(path.join(srcRoot, 'agents'), path.join(targetDir, 'agents'), transform);
459
503
  copyTextTree(path.join(srcRoot, 'hooks'), path.join(targetDir, 'hooks'), transform);
460
504
  setExecutableBits(targetDir);
461
505
  const settingsPath = configureSettings(targetDir, isGlobal, options);
@@ -466,7 +510,7 @@ function install(options = {}) {
466
510
  if (settingsPath) {
467
511
  console.log(` ${green}Updated${reset} ${cyan}${settingsPath}${reset}`);
468
512
  }
469
- console.log(` Run ${cyan}/autodev-help${reset} in Claude Code.`);
513
+ console.log(` Run ${cyan}/autodev${reset} in Claude Code.`);
470
514
  }
471
515
 
472
516
  return { targetDir, settingsPath };
@@ -505,6 +549,7 @@ Options:
505
549
  --help Show this help
506
550
 
507
551
  Examples:
552
+ npx @mthanhlm/autodev@latest
508
553
  npx @mthanhlm/autodev@latest --global
509
554
  npx @mthanhlm/autodev@latest --local
510
555
  npx @mthanhlm/autodev@latest --global --uninstall
@@ -0,0 +1,23 @@
1
+ ---
2
+ name: autodev:cleanup
3
+ description: Clean or archive autodev state with an interactive prompt
4
+ allowed-tools:
5
+ - Read
6
+ - Write
7
+ - Edit
8
+ - Bash
9
+ - AskUserQuestion
10
+ - Grep
11
+ - Glob
12
+ ---
13
+ <objective>
14
+ Offer interactive cleanup choices for `.autodev/`, with archive-first behavior.
15
+ </objective>
16
+
17
+ <execution_context>
18
+ @~/.claude/autodev/workflows/cleanup.md
19
+ </execution_context>
20
+
21
+ <process>
22
+ Execute the workflow in @~/.claude/autodev/workflows/cleanup.md end-to-end.
23
+ </process>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: autodev:execute-phase
3
- description: Execute a phase plan sequentially without git writes
3
+ description: Execute an active-track phase plan sequentially without git writes
4
4
  argument-hint: "[phase-number]"
5
5
  allowed-tools:
6
6
  - Read
@@ -13,7 +13,7 @@ allowed-tools:
13
13
  - AskUserQuestion
14
14
  ---
15
15
  <objective>
16
- Execute one phase plan from `.autodev/phases/` and record the result in a summary.
16
+ Execute one active-track phase plan and record the result in a summary.
17
17
  </objective>
18
18
 
19
19
  <execution_context>
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: autodev:explore-codebase
3
+ description: Map an existing codebase with four parallel agents and synthesize the result
4
+ allowed-tools:
5
+ - Read
6
+ - Write
7
+ - Edit
8
+ - Bash
9
+ - Grep
10
+ - Glob
11
+ - AskUserQuestion
12
+ - Task
13
+ ---
14
+ <objective>
15
+ Explore the current repository, spawn four parallel codebase agents, and write the brownfield map into `.autodev/codebase/`.
16
+ </objective>
17
+
18
+ <execution_context>
19
+ @~/.claude/autodev/workflows/explore-codebase.md
20
+ @~/.claude/autodev/templates/codebase/structure.md
21
+ @~/.claude/autodev/templates/codebase/domain.md
22
+ @~/.claude/autodev/templates/codebase/runtime.md
23
+ @~/.claude/autodev/templates/codebase/quality.md
24
+ @~/.claude/autodev/templates/codebase/summary.md
25
+ @~/.claude/autodev/agents/autodev-codebase-structure.md
26
+ @~/.claude/autodev/agents/autodev-codebase-domain.md
27
+ @~/.claude/autodev/agents/autodev-codebase-runtime.md
28
+ @~/.claude/autodev/agents/autodev-codebase-quality.md
29
+ </execution_context>
30
+
31
+ <process>
32
+ Execute the workflow in @~/.claude/autodev/workflows/explore-codebase.md end-to-end.
33
+ </process>
@@ -6,7 +6,7 @@ allowed-tools:
6
6
  - Bash
7
7
  ---
8
8
  <objective>
9
- Show the autodev command reference and the default workflow.
9
+ Show the autodev command reference, with `/autodev` as the main entrypoint.
10
10
  </objective>
11
11
 
12
12
  <execution_context>
@@ -0,0 +1,35 @@
1
+ ---
2
+ name: autodev
3
+ description: Route the project through the next useful autodev step from a single entrypoint
4
+ argument-hint: "[goal, track, or question]"
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Grep
11
+ - Glob
12
+ - TodoWrite
13
+ - AskUserQuestion
14
+ - Task
15
+ - WebFetch
16
+ ---
17
+ <objective>
18
+ Use `/autodev` as the default command. Inspect `.autodev/` state, route automatically, and execute the right workflow end-to-end.
19
+ </objective>
20
+
21
+ <execution_context>
22
+ @~/.claude/autodev/workflows/autodev.md
23
+ @~/.claude/autodev/workflows/new-project.md
24
+ @~/.claude/autodev/workflows/explore-codebase.md
25
+ @~/.claude/autodev/workflows/plan-phase.md
26
+ @~/.claude/autodev/workflows/execute-phase.md
27
+ @~/.claude/autodev/workflows/review-phase.md
28
+ @~/.claude/autodev/workflows/verify-work.md
29
+ @~/.claude/autodev/workflows/cleanup.md
30
+ @~/.claude/autodev/workflows/progress.md
31
+ </execution_context>
32
+
33
+ <process>
34
+ Execute the router workflow in @~/.claude/autodev/workflows/autodev.md end-to-end.
35
+ </process>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: autodev:new-project
3
- description: Initialize a new autodev project with minimal ceremony
4
- argument-hint: "[idea or goals]"
3
+ description: Initialize autodev project state and create the first active track
4
+ argument-hint: "[project and current track goals]"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Write
@@ -11,16 +11,18 @@ allowed-tools:
11
11
  - Glob
12
12
  ---
13
13
  <objective>
14
- Create the `.autodev/` project state for a new or existing codebase without over-planning.
14
+ Create the `.autodev/` project state for a new or existing codebase, then create the first active track.
15
15
  </objective>
16
16
 
17
17
  <execution_context>
18
18
  @~/.claude/autodev/workflows/new-project.md
19
19
  @~/.claude/autodev/templates/config.json
20
20
  @~/.claude/autodev/templates/project.md
21
+ @~/.claude/autodev/templates/project-state.md
22
+ @~/.claude/autodev/templates/track.md
21
23
  @~/.claude/autodev/templates/requirements.md
22
24
  @~/.claude/autodev/templates/roadmap.md
23
- @~/.claude/autodev/templates/state.md
25
+ @~/.claude/autodev/templates/track-state.md
24
26
  </execution_context>
25
27
 
26
28
  <process>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: autodev:plan-phase
3
- description: Create a practical plan for one roadmap phase
3
+ description: Create a practical plan for one phase in the active track roadmap
4
4
  argument-hint: "[phase-number]"
5
5
  allowed-tools:
6
6
  - Read
@@ -12,7 +12,7 @@ allowed-tools:
12
12
  - WebFetch
13
13
  ---
14
14
  <objective>
15
- Create or update a single executable phase plan under `.autodev/phases/`.
15
+ Create or update a single executable phase plan under the active track in `.autodev/tracks/<track>/phases/`.
16
16
  </objective>
17
17
 
18
18
  <execution_context>
@@ -6,7 +6,7 @@ allowed-tools:
6
6
  - Bash
7
7
  ---
8
8
  <objective>
9
- Render the current `.autodev/` progress and next recommended command.
9
+ Render the current `.autodev/` progress, active track, and next recommended route.
10
10
  </objective>
11
11
 
12
12
  <execution_context>
@@ -0,0 +1,29 @@
1
+ ---
2
+ name: autodev:review-phase
3
+ description: Run a four-agent review pass for code quality, security, integration, and product polish
4
+ argument-hint: "[phase-number]"
5
+ allowed-tools:
6
+ - Read
7
+ - Write
8
+ - Edit
9
+ - Bash
10
+ - Grep
11
+ - Glob
12
+ - Task
13
+ ---
14
+ <objective>
15
+ Run the automatic review bundle for one executed phase and write a single review artifact.
16
+ </objective>
17
+
18
+ <execution_context>
19
+ @~/.claude/autodev/workflows/review-phase.md
20
+ @~/.claude/autodev/templates/review.md
21
+ @~/.claude/autodev/agents/autodev-review-quality.md
22
+ @~/.claude/autodev/agents/autodev-review-security.md
23
+ @~/.claude/autodev/agents/autodev-review-integration.md
24
+ @~/.claude/autodev/agents/autodev-review-polish.md
25
+ </execution_context>
26
+
27
+ <process>
28
+ Execute the workflow in @~/.claude/autodev/workflows/review-phase.md end-to-end.
29
+ </process>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: autodev:verify-work
3
- description: Run lightweight user acceptance testing for a phase
3
+ description: Run lightweight user acceptance testing for a reviewed phase
4
4
  argument-hint: "[phase-number]"
5
5
  allowed-tools:
6
6
  - Read
@@ -11,7 +11,7 @@ allowed-tools:
11
11
  - Glob
12
12
  ---
13
13
  <objective>
14
- Record manual verification for one phase and keep the next step clear.
14
+ Record manual verification for one reviewed phase and keep the next step clear, including gap recovery when needed.
15
15
  </objective>
16
16
 
17
17
  <execution_context>
@@ -18,5 +18,5 @@ echo ""
18
18
  if [ -f "$STATE" ]; then
19
19
  head -20 "$STATE"
20
20
  else
21
- echo "No .autodev/STATE.md yet. Start with /autodev-new-project."
21
+ echo "No .autodev/STATE.md yet. Start with /autodev."
22
22
  fi
package/package.json CHANGED
@@ -1,13 +1,14 @@
1
1
  {
2
2
  "name": "@mthanhlm/autodev",
3
- "version": "0.1.1",
4
- "description": "A lean Claude Code workflow system for planning and shipping without automatic git writes.",
3
+ "version": "0.2.0",
4
+ "description": "A lean Claude Code workflow system with a single entrypoint, brownfield codebase mapping, and read-only git.",
5
5
  "bin": {
6
6
  "autodev": "bin/install.js"
7
7
  },
8
8
  "files": [
9
9
  "bin",
10
10
  "commands",
11
+ "agents",
11
12
  "autodev",
12
13
  "hooks",
13
14
  "scripts",
@@ -20,6 +21,8 @@
20
21
  "claude-code",
21
22
  "workflow",
22
23
  "planning",
24
+ "brownfield",
25
+ "review",
23
26
  "autodev"
24
27
  ],
25
28
  "author": "mthanhlm",