conductor-4-all 0.0.20 β†’ 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.
package/README.md CHANGED
@@ -16,6 +16,19 @@ Originally tied to the Gemini CLI extension, this project aims to decouple the m
16
16
  - **Agent-Agnostic Setup:** Provide a mechanism to "install" Conductor commands and templates into a project, effectively "enabling" it for consumption by multiple different coding agents.
17
17
  - **Standardization:** Create a unified interface for project orchestration that bridges the gap between human intent and AI execution.
18
18
 
19
+ ## πŸ”§ Skills Install Mode (Recommended)
20
+
21
+ Conductor supports two primary installation formats: "Slash Custom Prompts (Commands)" and "Skills". We recommend the **Skills** installation mode as the preferred option for most projects.
22
+
23
+ - **What "Skills" does:** Installs Conductor as agentskills.io–style skill files (or agent-specific skill directories) so your Conductor commands and workflows are discoverable and consumable by a wide range of AI agents and tooling.
24
+ - **Why prefer Skills:** Skills are more portable across agents and platforms, easier to version and distribute, and better aligned with agent ecosystems that support skill/skillpack discovery. They avoid relying on agent-specific slash-command syntax and generally offer better long-term compatibility.
25
+ - **When to still use Slash Commands:** Use the slash command / prompt-file form when your environment or agent specifically requires prompt files (for example, some local prompt-driven integrations or editor-specific prompt formats).
26
+ - **Example install targets:**
27
+ - `.agents/skills/` β€” general skills directory (recommended default)
28
+ - `.claude/skills/` β€” Claude Code specific
29
+
30
+ When running the installer, choose **Skills** to get the recommended, cross-agent installation by default.
31
+
19
32
  ## πŸš€ Usage
20
33
 
21
34
  ### 1. Setup Conductor in Your Project
@@ -53,14 +66,16 @@ This will verify the environment and install the necessary Conductor files:
53
66
 
54
67
  ### 3. Using Conductor with Your Agent
55
68
 
56
- Once installed, you can instruct your AI Agent to perform Conductor tasks using the installed commands. For example:
69
+ Once installed, you can instruct your AI Agent to perform Conductor tasks using the installed commands or the provided skill files. For example:
57
70
 
58
- - `@agent /conductor:setup` - Initialize the project structure.
59
- - `@agent /conductor:newTrack` - Start a new feature or bug fix track.
60
- - `@agent /conductor:implement` - Implement the selected track.
61
- - `@agent /conductor:status` - Check the status of current tracks.
71
+ - `@agent /conductor-setup` β€” Initialize the project structure. (skill: `.agents/skills/conductor-setup/SKILL.md`)
72
+ - `@agent /conductor-newTrack` β€” Start a new feature or bug fix track. (skill: `.agents/skills/conductor-newTrack/SKILL.md`)
73
+ - `@agent /conductor-implement` β€” Implement the selected track. (skill: `.agents/skills/conductor-implement/SKILL.md`)
74
+ - `@agent /conductor-status` β€” Check the status of current tracks. (skill: `.agents/skills/conductor-status/SKILL.md`)
75
+ - `@agent /conductor-review` β€” Run the review protocol for a track. (skill: `.agents/skills/conductor-review/SKILL.md`)
76
+ - `@agent /conductor-revert` β€” Revert changes related to a track. (skill: `.agents/skills/conductor-revert/SKILL.md`)
62
77
 
63
- *Note: The exact invocation syntax depends on your specific agent's slash command or file context capabilities.*
78
+ *Note: many agents can run the skill by opening the skill file (for example, open `.agents/skills/conductor-implement/SKILL.md`), or by selecting/running the skill name in the agent UI. Skills also commonly include a recommended slash invocation so you can keep using the short command form.*
64
79
 
65
80
 
66
81
 
package/dist/index.cjs CHANGED
@@ -37,18 +37,18 @@ async function promptForInstallMode() {
37
37
  const answer = await (0, import_select.default)({
38
38
  message: "Select installation mode:",
39
39
  choices: [
40
- {
41
- name: "Slash Custom Prompts (Commands)",
42
- value: "prompt",
43
- description: "Install as standard slash commands (e.g. /conductor:implement)"
44
- },
45
40
  {
46
41
  name: "Skills",
47
42
  value: "skills",
48
43
  description: "Install as agentskills.io compliant skills"
44
+ },
45
+ {
46
+ name: "Slash Custom Prompts (Commands, deprecated)",
47
+ value: "prompt",
48
+ description: "Install as standard slash commands (e.g. /conductor:implement)"
49
49
  }
50
50
  ],
51
- default: "prompt"
51
+ default: "skills"
52
52
  });
53
53
  return answer;
54
54
  }
@@ -65,16 +65,6 @@ async function promptForSkillsTarget() {
65
65
  name: "Claude Code",
66
66
  value: "claude-code",
67
67
  description: "Install to .claude/skills/ directory"
68
- },
69
- {
70
- name: "Antigravity",
71
- value: "antigravity",
72
- description: "Install to .agents/skills/ with GEMINI.md protocol"
73
- },
74
- {
75
- name: "Gemini CLI",
76
- value: "gemini",
77
- description: "Install to .agents/skills/ with GEMINI.md protocol"
78
68
  }
79
69
  ],
80
70
  default: "general"
@@ -106,11 +96,6 @@ async function promptForAgent() {
106
96
  value: "claude-code",
107
97
  description: "Anthropic's coding assistant"
108
98
  },
109
- {
110
- name: "Antigravity",
111
- value: "antigravity",
112
- description: "Google's agentic coding assistant"
113
- },
114
99
  {
115
100
  name: "Cursor",
116
101
  value: "cursor",
@@ -367,26 +352,6 @@ var ClaudeCodeGenerator = class {
367
352
  }
368
353
  };
369
354
 
370
- // src/generators/antigravity/config.ts
371
- var antigravityConfig = {
372
- agentType: "antigravity",
373
- agentDir: ".agent",
374
- commandsDir: "workflows",
375
- displayName: "Antigravity",
376
- protocolFilename: "GEMINI.md"
377
- };
378
-
379
- // src/generators/antigravity/generator.ts
380
- var AntigravityGenerator = class {
381
- generator = createGenerator(antigravityConfig);
382
- validate(targetDir) {
383
- return this.generator.validate(targetDir);
384
- }
385
- generate(targetDir) {
386
- return this.generator.generate(targetDir);
387
- }
388
- };
389
-
390
355
  // src/generators/cursor/config.ts
391
356
  var cursorConfig = {
392
357
  agentType: "cursor",
@@ -602,13 +567,20 @@ var GeminiGenerator = class {
602
567
  }
603
568
  };
604
569
 
570
+ // src/generators/antigravity/config.ts
571
+ var antigravityConfig = {
572
+ agentType: "antigravity",
573
+ agentDir: ".agent",
574
+ commandsDir: "workflows",
575
+ displayName: "Antigravity",
576
+ protocolFilename: "GEMINI.md"
577
+ };
578
+
605
579
  // src/generators/index.ts
606
580
  function getGenerator(agentType) {
607
581
  switch (agentType) {
608
582
  case "claude-code":
609
583
  return new ClaudeCodeGenerator();
610
- case "antigravity":
611
- return new AntigravityGenerator();
612
584
  case "cursor":
613
585
  return new CursorGenerator();
614
586
  case "vscode-copilot":
@@ -762,8 +734,6 @@ var ClaudeCodeSkillsGenerator = class extends BaseSkillsGenerator {
762
734
  function getSkillsGenerator(target, agentConfig) {
763
735
  switch (target) {
764
736
  case "general":
765
- case "antigravity":
766
- case "gemini":
767
737
  return new GeneralSkillsGenerator(agentConfig);
768
738
  case "claude-code":
769
739
  return new ClaudeCodeSkillsGenerator(agentConfig);
@@ -783,7 +753,7 @@ async function installHandler(argv) {
783
753
  console.log("Step 1: Prompting for skills target selection...");
784
754
  const target = await promptForSkillsTarget();
785
755
  console.log(`\u2714 Selected skills target: ${target}`);
786
- const selectedAgent = target === "general" ? argv.agent ?? "opencode" : target;
756
+ const selectedAgent = target === "claude-code" ? "claude-code" : "opencode";
787
757
  const agentConfig = getGeneratorConfig(selectedAgent);
788
758
  const skillsGenerator = getSkillsGenerator(target, agentConfig);
789
759
  console.log("\nStep 2: Generating skills...");
@@ -832,7 +802,6 @@ var cli = (0, import_yargs.default)((0, import_helpers.hideBin)(process.argv)).s
832
802
  choices: [
833
803
  "opencode",
834
804
  "claude-code",
835
- "antigravity",
836
805
  "cursor",
837
806
  "vscode-copilot",
838
807
  "codex",
package/dist/index.js CHANGED
@@ -10,18 +10,18 @@ async function promptForInstallMode() {
10
10
  const answer = await select({
11
11
  message: "Select installation mode:",
12
12
  choices: [
13
- {
14
- name: "Slash Custom Prompts (Commands)",
15
- value: "prompt",
16
- description: "Install as standard slash commands (e.g. /conductor:implement)"
17
- },
18
13
  {
19
14
  name: "Skills",
20
15
  value: "skills",
21
16
  description: "Install as agentskills.io compliant skills"
17
+ },
18
+ {
19
+ name: "Slash Custom Prompts (Commands, deprecated)",
20
+ value: "prompt",
21
+ description: "Install as standard slash commands (e.g. /conductor:implement)"
22
22
  }
23
23
  ],
24
- default: "prompt"
24
+ default: "skills"
25
25
  });
26
26
  return answer;
27
27
  }
@@ -38,16 +38,6 @@ async function promptForSkillsTarget() {
38
38
  name: "Claude Code",
39
39
  value: "claude-code",
40
40
  description: "Install to .claude/skills/ directory"
41
- },
42
- {
43
- name: "Antigravity",
44
- value: "antigravity",
45
- description: "Install to .agents/skills/ with GEMINI.md protocol"
46
- },
47
- {
48
- name: "Gemini CLI",
49
- value: "gemini",
50
- description: "Install to .agents/skills/ with GEMINI.md protocol"
51
41
  }
52
42
  ],
53
43
  default: "general"
@@ -79,11 +69,6 @@ async function promptForAgent() {
79
69
  value: "claude-code",
80
70
  description: "Anthropic's coding assistant"
81
71
  },
82
- {
83
- name: "Antigravity",
84
- value: "antigravity",
85
- description: "Google's agentic coding assistant"
86
- },
87
72
  {
88
73
  name: "Cursor",
89
74
  value: "cursor",
@@ -340,26 +325,6 @@ var ClaudeCodeGenerator = class {
340
325
  }
341
326
  };
342
327
 
343
- // src/generators/antigravity/config.ts
344
- var antigravityConfig = {
345
- agentType: "antigravity",
346
- agentDir: ".agent",
347
- commandsDir: "workflows",
348
- displayName: "Antigravity",
349
- protocolFilename: "GEMINI.md"
350
- };
351
-
352
- // src/generators/antigravity/generator.ts
353
- var AntigravityGenerator = class {
354
- generator = createGenerator(antigravityConfig);
355
- validate(targetDir) {
356
- return this.generator.validate(targetDir);
357
- }
358
- generate(targetDir) {
359
- return this.generator.generate(targetDir);
360
- }
361
- };
362
-
363
328
  // src/generators/cursor/config.ts
364
329
  var cursorConfig = {
365
330
  agentType: "cursor",
@@ -575,13 +540,20 @@ var GeminiGenerator = class {
575
540
  }
576
541
  };
577
542
 
543
+ // src/generators/antigravity/config.ts
544
+ var antigravityConfig = {
545
+ agentType: "antigravity",
546
+ agentDir: ".agent",
547
+ commandsDir: "workflows",
548
+ displayName: "Antigravity",
549
+ protocolFilename: "GEMINI.md"
550
+ };
551
+
578
552
  // src/generators/index.ts
579
553
  function getGenerator(agentType) {
580
554
  switch (agentType) {
581
555
  case "claude-code":
582
556
  return new ClaudeCodeGenerator();
583
- case "antigravity":
584
- return new AntigravityGenerator();
585
557
  case "cursor":
586
558
  return new CursorGenerator();
587
559
  case "vscode-copilot":
@@ -735,8 +707,6 @@ var ClaudeCodeSkillsGenerator = class extends BaseSkillsGenerator {
735
707
  function getSkillsGenerator(target, agentConfig) {
736
708
  switch (target) {
737
709
  case "general":
738
- case "antigravity":
739
- case "gemini":
740
710
  return new GeneralSkillsGenerator(agentConfig);
741
711
  case "claude-code":
742
712
  return new ClaudeCodeSkillsGenerator(agentConfig);
@@ -756,7 +726,7 @@ async function installHandler(argv) {
756
726
  console.log("Step 1: Prompting for skills target selection...");
757
727
  const target = await promptForSkillsTarget();
758
728
  console.log(`\u2714 Selected skills target: ${target}`);
759
- const selectedAgent = target === "general" ? argv.agent ?? "opencode" : target;
729
+ const selectedAgent = target === "claude-code" ? "claude-code" : "opencode";
760
730
  const agentConfig = getGeneratorConfig(selectedAgent);
761
731
  const skillsGenerator = getSkillsGenerator(target, agentConfig);
762
732
  console.log("\nStep 2: Generating skills...");
@@ -805,7 +775,6 @@ var cli = yargs(hideBin(process.argv)).scriptName("conductor").usage("$0 <cmd> [
805
775
  choices: [
806
776
  "opencode",
807
777
  "claude-code",
808
- "antigravity",
809
778
  "cursor",
810
779
  "vscode-copilot",
811
780
  "codex",
@@ -5,6 +5,8 @@ You are an AI agent assistant for the Conductor spec-driven development framewor
5
5
 
6
6
  CRITICAL: You must validate the success of every tool call. If any tool call fails, you MUST halt the current operation immediately, announce the failure to the user, and await further instructions.
7
7
 
8
+ PLAN MODE PROTOCOL: Parts of this process run within Plan Mode. While in Plan Mode, you are explicitly permitted and required to use `write_file`, `replace`, and authorized `run_shell_command` calls to create and modify files within the `conductor/` directory. **CRITICAL: You MUST use relative paths starting with `conductor/` (e.g., `conductor/product.md`) for all file operations. Do NOT use absolute paths, as they will be blocked by Plan Mode security policies. REDIRECTION (e.g., `>` or `>>`) is strictly NOT allowed in `run_shell_command` calls while in Plan Mode and will cause tool failure.**
9
+
8
10
  ---
9
11
 
10
12
  ## 1.1 SETUP CHECK
@@ -28,15 +30,19 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
28
30
  ### 2.1 Get Track Description and Determine Type
29
31
 
30
32
  1. **Load Project Context:** Read and understand the content of the project documents (**Product Definition**, **Tech Stack**, etc.) resolved via the **Universal File Resolution Protocol**.
31
- 2. **Get Track Description:**
32
- * **If `{{args}}` contains a description:** Use the content of `{{args}}`.
33
- * **If `{{args}}` is empty:** Ask the user using the `ask_user` tool (do not repeat the question in the chat):
34
- - **questions:**
35
- - **header:** "Description"
36
- - **type:** "text"
37
- - **question:** "Please provide a brief description of the track (feature, bug fix, chore, etc.) you wish to start."
38
- - **placeholder:** "e.g., Implement user authentication"
39
- Await the user's response and use it as the track description.
33
+ 2. **Get Track Description & Enter Plan Mode:**
34
+ * **If `{{args}}` is empty:**
35
+ 1. Call the `enter_plan_mode` tool with the reason: "Defining new track".
36
+ 2. Ask the user using the `ask_user` tool (do not repeat the question in the chat):
37
+ - **questions:**
38
+ - **header:** "Description"
39
+ - **type:** "text"
40
+ - **question:** "Please provide a brief description of the track (feature, bug fix, chore, etc.) you wish to start."
41
+ - **placeholder:** "e.g., Implement user authentication"
42
+ Await the user's response and use it as the track description.
43
+ * **If `{{args}}` contains a description:**
44
+ 1. Use the content of `{{args}}` as the track description.
45
+ 2. Call the `enter_plan_mode` tool with the reason: "Defining new track".
40
46
  3. **Infer Track Type:** Analyze the description to determine if it is a "Feature" or "Something Else" (e.g., Bug, Chore, Refactor). Do NOT ask the user to classify it.
41
47
 
42
48
  ### 2.2 Interactive Specification Generation (`spec.md`)
@@ -156,7 +162,9 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
156
162
  - [Implementation Plan](./plan.md)
157
163
  - [Metadata](./metadata.json)
158
164
  ```
159
- 6. **Update Tracks Registry:**
165
+ 6. **Exit Plan Mode:** Call the `exit_plan_mode` tool with the path: `<Tracks Directory>/<track_id>/index.md`.
166
+
167
+ 7. **Update Tracks Registry:**
160
168
  - **Announce:** Inform the user you are updating the **Tracks Registry**.
161
169
  - **Append Section:** Resolve the **Tracks Registry** via the **Universal File Resolution Protocol**. Append a new section for the track to the end of this file. The format MUST be:
162
170
  ```markdown
@@ -167,10 +175,10 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
167
175
  *Link: [./<Relative Track Path>/](./<Relative Track Path>/)*
168
176
  ```
169
177
  (Replace `<Relative Track Path>` with the path to the track directory relative to the **Tracks Registry** file location.)
170
- 7. **Commit Code Changes:**
178
+ 8. **Commit Code Changes:**
171
179
  - **Announce:** Inform the user you are committing the **Tracks Registry** changes.
172
180
  - **Commit Changes:** Stage the **Tracks Registry** files and commit with the message `chore(conductor): Add new track '<track_description>'`.
173
- 8. **Announce Completion:** Inform the user:
181
+ 9. **Announce Completion:** Inform the user:
174
182
  > "New track '<track_id>' has been created and added to the tracks file. You can now start implementation by running `/conductor:implement`."
175
183
 
176
184
  """
@@ -3,8 +3,9 @@ prompt = """
3
3
  ## 1.0 SYSTEM DIRECTIVE
4
4
  You are an AI agent. Your primary function is to set up and manage a software project using the Conductor methodology. This document is your operational protocol. Adhere to these instructions precisely and sequentially. Do not make assumptions.
5
5
 
6
- CRITICAL: You must validate the success of every tool call. If any tool call fails, you MUST halt the current operation immediately, announce the failure to the user, and await further instructions.
6
+ CRITICAL: You must validate the success of every tool call. If a tool call fails (e.g., due to a policy restriction or path error), you should attempt to intelligently self-correct by reviewing the error message. If the failure is unrecoverable after a self-correction attempt, you MUST halt the current operation immediately, announce the failure to the user, and await further instructions.
7
7
 
8
+ PLAN MODE PROTOCOL: This setup process runs entirely within Plan Mode. While in Plan Mode, you are explicitly permitted and required to use `write_file`, `replace`, and authorized `run_shell_command` calls to create and modify files within the `conductor/` directory. **CRITICAL: You MUST use relative paths starting with `conductor/` (e.g., `conductor/product.md`) for all file operations. Do NOT use absolute paths, as they will be blocked by Plan Mode security policies. REDIRECTION (e.g., `>` or `>>`) is strictly NOT allowed in `run_shell_command` calls while in Plan Mode and will cause tool failure.** Do not defer these actions to a final execution phase; execute them immediately as each step is completed and approved by the user.
8
9
  ---
9
10
 
10
11
  ## 1.1 PRE-INITIALIZATION OVERVIEW
@@ -23,9 +24,11 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
23
24
  ## 1.2 PROJECT AUDIT
24
25
  **PROTOCOL: Before starting the setup, determine the project's state by auditing existing artifacts.**
25
26
 
26
- 1. **Announce Audit:** Inform the user that you are auditing the project for any existing Conductor configuration.
27
+ 1. **Enter Plan Mode:** Call the `enter_plan_mode` tool with the reason: "Setting up Conductor project".
27
28
 
28
- 2. **Audit Artifacts:** Check the file system for the existence of the following files/directories in the `conductor/` directory:
29
+ 2. **Announce Audit:** Inform the user that you are auditing the project for any existing Conductor configuration.
30
+
31
+ 3. **Audit Artifacts:** Check the file system for the existence of the following files/directories in the `conductor/` directory:
29
32
  - `product.md`
30
33
  - `product-guidelines.md`
31
34
  - `tech-stack.md`
@@ -34,7 +37,7 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
34
37
  - `index.md`
35
38
  - `tracks/*/` (specifically `plan.md` and `index.md`)
36
39
 
37
- 3. **Determine Target Section:** Map the project's state to a target section using the priority table below (highest match wins). **DO NOT JUMP YET.** Keep this target in mind.
40
+ 4. **Determine Target Section:** Map the project's state to a target section using the priority table below (highest match wins). **DO NOT JUMP YET.** Keep this target in mind.
38
41
 
39
42
  | Artifact Exists | Target Section | Announcement |
40
43
  | :--- | :--- | :--- |
@@ -47,7 +50,7 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
47
50
  | `product.md` | **Section 2.2** | "Resuming setup: Product Guide is complete. Next: create Product Guidelines." |
48
51
  | (None) | **Section 2.0** | (None) |
49
52
 
50
- 4. **Proceed to Section 2.0:** You MUST proceed to Section 2.0 to establish the Greenfield/Brownfield context before jumping to your target.
53
+ 5. **Proceed to Section 2.0:** You MUST proceed to Section 2.0 to establish the Greenfield/Brownfield context before jumping to your target.
51
54
 
52
55
  ---
53
56
 
@@ -142,8 +145,8 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
142
145
  - Label: "Interactive", Description: "I'll guide you through a series of questions to refine your vision."
143
146
  - Label: "Autogenerate", Description: "I'll draft a comprehensive guide based on your initial project goal."
144
147
 
145
- 3. **Gather Information (Conditional):**
146
- - **If user chose "Autogenerate":** Skip this step and proceed directly to **Step 4 (Draft the Document)**.
148
+ 4. **Gather Information (Conditional):**
149
+ - **If user chose "Autogenerate":** Skip this step and proceed directly to **Step 5 (Draft the Document)**.
147
150
  - **If user chose "Interactive":** Use a single `ask_user` tool call to gather detailed requirements (e.g., target users, goals, features).
148
151
  - **CRITICAL:** Batch up to 4 questions in this single tool call to streamline the process.
149
152
  - **BROWNFIELD PROJECTS:** If this is an existing project, formulate questions that are specifically aware of the analyzed codebase. Do not ask generic questions if the answer is already in the files.
@@ -156,7 +159,7 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
156
159
  - **Note:** The "Other" option for custom input is automatically added by the tool.
157
160
  - **Interaction Flow:** Wait for the user's response, then proceed to the next step.
158
161
 
159
- 4. **Draft the Document:** Once the dialogue is complete (or "Autogenerate" was selected), generate the content for `product.md`.
162
+ 5. **Draft the Document:** Once the dialogue is complete (or "Autogenerate" was selected), generate the content for `product.md`.
160
163
  - **If user chose "Autogenerate":** Use your best judgment to expand on the initial project goal and infer any missing details to create a comprehensive document.
161
164
  - **If user chose "Interactive":** Use the specific answers provided. The source of truth is **only the user's selected answer(s)**. You are encouraged to expand on these choices to create a polished output.
162
165
  5. **User Confirmation Loop:**
@@ -282,7 +285,7 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
282
285
  ### 2.4 Select Guides (Interactive)
283
286
  1. **Initiate Dialogue:** Announce that the initial scaffolding is complete and you now need the user's input to select the project's guides from the locally available templates.
284
287
  2. **Select Code Style Guides:**
285
- - List the available style guides by running `ls __$$CODE_AGENT_INSTALL_PATH$$__/templates/code_styleguides/`.
288
+ - List the available style guides by using the `run_shell_command` tool to execute `ls __$$CODE_AGENT_INSTALL_PATH$$__/templates/code_styleguides/`. **CRITICAL: You MUST use `run_shell_command` for this step. Do NOT use the `list_directory` tool, as the templates directory resides outside of your allowed workspace and the call will fail.**
286
289
  - **FOR GREENFIELD PROJECTS:**
287
290
  - **Recommendation:** Based on the Tech Stack defined in the previous step, recommend the most appropriate style guide(s) (e.g., "python.md" for a Python project) and explain why.
288
291
  - **Determine Mode:** Use the `ask_user` tool:
@@ -413,8 +416,8 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
413
416
  - Label: "Interactive", Description: "I'll guide you through questions about user stories and functional goals."
414
417
  - Label: "Autogenerate", Description: "I'll draft the requirements based on the Product Guide."
415
418
 
416
- 4. **Gather Information (Conditional):**
417
- - **If user chose "Autogenerate":** Skip this step and proceed directly to **Step 5 (Drafting Logic)**.
419
+ 5. **Gather Information (Conditional):**
420
+ - **If user chose "Autogenerate":** Skip this step and proceed directly to **Step 6 (Drafting Logic)**.
418
421
  - **If user chose "Interactive":** Use a single `ask_user` tool call to gather detailed requirements.
419
422
  - **CRITICAL:** Batch up to 4 questions in this single tool call (e.g., User Stories, Key Features, Constraints, Non-functional Requirements).
420
423
  - **SUGGESTIONS:** For each question, generate 3 high-quality suggested answers based on the project goal.
@@ -422,22 +425,50 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
422
425
  - **Note:** Do NOT include an "Autogenerate" option here.
423
426
  - **Interaction Flow:** Wait for the user's response, then proceed to the next step.
424
427
 
425
- 5. **Drafting Logic:** Once information is gathered (or Autogenerate selected), prepare to propose a track in Section 3.2.
428
+ 6. **Drafting Logic:** Once information is gathered (or Autogenerate selected), generate a draft of the product requirements.
426
429
  - **CRITICAL:** When processing user responses or auto-generating content, the source of truth for generation is **only the user's selected answer(s)**.
427
- 6. **Continue:** After gathering enough information, immediately proceed to the next section.
430
+ 7. **User Confirmation Loop:**
431
+ - **Announce:** Briefly state that the requirements draft is ready. Do NOT repeat the request to "review" or "approve" in the chat.
432
+ - **Ask for Approval:** Use the `ask_user` tool to request confirmation. You MUST embed the drafted requirements directly into the `question` field so the user can review them.
433
+ - **questions:**
434
+ - **header:** "Review"
435
+ - **question:**
436
+ Please review the drafted Product Requirements below. What would you like to do next?
437
+
438
+ ---
439
+
440
+ <Insert Drafted Requirements Here>
441
+ - **type:** "choice"
442
+ - **multiSelect:** false
443
+ - **options:**
444
+ - Label: "Approve", Description: "The requirements look good, proceed to the next step."
445
+ - Label: "Suggest changes", Description: "I want to modify the drafted content."
446
+ 8. **Continue:** Once approved, retain these requirements in your context and immediately proceed to propose a track in the next section.
428
447
 
429
448
  ### 3.2 Propose a Single Initial Track (Automated + Approval)
430
449
  1. **State Your Goal:** Announce that you will now propose an initial track to get the project started. Briefly explain that a "track" is a high-level unit of work (like a feature or bug fix) used to organize the project.
431
450
  2. **Generate Track Title:** Analyze the project context (`product.md`, `tech-stack.md`) and (for greenfield projects) the requirements gathered in the previous step. Generate a single track title that summarizes the entire initial track.
432
451
  - **Greenfield:** Focus on the MVP core (e.g., "Build core tip calculator functionality").
433
452
  - **Brownfield:** Focus on maintenance or targeted enhancements (e.g., "Implement user authentication flow").
434
- 3. **Confirm Proposal:** Use the `ask_user` tool to validate and/or refine the proposal in a single step:
453
+ 3. **Confirm Proposal:** Use the `ask_user` tool to validate the proposal:
435
454
  - **questions:**
436
455
  - **header:** "Confirm Track"
437
- - **type:** "text"
438
- - **question:** "To get the project started, I suggest the following track: '<Track Title>'. If you approve, please type 'ok' (or leave blank). Otherwise, type your preferred track description."
439
- - **placeholder:** "e.g., Setup CI/CD pipeline"
440
- 4. **Action:** Use the user's response as the source of truth. If the user types 'ok' or leaves it blank, use the suggested '<Track Title>'. If they provide a new description, use that instead. Proceed to **Section 3.3**.
456
+ - **type:** "choice"
457
+ - **multiSelect:** false
458
+ - **question:** "To get the project started, I suggest the following track: '<Track Title>'. Do you want to proceed with this track?"
459
+ - **options:**
460
+ - Label: "Yes", Description: "Proceed with '<Track Title>'."
461
+ - Label: "Suggest changes", Description: "I want to define a different track."
462
+ 4. **Action:**
463
+ - **If user chose "Yes":** Use the suggested '<Track Title>' as the track description.
464
+ - **If user chose "Suggest changes":**
465
+ - Immediately call the `ask_user` tool again:
466
+ - **header:** "New Track"
467
+ - **type:** "text"
468
+ - **question:** "Please enter the description for the initial track:"
469
+ - **placeholder:** "e.g., Setup CI/CD pipeline"
470
+ - Use the user's text response as the track description.
471
+ - Proceed to **Section 3.3** with the determined track description.
441
472
 
442
473
  ### 3.3 Convert the Initial Track into Artifacts (Automated)
443
474
  1. **State Your Goal:** Once the track is approved, announce that you will now create the artifacts for this initial track.
@@ -489,7 +520,9 @@ CRITICAL: You must validate the success of every tool call. If any tool call fai
489
520
  ```
490
521
  *(If you arrived here directly from the Audit because you are patching a missing index, write this file using the existing folder's track_id and then proceed to step d.)*
491
522
 
492
- d. **Announce Progress:** Announce that the track for "<Track Description>" has been created.
523
+ d. **Exit Plan Mode:** Call the `exit_plan_mode` tool with the path: `<Tracks Directory>/<track_id>/index.md`.
524
+
525
+ e. **Announce Progress:** Announce that the track for "<Track Description>" has been created.
493
526
 
494
527
  ### 3.4 Final Announcement
495
528
  1. **Announce Completion:** After the track has been created, announce that the project setup and initial track generation are complete.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "conductor-4-all",
3
- "version": "0.0.20",
3
+ "version": "0.1.1",
4
4
  "description": "Conductor spec-driven development CLI - TypeScript/Node.js version",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {